INSTITUTO SENAI DE INOVAÇÃO EM QUÍMICA VERDE
Organização
INSTITUTO SENAI DE INOVAÇÃO EM QUÍMICA VERDE
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>
The following has evaluated to null or missing: ==> autorId [in template "34764#34807#41130" at line 84, column 46] ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #if autorId != "" && autorId?? [in template "34764#34807#41130" at line 84, column 41] ----
1<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")>
2<#assign UserLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.UserLocalService")>
3<#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")>
4<#assign OrganizationLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.OrganizationLocalService") >
5<#assign AssetTagLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetTagLocalService")>
6<#-- <#assign
7journalArticle = JournalArticleLocalService.getArticle(themeDisplay.getSiteGroupId(),.data_model["reserved-article-id"].data)
8AssetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")
9assetEntry = AssetEntryLocalService.getEntry(journalArticle.getModelClassName(), journalArticle.getResourcePrimKey())
10-->
11<#assign
12mbMessageLocalService = serviceLocator.findService("com.liferay.message.boards.service.MBMessageLocalService")
13>
14
15<div id="upload-notice-container" style="display: none;">
16 <span id="close-btn-upload-container"> <i class="fa fa-xmark"></i> </span>
17 <h5 class="upload-notice-title">
18 <i class="fa-sharp fa-solid fa-circle-exclamation"></i>
19 Upload de infraestrutura em andamento
20 </h5>
21 <p>
22 Caso os itens adicionados não estejam visíveis na página, aguarde um instante e <span>atualize a página</span> para visualizá-los.
23 </p>
24 </div>
25
26<div class="bioec-profile-estrutura-main">
27
28 <div id="estruturas-lista" class="d-flex flex-column">
29
30 <#if entries?has_content>
31 <#list entries as entry>
32
33 <#assign journalArticle = JournalArticleLocalService.getLatestArticle(entry.getClassPK()) >
34 <#assign articleXml = journalArticle.getDocument().getRootElement() >
35 <#assign JournalArticleID = journalArticle.getId()>
36 <#assign JournalArticleFrontId = journalArticle.getArticleId()>
37 <#assign
38 userIsAdmin = false
39 orgId = ""
40 >
41 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text57816561']")??>
42 <#assign
43 modelo = articleXml.selectSingleNode("dynamic-element[@field-reference='Text57816561']").getStringValue()!""
44 modelo = modelo?replace("\n\t\t", "")
45 modelo = modelo?replace("\n\t", "")
46 >
47 </#if>
48
49 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text23707291']")??>
50 <#assign
51 marca = articleXml.selectSingleNode("dynamic-element[@field-reference='Text23707291']").getStringValue()!""
52 marca = marca?replace("\n\t\t", "")
53 marca = marca?replace("\n\t", "")
54 >
55 </#if>
56
57 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text74754192']")??>
58 <#assign
59 funcao = articleXml.selectSingleNode("dynamic-element[@field-reference='Text74754192']").getStringValue()!""
60 funcao = funcao?replace("\n\t\t", "")
61 funcao = funcao?replace("\n\t", "")
62 >
63 </#if>
64
65 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='CampoDeTexto02890219']")??>
66 <#assign
67 imageSrc = articleXml.selectSingleNode("dynamic-element[@field-reference='CampoDeTexto02890219']").getStringValue()!""
68
69 >
70 </#if>
71
72 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text93109394']")??>
73 <#assign
74 autorId = articleXml.selectSingleNode("dynamic-element[@field-reference='Text93109394']").getStringValue()!""
75 autorId = autorId?replace("\n\t\t", "")
76 autorId = autorId?replace("\n\t", "")
77 autorArticleId = ""
78 >
79 </#if>
80 <#assign
81 commentsCount = mbMessageLocalService.getDiscussionMessagesCount(entry.getClassName(), entry.getClassPK(), 0)!"0"
82 />
83
84 <#if autorId != "" && autorId??>
85 <#assign
86 autor = UserLocalService.fetchUser(autorId?number)!""
87 autorArticleId = autor.getExpandoBridge().getAttribute("journal-article")!"0"
88 />
89 <#if autor != "">
90 <#assign autor = autor.getFullName()!"">
91 <#else>
92 <#assign autor = "Anônimo" >
93 </#if>
94 <#else>
95 <#assign autor = "Anônimo" >
96 </#if>
97
98 <#assign categorias = AssetCategoryLocalService.getCategoryNames(entry.getClassName(), entry.getClassPK())!"" >
99
100 <#assign categorias = AssetCategoryLocalService.getCategoryNames(entry.getClassName(), entry.getClassPK())!"" >
101
102 <#assign urlWC = "">
103 <#if autorArticleId != "0" && autorArticleId != "" && autor != "Anônimo">
104 <#assign autorArticle = JournalArticleLocalService.getLatestArticle(themeDisplay.getLayout().getGroupId(), autorArticleId?string) >
105 <#assign urlWC = autorArticle.getUrlTitle()!"">
106 </#if>
107
108
109 <#assign tags = AssetTagLocalService.getTagNames("com.liferay.journal.model.JournalArticle", journalArticle.getResourcePrimKey()?number )
110 tagName = tags[0]!""
111
112 >
113 <#if tagName?contains("organization") && tagName != "" >
114
115 <#assign
116 orgId = tagName?keep_after("organization-")
117 organization = OrganizationLocalService.fetchOrganization(orgId?number)!""
118 >
119
120
121 <#if organization != "" && autor != "Anônimo" && autorArticleId != "">
122 <#assign orgArticleId = organization.getExpandoBridge().getAttribute("journal-article")
123 orgJournalArticle = JournalArticleLocalService.getArticle(themeDisplay.getLayout().getGroupId(),orgArticleId?c)
124 urlWC = orgJournalArticle.getUrlTitle()!""
125 autor = organization.getName()!""
126 >
127 </#if>
128 </#if>
129
130 <#if themeDisplay.isSignedIn() >
131 <#assign tags = AssetTagLocalService.getTagNames(entry.getClassName(), entry.getClassPK()) >
132 <#assign orgId = (tags[0]!"")?remove_beginning("organization-") >
133 <#assign userIsAdmin = OrganizationLocalService.hasUserOrganization(themeDisplay.getUserId(), orgId?number)>
134 </#if>
135
136 <div class="estruturas-lista-item" id="InfraItem${JournalArticleID}">
137 <div class="lista-checkmark">
138 <#if categorias?seq_contains("aprovado") > <i title="Aprovado" style="color: #4ECD66" class="fa-solid fa-circle-check"></i> </#if>
139 <#if categorias?seq_contains("pendente") > <i title="Em análise" style="color: #D90000"class="fa-solid fa-spinner"></i> </#if>
140 <#if categorias?seq_contains("recusado") > <i title="Recusado" style="color: #D90000"class="fa-solid fa-exclamation-circle"></i> </#if>
141 </div>
142
143 <div class="lista-pic">
144 <#if imageSrc?trim !="" >
145 <div class="bioec_infra_img" style="background-image: url(${imageSrc})">
146 </div>
147 <#else>
148 <div class="bioec_infra_img_placeholder">
149 <i class="fa-solid fa-image"></i>
150 sem imagem
151 </div>
152 </#if>
153 </div>
154
155 <div class="lista-desc">
156 <h5>${entry.getHighlightedTitle()}</h5>
157 <p>Modelo: ${modelo}</p>
158 <p>Marca: ${marca}</p>
159 </div>
160
161 <div class="lista-arrow">
162 <button class="btn" type="button" data-toggle="collapse" data-target="#collapse-${entry.getClassPK()}" aria-expanded="false" aria-controls="collapse-${entry.getClassPK()}">
163 <i class="fa-solid fa-chevron-down"></i>
164 </button>
165 </div>
166
167 <span id="collapse-${entry.getClassPK()}" class="collapse lista-collapse">
168 <div class="lista-func">
169 <h5>Função </h5>
170 <p>${funcao}</p>
171 </div>
172
173 <#if categorias?seq_contains("recusado") >
174 <div style="border-top: 1px solid #E8ECEF; font-weight: bold; padding-top: 24px;">
175 <p>Conteudo Em Análise Pelo Cetiqt:</p>
176 <p>Conteúdo recusado pelo CETIQT por violar as políticas de privacidade.</p>
177 </div>
178 </#if >
179
180 <div class="lista-footnote">
181 <div>
182 <span class="lista-date">${journalArticle.getDisplayDate()?string('dd/MM/yyyy')}</span> | <span class="lista-commentNumber">${commentsCount} comentários</span> <span class="barra-pipe"> | </span> <span class="lista-author">Publicado por <a <#if urlWC != ''>href="/w/${urlWC}</#if>">${autor}</a></span>
183 </div>
184 <#if userIsAdmin>
185 <div class="buttonsActions">
186 <div style="cursor: pointer;font-size: 16px;" data-toggle="modal" data-target="#modalInfra${JournalArticleID}">
187 <i class="fa-solid fa-edit"></i>
188 </div>
189 <div style="cursor: pointer;font-size: 16px;" data-toggle="modal" data-target="#modal-infra-${entry.getClassPK()}">
190 <i class="fa-solid fa-trash-can"></i>
191 </div>
192
193 </div>
194 </#if>
195 </div>
196 </span>
197 </div>
198
199 <#if userIsAdmin>
200 <div style="display: none;" id="modal-infra-${entry.getClassPK()}" class="modal fade" role="dialog">
201 <div class="modal-dialog modal-lg" role="document">
202 <div class="modal-content">
203 <div class="modal-header" >
204 <h4 class="m-0">Remover Infraestrutura</h4>
205 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
206 <span aria-hidden="true">
207 <i class="fa-solid fa-close"></i>
208 </span>
209 </button>
210 </div>
211 <div class="modal-body">
212 <h5>Você tem certeza que deseja remover essa infraestrutura?</h5>
213 <div>
214 Ao clicar em continuar, a infraestrutura será removida do seu perfil.
215 </div>
216 </div>
217 <div class="modal-footer justify-content-end">
218 <button class="bioec_secondary_button" data-dismiss="modal">CANCELAR</button>
219 <button class="bioec_primary_button" type="button" onclick="excluirInfra(${JournalArticleFrontId}, ${orgId})">CONTINUAR</button>
220 </div>
221 </div>
222 </div>
223 </div>
224 </#if>
225
226 <#-- modal edição -->
227
228<#if userIsAdmin>
229<div style="display: none;" id="modalInfra${JournalArticleID}" class="modal fade bioec-profile-infra-modal" role="dialog">
230 <div class="modal-dialog modal-lg" role="document">
231
232 <form class="form-group modal-content" id="formularioInfraestrutura${JournalArticleID}">
233 <div id="infraModal-l1-${JournalArticleID}" class="modal-header infraModal-l1" >
234 <h5>Adicionar Infraestrutura</h5>
235 <button id="fecharModal${JournalArticleID}" type="button" class="close" data-dismiss="modal" aria-label="Close">
236 <span aria-hidden="true">×</span>
237 </button>
238 </div>
239 <div id="infraModal-l2-${JournalArticleID}" class="modal-body infraModal-l2">
240 <div id="infraName${JournalArticleID}" class="infraName">
241 <label class="ReqLabel" for="inputInfraName${JournalArticleID}">Nome da infraestrutura</label>
242 <input type="text" id="inputInfraName${JournalArticleID}" value="${entry.getHighlightedTitle()}" placeholder="Nome da infraestrutura" required>
243 </div>
244 <div id="infraModel${JournalArticleID}" class="infraModel">
245 <label class="ReqLabel" for="inputInfraModel${JournalArticleID}">Modelo</label>
246 <input type="text" id="inputInfraModel${JournalArticleID}" value="${modelo}" placeholder="Modelo" required>
247 </div>
248 <div id="infraBrand${JournalArticleID}" class="infraBrand">
249 <label class="ReqLabel" for="inputInfraBrand${JournalArticleID}">Marca</label>
250 <input type="text" id="inputInfraBrand${JournalArticleID}" value="${marca}" placeholder="Marca" required>
251 </div>
252
253 <div id="infraImg${JournalArticleID}" class="infraImg">
254 <div style="display: flex; flex-direction: column; gap: 8px">
255 <label>Imagem da infraestrutura (Máx. 10 MB)</label>
256 <label class="bioec_secondary_button" id="carregarImagem${JournalArticleID}" for="inputCarregarImagemInfra${JournalArticleID}" style="font-size: 16px;color: #333244;align-self:start;">
257 CARREGAR IMAGEM
258 </label>
259 <input id="inputCarregarImagemInfra${JournalArticleID}" class="inputCarregarImagemInfra" type="file" accept="image/*" onchange="encodeInfraImageAsURL${JournalArticleID}(this)">
260 <input class="d-none" id="inputInfraBase64${JournalArticleID}" value="${imageSrc}" />
261 <div class="imagemCarregadaInfra${JournalArticleID} d-md-none d-block" style="background-image: url(${imageSrc})"></div>
262 <button type="button" id="removerImagemInfra${JournalArticleID}" class="<#if imageSrc == "" || imageSrc?? == false> d-none </#if> removerImagemInfra" >
263 <i class="fa fa-trash"></i> Remover imagem
264 </button>
265 </div>
266 <div class="imagemCarregadaInfra${JournalArticleID} d-md-block d-none" style="background-image: url(${imageSrc})"></div>
267 </div>
268
269 <div id="infraFunction${JournalArticleID}" class="infraFunction">
270 <label class="ReqLabel" for="inputInfraFunction${JournalArticleID}">Função</label>
271 <input type="text" id="inputInfraFunction${JournalArticleID}" class="inputInfraFunction" value="${funcao}" placeholder="Função" required>
272 </div>
273 </div>
274 <div class="TextImportant">
275 <p>
276 Importante: O conteúdo enviado passará por um processo interno de aprovação. Só então o conteúdo adicionado aparecerá no portal.
277 </p>
278 </div>
279 <div id="infraModal-l3-${JournalArticleID}" class="modal-footer infraModal-l3">
280 <button class="bioec_secondary_button" onclick="">SALVAR E FECHAR</button>
281 </div>
282 </form>
283
284 </div>
285</div>
286</#if>
287
288
289
290
291<script>
292const SHOW_NOTICE_CONTAINER_BIOECONOMIA = "SHOW_NOTICE_CONTAINER_BIOECONOMIA";
293
294
295
296function closeNoticeContainer() {
297 document.getElementById("upload-notice-container").style.display = "none";
298
299 window.localStorage.removeItem(SHOW_NOTICE_CONTAINER_BIOECONOMIA);
300}
301
302document
303 .getElementById("close-btn-upload-container")
304 .addEventListener("click", closeNoticeContainer);
305
306document.addEventListener("DOMContentLoaded", function(event) {
307 console.log('chegou aqui', window.localStorage.getItem(SHOW_NOTICE_CONTAINER_BIOECONOMIA));
308 var showNoticeContainer = window.localStorage.getItem(SHOW_NOTICE_CONTAINER_BIOECONOMIA);
309 if (showNoticeContainer == "true") {
310 document.getElementById("upload-notice-container").style.display = "block";
311 window.localStorage.removeItem(SHOW_NOTICE_CONTAINER_BIOECONOMIA);
312 }
313});
314
315
316
317<#if userIsAdmin>
318
319document.querySelector('#formularioInfraestrutura${JournalArticleID}').addEventListener('submit', event => {
320 event.preventDefault();
321 if (boolAddInfraestrutura == 0){
322 event.preventDefault();
323 }
324 editarSubmissao${JournalArticleID}();
325});
326
327function editarSubmissao${JournalArticleID}(){
328
329
330 Liferay.Util.openToast({message: "Enviando requisição",type: "info",title: ""});
331 const infraData = {
332 nome: document.getElementById("inputInfraName${JournalArticleID}").value,
333 marca: document.getElementById("inputInfraBrand${JournalArticleID}").value,
334 funcao: document.getElementById("inputInfraFunction${JournalArticleID}").value,
335 modelo: document.getElementById("inputInfraModel${JournalArticleID}").value,
336 autor: Liferay.ThemeDisplay.getUserName(),
337 imagem: document.getElementById("inputInfraBase64${JournalArticleID}").value,
338 }
339 console.log(JSON.stringify(infraData));
340
341 fetch(Liferay.ThemeDisplay.getPortalURL() + "/o/infraestrutura/equipamento/${JournalArticleFrontId}", {
342 method: 'PUT',
343 "headers": {
344 "x-csrf-token": Liferay.authToken,
345 "Content-Type": "application/json"
346 },
347 body: JSON.stringify(infraData)
348 })
349 .then(res => {
350 if(res.status == 200) {
351
352 Liferay.Util.openToast({
353 message: "Infraestrutura editada com sucesso. Após a submissão, será iniciado um novo processo interno de aprovação do conteúdo enviado. Só então o conteúdo submetido aparecerá novamente no portal.",
354 type: "success",
355 title: "",
356 toastProps: {
357 autoClose: 5000
358 }
359 })
360
361setTimeout(function(){ location.reload(); }, 2000);
362
363 } else {
364 Liferay.Util.openToast({
365 message: "Erro ao editar infraestrutura",
366 type: "danger",
367 title: "",
368 toastProps: {
369 autoClose: 5000
370 }
371 })
372 }
373 });
374 }
375</#if>
376
377function excluirInfra(wcId, orgId) {
378 Liferay.Util.openToast({message: "Enviando requisição",type: "info",title: ""});
379 fetch(Liferay.ThemeDisplay.getPortalURL() + "/o/infraestrutura/equipamento/" + wcId , {
380 method: 'DELETE',
381 "headers": {
382 "x-csrf-token": Liferay.authToken,
383 "Content-Type": "application/json"
384 }
385 })
386 .then(res => {
387 if(res.status == 200) {
388 Liferay.Util.openToast({
389 message: "Infraestrutura excluida com sucesso",
390 type: "success",
391 title: "",
392 toastProps: {
393 autoClose: 5000
394 }
395 })
396 setTimeout(function(){ location.reload(); }, 2000)
397 } else {
398 Liferay.Util.openToast({
399 message: "Erro ao excluir infraestrutura",
400 type: "danger",
401 title: "",
402 toastProps: {
403 autoClose: 5000
404 }
405 })
406 }
407 });
408 }
409
410
411 function encodeInfraImageAsURL${JournalArticleID}(element) {
412 let file = element.files[0];
413 let reader = new FileReader();
414 reader.onloadend = () => {
415 if(reader.result) {
416 if(!validImageSize(reader.result)) return;
417 try {
418 Array.from(document.getElementsByClassName("imagemCarregadaInfra${JournalArticleID}")).forEach( el => el.style.backgroundImage = 'url(' + reader.result + ')' )
419 const base64_input = document.getElementById("inputInfraBase64${JournalArticleID}")
420 base64_input.value = reader.result
421
422
423 const removeImageButton = document.getElementById("removerImagemInfra${JournalArticleID}")
424 removeImageButton.classList.remove("d-none")
425 } catch (error) {
426 console.error(error)
427 }
428 }
429 }
430 reader.readAsDataURL(file);
431 }
432
433 function removeImageInfra${JournalArticleID}() {
434 try {
435 const file_input = document.getElementById("inputCarregarImagemInfra${JournalArticleID}")
436Array.from(document.getElementsByClassName("imagemCarregadaInfra${JournalArticleID}")).forEach( el => el.style.backgroundImage = "" )
437 const base64_input = document.getElementById("inputInfraBase64${JournalArticleID}")
438 file_input.value = null
439 base64_input.value = ""
440 console.log("foi")
441 const removeImageButton = document.getElementById("removerImagemInfra${JournalArticleID}")
442 removeImageButton.classList.add("d-none")
443 } catch (error) {
444 console.error(error)
445 }
446}
447
448
449document.getElementById("removerImagemInfra${JournalArticleID}").addEventListener("click", removeImageInfra${JournalArticleID});
450
451</script>
452<style>
453
454#upload-notice-container {
455 background: var(--cinza-claro, #e8ecef);
456 padding: 24px 24px 16px;
457 width: 100%;
458 position: relative;
459 margin-bottom: 40px;
460}
461
462#upload-notice-container #close-btn-upload-container {
463 position: absolute;
464 top: 0px;
465 right: 2px;
466 height: 24px;
467 margin: 8px;
468 cursor: pointer;
469}
470
471#upload-notice-container #close-btn-upload-container i {
472 font-size: 22px;
473 color: #5B5C61;
474}
475
476#upload-notice-container .upload-notice-title {
477 font-size: 20px;
478 /* font-family: Roboto; */
479 font-weight: 700;
480 line-height: 150%;
481 color: var(--texto, #5b5c61);
482 display: flex;
483 align-items: center;
484 margin-bottom: 12px;
485}
486
487#upload-notice-container .upload-notice-title i {
488 color: #ffc806;
489 margin-right: 12px;
490 font-size: 24px;
491}
492
493#upload-notice-container p {
494 color: var(--texto, #5b5c61);
495 font-size: 16px;
496 /* font-family: Roboto; */
497 line-height: 150%;
498 margin-bottom: 8px;
499}
500
501#upload-notice-container p > span {
502 font-weight: 700;
503}
504
505
506.imagemCarregadaInfra${JournalArticleID} {
507 background-size: contain;
508 background-position: center;
509 background-repeat: no-repeat;
510 height: 100px;
511 width: 100px;
512}
513
514#removerImagemInfra${JournalArticleID} {
515 background: none;
516 border: none;
517 outline: none;
518 color: #5B5C61;
519 font-size: 16px;
520 font-weight: 900;
521 line-height: 24px;
522 letter-spacing: 0em;
523 width: fit-content;
524 margin-left: 16px;
525}
526</style>
527 </#list>
528 </#if>
529 </div>
530</div>
531
532
533<style>
534
535.bioec_infra_img {
536 width: 140px;
537 height: 140px;
538 overflow: hidden;
539 background-size: contain;
540 background-position: center;
541 background-repeat: no-repeat;
542}
543
544.bioec_infra_img_placeholder {
545 width: 140px;
546 height: 140px;
547 background-color: #E8ECEF;
548 display: flex;
549 flex-direction: column;
550 align-items: center;
551 justify-content: center;
552 font-size: 14px;
553 color: #5B5C61;
554}
555
556.bioec_infra_img_placeholder i {
557 font-size: 44px;
558}
559
560
561.bioec-profile-estrutura-main{
562 display: flex;
563 gap: 40px;
564 flex-direction: column;
565 padding-bottom: 20px;
566}
567
568.bioec-profile-estrutura-main h5, .bioec-profile-estrutura-main p, .bioec-profile-estrutura-main a{
569 color: #5B5C61;
570}
571
572.bioec-profile-estrutura-main h5{
573 font-weight: 700;
574}
575.bioec-profile-estrutura-main h5, .bioec-profile-estrutura-main p{
576
577 font-size: 16px;
578
579}
580
581.bioec-profile-estrutura-main #estruturas-lista .estruturas-lista-item {
582 border: 1px #BEBEBE solid;
583 padding: 24px;
584 display: grid;
585 grid-template-columns: 24px 12px 138px 46px 1fr 12px 15px;
586 grid-template-areas: "ck . pic . desc . arrw"
587 ". . clps clps clps clps clps";
588 margin-bottom: 40px;
589}
590
591.bioec-profile-estrutura-main .lista-checkmark { grid-area: ck; }
592.bioec-profile-estrutura-main .lista-pic { grid-area: pic; display: flex; justify-content: center;}
593.bioec-profile-estrutura-main .lista-arrow { grid-area: arrw; }
594.bioec-profile-estrutura-main .lista-collapse { grid-area: clps; }
595
596.bioec-profile-estrutura-main .lista-desc {
597 grid-area: desc;
598 display: flex;
599 flex-direction: column;
600 justify-content: center;
601
602}
603
604.bioec-profile-estrutura-main .lista-desc h5{
605 margin-bottom: 12px;
606}
607
608.bioec-profile-estrutura-main .lista-desc p{
609 margin: 0;
610}
611
612.bioec-profile-estrutura-main .lista-func {
613
614 margin: 24px 0;
615}
616
617.bioec-profile-estrutura-main .lista-footnote {
618
619 display: flex;
620 justify-content: space-between;
621 border-top: 1px solid #E8ECEF;
622 padding-top: 12px;
623 font-size: 14px;
624 font-weight: 300;
625 gap: 15px;
626 color: #5B5C61;
627
628}
629
630.pagination-items-per-page.active > a,
631.pagination-items-per-page.active > button,
632.pagination-items-per-page.show > a,
633.pagination-items-per-page.show > button,
634.page-item.active .page-link,
635.page-item.show .page-link{
636 border-color: #4ECD66;
637 background-color: #4ECD66;
638}
639
640.pagination-results,
641.pagination-items-per-page > a,
642.pagination-items-per-page > button,
643.pagination-items-per-page > a:hover,
644.pagination-items-per-page > button:hover,
645.page-link{
646 color: #4ebe66;
647}
648
649.estruturas-port{
650 border: 1px #BEBEBE solid;
651 padding: 24px;
652 display: flex;
653 flex-direction: column;
654 align-items: center;
655 gap: 24px;
656}
657
658.estruturas-port p{
659 text-align: center;
660 max-width: 760px;
661 font-size: 18px;
662 color: #5B5C61;
663}
664
665.estruturas-port div{
666display: flex;
667 justify-content: space-between;
668 width: min(558px, 100%);
669}
670
671.lista-arrow button{
672 padding: 0;
673}
674
675.lista-arrow button:focus{
676 box-shadow: none;
677}
678
679@media(max-width: 1100px){
680 .estruturas-port div{
681 flex-direction: column;
682 gap: 30px;
683 }
684
685}
686
687@media(max-width: 450px){
688 .bioec-profile-estrutura-main .lista-footnote{
689 flex-direction: column;
690 gap: 10px;
691 align-items: flex-end;
692 text-align: right;
693 }
694}
695
696.bioec-profile-estrutura-main .lista-footnote .buttonsActions {
697 display: flex;
698 gap: 17px;
699}
700
701@media(max-width: 768px){
702 .bioec-profile-estrutura-main #estruturas-lista .estruturas-lista-item{
703 grid-template-columns: 24px 1fr 10px 1fr 15px;
704 grid-template-areas: "ck desc desc desc arrw"
705 ". pic pic pic ."
706 "clps clps clps clps clps";
707
708 }
709
710 .bioec-profile-estrutura-main .lista-desc{
711 align-items: center;
712 }
713
714 .lista-pic{
715 display: flex;
716 justify-content: center;
717 }
718
719 .bioec-profile-estrutura-main .lista-footnote{
720 flex-direction: column;
721 align-items: center;
722 }
723
724 .bioec-profile-estrutura-main .lista-footnote > div {
725 text-align: center;
726 }
727
728 .bioec-profile-estrutura-main .lista-footnote .barra-pipe {
729 display: none;
730 }
731 .bioec-profile-estrutura-main .lista-footnote .lista-author {
732 display: flex;
733 gap: 4px;
734 justify-content: center;
735 }
736 .bioec-profile-estrutura-main .lista-footnote .buttonsActions {
737 width: 100%;
738 justify-content: space-between;
739 }
740}
741</style>
The following has evaluated to null or missing: ==> autorId [in template "34764#34807#41127" at line 71, column 46] ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #if autorId != "" && autorId?? [in template "34764#34807#41127" at line 71, column 41] ----
1<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")>
2<#assign UserLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.UserLocalService")>
3<#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")>
4<#assign
5mbMessageLocalService = serviceLocator.findService("com.liferay.message.boards.service.MBMessageLocalService")
6 tagsLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetTagLocalService")
7 OrganizationLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.OrganizationLocalService")
8>
9
10
11<div class="bioec-profile-demanda-main">
12 <div id="demanda-lista-container" class="d-flex flex-column">
13 <#if entries?has_content>
14 <#list entries as entry>
15 <#assign journalArticle = JournalArticleLocalService.getLatestArticle(entry.getClassPK()) >
16 <#assign JournalArticleID = journalArticle.getId()>
17 <#assign JournalArticleFrontId = journalArticle.getArticleId()>
18 <#assign articleXml = journalArticle.getDocument().getRootElement()
19 userIsAdmin = false
20 orgId = ""
21 >
22
23 <#assign nomeParaContato = "">
24
25 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text77253735']")??>
26
27 <#assign nomeParaContato = articleXml.selectSingleNode("dynamic-element[@field-reference='Text77253735']").getStringValue()!""
28 nomeParaContato = nomeParaContato?replace("\n\t\t", "")
29 nomeParaContato = nomeParaContato?replace("\n\t", "")
30 >
31
32 </#if>
33 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text94974146']")??>
34 <#assign telefone = articleXml.selectSingleNode("dynamic-element[@field-reference='Text94974146']").getStringValue()!""
35 telefone = telefone?replace("\n\t\t", "")
36 telefone = telefone?replace("\n\t", "")
37 >
38 </#if>
39
40 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text68569631']")??>
41 <#assign email = articleXml.selectSingleNode("dynamic-element[@field-reference='Text68569631']").getStringValue()!""
42 email = email?replace("\n\t\t", "")
43 email = email?replace("\n\t", "")
44 >
45 </#if>
46
47 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='CopyOfCopyOfText18267936']")??>
48 <#assign desc = articleXml.selectSingleNode("dynamic-element[@field-reference='CopyOfCopyOfText18267936']").getStringValue()!""
49 desc = desc?replace("\n\t\t", "")
50 desc = desc?replace("\n\t", "")
51 >
52 </#if>
53 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text97565506']")??>
54 <#assign imagem = articleXml.selectSingleNode("dynamic-element[@field-reference='Text97565506']").getStringValue()!""
55 imagem = imagem?replace("(\r\n)+", "",'r')
56 imagem = imagem?replace(" ", "",'r')
57 >
58 </#if>
59 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text99746569']")??>
60 <#assign
61 autorId = articleXml.selectSingleNode("dynamic-element[@field-reference='Text99746569']").getStringValue()!""
62 autorId = autorId?replace("\n\t\t", "")
63 autorId = autorId?replace("\n\t", "")
64 autorArticleId = ""
65 >
66 </#if>
67 <#assign
68 commentsCount = mbMessageLocalService.getDiscussionMessagesCount(entry.getClassName(), entry.getClassPK(), 0)!"0"
69 >
70
71 <#if autorId != "" && autorId??>
72 <#assign
73 autor = UserLocalService.fetchUser(autorId?number)!""
74 autorArticleId = autor.getExpandoBridge().getAttribute("journal-article")!"0"
75 />
76 <#if autor != "">
77 <#assign autor = autor.getFullName()!"">
78 <#else>
79 <#assign autor = "Anônimo" >
80 </#if>
81 <#else>
82 <#assign autor = "Anônimo" >
83 </#if>
84 <#assign categorias = AssetCategoryLocalService.getCategoryNames(entry.getClassName(), entry.getClassPK())!"" >
85 <#assign urlWC = "">
86 <#if autorArticleId != "0" && autorArticleId != "" && autor != "Anônimo">
87 <#assign autorArticle = JournalArticleLocalService.getLatestArticle(themeDisplay.getLayout().getGroupId(), autorArticleId?string) >
88 <#assign urlWC = autorArticle.getUrlTitle()!"">
89 </#if>
90
91 <#assign tags = tagsLocalService.getTagNames("com.liferay.journal.model.JournalArticle", journalArticle.getResourcePrimKey()?number )
92 tagName = tags[0]!""
93 orgOrUser = ""
94 >
95
96 <#if tagName?contains("organization") && tagName != "" >
97 <#assign orgOrUser = "org">
98 <#else>
99 <#assign orgOrUser = "user">
100 </#if>
101
102 <#if orgOrUser == "org" >
103
104 <#assign
105 orgId = tagName?keep_after("organization-")
106 organization = OrganizationLocalService.fetchOrganization(orgId?number)!""
107 >
108
109
110 <#if organization != "" && autor != "Anônimo">
111
112 <#assign orgArticleId = organization.getExpandoBridge().getAttribute("journal-article")
113 orgJournalArticle = JournalArticleLocalService.getArticle(themeDisplay.getLayout().getGroupId(),orgArticleId?c)
114 urlWC = orgJournalArticle.getUrlTitle()!""
115 autor = organization.getName()!""
116 >
117
118 </#if>
119 </#if>
120
121 <#if themeDisplay.isSignedIn() >
122 <#if tagName?contains("organization-")>
123 <#assign userIsAdmin = OrganizationLocalService.hasUserOrganization(themeDisplay.getUserId(), orgId?number)>
124 <#else>
125 <#if autorId?number == themeDisplay.getUserId()>
126 <script>console.log("oi");</script>
127 <#assign userIsAdmin = true>
128 </#if>
129 </#if>
130
131
132 </#if>
133
134
135
136 <div class="demanda-lista-item">
137
138 <div class="lista-checkmark">
139 <#if categorias?seq_contains("aprovado") > <i title="Aprovado" style="color: #4ECD66" class="fa-solid fa-circle-check"></i> </#if>
140 <#if categorias?seq_contains("pendente") > <i title="Em análise" style="color: #D90000"class="fa-solid fa-spinner"></i> </#if>
141 <#if categorias?seq_contains("recusado") > <i title="Recusado" style="color: #D90000"class="fa-solid fa-exclamation-circle"></i> </#if>
142 </div>
143
144
145 <div class="lista-titulo">
146 <h5>${entry.getHighlightedTitle()}</h5>
147 </div>
148
149 <div class="lista-arrow">
150 <button style="padding: 0;" class="btn" type="button" data-toggle="collapse" data-target="#collapseID${entry.getClassPK()}" aria-expanded="false" aria-controls="collapseID${entry.getClassPK()}">
151 <i class="fa-solid fa-chevron-down"></i>
152 </button>
153 </div>
154
155 <div class="lista-desc">
156 <p>${desc}</p>
157 </div>
158
159 <div class="lista-collapse collapse" id="collapseID${entry.getClassPK()}">
160 <#if nomeParaContato != "" || telefone != "" || email != "" || imagem?trim !="">
161 <div class="lista-details">
162 <div class="lista-pic">
163 <i class="fa-solid fa-image-slash"></i>
164 <#if imagem?trim !="" >
165 <img class="bioec_demanda_img" src="${imagem}">
166 <#else>
167 <div class="bioec_demanda_img_placeholder">
168 <i class="fa-solid fa-image"></i>
169 sem imagem
170 </div>
171 </#if>
172 </div>
173 <#if nomeParaContato != "" || telefone != "" || email != "" >
174 <div class="lista-contato">
175 <p>Contato</p>
176 <p class="lista-author">${nomeParaContato}</p>
177 <p class="lista-phone">${telefone}</p>
178 <p class="lista-email">${email}</p>
179 </div>
180 </#if>
181 </div>
182 </#if>
183
184 <#if categorias?seq_contains("recusado") >
185 <div style="border-top: 1px solid #E8ECEF; font-weight: bold; padding-top: 24px;">
186 <p>Conteúdo Em Análise Pelo Cetiqt:</p>
187 <p>Conteúdo recusado pelo CETIQT por violar as políticas de privacidade.</p>
188 </div>
189 </#if>
190 <div class="lista-footnote">
191 <div>
192 <span class="lista-date">${journalArticle.getDisplayDate()?string('dd/MM/yyyy')}</span> | <span class="lista-commentNumber">${commentsCount} cometários</span> <span class="barra-pipe"> | </span> <span class="lista-author">Publicado por <a <#if urlWC != ''>href="/w/${urlWC}</#if>">${autor}</a></span>
193 </div>
194 <#if userIsAdmin>
195 <div class="buttonsActions">
196 <div style="cursor: pointer;font-size: 16px;" data-toggle="modal" data-target="#modalDemanda${JournalArticleID}">
197 <i class="fa-solid fa-edit"></i>
198 </div>
199 <div style="cursor: pointer;font-size: 16px;" data-toggle="modal" data-target="#modal-demanda-${entry.getClassPK()}">
200 <i class="fa-solid fa-trash-can"></i>
201 </div>
202
203 </div>
204 </#if>
205 </div>
206 </div>
207 </div>
208
209 <#if userIsAdmin>
210 <div style="display: none;" id="modal-demanda-${entry.getClassPK()}" class="modal fade" role="dialog">
211 <div class="modal-dialog modal-lg" role="document">
212 <div class="modal-content">
213 <div class="modal-header" >
214 <h4 class="m-0">Remover Demanda</h4>
215 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
216 <span aria-hidden="true">
217 <i class="fa-solid fa-close"></i>
218 </span>
219 </button>
220 </div>
221 <div class="modal-body">
222 <h5>Você tem certeza que deseja remover essa demanda?</h5>
223 <div>
224 Ao clicar em continuar, a demanda será removida do seu perfil.
225 </div>
226 </div>
227 <div class="modal-footer justify-content-end">
228 <button class="bioec_secondary_button" data-dismiss="modal">CANCELAR</button>
229 <button class="bioec_primary_button" type="button" onclick="excluirDemanda(${JournalArticleFrontId}, ${orgId})">CONTINUAR</button>
230 </div>
231 </div>
232 </div>
233 </div>
234
235 <#-- modal edição -->
236
237
238 <div style="display: none;" id="modalDemanda${JournalArticleID}" class="modal fade bioec-profile-demanda-modal modalDemanda" role="dialog">
239 <div class="modal-dialog modal-lg" role="document">
240 <form id="formularioDemanda${JournalArticleID}" class="form-group modal-content formularioDemanda">
241 <div id="demandaModal-l1${JournalArticleID}" class="modal-header demandaModal-l1">
242 <h5>Adicionar demanda</h5>
243 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
244 <span aria-hidden="true">×</span>
245 </button>
246 </div>
247 <div id="demandaModal-l2${JournalArticleID}" class="modal-body demandaModal-l2">
248 <div id="demandaTitle${JournalArticleID}" class="demandaTitle">
249 <label class="ReqLabel" for="demandaInputTitle${JournalArticleID}">Título da demanda</label>
250 <input id="demandaInputTitle${JournalArticleID}" value="${entry.getHighlightedTitle()}" type="text" placeholder="Inserir um título" required>
251 </div>
252 <div id="demandaName${JournalArticleID}" class="demandaName">
253 <label class="" for="demandaInputName${JournalArticleID}">Nome para contato</label>
254 <input value="${nomeParaContato}" id="demandaInputName${JournalArticleID}" placeholder="Inserir nome" type="text">
255 </div>
256 <div id="demandaTelephone${JournalArticleID}" class="demandaTelephone">
257 <label class="" for="demandaInputPhone${JournalArticleID}">Telefone para contato</label>
258 <input value="${telefone}" id="demandaInputPhone${JournalArticleID}" name="demandaInputPhone" type="text" placeholder ='(__)_____-_____' minlength="14" />
259 </div>
260 <div id="demandaEmail${JournalArticleID}" class="demandaEmail">
261 <label class="" for="demandaInputEmail${JournalArticleID}">E-mail para contato</label>
262 <input value="${email}" id="demandaInputEmail${JournalArticleID}" placeholder="Inserir e-mail" type="text">
263 </div>
264 <div id="demandaDesc${JournalArticleID}" class="demandaDesc">
265 <label class="ReqLabel" for="demandaInputDesc${JournalArticleID}">Descrição</label>
266 <textarea id="demandaInputDesc${JournalArticleID}" style="max-width: 100%;font-size: 16px;height: 80px;border: 1px solid #BEBEBE;" required>${desc}</textarea>
267 </div>
268 <div id="demandaImg${JournalArticleID}" class="demandaImg">
269 <div style="display: flex; flex-direction: column; gap: 8px">
270 <label>Imagem da demanda (Máx. 10 MB)</label>
271 <label class="btn carregarImagem" id="carregarImagem${JournalArticleID}" for="inputCarregarImagemDemanda${JournalArticleID}" style="font-size: 16px; cursor: pointer;">CARREGAR IMAGEM</label>
272 <input class="inputCarregarImagemDemanda" id="inputCarregarImagemDemanda${JournalArticleID}" type="file" accept="image/*" onchange="encodeDemandaImageAsURL${JournalArticleID}(this)">
273 <input class="d-none" id="inputDemandaBase64${JournalArticleID}" value="${imagem}" />
274 <div class="imagemCarregadaDemanda imagemCarregadaDemanda${JournalArticleID} d-md-none d-block" style="background-image: url(${imagem})"></div>
275 <button type="button" id="removerImagemDemanda${JournalArticleID}" class="<#if imagem == "" || imagem?? == false> d-none </#if> removerImagemDemanda" >
276 <i class="fa fa-trash"></i> Remover imagem
277 </button>
278 </div>
279 <div class="imagemCarregadaDemanda imagemCarregadaDemanda${JournalArticleID} d-md-block d-none" style="background-image: url(${imagem})"></div>
280 </div>
281 </div>
282 <div class="TextImportant">
283 <p>
284 Importante: O conteúdo enviado passará por um processo interno de aprovação. Só então o conteúdo adicionado aparecerá no portal.
285 </p>
286 </div>
287
288 <div id="demandaModal-l3${JournalArticleID}" class="modal-footer demandaModal-l3">
289 <button class="btn button-empty" onclick="" id="demandas-saveAndClose${JournalArticleID}">SALVAR E FECHAR</button>
290 </div>
291 </form>
292 </div>
293 </div>
294
295 </#if>
296 <#--
297
298
299
300
301 <div style="display: none;" id="modalInfra${JournalArticleID}" class="modal fade bioec-profile-infra-modal" role="dialog">
302 <div class="modal-dialog modal-lg" role="document">
303
304 <form class="form-group modal-content" id="formularioInfraestrutura${JournalArticleID}">
305 <div id="infraModal-l1-${JournalArticleID}" class="modal-header infraModal-l1" >
306 <h5>Adicionar Infraestrutura</h5>
307 <button id="fecharModal${JournalArticleID}" type="button" class="close" data-dismiss="modal" aria-label="Close">
308 <span aria-hidden="true">×</span>
309 </button>
310 </div>
311 <div id="infraModal-l2-${JournalArticleID}" class="modal-body infraModal-l2">
312 <div id="infraName${JournalArticleID}" class="infraName">
313 <label class="ReqLabel" for="inputInfraName${JournalArticleID}">Nome da infraestrutura</label>
314 <input type="text" id="inputInfraName${JournalArticleID}" value="${entry.getHighlightedTitle()}" placeholder="Nome da infraestrutura" required>
315 </div>
316 <div id="infraModel${JournalArticleID}" class="infraModel">
317 <label class="ReqLabel" for="inputInfraModel${JournalArticleID}">Modelo</label>
318 <input type="text" id="inputInfraModel${JournalArticleID}" value="${modelo}" placeholder="Modelo" required>
319 </div>
320 <div id="infraBrand${JournalArticleID}" class="infraBrand">
321 <label class="ReqLabel" for="inputInfraBrand${JournalArticleID}">Marca</label>
322 <input type="text" id="inputInfraBrand${JournalArticleID}" value="${marca}" placeholder="Marca" required>
323 </div>
324
325 <div id="infraImg${JournalArticleID}" class="infraImg">
326 <div style="display: flex; flex-direction: column; gap: 8px">
327 <label>Imagem da infraestrutura (Máx. 10 MB)</label>
328 <label class="bioec_secondary_button" id="carregarImagem${JournalArticleID}" for="inputCarregarImagemInfra${JournalArticleID}" style="font-size: 16px;color: #333244;align-self:start;">
329 CARREGAR IMAGEM
330 </label>
331 <input id="inputCarregarImagemInfra${JournalArticleID}" class="inputCarregarImagemInfra" type="file" accept="image/*" onchange="encodeInfraImageAsURL${JournalArticleID}(this)">
332 <input class="d-none" id="inputInfraBase64${JournalArticleID}" />
333 <div class="imagemCarregadaInfra${JournalArticleID} d-md-none d-block"></div>
334 <button type="button" id="removerImagemInfra${JournalArticleID}" class="d-none removerImagemInfra" >
335 <i class="fa fa-trash"></i> Remover imagem
336 </button>
337 </div>
338 <div class="imagemCarregadaInfra${JournalArticleID} d-md-block d-none"></div>
339 </div>
340
341 <div id="infraFunction${JournalArticleID}" class="infraFunction">
342 <label class="ReqLabel" for="inputInfraFunction${JournalArticleID}">Função</label>
343 <input type="text" id="inputInfraFunction${JournalArticleID}" class="inputInfraFunction" value="${funcao}" placeholder="Função" required>
344 </div>
345 </div>
346 <div class="TextImportant">
347 <p>
348 Importante: O conteúdo enviado passará por um processo interno de aprovação. Só então o conteúdo adicionado aparecerá no portal.
349 </p>
350 </div>
351 <div id="infraModal-l3-${JournalArticleID}" class="modal-footer infraModal-l3">
352 <button class="bioec_secondary_button" id="demandas-saveAndClose${JournalArticleID}" onclick="">SALVAR E FECHAR</button>
353 </div>
354 </form>
355
356 </div>
357
358
359 -->
360
361
362
363 <script>
364 <#if userIsAdmin>
365 function excluirDemanda(wcId, orgId) {
366 Liferay.Util.openToast({message: "Enviando requisição",type: "info",title: ""});
367 fetch(Liferay.ThemeDisplay.getPortalURL() + "/o/demanda/" + wcId, {
368 method: 'DELETE',
369 "headers": {
370 "x-csrf-token": Liferay.authToken,
371 "Content-Type": "application/json"
372 }
373 })
374 .then(res => {
375 if(res.status == 200) {
376 Liferay.Util.openToast({
377 message: "Infraestrutura excluida com sucesso",
378 type: "success",
379 title: "",
380 toastProps: {
381 autoClose: 5000
382 }
383 })
384 setTimeout(function(){ location.reload(); }, 2000)
385 } else {
386 Liferay.Util.openToast({
387 message: "Erro ao excluir infraestrutura",
388 type: "danger",
389 title: "",
390 toastProps: {
391 autoClose: 5000
392 }
393 })
394 }
395 });
396 }
397
398
399
400
401 function validImageSize(base64="") {
402 const decoded = atob(base64.substring(base64.indexOf(',') + 1));
403 const sizeMB = decoded.length / 1e+6;
404 console.log("MB: " + decoded.length / 1e+6);
405 if(sizeMB > 10) {
406 Liferay.Util.openToast({
407 message: "O tamanho da imagem não deve ultrapassar 10 MB.",
408 type: "danger",
409 title: "",
410 toastProps: {
411 autoClose: 5000
412 }
413 })
414 return false
415 }
416 return true
417 }
418
419 function encodeDemandaImageAsURL${JournalArticleID}(element) {
420 let file = element.files[0];
421 let reader = new FileReader();
422 reader.onloadend = () => {
423 if(reader.result) {
424 if(!validImageSize(reader.result)) return;
425 try {
426 const base64_input = document.getElementById("inputDemandaBase64${JournalArticleID}")
427 base64_input.value = reader.result
428 Array.from(document.getElementsByClassName("imagemCarregadaDemanda${JournalArticleID}")).forEach( el => el.style.backgroundImage = 'url(' + reader.result + ')' )
429
430 const removeImageButton = document.getElementById("removerImagemDemanda${JournalArticleID}")
431 removeImageButton.classList.remove("d-none")
432 } catch (error) {
433 console.error(error)
434 }
435 }
436 }
437 reader.readAsDataURL(file);
438 }
439
440 function removeImageDemanda${JournalArticleID}() {
441 try {
442 const file_input = document.getElementById("inputCarregarImagemDemanda${JournalArticleID}")
443 Array.from(document.getElementsByClassName("imagemCarregadaDemanda${JournalArticleID}")).forEach( el => el.style.backgroundImage = "" )
444 const base64_input = document.getElementById("inputDemandaBase64${JournalArticleID}")
445 file_input.value = null
446 base64_input.value = ""
447
448 const removeImageButton = document.getElementById("removerImagemDemanda${JournalArticleID}")
449 removeImageButton.classList.add("d-none")
450 } catch (error) {
451 console.error(error)
452 }
453}
454
455
456document.getElementById("removerImagemDemanda${JournalArticleID}").addEventListener("click", removeImageDemanda${JournalArticleID});
457
458<#-- Rest da edição de organização -->
459
460<#if orgOrUser == "org">
461document.querySelector('#formularioDemanda${JournalArticleID}').addEventListener('submit', event => {
462 event.preventDefault();
463 adicionarDemanda${JournalArticleID}();
464});
465
466function adicionarDemanda${JournalArticleID}() {
467 Liferay.Util.openToast({message: "Enviando requisição",type: "info",title: ""});
468 $("#demandas-saveAndClose${JournalArticleID}").prop("disabled",true);
469
470
471
472 const demandaData = {
473 titulo: document.getElementById("demandaInputTitle${JournalArticleID}").value,
474 nomeContato: document.getElementById("demandaInputName${JournalArticleID}").value,
475 telefoneContato: document.getElementById("demandaInputPhone${JournalArticleID}").value,
476 emailContato: document.getElementById("demandaInputEmail${JournalArticleID}").value,
477 descricao: document.getElementById("demandaInputDesc${JournalArticleID}").value,
478 imagem: document.getElementById("inputDemandaBase64${JournalArticleID}").value,
479 }
480
481 console.log(demandaData);
482
483 fetch(Liferay.ThemeDisplay.getPortalURL() + "/o/demanda/${JournalArticleFrontId}", {
484 method: 'PUT',
485 "headers": {
486 "x-csrf-token": Liferay.authToken,
487 "Content-Type": "application/json"
488 },
489 body: JSON.stringify(demandaData)
490 })
491 .then(res => {
492 if(res.status == 200) {
493 Liferay.Util.openToast({
494 message: "Demanda editada com sucesso. Após a submissão, será iniciado o processo interno de aprovação do conteúdo enviado. Só então o conteúdo submetido aparecerá no portal.",
495 type: "success",
496 title: "",
497 toastProps: {
498 autoClose: 5000
499 }
500 })
501 setTimeout(function(){ location.reload(); }, 2000);
502 } else {
503 $("#demandas-saveAndClose${JournalArticleID}").prop("disabled",false);
504 Liferay.Util.openToast({
505 message: "Erro ao editada demanda",
506 type: "danger",
507 title: "",
508 toastProps: {
509 autoClose: 5000
510 }
511 })
512 }
513 })
514
515 }
516</#if>
517
518<#-- Rest da edição de pessoa fisica -->
519
520
521 <#if orgOrUser == "user">
522
523 document.querySelector('#formularioDemanda${JournalArticleID}').addEventListener('submit', event => {
524 event.preventDefault();
525 adicionarDemanda${JournalArticleID}();
526 });
527
528 function adicionarDemanda${JournalArticleID}() {
529 Liferay.Util.openToast({message: "Enviando requisição",type: "info",title: ""});
530 $("#demandas-saveAndClose${JournalArticleID}").prop("disabled",true);
531
532 const demandaData = {
533 titulo: document.getElementById("demandaInputTitle${JournalArticleID}").value,
534 nomeContato: document.getElementById("demandaInputName${JournalArticleID}").value,
535 telefoneContato: document.getElementById("demandaInputPhone${JournalArticleID}").value,
536 emailContato: document.getElementById("demandaInputEmail${JournalArticleID}").value,
537 descricao: document.getElementById("demandaInputDesc${JournalArticleID}").value,
538 imagem: document.getElementById("inputDemandaBase64${JournalArticleID}").value,
539 }
540
541 console.log(demandaData);
542
543 fetch(Liferay.ThemeDisplay.getPortalURL() + "/o/demanda/${JournalArticleFrontId}", {
544 method: 'PUT',
545 "headers": {
546 "x-csrf-token": Liferay.authToken,
547 "Content-Type": "application/json"
548 },
549 body: JSON.stringify(demandaData)
550 })
551 .then( res => {
552 if(res.status == 200) {
553 Liferay.Util.openToast({
554 message: "Demanda editada com sucesso. Após a submissão, será iniciado o processo interno de aprovação do conteúdo enviado. Só então o conteúdo submetido aparecerá no portal.",
555 type: "success",
556 title: "",
557 toastProps: {
558 autoClose: 5000
559 }
560 })
561 setTimeout(function(){ location.reload(); }, 2000);
562 } else {
563 $("#demandas-saveAndClose${JournalArticleID}").prop("disabled",false);
564 Liferay.Util.openToast({
565 message: "Erro ao editar Demanda",
566 type: "danger",
567 title: "",
568 toastProps: {
569 autoClose: 5000
570 }
571 })
572 }
573 });
574
575 };
576
577
578 </#if>
579
580
581 </#if>
582 </script>
583
584
585
586
587 </#list>
588 </#if>
589 </div>
590</div>
591
592<style>
593.bioec_demanda_img {
594 overflow: hidden;
595 background-size: contain;
596 background-position: center;
597 background-repeat: no-repeat;
598}
599
600.bioec_demanda_img_placeholder {
601 width: 140px;
602 height: 140px;
603 background-color: #E8ECEF;
604 display: flex;
605 flex-direction: column;
606 align-items: center;
607 justify-content: center;
608 font-size: 14px;
609 color: #5B5C61;
610}
611
612.bioec_demanda_img_placeholder i {
613 font-size: 44px;
614}
615
616
617.pagination-items-per-page.active > a,
618.pagination-items-per-page.active > button,
619.pagination-items-per-page.show > a,
620.pagination-items-per-page.show > button,
621.page-item.active .page-link,
622.page-item.show .page-link{
623 border-color: #4ECD66;
624 background-color: #4ECD66;
625}
626
627.pagination-results,
628.pagination-items-per-page > a,
629.pagination-items-per-page > button,
630.pagination-items-per-page > a:hover,
631.pagination-items-per-page > button:hover,
632.page-link{
633 color: #4ebe66;
634}
635
636.bioec-profile-demanda-main{
637 display: flex;
638 gap: 40px;
639 flex-direction: column;
640 padding-bottom: 20px;
641}
642.bioec-profile-demanda-main h5{
643 font-weight: 700;
644}
645.bioec-profile-demanda-main h5, .bioec-profile-demanda-main p{
646 color: #5B5C61;
647 margin-bottom: 0px;
648 font-size: 16px;
649
650}
651
652.bioec-profile-demanda-main #demanda-lista-container>div{
653 border: 1px #BEBEBE solid;
654 padding: 24px 24px 0 24px;
655 margin-bottom: 40px;
656 display: grid;
657 grid-row-gap: 24px;
658 grid-template-columns: 24px 12px 1fr 15px;
659 grid-template-areas:
660 "ck . tit arrw"
661 "desc desc desc desc"
662 "clps clps clps clps";
663}
664
665.bioec-profile-demanda-main .lista-checkmark { grid-area: ck; display: flex; }
666.bioec-profile-demanda-main .lista-checkmark i { font-size: 24px; }
667.bioec-profile-demanda-main .lista-pic { grid-area: pic; display: flex; justify-content: center;}
668.bioec-profile-demanda-main .lista-arrow { grid-area: arrw; }
669
670.bioec-profile-demanda-main .lista-titulo {
671 grid-area: tit;
672 display: flex;
673 flex-direction: column;
674 justify-content: center;
675
676}
677
678.bioec-profile-demanda-main .lista-titulo h5{
679 margin-bottom: 0px;
680}
681
682.bioec-profile-demanda-main .lista-desc {
683grid-area: desc;
684}
685
686.bioec-profile-demanda-main .lista-desc p{
687 margin: 0;
688}
689
690.bioec-profile-demanda-main a{
691 color: #5B5C61;
692}
693
694.demanda-port{
695 border: 1px #BEBEBE solid;
696 padding: 24px;
697 display: flex;
698 flex-direction: column;
699 align-items: center;
700 gap: 24px;
701}
702
703.demanda-port p{
704text-align: center;
705
706}
707
708.demanda-port div{
709display: flex;
710 justify-content: space-between;
711 width: min(558px, 100%);
712}
713
714.button-empty {
715border: solid 1px #4ECD66;
716padding: 8px 24px;
717color: #333244;
718 transition: 250ms;
719}
720
721.button-empty:hover{
722 background-color: #4ECD66;
723}
724
725.button-filled {
726background-color: #4ECD66;
727border: solid 1px #4ECD66;
728padding: 8px 24px;
729color: #333244;
730transition: 250ms;
731
732}
733
734.button-filled:hover{
735 background-color: transparent;
736}
737
738.bioec-profile-demanda-main .lista-footnote {
739
740 display: flex;
741 justify-content: space-between;
742 border-top: 1px solid #E8ECEF;
743 padding-top: 12px;
744 font-size: 14px;
745 font-weight: 300;
746 gap: 15px;
747 color: #5B5C61;
748
749}
750.lista-collapse{
751display: flex;
752flex-direction: column;
753gap: 24px;
754grid-area: clps;
755padding-bottom: 24px;
756}
757
758 .lista-details{
759 display: flex;
760 justify-content: flex-start;
761 gap: 24px;
762}
763.lista-pic img {
764 max-height: 138px;
765 max-width: 138px;
766}
767
768.bioec-profile-demanda-main p{
769
770}
771
772.imagemCarregadaDemanda {
773 height: 100px;
774 width: 100px;
775 background-size: contain;
776 background-position: center;
777 background-repeat: no-repeat;
778}
779
780
781.ButtonAddDemanda {
782 background: #4ECD66;
783 border-radius: 8px;
784 padding: 8px 24px;
785 border: none;
786 font-weight: 700;
787 color: #333244;
788 font-family: 'Roboto';
789 float: right;
790 text-transform: uppercase;
791}
792.ButtonAddDemanda:hover{
793 color: #333244;
794 text-decoration: none;
795}
796
797.bioec-profile-demanda-modal label {
798 margin: 0;
799 cursor: default;
800 font-size: 20px;
801 font-weight: 700;
802 color: #5B5C61;
803}
804
805.bioec-profile-demanda-modal div {
806 width: 100%;
807}
808
809#demandaModal-l1, .demandaModal-l1 {
810 padding: 18px 24px;
811 display: flex;
812 justify-content: space-between;
813}
814
815#demandaModal-l1 img, .demandaModal-l1 img {
816 cursor: pointer;
817}
818
819#demandaModal-l1 h5, .demandaModal-l1 h5 {
820 margin: 0;
821 font-size: 20px;
822 font-weight: 700;
823 color: #5B5C61;
824}
825
826#demandaModal-l2, .demandaModal-l2 {
827 border-top: 1px solid #E8ECEF;
828 display: grid;
829 grid-template-columns: 1fr 1fr;
830 grid-template-areas:
831 "titu nome"
832 "fone mail"
833 "desc desc"
834 "imagem ."
835 ;
836 column-gap: 24px;
837 row-gap: 40px;
838 padding: 24px;
839}
840
841#demandaModal-l2>div, .demandaModal-l2>div {
842 display: flex;
843 flex-direction: column;
844 gap: 8px;
845}
846
847#demandaTitle, .demandaTitle {
848 grid-area: titu;
849}
850
851#demandaName, .demandaName {
852 grid-area: nome;
853}
854
855#demandaTelephone, .demandaTelephone {
856 grid-area: fone;
857}
858
859#demandaEmail, .demandaEmail {
860 grid-area: mail;
861}
862
863#demandaBrand, .demandaBrand {
864 grid-area: marca;
865}
866
867#demandaModal-l2>#demandaImg, .demandaModal-l2>.demandaImg {
868 grid-area: imagem;
869 display: flex;
870 flex-direction: column;
871}
872
873#demandaDesc, .demandaDesc {
874 grid-area: desc;
875
876}
877
878#demandaDesc input, .demandaDesc input {
879 height: 80px;
880}
881
882.TextImportant{
883 border-bottom: 1px solid #E8ECEF;
884 padding: 24px;
885 color: #5B5C61;
886}
887
888.bioec-profile-demanda-modal input[type="text"] {
889 border-top: none;
890 border-left: none;
891 border-right: none;
892 border-bottom: 1px solid #BEBEBE;
893 width: 100%;
894 font-size: 16px;
895
896}
897
898
899.bioec-profile-demanda-modal input[type="text"]:focus-visible {
900 outline: none;
901 border-bottom: 1px solid black;
902
903}
904
905.bioec-profile-demanda-modal .ReqLabel:before {
906 content: "* ";
907 color: #D90000;
908
909}
910
911#inputCarregarImagemDemanda, .inputCarregarImagemDemanda {
912 display: none;
913}
914
915#carregarImagem, .carregarImagem {
916 padding: 8px 24px;
917 border: 1px solid #4ECD66;
918 width: fit-content;
919 transition: 250ms;
920
921}
922
923#carregarImagem:hover, .carregarImagem:hover {
924 background-color: #4ECD66;
925}
926
927.button-empty {
928 border: solid 1px #4ECD66;
929 padding: 8px 24px;
930 color: #333244;
931 transition: 250ms;
932 font-weight: bold;
933}
934
935.button-empty:hover {
936 background-color: #4ECD66;
937}
938
939.button-filled {
940 background-color: #4ECD66;
941 border: solid 1px #4ECD66;
942 padding: 8px 24px;
943 color: #333244;
944 transition: 250ms;
945 font-weight: bold;
946}
947
948.button-filled:hover {
949 background-color: transparent;
950}
951
952#demandaModal-l3, .demandaModal-l3 {
953 gap: 24px;
954 display: flex;
955 justify-content: flex-end;
956 padding: 24px;
957}
958
959.modal {
960 padding: initial !important;
961 border-radius: 4px !important;
962
963}
964
965.modal a.close-modal {
966 display: none;
967}
968
969#removerImagemDemanda, .removerImagemDemanda {
970 background: none;
971 border: none;
972 outline: none;
973 color: #5B5C61;
974 font-size: 16px;
975 font-weight: 900;
976 line-height: 24px;
977 letter-spacing: 0em;
978 width: fit-content;
979 margin-left: 16px;
980}
981
982
983@media(max-width: 964px){
984 .lista-pic img {
985 width: 100%;
986 max-height: unset;
987 max-width: unset;
988
989 }
990}
991
992@media (max-width: 550px) {
993 #demandaModal-l2, .demandaModal-l2 {
994 display: flex;
995 flex-direction: column;
996 }
997
998 #demandaModal-l3, .demandaModal-l3 {
999 display: flex;
1000 flex-direction: column;
1001 }
1002}
1003
1004@media(max-width: 450px){
1005 .bioec-profile-demanda-main .lista-details{
1006 flex-direction: column;
1007 }
1008
1009 .lista-contato{
1010 text-align: center;
1011 }
1012
1013 .bioec-profile-demanda-main .lista-footnote{
1014 flex-direction: column;
1015 gap: 10px;
1016 align-items: flex-end;
1017 text-align: right;
1018 }
1019}
1020
1021@media(max-width: 992px){
1022 #demanda-lista-container {
1023 padding-inline: 15px;
1024 }
1025}
1026
1027.bioec-profile-demanda-main .lista-footnote .buttonsActions {
1028 display: flex;
1029 gap: 17px;
1030}
1031
1032@media (max-width: 768px) {
1033 .bioec-profile-demanda-main .lista-desc {
1034 gap: 24px;
1035 flex-direction: column-reverse;
1036 }
1037 .bioec-profile-demanda-main .lista-footnote {
1038 flex-direction: column;
1039 align-items: center;
1040 }
1041 .bioec-profile-demanda-main .lista-footnote > div {
1042 text-align: center;
1043 }
1044
1045 .bioec-profile-demanda-main .lista-footnote .barra-pipe {
1046 display: none;
1047 }
1048 .bioec-profile-demanda-main .lista-footnote .lista-author {
1049 display: flex;
1050 gap: 4px;
1051 justify-content: center;
1052 }
1053 .bioec-profile-demanda-main .lista-footnote .buttonsActions {
1054 width: 100%;
1055 justify-content: space-between;
1056 }
1057}
1058
1059
1060</style>
1061
1062
1063<script>
1064
1065
1066
1067</script>
The following has evaluated to null or missing: ==> autorId [in template "34764#34807#41133" at line 81, column 54] ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #if autorId != "" && autorId?? [in template "34764#34807#41133" at line 81, column 49] ----
1<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")>
2<#assign UserLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.UserLocalService")>
3<#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")>
4<#assign mbMessageLocalService = serviceLocator.findService("com.liferay.message.boards.service.MBMessageLocalService")>
5<#assign OrganizationLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.OrganizationLocalService")
6 tagsLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetTagLocalService")
7>
8
9
10
11
12
13
14
15
16<div class="bioec-profile-oferta-main">
17 <div id="oferta-lista-container" class="d-flex flex-column">
18 <#if entries?has_content>
19 <#list entries as entry>
20 <#assign journalArticle = JournalArticleLocalService.getLatestArticle(entry.getClassPK()) >
21 <#assign JournalArticleID = journalArticle.getId()>
22 <#assign JournalArticleFrontId = journalArticle.getArticleId()>
23 <#assign articleXml = journalArticle.getDocument().getRootElement()
24 userIsAdmin = false
25 orgId = ""
26 >
27
28 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='CampoDeTexto50355704']")??>
29
30 <#assign nomeParaContato = articleXml.selectSingleNode("dynamic-element[@field-reference='CampoDeTexto50355704']").getStringValue()!""
31 nomeParaContato = nomeParaContato?replace("\n\t\t", "")
32 nomeParaContato = nomeParaContato?replace("\n\t", "")
33 >
34 </#if>
35
36 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text90715721']")??>
37 <#assign telefone = articleXml.selectSingleNode("dynamic-element[@field-reference='Text90715721']")!""
38 telefone = telefone.getStringValue()!""
39 telefone = telefone?replace("\n\t\t", "")
40 telefone = telefone?replace("\n\t", "")
41 >
42
43 </#if>
44
45 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text68569631']")??>
46 <#assign email = articleXml.selectSingleNode("dynamic-element[@field-reference='Text68569631']").getStringValue()!""
47 email = email?replace("\n\t\t", "")
48 email = email?replace("\n\t", "")
49 >
50 </#if>
51
52
53 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='CopyOfText18267936']")??>
54 <#assign desc = articleXml.selectSingleNode("dynamic-element[@field-reference='CopyOfText18267936']").getStringValue()!""
55 desc = desc?replace("\n\t\t", "")
56 desc = desc?replace("\n\t", "")
57 >
58 </#if>
59
60 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text80669990']")??>
61 <#assign imagem = articleXml.selectSingleNode("dynamic-element[@field-reference='Text80669990']").getStringValue()!""
62 imagem = imagem?replace("\n\t\t", "")
63 imagem = imagem?replace("\n\t", "")
64 >
65 </#if>
66
67 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='CampoDeTexto97452704']")??>
68 <#assign autorId = articleXml.selectSingleNode("dynamic-element[@field-reference='CampoDeTexto97452704']").getStringValue()!""
69 autorId = autorId?replace("\n\t\t", "")
70 autorId = autorId?replace("\n\t", "")
71 autorArticleId = ""
72 >
73 </#if>
74
75 <#assign
76 commentsCount = mbMessageLocalService.getDiscussionMessagesCount(entry.getClassName(), entry.getClassPK(), 0)!"0"
77 >
78
79
80
81 <#if autorId != "" && autorId??>
82 <#assign
83 autor = UserLocalService.fetchUser(autorId?number)!""
84 autorArticleId = autor.getExpandoBridge().getAttribute("journal-article")!"0"
85 />
86 <#if autor != "">
87 <#assign autor = autor.getFullName()!"">
88 <#else>
89 <#assign autor = "Anônimo" >
90 </#if>
91 <#else>
92 <#assign autor = "Anônimo" >
93 </#if>
94 <#assign categorias = AssetCategoryLocalService.getCategoryNames(entry.getClassName(), entry.getClassPK())!"" >
95 <#assign urlWC = "">
96
97 <#if autorArticleId != "0" && autorArticleId != "" && autor != "Anônimo">
98 <#assign autorArticle = JournalArticleLocalService.getLatestArticle(themeDisplay.getLayout().getGroupId(), autorArticleId?string) >
99 <#assign urlWC = autorArticle.getUrlTitle()!"">
100 </#if>
101
102
103 <#assign tags = tagsLocalService.getTagNames("com.liferay.journal.model.JournalArticle", journalArticle.getResourcePrimKey()?number )
104 tagName = tags[0]!""
105 orgOrUser = ""
106 >
107
108 <#if tagName?contains("organization") && tagName != "" >
109 <#assign orgOrUser = "org">
110 <#else>
111 <#assign orgOrUser = "user">
112 </#if>
113
114 <#if orgOrUser == "org" >
115
116 <#assign
117 orgId = tagName?keep_after("organization-")
118 organization = OrganizationLocalService.fetchOrganization(orgId?number)!""
119 >
120
121
122 <#if organization != "" && autor != "Anônimo">
123 <#assign orgArticleId = organization.getExpandoBridge().getAttribute("journal-article")
124 orgJournalArticle = JournalArticleLocalService.getArticle(themeDisplay.getLayout().getGroupId(),orgArticleId?c)
125 urlWC = orgJournalArticle.getUrlTitle()!""
126 autor = organization.getName()!""
127 >
128
129 </#if>
130 </#if>
131
132 <#if themeDisplay.isSignedIn() >
133 <#if tagName?contains("organization-")>
134 <#assign userIsAdmin = OrganizationLocalService.hasUserOrganization(themeDisplay.getUserId(), orgId?number)>
135 <#else>
136 <#if autorId?number == themeDisplay.getUserId()>
137 <script>console.log("oi");</script>
138 <#assign userIsAdmin = true>
139 </#if>
140 </#if>
141
142
143 </#if>
144
145
146 <div class="oferta-lista-item">
147 <div class="lista-checkmark">
148 <#if categorias?seq_contains("aprovado") > <i title="Aprovado" style="color: #4ECD66" class="fa-solid fa-circle-check"></i> </#if>
149 <#if categorias?seq_contains("pendente") > <i title="Em análise" style="color: #D90000"class="fa-solid fa-spinner"></i> </#if>
150 <#if categorias?seq_contains("recusado") > <i title="Recusado" style="color: #D90000"class="fa-solid fa-exclamation-circle"></i> </#if>
151 </div>
152
153
154 <div class="lista-titulo">
155 <h5>${entry.getHighlightedTitle()}</h5>
156 </div>
157
158 <div class="lista-arrow">
159 <button style="padding: 0;" class="btn" type="button" data-toggle="collapse" data-target="#collapseID${entry.getClassPK()}" aria-expanded="false" aria-controls="collapseID${entry.getClassPK()}">
160 <i class="fa-solid fa-chevron-down"></i>
161 </button>
162 </div>
163
164 <div class="lista-desc">
165 <p>${desc}</p>
166 </div>
167
168 <div class="lista-collapse collapse" id="collapseID${entry.getClassPK()}">
169 <#if nomeParaContato != "" || telefone != "" || email != "" || imagem?trim !="">
170 <div class="lista-details">
171 <div class="lista-pic">
172 <i class="fa-solid fa-image-slash"></i>
173 <#if imagem?trim !="" >
174 <img class="bioec_oferta_img" src="${imagem}">
175 <#else>
176 <div class="bioec_oferta_img_placeholder">
177 <i class="fa-solid fa-image"></i>
178 sem imagem
179 </div>
180 </#if>
181 </div>
182 <#if nomeParaContato != "" || telefone != "" || email != "" >
183 <div class="lista-contato">
184 <p>Contato</p>
185 <p class="lista-author">${nomeParaContato}</p>
186 <p class="lista-phone">${telefone}</p>
187 <p class="lista-email">${email}</p>
188 </div>
189 </#if>
190 </div>
191 </#if>
192
193 <#if categorias?seq_contains("recusado") >
194 <div style="border-top: 1px solid #E8ECEF; font-weight: bold; padding-top: 24px;">
195 <p>Conteúdo Em Análise Pelo Cetiqt:</p>
196 <p>Conteúdo recusado pelo CETIQT por violar as políticas de privacidade.</p>
197 </div>
198 </#if>
199 <div class="lista-footnote">
200 <div>
201 <span class="lista-date">${journalArticle.getDisplayDate()?string('dd/MM/yyyy')}</span> | <span class="lista-commentNumber">${commentsCount} cometários</span> <span class="barra-pipe"> | </span> <span class="lista-author">Publicado por <a <#if urlWC != ''>href="/w/${urlWC}</#if>">${autor}</a></span>
202 </div>
203 <#if userIsAdmin>
204 <div class="buttonsActions">
205 <div style="cursor: pointer;font-size: 16px;" data-toggle="modal" data-target="#modalOferta${JournalArticleID}">
206 <i class="fa-solid fa-edit"></i>
207 </div>
208 <div style="cursor: pointer;font-size: 16px;" data-toggle="modal" data-target="#modal-oferta-${entry.getClassPK()}">
209 <i class="fa-solid fa-trash-can"></i>
210 </div>
211
212 </div>
213 </#if>
214 </div>
215 </div>
216 </div>
217
218 <#if userIsAdmin>
219 <div style="display: none;" id="modal-oferta-${entry.getClassPK()}" class="modal fade" role="dialog">
220 <div class="modal-dialog modal-lg" role="document">
221 <div class="modal-content">
222 <div class="modal-header" >
223 <h4 class="m-0">Remover Oferta</h4>
224 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
225 <span aria-hidden="true">
226 <i class="fa-solid fa-close"></i>
227 </span>
228 </button>
229 </div>
230 <div class="modal-body">
231 <h5>Você tem certeza que deseja remover essa oferta?</h5>
232 <div>
233 Ao clicar em continuar, a oferta será removida do seu perfil.
234 </div>
235 </div>
236 <div class="modal-footer justify-content-end">
237 <button class="bioec_secondary_button" data-dismiss="modal">CANCELAR</button>
238 <button class="bioec_primary_button" type="button" onclick="excluirOferta(${JournalArticleFrontId}, ${orgId})">CONTINUAR</button>
239 </div>
240 </div>
241 </div>
242 </div>
243
244 <#-- modal edição -->
245
246
247 <div style="display: none;" id="modalOferta${JournalArticleID}" class="modal fade bioec-profile-oferta-modal modalOferta" role="dialog">
248 <div class="modal-dialog modal-lg" role="document">
249 <form id="formularioOferta${JournalArticleID}" class="form-group modal-content formularioOferta">
250 <div id="ofertaModal-l1${JournalArticleID}" class="modal-header ofertaModal-l1">
251 <h5>Adicionar oferta</h5>
252 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
253 <span aria-hidden="true">×</span>
254 </button>
255 </div>
256 <div id="ofertaModal-l2${JournalArticleID}" class="modal-body ofertaModal-l2">
257 <div id="ofertaTitle${JournalArticleID}" class="ofertaTitle">
258 <label class="ReqLabel" for="ofertaInputTitle${JournalArticleID}">Título da oferta</label>
259 <input id="ofertaInputTitle${JournalArticleID}" value="${entry.getHighlightedTitle()}" type="text" placeholder="Inserir um título" required>
260 </div>
261 <div id="ofertaName${JournalArticleID}" class="ofertaName">
262 <label class="" for="ofertaInputName${JournalArticleID}">Nome para contato</label>
263 <input value="${nomeParaContato}" id="ofertaInputName${JournalArticleID}" placeholder="Inserir nome" type="text">
264 </div>
265 <div id="ofertaTelephone${JournalArticleID}" class="ofertaTelephone">
266 <label class="" for="ofertaInputPhone${JournalArticleID}">Telefone para contato</label>
267 <input value="${telefone}" id="ofertaInputPhone${JournalArticleID}" name="ofertaInputPhone" type="text" placeholder ='(__)_____-_____' minlength="14" />
268 </div>
269 <div id="ofertaEmail${JournalArticleID}" class="ofertaEmail">
270 <label class="" for="ofertaInputEmail${JournalArticleID}">E-mail para contato</label>
271 <input value="${email}" id="ofertaInputEmail${JournalArticleID}" placeholder="Inserir e-mail" type="text">
272 </div>
273 <div id="ofertaDesc${JournalArticleID}" class="ofertaDesc">
274 <label class="ReqLabel" for="ofertaInputDesc${JournalArticleID}">Descrição</label>
275 <textarea id="ofertaInputDesc${JournalArticleID}" style="max-width: 100%;font-size: 16px;height: 80px;border: 1px solid #BEBEBE;" required>${desc}</textarea>
276 </div>
277 <div id="ofertaImg${JournalArticleID}" class="ofertaImg">
278 <div style="display: flex; flex-direction: column; gap: 8px">
279 <label>Imagem da oferta (Máx. 10 MB)</label>
280 <label class="btn carregarImagem" id="carregarImagem${JournalArticleID}" for="inputCarregarImagemOferta${JournalArticleID}" style="font-size: 16px; cursor: pointer;">CARREGAR IMAGEM</label>
281 <input class="inputCarregarImagemOferta" id="inputCarregarImagemOferta${JournalArticleID}" type="file" accept="image/*" onchange="encodeOfertaImageAsURL${JournalArticleID}(this)">
282 <input class="d-none" id="inputOfertaBase64${JournalArticleID}" value="${imagem}"/>
283 <div class="imagemCarregadaOferta imagemCarregadaOferta${JournalArticleID} d-md-none d-block" style="background-image: url(${imagem})"></div>
284 <button type="button" id="removerImagemOferta${JournalArticleID}" class="<#if imagem == "" || imagem?? == false> d-none </#if> removerImagemOferta" >
285 <i class="fa fa-trash"></i> Remover imagem
286 </button>
287 </div>
288 <div class="imagemCarregadaOferta imagemCarregadaOferta${JournalArticleID} d-md-block d-none" style="background-image: url(${imagem})"></div>
289 </div>
290 </div>
291 <div class="TextImportant">
292 <p>
293 Importante: O conteúdo enviado passará por um processo interno de aprovação. Só então o conteúdo adicionado aparecerá no portal.
294 </p>
295 </div>
296
297 <div id="ofertaModal-l3${JournalArticleID}" class="modal-footer ofertaModal-l3">
298 <button class="btn button-empty" onclick="" id="ofertas-saveAndClose${JournalArticleID}">SALVAR E FECHAR</button>
299 </div>
300 </form>
301 </div>
302 </div>
303
304 </#if>
305 <#--
306
307
308
309
310 <div style="display: none;" id="modalInfra${JournalArticleID}" class="modal fade bioec-profile-infra-modal" role="dialog">
311 <div class="modal-dialog modal-lg" role="document">
312
313 <form class="form-group modal-content" id="formularioInfraestrutura${JournalArticleID}">
314 <div id="infraModal-l1-${JournalArticleID}" class="modal-header infraModal-l1" >
315 <h5>Adicionar Infraestrutura</h5>
316 <button id="fecharModal${JournalArticleID}" type="button" class="close" data-dismiss="modal" aria-label="Close">
317 <span aria-hidden="true">×</span>
318 </button>
319 </div>
320 <div id="infraModal-l2-${JournalArticleID}" class="modal-body infraModal-l2">
321 <div id="infraName${JournalArticleID}" class="infraName">
322 <label class="ReqLabel" for="inputInfraName${JournalArticleID}">Nome da infraestrutura</label>
323 <input type="text" id="inputInfraName${JournalArticleID}" value="${entry.getHighlightedTitle()}" placeholder="Nome da infraestrutura" required>
324 </div>
325 <div id="infraModel${JournalArticleID}" class="infraModel">
326 <label class="ReqLabel" for="inputInfraModel${JournalArticleID}">Modelo</label>
327 <input type="text" id="inputInfraModel${JournalArticleID}" value="${modelo}" placeholder="Modelo" required>
328 </div>
329 <div id="infraBrand${JournalArticleID}" class="infraBrand">
330 <label class="ReqLabel" for="inputInfraBrand${JournalArticleID}">Marca</label>
331 <input type="text" id="inputInfraBrand${JournalArticleID}" value="${marca}" placeholder="Marca" required>
332 </div>
333
334 <div id="infraImg${JournalArticleID}" class="infraImg">
335 <div style="display: flex; flex-direction: column; gap: 8px">
336 <label>Imagem da infraestrutura (Máx. 10 MB)</label>
337 <label class="bioec_secondary_button" id="carregarImagem${JournalArticleID}" for="inputCarregarImagemInfra${JournalArticleID}" style="font-size: 16px;color: #333244;align-self:start;">
338 CARREGAR IMAGEM
339 </label>
340 <input id="inputCarregarImagemInfra${JournalArticleID}" class="inputCarregarImagemInfra" type="file" accept="image/*" onchange="encodeInfraImageAsURL${JournalArticleID}(this)">
341 <input class="d-none" id="inputInfraBase64${JournalArticleID}" />
342 <div class="imagemCarregadaInfra${JournalArticleID} d-md-none d-block"></div>
343 <button type="button" id="removerImagemInfra${JournalArticleID}" class="d-none removerImagemInfra" >
344 <i class="fa fa-trash"></i> Remover imagem
345 </button>
346 </div>
347 <div class="imagemCarregadaInfra${JournalArticleID} d-md-block d-none"></div>
348 </div>
349
350 <div id="infraFunction${JournalArticleID}" class="infraFunction">
351 <label class="ReqLabel" for="inputInfraFunction${JournalArticleID}">Função</label>
352 <input type="text" id="inputInfraFunction${JournalArticleID}" class="inputInfraFunction" value="${funcao}" placeholder="Função" required>
353 </div>
354 </div>
355 <div class="TextImportant">
356 <p>
357 Importante: O conteúdo enviado passará por um processo interno de aprovação. Só então o conteúdo adicionado aparecerá no portal.
358 </p>
359 </div>
360 <div id="infraModal-l3-${JournalArticleID}" class="modal-footer infraModal-l3">
361 <button class="bioec_secondary_button" id="ofertas-saveAndClose${JournalArticleID}" onclick="">SALVAR E FECHAR</button>
362 </div>
363 </form>
364
365 </div>
366
367
368 -->
369
370
371
372 <script>
373 <#if userIsAdmin>
374 function excluirOferta(wcId, orgId) {
375 Liferay.Util.openToast({message: "Enviando requisição",type: "info",title: ""});
376 fetch(Liferay.ThemeDisplay.getPortalURL() + "/o/oferta/" + wcId, {
377 method: 'DELETE',
378 "headers": {
379 "x-csrf-token": Liferay.authToken,
380 "Content-Type": "application/json"
381 }
382 })
383 .then(res => {
384 if(res.status == 200) {
385 Liferay.Util.openToast({
386 message: "Infraestrutura excluida com sucesso",
387 type: "success",
388 title: "",
389 toastProps: {
390 autoClose: 5000
391 }
392 })
393 setTimeout(function(){ location.reload(); }, 2000)
394 } else {
395 Liferay.Util.openToast({
396 message: "Erro ao excluir infraestrutura",
397 type: "danger",
398 title: "",
399 toastProps: {
400 autoClose: 5000
401 }
402 })
403 }
404 });
405 }
406
407
408
409
410 function validImageSize(base64="") {
411 const decoded = atob(base64.substring(base64.indexOf(',') + 1));
412 const sizeMB = decoded.length / 1e+6;
413 console.log("MB: " + decoded.length / 1e+6);
414 if(sizeMB > 10) {
415 Liferay.Util.openToast({
416 message: "O tamanho da imagem não deve ultrapassar 10 MB.",
417 type: "danger",
418 title: "",
419 toastProps: {
420 autoClose: 5000
421 }
422 })
423 return false
424 }
425 return true
426 }
427
428 function encodeOfertaImageAsURL${JournalArticleID}(element) {
429 let file = element.files[0];
430 let reader = new FileReader();
431 reader.onloadend = () => {
432 if(reader.result) {
433 if(!validImageSize(reader.result)) return;
434 try {
435 const base64_input = document.getElementById("inputOfertaBase64${JournalArticleID}")
436 base64_input.value = reader.result
437 Array.from(document.getElementsByClassName("imagemCarregadaOferta${JournalArticleID}")).forEach( el => el.style.backgroundImage = 'url(' + reader.result + ')' )
438
439 const removeImageButton = document.getElementById("removerImagemOferta${JournalArticleID}")
440 removeImageButton.classList.remove("d-none")
441 } catch (error) {
442 console.error(error)
443 }
444 }
445 }
446 reader.readAsDataURL(file);
447 }
448
449 function removeImageOferta${JournalArticleID}() {
450 try {
451 const file_input = document.getElementById("inputCarregarImagemOferta${JournalArticleID}")
452 Array.from(document.getElementsByClassName("imagemCarregadaOferta${JournalArticleID}")).forEach( el => el.style.backgroundImage = "" )
453 const base64_input = document.getElementById("inputOfertaBase64${JournalArticleID}")
454 file_input.value = null
455 base64_input.value = ""
456
457 const removeImageButton = document.getElementById("removerImagemOferta${JournalArticleID}")
458 removeImageButton.classList.add("d-none")
459 } catch (error) {
460 console.error(error)
461 }
462}
463
464
465
466document.getElementById("removerImagemOferta${JournalArticleID}").addEventListener("click", removeImageOferta${JournalArticleID});
467
468<#-- Rest da edição de organização -->
469
470<#if orgOrUser == "org">
471document.querySelector('#formularioOferta${JournalArticleID}').addEventListener('submit', event => {
472 event.preventDefault();
473 adicionarOferta${JournalArticleID}();
474});
475
476function adicionarOferta${JournalArticleID}() {
477 Liferay.Util.openToast({message: "Enviando requisição",type: "info",title: ""});
478 $("#ofertas-saveAndClose${JournalArticleID}").prop("disabled",true);
479
480
481
482 const ofertaData = {
483 titulo: document.getElementById("ofertaInputTitle${JournalArticleID}").value,
484 nomeContato: document.getElementById("ofertaInputName${JournalArticleID}").value,
485 telefoneContato: document.getElementById("ofertaInputPhone${JournalArticleID}").value,
486 emailContato: document.getElementById("ofertaInputEmail${JournalArticleID}").value,
487 descricao: document.getElementById("ofertaInputDesc${JournalArticleID}").value,
488 imagem: document.getElementById("inputOfertaBase64${JournalArticleID}").value,
489 }
490
491 console.log(ofertaData);
492
493 fetch(Liferay.ThemeDisplay.getPortalURL() + "/o/oferta/${JournalArticleFrontId}", {
494 method: 'PUT',
495 "headers": {
496 "x-csrf-token": Liferay.authToken,
497 "Content-Type": "application/json"
498 },
499 body: JSON.stringify(ofertaData)
500 })
501 .then(res => {
502 if(res.status == 200) {
503 Liferay.Util.openToast({
504 message: "Oferta editada com sucesso. Após a submissão, será iniciado o processo interno de aprovação do conteúdo enviado. Só então o conteúdo submetido aparecerá no portal.",
505 type: "success",
506 title: "",
507 toastProps: {
508 autoClose: 5000
509 }
510 })
511 setTimeout(function(){ location.reload(); }, 2000);
512 } else {
513 $("#ofertas-saveAndClose${JournalArticleID}").prop("disabled",false);
514 Liferay.Util.openToast({
515 message: "Erro ao editar oferta",
516 type: "danger",
517 title: "",
518 toastProps: {
519 autoClose: 5000
520 }
521 })
522 }
523 })
524 }
525</#if>
526
527<#-- Rest da edição de pessoa fisica -->
528
529
530
531 <#if orgOrUser == "user">
532
533 document.querySelector('#formularioOferta${JournalArticleID}').addEventListener('submit', event => {
534 event.preventDefault();
535 adicionarOferta${JournalArticleID}();
536 });
537
538 function adicionarOferta${JournalArticleID}() {
539 Liferay.Util.openToast({message: "Enviando requisição",type: "info",title: ""});
540 $("#ofertas-saveAndClose${JournalArticleID}").prop("disabled",true);
541
542 const ofertaData = {
543 titulo: document.getElementById("ofertaInputTitle${JournalArticleID}").value,
544 nomeContato: document.getElementById("ofertaInputName${JournalArticleID}").value,
545 telefoneContato: document.getElementById("ofertaInputPhone${JournalArticleID}").value,
546 emailContato: document.getElementById("ofertaInputEmail${JournalArticleID}").value,
547 descricao: document.getElementById("ofertaInputDesc${JournalArticleID}").value,
548 imagem: document.getElementById("inputOfertaBase64${JournalArticleID}").value,
549 }
550
551 console.log(ofertaData);
552
553 fetch(Liferay.ThemeDisplay.getPortalURL() + "/o/oferta/${JournalArticleFrontId}", {
554 method: 'PUT',
555 "headers": {
556 "x-csrf-token": Liferay.authToken,
557 "Content-Type": "application/json"
558 },
559 body: JSON.stringify(ofertaData)
560 })
561 .then( res => {
562 if(res.status == 200) {
563 Liferay.Util.openToast({
564 message: "Oferta editada com sucesso. Após a submissão, será iniciado o processo interno de aprovação do conteúdo enviado. Só então o conteúdo submetido aparecerá no portal.",
565 type: "success",
566 title: "",
567 toastProps: {
568 autoClose: 5000
569 }
570 })
571 setTimeout(function(){ location.reload(); }, 2000);
572 } else {
573 $("#ofertas-saveAndClose${JournalArticleID}").prop("disabled",false);
574 Liferay.Util.openToast({
575 message: "Erro ao editar Oferta",
576 type: "danger",
577 title: "",
578 toastProps: {
579 autoClose: 5000
580 }
581 })
582 }
583 });
584
585 };
586
587
588 </#if>
589
590
591 </#if>
592 </script>
593
594
595
596
597 </#list>
598 </#if>
599 </div>
600</div>
601
602<style>
603.bioec_oferta_img {
604 overflow: hidden;
605 background-size: contain;
606 background-position: center;
607 background-repeat: no-repeat;
608}
609
610.bioec_oferta_img_placeholder {
611 width: 140px;
612 height: 140px;
613 background-color: #E8ECEF;
614 display: flex;
615 flex-direction: column;
616 align-items: center;
617 justify-content: center;
618 font-size: 14px;
619 color: #5B5C61;
620}
621
622.bioec_oferta_img_placeholder i {
623 font-size: 44px;
624}
625
626
627.pagination-items-per-page.active > a,
628.pagination-items-per-page.active > button,
629.pagination-items-per-page.show > a,
630.pagination-items-per-page.show > button,
631.page-item.active .page-link,
632.page-item.show .page-link{
633 border-color: #4ECD66;
634 background-color: #4ECD66;
635}
636
637.pagination-results,
638.pagination-items-per-page > a,
639.pagination-items-per-page > button,
640.pagination-items-per-page > a:hover,
641.pagination-items-per-page > button:hover,
642.page-link{
643 color: #4ebe66;
644}
645
646.bioec-profile-oferta-main{
647 display: flex;
648 gap: 40px;
649 flex-direction: column;
650 padding-bottom: 20px;
651}
652.bioec-profile-oferta-main h5{
653 font-weight: 700;
654}
655.bioec-profile-oferta-main h5, .bioec-profile-oferta-main p{
656 color: #5B5C61;
657 margin-bottom: 0px;
658 font-size: 16px;
659
660}
661
662.bioec-profile-oferta-main #oferta-lista-container>div{
663 border: 1px #BEBEBE solid;
664 padding: 24px 24px 0 24px;
665 margin-bottom: 40px;
666 display: grid;
667 grid-row-gap: 24px;
668 grid-template-columns: 24px 12px 1fr 15px;
669 grid-template-areas:
670 "ck . tit arrw"
671 "desc desc desc desc"
672 "clps clps clps clps";
673}
674
675.bioec-profile-oferta-main .lista-checkmark { grid-area: ck; display: flex; }
676.bioec-profile-oferta-main .lista-checkmark i { font-size: 24px; }
677.bioec-profile-oferta-main .lista-pic { grid-area: pic; display: flex; justify-content: center;}
678.bioec-profile-oferta-main .lista-arrow { grid-area: arrw; }
679
680.bioec-profile-oferta-main .lista-titulo {
681 grid-area: tit;
682 display: flex;
683 flex-direction: column;
684 justify-content: center;
685
686}
687
688.bioec-profile-oferta-main .lista-titulo h5{
689 margin-bottom: 0px;
690}
691
692.bioec-profile-oferta-main .lista-desc {
693grid-area: desc;
694}
695
696.bioec-profile-oferta-main .lista-desc p{
697 margin: 0;
698}
699
700.bioec-profile-oferta-main a{
701 color: #5B5C61;
702}
703
704.oferta-port{
705 border: 1px #BEBEBE solid;
706 padding: 24px;
707 display: flex;
708 flex-direction: column;
709 align-items: center;
710 gap: 24px;
711}
712
713.oferta-port p{
714text-align: center;
715
716}
717
718.oferta-port div{
719display: flex;
720 justify-content: space-between;
721 width: min(558px, 100%);
722}
723
724.button-empty {
725border: solid 1px #4ECD66;
726padding: 8px 24px;
727color: #333244;
728 transition: 250ms;
729}
730
731.button-empty:hover{
732 background-color: #4ECD66;
733}
734
735.button-filled {
736background-color: #4ECD66;
737border: solid 1px #4ECD66;
738padding: 8px 24px;
739color: #333244;
740transition: 250ms;
741
742}
743
744.button-filled:hover{
745 background-color: transparent;
746}
747
748.bioec-profile-oferta-main .lista-footnote {
749
750 display: flex;
751 justify-content: space-between;
752 border-top: 1px solid #E8ECEF;
753 padding-top: 12px;
754 font-size: 14px;
755 font-weight: 300;
756 gap: 15px;
757 color: #5B5C61;
758
759}
760.lista-collapse{
761display: flex;
762flex-direction: column;
763gap: 24px;
764grid-area: clps;
765padding-bottom: 24px;
766}
767
768 .lista-details{
769 display: flex;
770 justify-content: flex-start;
771 gap: 24px;
772}
773.lista-pic img {
774 max-height: 138px;
775 max-width: 138px;
776}
777
778.bioec-profile-oferta-main p{
779
780}
781
782.imagemCarregadaOferta {
783 height: 100px;
784 width: 100px;
785 background-size: contain;
786 background-position: center;
787 background-repeat: no-repeat;
788}
789
790
791.ButtonAddOferta {
792 background: #4ECD66;
793 border-radius: 8px;
794 padding: 8px 24px;
795 border: none;
796 font-weight: 700;
797 color: #333244;
798 font-family: 'Roboto';
799 float: right;
800 text-transform: uppercase;
801}
802.ButtonAddOferta:hover{
803 color: #333244;
804 text-decoration: none;
805}
806
807.bioec-profile-oferta-modal label {
808 margin: 0;
809 cursor: default;
810 font-size: 20px;
811 font-weight: 700;
812 color: #5B5C61;
813}
814
815.bioec-profile-oferta-modal div {
816 width: 100%;
817}
818
819#ofertaModal-l1, .ofertaModal-l1 {
820 padding: 18px 24px;
821 display: flex;
822 justify-content: space-between;
823}
824
825#ofertaModal-l1 img, .ofertaModal-l1 img {
826 cursor: pointer;
827}
828
829#ofertaModal-l1 h5, .ofertaModal-l1 h5 {
830 margin: 0;
831 font-size: 20px;
832 font-weight: 700;
833 color: #5B5C61;
834}
835
836#ofertaModal-l2, .ofertaModal-l2 {
837 border-top: 1px solid #E8ECEF;
838 display: grid;
839 grid-template-columns: 1fr 1fr;
840 grid-template-areas:
841 "titu nome"
842 "fone mail"
843 "desc desc"
844 "imagem ."
845 ;
846 column-gap: 24px;
847 row-gap: 40px;
848 padding: 24px;
849}
850
851#ofertaModal-l2>div, .ofertaModal-l2>div {
852 display: flex;
853 flex-direction: column;
854 gap: 8px;
855}
856
857#ofertaTitle, .ofertaTitle {
858 grid-area: titu;
859}
860
861#ofertaName, .ofertaName {
862 grid-area: nome;
863}
864
865#ofertaTelephone, .ofertaTelephone {
866 grid-area: fone;
867}
868
869#ofertaEmail, .ofertaEmail {
870 grid-area: mail;
871}
872
873#ofertaBrand, .ofertaBrand {
874 grid-area: marca;
875}
876
877#ofertaModal-l2>#ofertaImg, .ofertaModal-l2>.ofertaImg {
878 grid-area: imagem;
879 display: flex;
880 flex-direction: column;
881}
882
883#ofertaDesc, .ofertaDesc {
884 grid-area: desc;
885
886}
887
888#ofertaDesc input, .ofertaDesc input {
889 height: 80px;
890}
891
892.TextImportant{
893 border-bottom: 1px solid #E8ECEF;
894 padding: 24px;
895 color: #5B5C61;
896}
897
898.bioec-profile-oferta-modal input[type="text"] {
899 border-top: none;
900 border-left: none;
901 border-right: none;
902 border-bottom: 1px solid #BEBEBE;
903 width: 100%;
904 font-size: 16px;
905
906}
907
908
909.bioec-profile-oferta-modal input[type="text"]:focus-visible {
910 outline: none;
911 border-bottom: 1px solid black;
912
913}
914
915.bioec-profile-oferta-modal .ReqLabel:before {
916 content: "* ";
917 color: #D90000;
918
919}
920
921#inputCarregarImagemOferta, .inputCarregarImagemOferta {
922 display: none;
923}
924
925#carregarImagem, .carregarImagem {
926 padding: 8px 24px;
927 border: 1px solid #4ECD66;
928 width: fit-content;
929 transition: 250ms;
930
931}
932
933#carregarImagem:hover, .carregarImagem:hover {
934 background-color: #4ECD66;
935}
936
937.button-empty {
938 border: solid 1px #4ECD66;
939 padding: 8px 24px;
940 color: #333244;
941 transition: 250ms;
942 font-weight: bold;
943}
944
945.button-empty:hover {
946 background-color: #4ECD66;
947}
948
949.button-filled {
950 background-color: #4ECD66;
951 border: solid 1px #4ECD66;
952 padding: 8px 24px;
953 color: #333244;
954 transition: 250ms;
955 font-weight: bold;
956}
957
958.button-filled:hover {
959 background-color: transparent;
960}
961
962#ofertaModal-l3, .ofertaModal-l3 {
963 gap: 24px;
964 display: flex;
965 justify-content: flex-end;
966 padding: 24px;
967}
968
969.modal {
970 padding: initial !important;
971 border-radius: 4px !important;
972
973}
974
975.modal a.close-modal {
976 display: none;
977}
978
979#removerImagemOferta, .removerImagemOferta {
980 background: none;
981 border: none;
982 outline: none;
983 color: #5B5C61;
984 font-size: 16px;
985 font-weight: 900;
986 line-height: 24px;
987 letter-spacing: 0em;
988 width: fit-content;
989 margin-left: 16px;
990}
991
992
993@media(max-width: 964px){
994 .lista-pic img {
995 width: 100%;
996 max-height: unset;
997 max-width: unset;
998
999 }
1000}
1001
1002@media (max-width: 550px) {
1003 #ofertaModal-l2, .ofertaModal-l2 {
1004 display: flex;
1005 flex-direction: column;
1006 }
1007
1008 #ofertaModal-l3, .ofertaModal-l3 {
1009 display: flex;
1010 flex-direction: column;
1011 }
1012}
1013
1014@media(max-width: 450px){
1015 .bioec-profile-oferta-main .lista-details{
1016 flex-direction: column;
1017 }
1018
1019 .lista-contato{
1020 text-align: center;
1021 }
1022
1023 .bioec-profile-oferta-main .lista-footnote{
1024 flex-direction: column;
1025 gap: 10px;
1026 align-items: flex-end;
1027 text-align: right;
1028 }
1029}
1030
1031@media(max-width: 992px){
1032 #oferta-lista-container {
1033 padding-inline: 15px;
1034 }
1035}
1036
1037.bioec-profile-oferta-main .lista-footnote .buttonsActions {
1038 display: flex;
1039 gap: 17px;
1040}
1041
1042@media (max-width: 768px) {
1043 .bioec-profile-oferta-main .lista-desc {
1044 gap: 24px;
1045 flex-direction: column-reverse;
1046 }
1047 .bioec-profile-oferta-main .lista-footnote {
1048 flex-direction: column;
1049 align-items: center;
1050 }
1051 .bioec-profile-oferta-main .lista-footnote > div {
1052 text-align: center;
1053 }
1054
1055 .bioec-profile-oferta-main .lista-footnote .barra-pipe {
1056 display: none;
1057 }
1058 .bioec-profile-oferta-main .lista-footnote .lista-author {
1059 display: flex;
1060 gap: 4px;
1061 justify-content: center;
1062 }
1063 .bioec-profile-oferta-main .lista-footnote .buttonsActions {
1064 width: 100%;
1065 justify-content: space-between;
1066 }
1067}
1068
1069
1070</style>
1071
1072
1073<script>
1074
1075
1076
1077</script>
Notícia
Respeito ao ser humano e à natureza atrai marca de calçados para o Brasil
A Vert, que hoje produz 4 milhões de calçados por ano, foi atraída para o Brasil pela legislação trabalhista e hoje emprega famílias envolvidas nas associações e cooperativas para o fornecimento de borracha da Amazônia, algodão do Nordeste e couro do Sul do país.
Para saber mais, clique aqui.
Notícia
BNDES adota medidas para conter desmatamento na Amazônia
O BNDES bloqueou o financiamento de quase 60 proprietários rurais envolvidos em atividades irregulares como forma de combater o desmatamento na Amazônia.
Clique aqui para ler mais detalhes da notícia.
Notícia
Embrapii e Página 22 irão realizar webinar sobre valor da inovação para o desenvolvimento das Amazônias
No dia 24 de abril, às 10h (horário de Brasília), ocorrerá um webinar sobre "O valor da inovação para o desenvolvimento das Amazônias". O evento, que será organizado pela Embrapii e pela Revista Página 22, será o primeiro de uma série.
Clique aqui para assistir.
Notícia
Sete agendas para garantir o desenvolvimento econômico sustentável do Brasil
Artigo lista sete agendas prioritárias para colocar o Brasil na direção certa e em posição de liderança na corrida climática global.
Clique aqui para ler a notícia completa.
Notícia
Governo realiza consulta pública sobre lançamento do Programa de Bioeconomia e Desenvolvimento Regional
Com o objetivo de promover diálogo com a população sobre a implementação do Programa de Bioeocnomia e Desenvolvimento Regional, o Ministério da Integração e do Desenvolvimento Regional lançou uma consulta pública sobre o tema.
Para saber mais, clique aqui.
Notícia
Webinário sobre política nacional de plantas medicinais e fitoterápicos revisitada
O CIBS de Farmanguinhos/Fiocruz, através da Rede de Inovação em Medicamentos da Biodiversidade, e em parceria com a Abifina e a Abiquifi, estão organizando um webinário sobre a formulação, diretrizes e gestão da Política Nacional de Plantas Medicinais e Fitoterápicos. O evento ocorrerá de maneira remota nos dias 29, 30 e 31 de maio.
Clique aqui para saber mais e realizar sua inscrição.
Notícia
Café com Bioeconomia #27: Bioeconomia no setor de cosméticos: oportunidades e desafios
A edição do dia 12 de abril de 2023 do Café com Bioeconomia reuniu Daniela Valverde (Cientista Sênior do Grupo Boticário), Danniel Pinheiro (CEO da Biozer da Amazônia e Cofundador da Simbioze Amazônica), Fabio Brasiliano (Diretor de Meio Ambiente para a Bioeconomia e Clima da ABIHPEC) e Larissa Zonta (Especialista em Pesquisa e Inteligência de Produtos da Boticário). O encontro, que acontece quinzenalmente, foi mediado por Débora Way (Pesquisadora do Instituto SENAI de Inovação em Biossintéticos e Fibras do SENAI CETIQT).
A indústria de cosméticos tem se mostrado uma das mais dinâmicas no desenvolvimento de inovações voltadas a promover diversos aspectos da sustentabilidade. Dessa maneira, Débora destacou que esse dinamismo é impulsionado pela mudança de comportamento do consumidor, que atualmente possui maior engajamento ambiental e social, e clama por produtos naturais, orgânicos, veganos, sem testes em animais, menos agressivos ao meio ambiente, entre outros aspectos. Nesse sentido, alguns aspectos relacionados ao desenvolvimento de novos ingredientes provenientes da biodiversidade brasileira ou da biotecnologia foram abordados com os participantes.
Daniela comentou que é necessário estar atento ao que é seguro para o consumidor e citou, ao longo de sua fala, que alguns silicones foram eliminados dos produtos enxaguáveis do Grupo Boticário. Além disso, já trabalham para que nenhum produto não enxaguável seja produzido após 2023 com este itens. Daniela também mencionou que o grupo tem como estratégia ESG 16 compromissos para o futuro e destacou que o primeiro deles é mapear e solucionar 150% de todo o resíduo sólido gerado pela cadeia de valor da empresa, o que é muito significativo.
Larissa complementou dizendo que a biotecnologia tem muita conexão com sustentabilidade, o que está no DNA do Grupo e exemplificou um projeto de pesquisa para desenvolver fontes de cores (pigmentos e corantes) para produtos cosméticos a partir de processos biotecnológicos. Ressaltou também que o Grupo Boticário olha muito para a inovação aberta para acelerar e estar sempre à frente no desenvolvimento, pois acredita que é importante somar esforços com quem tem o mesmo compromisso, o mesmo desejo.
Danniel falou sobre a dificuldade de chegar no sensorial ideal e destacou que o fornecimento dos ingredientes renováveis ainda é, muitas vezes, pouco estabelecido. Segundo ele, a cadeia produtiva na Amazônia ainda não está estruturada, o que foi prontamente identificado pela Biozer. Dessa maneira, a start-up trabalha diretamente junto às comunidades, eliminando a figura do atravessador, para garantir a rastreabilidade dos seus produtos. Danniel ressaltou também a importância de manter o valor agregado na região por meio do desenvolvimento das cadeias locais. O reaproveitamento de materiais residuais também é foco da Biozer.
Fábio falou sobre a importância dos cosméticos no nosso dia a dia e comentou que os aspectos regulatórios são ainda um desafio. Destacou também que o Brasil é pioneiro em legislação de acesso a patrimônio genético e conhecimento tradicional associado. Segundo ele, a terceirização de etapas do processo produtivo é uma estratégia que empresas de menor porte encontram para operacionalizar sua produção quando não tem, por exemplo, uma área de biotecnologia interna.
O Café com Bioeconomia é um evento quinzenal, on-line e interativo, no qual palestrantes e público discutem temas relevantes para a área. Quer receber nossa agenda e participar? Inscreva-se em: https://portaldebioeconomia.com/
Quer ouvir este e outros Cafés? Estamos no Spotify em Café com Bioeconomia.
Notícia
Climatologista da USP fala sobre o desmatamento da Amazônia
O climatologista Carlos Nobre acredita que a Amazônia ainda não atingiu o "ponto de não retorno" em termos de desmatamento, o que contraria a afirmação de muitos outros cientistas.
Clique aqui para ler o conteúdo na íntegra.
Notícia
Café com Bioeconomia #29: Energia versus Bioenergia
A edição do dia 10 de maio de 2023 do Café com Bioeconomia reuniu Fábio Teixeira (Pesquisador do laboratório Cenergia), José Vitor Bomtempo (Coordenador do GEBio da Escola de Química da UFRJ) e Mateus Lopes (Diretor global de transição energética e investimentos da Raízen). O encontro, que acontece quinzenalmente, foi mediado por Paulo Coutinho (Pesquisador-chefe do Instituto SENAI de Inovação em Biossintéticos e Fibras do SENAI CETIQT).
A dinâmica desse evento se diferenciou por almejar a discussão acerca de um artigo publicado na revista MIT Sloan Management Review Brasil: https://www.mitsloanreview.com.br/post/como-os-paises-tropicais-podem-acelerar-seu-protagonismo-na-economia-net. Por esta razão, Fabio deu início ao evento com uma breve apresentação do documento, que descreve como sistemas integrados de produção de alimento e bioenergia podem acelerar a transição para economia net zero. Um dos grandes resultados do trabalho foi demonstrar que a indústria sucroenergética pode ser 10 vezes mais eficiente que a geração de energia fotovoltaica em termos de descarbonização.
Paulo então ressaltou que os sistemas integrados de produção acabam com a dicotomia energia versus alimento. No entanto, destacou a falta de indicadores para comparação com outros tipos de geração de energia. Paulo indagou também a priorização do tema de estocagem de CO2 em detrimento do seu uso para produção de outros produtos. Ademais, salientou que os sistemas integrados consistem em monoculturas e questionou como elas afetariam a biodiversidade.
Fábio discursou sobre economicidade associada à preocupação social e indicou que a produção de biocombustíveis no Brasil gera muitos empregos. Com relação ao questionamento de Paulo sobre monoculturas, Fabio explicou que a produção de proteínas alternativas poderia liberar terras antes ocupadas com pasto e que essas terras poderiam ser usadas para manutenção da biodiversidade.
Mateus cita que o documento chama as biorrefinarias de 2050 de sistemas integrados devido à inclusão da segurança alimentar em sua definição, algo que não era abordado no surgimento do conceito em torno de 2010. Ele concordou com Paulo acerca da utilização do CO2 para a geração de outros produtos, mas ressaltou o grande volume de gás produzido e o atraso em atingir as metas de descarbonização, tornando a estocagem um ponto de grande relevância para a retirada do CO2 da atmosfera.
José Vitor pontuou as características relevantes dos sistemas integrados, como a circularidade, a integração da bioeconomia, a produção de novos produtos, bem como a identificação de novas funções para produtos antigos e a necessidade de P&D, investimento e políticas contínuas. Também foi destacado que o processo vai de encontro à novas formas de integração industrial. José Vitor finalizou destacando oportunidades envolvendo outras culturas, como milho e soja, bem como o uso de florestas.
O Café com Bioeconomia é um evento quinzenal, on-line e interativo, no qual palestrantes e público discutem temas relevantes para a área. Quer receber nossa agenda e participar? Inscreva-se em: https://portaldebioeconomia.com/
Quer ouvir este e outros Cafés? Estamos no Spotify em Café com Bioeconomia.
Notícia
Lançamento de edital Sinapse Bio para apoiar ideias inovadoras na Amazônia
Será lançado hoje, 19/05/2023, um edital para apoiar até 70 ideias inovadoras na Amazônia. Serão disponibilizados até R$ 4,9 milhões.
Clique aqui para saber mais.
Notícia
Café com Bioeconomia #30: Um olhar sobre a produção de moléculas na bioeconomia
A edição do dia 24 de maio de 2023 do Café com Bioeconomia reuniu Daniela Trivella (Coordenadora da plataforma de Descoberta de Fármacos do LNBio, do CNPEM), Lígia Macedo (Pró-reitora de pesquisa e pós-graduação da UFMS e Coordenadora geral do Agrotec) e Lucio Freitas Junior (Gerente de projetos da CEINFAR, da USP). O encontro, que acontece quinzenalmente, foi mediado por Reinaldo Lucena (Diretor da Agrotec – Bioeconomia no Agronegócio).
Reinaldo questionou os participantes sobre o cenário atual e sobre as perspectivas de uso da biodiversidade na descoberta de novos fármacos. Além disso, ao abordar os bancos de moléculas, destacou que a maior biblioteca que temos atualmente, a de conhecimento tradicional dos povos originários, ainda é muito pouco explorada. Reinaldo abordou ainda a importância da criação da Rede MCTI/Embrapii de Bioeconomia e indicou a necessidade de se formar profissionais voltados à indústria para que haja futuramente maior estímulo à criação e manutenção de centros de PD&I dentro das empresas.
Daniela ressaltou que a biodiversidade e a quimiodiversidade são peças-chave para a descoberta de novos fármacos, mas que o Brasil ainda não é suficientemente ativo nesse aspecto. Somente nos últimos 10 anos o país começou a investir mais expressivamente em inovação radical na área. Segundo ela, a Embrapii é um dos principais motivos para esse desenvolvimento já que, antes, os financiamentos disponíveis não eram compatíveis com os prazos e investimentos requeridos para as pesquisas farmacêuticas. Daniela destacou ainda a importância de elaborar bibliotecas formatadas e padronizadas para atrair ainda mais empresas para os centros de P&D.
Lígia comentou sobre a dificuldade de levar os produtos ao mercado e sobre a necessidade de sair do ostracismo. Para ela, os grandes centros de pesquisa precisam mostrar que possuem a capacidade para resolver os problemas da indústria e, com isso, expandir desenvolvimentos para além do laboratório. Lígia destacou ainda a criação de uma biblioteca de peptídeos, os quais são quase completamente advindos da biodiversidade.
Lucio informou que a indústria farmacêutica sempre explorou mais a química sintética, deixando a biodiversidade em segundo plano devido à maior complexidade. No entanto, isso começou a mudar nos últimos anos. Nesse sentido, Lucio discursou sobre a importância da Rede MCTI/Embrapii de Bioeconomia na criação de novas oportunidades. Ele destacou também que, no Brasil, o conhecimento é gerado para a publicação de artigos, o que precisa ser mudado, para avançarmos no desenvolvimento de novos fármacos.
O Café com Bioeconomia é um evento quinzenal, on-line e interativo, no qual palestrantes e público discutem temas relevantes para a área. Quer receber nossa agenda e participar? Inscreva-se em: https://portaldebioeconomia.com/
Quer ouvir este e outros Cafés? Estamos no Spotify em Café com Bioeconomia.
Notícia
ABIHPEC organiza webinar sobre bioeconomia no setor de HPPC
A ABIHPEC irá promover um webinar no dia 20 de junho de 2023 sobre oportunidades e desafios da bioeconomia no setor de HPPC.
Para se inscrever, clique aqui.
Notícia
Café com Bioeconomia #31: Oportunidades e desafios da bioeconomia na indústria farmacêutica
A edição do dia 7 de junho de 2023 do Café com Bioeconomia reuniu Cristina Ropke (Diretora de inovação da Centroflora), Julino Rodrigues (Consultor de inteligência de mercado da ABIQUIFI) e Mário Frota Júnior (Sócio-fundador e diretor-presidente da Regenera Moléculas do Mar). O encontro, que acontece quinzenalmente, foi mediado por Eamim Squizani (Pesquisadora do Instituto SENAI de Inovação em Biossintéticos e Fibras do SENAI CETIQT).
Eamim solicitou aos participantes que tecessem comentários sobre a percepção de cada um acerca do investimento em P&D pela indústria farmacêutica nos últimos anos. Ela ressaltou a necessidade de inovar de maneira contínua, especialmente hoje no contexto em que os produtos não costumam ficar no auge por muito tempo. As oportunidades de fomento e o engajamento do setor industrial foram pontos recorrentes ao longo da discussão.
Cristina observou que nos últimos 3 anos houve mudança significativa no setor farmacêutico, pois as empresas estão investindo mais nos projetos de maior risco. Ela acredita que isso possa ser devido às oportunidades de fomento, que evoluíram e atualmente auxiliam nas parcerias para inovação, mas também porque há perspectiva de que os medicamentos genéricos deixem de ser tão interessantes no futuro. Cristina também comentou sobre a importância da legislação de acesso a patrimônio genético e sua missão de encontrar modelos econômicos maduros que beneficiem a todos.
Julino frisou que as ações de engajamento das empresas precisam ser contínuas e que é necessário agir com responsabilidade, pois tudo deixa marcas que irão refletir nas comunidades e nas políticas públicas. Ele também comentou que há muitas políticas que não olham para toda a cadeia e acabam por não conectar todas as etapas. Para resolver essa questão ele sugeriu conversas com as empresas e associações. Julino explicou ainda que considera importante que haja regulações mais ajustadas às empresas que investem em bioeconomia, de maneira que a discussão precisa ser levada ao governo.
Mário comentou sobre a grande cobrança para que os projetos deem resultados rápido e sobre o momento em que percebeu que a Regenera não poderia ser somente focada em fármacos devido à complexidade e morosidade dos desenvolvimentos. Nesse sentido, completou dizendo que o Brasil precisa melhorar o arcabouço regulatório e tributário de maneira a beneficiar quem está trabalhando com bioeconomia. Para ele, a inovação é na maioria das vezes incremental e não disruptiva, pois os empresários não querem comprar o risco. No entanto, assim como Cristina, Mário também percebeu movimento de aumento nos investimentos. Ele acredita que a edição gênica irá despontar como tendência para geração de moléculas e para o setor agro.
O Café com Bioeconomia é um evento quinzenal, on-line e interativo, no qual palestrantes e público discutem temas relevantes para a área. Quer receber nossa agenda e participar? Inscreva-se em: https://portaldebioeconomia.com/
Quer ouvir este e outros Cafés? Estamos no Spotify em Café com Bioeconomia.
Notícia
Hidrogênio verde pode ser segredo para zerar emissões na siderugia
A substituição do carvão pelo hidrogênio verde pode fazer com que a indústria de aço cumpra com as metas globais de emissões de gases até 2040.
Clique aqui para ler a notícia completa.
Notícia
Roadmap de créditos de biodiversidade é lançado para mobilizar financiamento global da natureza
Secretário de Meio Ambiente e Ministro de Estado francês lançaram em junho de 2023 um roadmap com objetivo de mobilizar o financiamento global da recuperação da natureza.
Clique aqui para mais informações.
Notícia
Evento discute propostas para superar desafios acerca do desenvolvimento sustentável da Amazõnia
Especialistas discutiram desenvolvimento sustentável da Amazônia em evento que está disponível no Youtube.
Para assistir, clique aqui.
Notícia
Beneficiamento do latex toma novos rumos nas mãos de mulheres no Pará
Comunidade ribeirinha no Pará deixa de ser fornecedora de látex e passa a beneficiar o material, produzindo bolsas e roupas com couro ecológico além de biojóias. A máquina que automatizou o beneficiamento vem trazendo muitos beneficios à localidade.
Clique aqui para ler a notícia completa.
Notícia
Café com Bioeconomia #32: O cooperativismo na construção da bioeconomia dos biomas
A edição do dia 21 de junho de 2023 do Café com Bioeconomia reuniu Eduardo Rocha (Consultor, facilitador e Gerente de Engajamento da Plataforma PPA), Marcelo Fukunaga (Diretor executivo da Coopafasb) e Valdivino Araújo (Sócio-fundador da Coopes). O encontro, que acontece quinzenalmente, foi mediado por José Vitor Bomtempo (Coordenador do GEBio da Escola de Química da UFRJ).
José Vitor iniciou relembrando uma série de seis episódios do Café com Bioeconomia sobre os diferentes biomas brasileiros e destacando que no Café de cooperativas o olhar seria inter-biomas. Ao longo do evento os participantes foram questionados sobre os desafios para o desenvolvimento das cadeias representadas por cada um e provocados a refletir sobre como seria a atuação de suas respectivas instituições se estivessem inseridas em outros biomas. A presença de mulheres e jovens nas cooperativas também foi tema da discussão.
Eduardo apontou que na Amazônia há muitas questões estruturantes como fatores limitantes, seja na questão logística, de acesso ou comunicação. Então, segundo ele, torna-se muito importante produzir as coisas localmente e fortalecer quem está na base por meio do ato cooperativo. Para Eduardo, as mulheres na Amazônia são as grandes responsáveis pela detenção e transmissão do conhecimento local, além de estarem envolvidas na etapa de produção e em outros processos essenciais. Sobre a permanência do jovem nas comunidades, ele destacou que a PPA procura fortalecer modelos de governança participativos em que estejam presentes mulheres, idosos e jovens.
Marcelo explicou que a Mata Atlântica é muito rica em frutas nativas nutritivas pouco conhecidas. Um exemplo é o fruto da juçara, que no estado de São Paulo quase foi extinto por causa da extração do palmito. A Coopafasb realizou trabalho de criação de cadeia de valor do fruto preservando o meio ambiente e empregando o sistema de cooperação. Marcelo comentou que no âmbito da pesquisa, especialmente falando de agroecologia, faltam estudos, e que na extensão rural faltam políticas públicas para auxiliar no desenvolvimento, embora perceba que com boa articulação e atuação em rede, essas políticas começam a ser construídas.
Valdivino, que representou a Caatinga com a Coopes, e tem como carro-chefe o licuri, indicou que pouco mais de 80% da organização é composta por mulheres, inclusive em cargo de diretoria. Além disso, esclareceu que desde o início da cooperativa a presença de parceiros estratégicos foi o que viabilizou o desenvolvimento da cadeia, até mesmo colocando o licuri no ramo farmacêutico. Ele destacou também, que independente do bioma, realizar o desenvolvimento econômico garantindo a preservação da espécie e da cultura do povo, e inserindo as famílias de baixa renda das comunidades tradicionais é sempre um desafio. Valdivino finalizou salientando que as trocas de experiências e parcerias são muito enriquecedoras e estimulando os participantes a fazerem intercâmbio para conhecerem as realidades de outras cooperativas.
O Café com Bioeconomia é um evento quinzenal, on-line e interativo, no qual palestrantes e público discutem temas relevantes para a área. Quer receber nossa agenda e participar? Inscreva-se em: https://portaldebioeconomia.com/
Quer ouvir este e outros Cafés? Estamos no Spotify em Café com Bioeconomia.
Notícia
Café com Bioeconomia #33: Oportunidades e desafios da bioeconomia na indústria de embalagens
A edição do dia 5 de julho de 2023 do Café com Bioeconomia reuniu André Badaró (Gerente de desenvolvimento de mercado da Klabin), José Alexandre Simão (Pesquisador líder de projetos de inovação da UNIPAC) e Stelvio Mazza (CEO da Já Fui Mandioca!). O encontro, que acontece quinzenalmente, foi mediado por Manoel Lisboa Neto (Diretor da Plasticxperience).
Manoel abordou a competitividade brasileira em relação a outros países, além dos principais trade-offs entre uso de materiais biodegradáveis e renováveis e a disponibilidade de recursos naturais para a produção de embalagens em grande escala. Ele lembrou ainda que, há cerca de 20 anos, o Brasil não tinha agenda de sustentabilidade tão forte e indagou se o cenário atual possui a capacidade de fomentar a bioeconomia.
Para André, o que impulsiona a bioeconomia é o mercado e, nesse sentido, é necessário haver mais conscientização da população para que os valores dos produtos, que muitas vezes não são competitivos com os de origem fóssil, possuam maior aceitação. Para ele, é papel da indústria otimizar os processos para melhorar desempenho e reduzir custos, mas o governo pode auxiliar na sensibilização da população quanto aos impactos ambientais daquilo que consome. André comentou também que a Klabin vem estudando o uso de nanotecnologia para aprimorar propriedades de barreira do papel.
José Alexandre acredita ser necessário migrar do modelo de economia linear para circular. Ele destacou a grande complexidade social existente no Brasil, que configura um obstáculo para impulsionar o mercado, e citou o uso de ferramentas de análise de ciclo de vida como indicador do desempenho ambiental dos produtos. José falou ainda sobre como o conceito de biorrefinarias chegou para romper com o receio de competição com alimentos a partir do aproveitamento integral da biomassa.
Stelvio, por sua vez, abordou a dificuldade da Já Fui Mandioca em competir com o mercado de plásticos, devido aos desafios adicionais inerentes ao uso de materiais naturais e ao fato de não haver ainda ecossistemas desenvolvidos para os produtos. Ele acredita que o Brasil está atrasado tanto no uso de matérias-primas quanto na etapa de transformação de embalagens renováveis, pois o país possui dificuldades em seu ambiente de negócios, o que gera empecilhos também à inovação.
O Café com Bioeconomia é um evento quinzenal, on-line e interativo, no qual palestrantes e público discutem temas relevantes para a área. Quer receber nossa agenda e participar? Inscreva-se em: https://portaldebioeconomia.com/
Quer ouvir este e outros Cafés? Estamos no Spotify em Café com Bioeconomia.
Notícia
Produção de biocombustível a partir de tamarindo é tema de pesquisa do Cetep
Polpa de tamarindo fermentada é utilizada na produção de etanol pelo Cetep.
Para ler a notícia na íntegra, clique aqui