- Livestream - Meeting with Suppliers
- Hiring Rules
- Supplier Registration
- The Operation of a Contract
- Esg, Innovation and Compliance
- Consumption in Contracts
- Orders and Payments
Do a search:
Most searched
Fuel price
Pre-salt
Team Petrobras
Title
Petronect Call Center (Registration, new tenders and hiring)
Brazil
* 4020-9876: Capitals, metropolitan regions and calls originating from cell phones
* 0800 282 8484: Other regions
English
+55 21 3380-3341 Press 1
Spanish
+55 21 3380-3341 Press 2
Other countries: +1 713 808-2599
Chat - Supplier Service Click here
Supplier Service (Orders for goods, payments and invoices)
+55 21 3876-7070
Reporting channel
Independent and confidential, available to send reports of fraud, corruption, money laundering, harassment or any other irregularity, including anonymously.
Go to website
Use our search to find what you are looking for
Do a search:
Most searched
Fuel price
Pre-salt
Team Petrobras
The following has evaluated to null or missing: ==> article.getDocument() [in template "20099#20135#2683802" at line 30, column 25] ---- 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: #assign xmlArticle = article.getDocum... [in template "20099#20135#2683802" in function "extractFooterInfo" at line 30, column 3] - Reached through: @renderSacInfoDates entry, journalArt... [in template "20099#20135#2683802" at line 82, column 5] ----
1<#--
2Widget templates can be used to modify the look of a
3specific application.
4
5Please use the right panel to quickly add commonly used variables.
6Autocomplete is also available and can be invoked by typing "${".
7-->
8
9<#include "${templatesPath}/1975398" />
10
11<#assign journalArticleService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
12<#assign fileEntryService = staticUtil["com.liferay.document.library.kernel.service.DLFileEntryLocalServiceUtil"] />
13
14<#function extractFooterInfo curEntry journalArticleService fileEntryService >
15 <#if !curEntry?? >
16 <#return {}>
17 </#if>
18
19 <#assign article = journalArticleService.getLatestArticle(curEntry.getClassPK()) />
20 <#if !article??>
21 <#return {}>
22 </#if>
23
24 <#assign ddmStructure = article.getDDMStructure()>
25 <#if !ddmStructure??>
26 <#return {}>
27 </#if>
28
29 <#assign fieldList = getFieldListByStructure(ddmStructure) />
30 <#assign xmlArticle = article.getDocument().getRootElement() />
31
32
33 <#assign iconInformation = getMediaInfo(fieldList, xmlArticle, "Acesso à Informação - Imagem", fileEntryService) />
34 <#assign iconSac = getMediaInfo(fieldList, xmlArticle, "SAC Imagem", fileEntryService) />
35 <#assign sacLabel = getFieldValue(fieldList, xmlArticle, "SAC - Rótulo") />
36 <#assign sacNumber = getFieldValue(fieldList, xmlArticle, "SAC - Número") />
37 <#assign informationLabel = getFieldValue(fieldList, xmlArticle, "Acesso à Informação") />
38 <#assign transparencyLabel = getFieldValue(fieldList, xmlArticle, "Portal da Transparencia - Rótulo") />
39 <#assign transparencyLink = getFieldValue(fieldList, xmlArticle, "Portal da Transparencia - Link") />
40
41
42 <#return {
43 "iconInformation": iconInformation,
44 "iconSac" : iconSac,
45 "sacLabel" : sacLabel,
46 "sacNumber" : sacNumber,
47 "informationLabel": informationLabel,
48 "transparencyLabel": transparencyLabel,
49 "transparencyLink": transparencyLink
50 }>
51
52</#function>
53
54
55<#macro renderSacInfoDates entry journalArticleService fileEntryService >
56 <#assign info = extractFooterInfo(entry journalArticleService fileEntryService) />
57 <div class="footer-informations">
58 <div class="sac-information icons-container">
59 <img id="sac-image" alt="${info.iconSac.alt}" src="${info.iconSac.url}"/>
60 <div class="icons-texts">
61 <p class="button-xs-regular">${info.sacLabel}</p>
62 <p class="button-xs-bold">${info.sacNumber}</p>
63 </div>
64 </div>
65
66 <div class="logo-informations icons-container">
67 <img id="logo-image" alt="${info.iconInformation.alt}" src="${info.iconInformation.url}"/>
68 <div class="icons-texts">
69 <p class="button-xs-regular">
70 ${info.informationLabel}
71 </p>
72 <a class="button-xs-bold" open="_blank"
73 href='${info.transparencyLink}'>
74 ${info.transparencyLabel}
75 </a>
76 </div>
77 </div>
78 </div>
79</#macro>
80
81<#if entry?has_content>
82 <@renderSacInfoDates entry journalArticleService fileEntryService />
83</#if>
84
85
86<style>
87
88 .footer-informations {
89 display: flex;
90 justify-content: center;
91 align-items: center;
92 }
93
94 .footer-informations .icons-container img {
95 width: 29px;
96 height: 29px;
97 margin: 5px 8px 0 0;
98 }
99
100 .footer-informations .icons-container {
101 color: var(--color-text-primary-default);
102 display: flex;
103 }
104
105 .footer-informations .logo-informations {
106 padding-left: calc(var(--space-lg)/2);
107 display: flex;
108 }
109
110 .footer-informations .icons-container .icons-texts * {
111 color: var(--color-text-primary-default);
112 }
113
114 .footer-informations .sac-information .icons-texts {
115 border-right: 1px solid var(--border-color-light);
116 }
117
118
119 .footer-informations .icons-container .icons-texts {
120 padding-right: calc(var(--space-lg)/2);
121 display: flex;
122 flex-direction: column;
123
124 }
125
126 @media screen and (max-width: 767px) {
127
128 .footer-informations {
129 flex-direction: column;
130 }
131
132 .footer-informations .icons-container {
133 margin-bottom: 16px !important;
134 }
135
136 .footer-informations .sac-information .icons-texts {
137 border-right: none;
138 }
139
140 .footer-informations .logo-informations {
141 margin-bottom: 16px;
142 padding: 0;
143 }
144
145 }
146
147</style>
148
149<script>
150 (function() {
151 function isValidAlt(alt) {
152 return typeof alt === 'string' && alt.trim().length > 0;
153 }
154
155 var sacImage = document.getElementById('sac-image');
156 var sacAltText = sacImage.alt;
157
158
159 if (!isValidAlt(sacAltText)) {
160 sacImage.alt = 'SAC Petrobras';
161 }
162
163 var logoImage = document.getElementById('logo-image');
164 var logoAltText = logoImage.alt;
165
166
167 if (!isValidAlt(logoAltText)) {
168 logoImage.alt = 'Acesso à Informação';
169 }
170 })();
171</script>
The following has evaluated to null or missing: ==> article.getDocument() [in template "20099#20135#2683780" at line 31, column 25] ---- 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: #assign xmlArticle = article.getDocum... [in template "20099#20135#2683780" in function "extractFooterInfo" at line 31, column 3] - Reached through: @renderConfigFooterDates entry, journ... [in template "20099#20135#2683780" at line 82, column 5] ----
1<#--
2Widget templates can be used to modify the look of a
3specific application.
4
5Please use the right panel to quickly add commonly used variables.
6Autocomplete is also available and can be invoked by typing "${".
7-->
8
9<#include "${templatesPath}/1975398" />
10
11<#assign journalArticleService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
12
13<#function extractFooterInfo curEntry journalArticleService >
14 <#if !curEntry?? >
15 <#return {} />
16 </#if>
17
18 <#assign article = journalArticleService.getLatestArticle(curEntry.getClassPK()) />
19 <#if !article??>
20 <#return {} />
21 </#if>
22
23 <#assign ddmStructure = article.getDDMStructure() />
24 <#if !ddmStructure??>
25 <#return {} />
26 </#if>
27
28 <#assign productCategories = [] />
29
30 <#assign fieldList = getFieldListByStructure(ddmStructure) />
31 <#assign xmlArticle = article.getDocument().getRootElement() />
32
33
34 <#assign cookiesLabel = getFieldValue(fieldList, xmlArticle, "Definições de Cookies - Rótulo") />
35 <#assign copyrightMessage = getFieldValue(fieldList, xmlArticle, "Mensagem de Copyright") />
36
37 <#assign linkItemGroupXMLList = getNodesByLabel(fieldList, xmlArticle, "Links do rodapé")>
38 <#assign linksAndLabels = []>
39 <#list linkItemGroupXMLList as linkItemGroupXML>
40 <#assign obj = {
41 "link": getFieldValue(fieldList, linkItemGroupXML, "Link"),
42 "label": getFieldValue(fieldList, linkItemGroupXML, "Rótulo")
43 } />
44 <#assign linksAndLabels = linksAndLabels + [obj] />
45 </#list>
46 <#return {
47 "linksAndLabels": linksAndLabels,
48 "cookiesLabel" : cookiesLabel,
49 "copyrightMessage": copyrightMessage
50 } />
51</#function>
52
53
54<#macro renderConfigFooterDates entry journalArticleService >
55 <#assign info = extractFooterInfo(entry journalArticleService) />
56
57
58 <div class="fragment-footer breakpoint" id="pet-fragment-footer">
59
60 <div class="petrobras-footer col-1-12 md-col-1-8 sm-col-1-4">
61 <div class="footer-other-links-container">
62 <div class="footer-links">
63 <a class="footer-menu-item button-sm-regular ot-sdk-show-settings" id="ot-sdk-btn" target="_blank" tabindex="0">${info.cookiesLabel} </a>
64 <#list info.linksAndLabels as link>
65 <a class="button-sm-regular footer-menu-item" open="_blank"
66 href='${link.link}'
67 tabindex="0">
68 ${link.label}
69 </a>
70 </#list>
71 </div>
72 <p class="footer_copyright button-sm-regular">${info.copyrightMessage}</p>
73 </div>
74 </div>
75
76
77 </div>
78
79</#macro>
80
81<#if entry?has_content>
82 <@renderConfigFooterDates entry journalArticleService />
83</#if>
84
85
86<style>
87
88
89 .petrobras-footer * {
90 margin: 0;
91 padding: 0;
92 }
93
94 .petrobras-footer {
95 display: flex;
96 justify-content: space-between;
97 font-family: var(--font-family-base);
98 width: 100%;
99 background: var(--color-background-default-level-02)
100 }
101
102
103 .petrobras-footer .footer-other-links-container {
104 display: flex;
105 justify-content: space-between;
106 gap: 16px;
107 width: 100%;
108 margin: var(--space-xl) 0 !important;
109 }
110
111 .petrobras-footer .footer-other-links-container .footer-links {
112 display: flex;
113 gap: var(--space-md);
114 }
115
116 .petrobras-footer .footer-other-links-container .footer-links p,
117 .petrobras-footer .footer-other-links-container .footer-links a {
118 color: var(--color-text-primary-default);
119 }
120
121 /*Cookies button*/
122 .petrobras-footer .footer-other-links-container .footer-links
123 #ot-sdk-btn.ot-sdk-show-settings, #ot-sdk-btn.optanon-show-settings {
124 color: var(--color-text-primary-default);
125 border: none;
126 padding: 0;
127 font-size: var(--font-size-xxxs);
128 line-height: var(--line-height-lg);
129 }
130
131 .petrobras-footer .footer-other-links-container .footer-links
132 #ot-sdk-btn.ot-sdk-show-settings:hover, #ot-sdk-btn.optanon-show-settings:hover {
133 background: transparent;
134 color: var(--color-neutral-800);
135 }
136
137
138 .petrobras-footer .footer-other-links-container .footer_copyright {
139 color: var(--color-text-primary-default);
140 }
141
142
143
144 @media (max-width: 1200px) {
145
146 .petrobras-footer .footer-other-links-container {
147 display: flex;
148 flex-direction: column;
149 margin: 48px auto 55px auto;
150 align-items: center;
151 text-align: center;
152 justify-content: flex-start;
153 gap: var(--space-md);
154 }
155
156 .petrobras-footer .footer-other-links-container p {
157 margin-left: 0;
158 }
159
160 .petrobras-footer .footer-other-links-container .footer-links {
161 display: flex;
162 flex-direction: column;
163 gap: var(--space-md);
164 }
165
166
167 .petrobras-footer .footer-other-links-container .footer-links a,
168 .petrobras-footer .footer-other-links-container .footer-links p {
169 margin-left: 0;
170 }
171
172 }
173
174 @media (max-width: 767px) {
175
176 .petrobras-footer .footer-other-links-container .footer_copyright {
177 padding-bottom: 25px;
178 }
179 }
180
181</style>
Channel
Language
Accessibility
Search
- Livestream - Meeting with Suppliers
- Hiring Rules
- Supplier Registration
- The Operation of a Contract
- Esg, Innovation and Compliance
- Consumption in Contracts
- Orders and Payments
Browse the Sections:
Do a search:
Most searched
Fuel price
Pre-salt
Team Petrobras
Accessibility
High-Contrast
Off
On
Big Text
Off
On
Language:
Select a language: