Vale In Malaysia Announces New CEO
recent-searches
روابط سريعة
•
Vale In Malaysia Announces New CEO
Left: Rodrigo Ribeiro de Araújo, Right: Leonardo Paiva
MANJUNG, November 1 – Vale, one of the world’s leading mining companies today announced the appointment of Leonardo Paiva as the new Chief Executive Officer (CEO) of its Malaysian subsidiary, Vale Malaysia Minerals Sdn. Bhd. (“Vale in Malaysia”).
With 22 years of experience in Vale, Leonardo has a track record of steering transformation in the areas of port transformation and logistics. Leonardo’s experience culminated in his most recent role as the Mining Executive Manager at the Parapoeba Complex, Brazil; one of Vale’s major mines in the southern region of Brazil.
Leonardo is taking over the leadership role in Malaysia from Rodrigo Ribeiro de Araújo. Appointed as Vale in Malaysia CEO in 2019, Rodrigo is instrumental in the safe recovery of Teluk Rubiah Maritime Terminal (TRMT)’s operations during the pandemic, and the successful roll-out of various automation technologies in the port, including the world’s third fully-automated grab ship unloader.
Aligned with Vale’s renewed purpose in all countries where it operates, Rodrigo also oversaw the delivery of the MYR2.0 million ‘Vale Bersama Manjung’ pandemic recovery program for the communities living in Manjung. Recently, he announced a MYR5.0 million investment to upgrade Vale Eco Center (VEC) to become one of the leading ecotourism hubs in Perak.
“Vale is committed to a sustainable and viable presence in Malaysia, and we look forward to building upon the progress we have made with the local communities and institutions since we began our presence in Perak a decade ago,” Leonardo says.
“Safety and reliability will continue to be our focus, as it has always been”.
Designed to handle up to 30 million tonnes of iron ore, TRMT is the largest single foreign direct investment (FDI) in the state of Perak. The terminal, which began its operations in 2014, is run by a workforce made up of 97 percent Malaysian; over 60 percent from Manjung.
“In 2019, 90 percent of our workforce were Malaysia. Today, the figure is 97 percent. I assure you that developing local talents and empowering them to be an integral part of Vale’s dynamic global talent community will continue to be our priority moving forward,” Leonardo concludes.
Media Relations Office - vale
imprensa@vale.com
https://saladeimprensa.vale.com/press-releases
The following has evaluated to null or missing: ==> restClient.get("/headless-admin-taxonomy/v1.0/sites/" + groupId + "/taxonomy-vocabularies?filter=name eq 'Press topics' or name eq 'Temas de imprensa'&fields=id&restricFields=actions,availableLanguages&page=1&pageSize=1").items [in template "44549#44620#65143" at line 4, column 42] ---- Tip: It's the step after the last dot that caused this error, not those before it. ---- 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: pressTopicVocabularyId = restClient.g... [in template "44549#44620#65143" at line 4, column 17] ----
1<#assign
2 images_path = "/documents/d/guest/"
3 namespace = "com_liferay_asset_publisher_web_portlet_AssetPublisherPortlet_" + stringUtil.randomId()
4 pressTopicVocabularyId = restClient.get("/headless-admin-taxonomy/v1.0/sites/" + groupId + "/taxonomy-vocabularies?filter=name eq 'Press topics' or name eq 'Temas de imprensa'&fields=id&restricFields=actions,availableLanguages&page=1&pageSize=1").items[0].id
5/>
6
7<#function getDisplayPageUrl asset>
8 <#local
9 assetRenderer = asset.getAssetRenderer()
10 baseViewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, assetRenderer, asset, !stringUtil.equals(assetLinkBehavior, "showFullContent"))?split("?")?first?split("/-/")?first
11 />
12 <#return baseViewURL?replace(themeDisplay.getURLPortal(), "")/>
13</#function>
14
15<#function getCategoryFilterEndpoint asset>
16 <#local
17 pressTopicCategory = asset.getCategories()?filter(category -> category.getVocabularyId() == pressTopicVocabularyId)?first
18 pressTopicCategoryId = pressTopicCategory.getCategoryId()
19 />
20 <#return "/-/categories/" + pressTopicCategoryId />
21</#function>
22
23<#function getDDMFormFieldsValue DDMFormFieldsReferencesMap DDMFormFieldValuesMap fieldReference>
24 <#local field = DDMFormFieldsReferencesMap[fieldReference].name />
25 <#return DDMFormFieldValuesMap[field][0].getValue().getString(locale)!"" />
26</#function>
27
28<#function getCustomDisplayPageDataAttr customDisplayPageJson categoryFilterEndpoint>
29 <#local
30 groupId = customDisplayPageJson.getLong("groupId")
31 uuid = customDisplayPageJson.getString("id")
32 privateLayout = customDisplayPageJson.getBoolean("privateLayout")
33 />
34 <#local customDisplayPageDataAttr>
35 data-vale-custom-display-page='{"groupId":${groupId},"uuid":"${uuid}","privateLayout":${privateLayout?c}}'
36 data-vale-category-endpoint=${categoryFilterEndpoint}
37 </#local>
38 <#return customDisplayPageDataAttr/>
39</#function>
40
41<section class="vale-widget-imprensa-relacionadas bg-verde-vale" id="vale-widget-imprensa-relacionadas-${namespace}">
42 <div class="fragment-container overflow-hidden">
43 <div class="container">
44 <div class="titulo d-flex justify-content-between mt-7 mb-5">
45 <h2 class="text-amarelo-vale">
46 <@liferay.language key="press" />
47 </h2>
48 <div class="d-none d-md-flex align-self-center justify-content-end">
49 <img
50 class="${namespace} carrossel-card-branco-categoria-button-prev btn btn-primary border-amarelo-vale bg-amarelo-vale mr-3 p-1 rounded-circle"
51 src="${images_path}seta-2-esq_bra"
52 alt="button-prev"
53 />
54 <img
55 class="${namespace} carrossel-card-branco-categoria-button-next btn btn-primary border-amarelo-vale bg-amarelo-vale p-1 rounded-circle"
56 src="${images_path}seta-2-dir_bra"
57 alt="button-next"
58 />
59 </div>
60 </div>
61 <div class="swiper ${namespace} carrossel-card-branco-categoria">
62 <div class="swiper-wrapper mb-sm-6">
63 <#if entries?has_content>
64 <#list entries as curEntry>
65 <#assign
66 assetRenderer = curEntry.getAssetRenderer()
67 article = assetRenderer.getArticle()
68
69 categoryFilterEndpoint = getCategoryFilterEndpoint(curEntry)
70
71 DDMFormFieldValuesMap = assetRenderer.getDDMFormValuesReader().getDDMFormValues().getDDMFormFieldValuesMap()
72 DDMFormFieldsReferencesMap = assetRenderer.article.DDMStructure.DDMForm.getDDMFormFieldsReferencesMap(true)
73
74 customDisplayPageJsonString = getDDMFormFieldsValue(DDMFormFieldsReferencesMap, DDMFormFieldValuesMap, "customDisplayPage")
75 customDisplayPageJson = jsonFactoryUtil.createJSONObject(customDisplayPageJsonString)
76
77 hasCustomDisplayPage = customDisplayPageJson.getString("groupId")?has_content
78 customDisplayPageDataAttr = hasCustomDisplayPage?then(
79 getCustomDisplayPageDataAttr(customDisplayPageJson, categoryFilterEndpoint), "")
80
81 displayPageUrl = getDisplayPageUrl(curEntry) + categoryFilterEndpoint
82 />
83 <div class="swiper-slide">
84 <a href="${displayPageUrl}" class="text-decoration-none" ${customDisplayPageDataAttr}>
85 <div class="box d-flex flex-column justify-content-between p-3">
86 <div>
87 <p class="text-verde-aqua mb-2">
88 <#assign categories = curEntry.getCategories() />
89 <#list categories as category>
90 <#if category.vocabularyId == pressTopicVocabularyId>
91 ${category.name}
92 <#break>
93 </#if>
94 </#list>
95 </p>
96 <p class="text-verde-vale">
97 ${curEntry.getTitle(locale)}
98 </p>
99 </div>
100 <p class="text-cinza-escuro m-0">
101 <#assign dataField = DDMFormFieldsReferencesMap['data'].name />
102 <#assign data = DDMFormFieldValuesMap[dataField][0].getValue().getString(locale) />
103 <#assign date_localized = dateUtil.formatDate("yyyy-MM-dd", data, locale)/>
104
105 ${date_localized}
106 </p>
107 <img
108 class="onda position-absolute"
109 src="${images_path}onda_verde"
110 />
111 </div>
112 </a>
113 </div>
114 </#list>
115 </#if>
116 </div>
117 </div>
118 <a
119 class="bg-amarelo-vale border-amarelo-vale btn btn-nm btn-primary mb-6"
120 href="${(locale == 'pt_BR')?then('/imprensa','/press-releases')}"
121 target="_blank"
122 >
123 <@liferay.language key="access-press-area" />
124 </a>
125 </div>
126 </div>
127</section>
128
129<style>
130.vale-widget-imprensa-relacionadas .onda {
131 position: absolute;
132 bottom: 1.875rem;
133 right: -0.125rem;
134}
135
136.vale-widget-imprensa-relacionadas .box {
137 background-color: var(--branco);
138 border-left: 10px solid var(--amarelo-vale);
139 height: 14.6875rem;
140 margin-bottom: 2rem;
141}
142
143.vale-widget-imprensa-relacionadas p {
144 display: -webkit-box;
145 line-clamp: 4;
146 overflow: hidden;
147 -webkit-line-clamp: 4;
148 -webkit-box-orient: vertical;
149}
150
151@media screen and (min-width: 768px) {
152 .vale-widget-imprensa-relacionadas .box {
153 border-left: 20px solid var(--amarelo-vale);
154 height: 11.875rem;
155 }
156
157 .vale-widget-imprensa-relacionadas p {
158 line-clamp: 3;
159 -webkit-line-clamp: 3;
160 }
161}
162
163.vale-widget-imprensa-relacionadas .container {
164 overflow: visible;
165}
166
167.vale-widget-imprensa-relacionadas .swiper {
168 overflow: visible;
169}
170
171.vale-widget-imprensa-relacionadas .swiper-slide {
172 width: auto;
173}
174
175</style>
176
177<script>
178(function(){
179
180var swiper = new Swiper(".${namespace}.carrossel-card-branco-categoria", {
181 slidesPerView: 1,
182 spaceBetween: 32,
183 navigation: {
184 nextEl: ".${namespace}.carrossel-card-branco-categoria-button-next",
185 prevEl: ".${namespace}.carrossel-card-branco-categoria-button-prev",
186 disabledClass: "disabled",
187 navigationDisabledClass: "disabled",
188 },
189 pagination: {
190 clickable: true,
191 },
192 slideClass: "swiper-slide",
193 breakpoints: {
194 768: {
195 slidesPerView: 2,
196 },
197 1024: {
198 slidesPerView: 3,
199 },
200 },
201});
202
203 // Tagueamento
204
205 const namespace = document.querySelector("#vale-widget-imprensa-relacionadas-${namespace}");
206
207 const section = namespace.querySelector("h2").innerText;
208
209 const links = namespace.querySelectorAll("a");
210
211 const handleEventLinkClick = (title, href) => {
212 Analytics.track("Link", {
213 section: section,
214 rotulo: title + " : " + href,
215 });
216 };
217
218 links.forEach(link => {
219 const text = link.querySelector('p.text-verde-vale');
220 const title = text ? text.innerText : '';
221 link.addEventListener("click", () => handleEventLinkClick(title, link.href))
222 })
223
224 // Configurar URL de página de exibição dinâmica
225 const displayPageUrls = namespace.querySelectorAll('a[data-vale-custom-display-page]');
226
227 displayPageUrls.forEach(displayPageUrl => {
228 const customDisplayPage = displayPageUrl.dataset["valeCustomDisplayPage"];
229 const categoryEndpoint = displayPageUrl.dataset["valeCategoryEndpoint"];
230 Liferay.Service(
231 '/layout/get-layout-by-uuid-and-group-id',
232 JSON.parse(customDisplayPage),
233 layout => {
234 const friendlyURL = layout["friendlyURL"];
235 if (friendlyURL) {
236 displayPageUrl.href = friendlyURL + categoryEndpoint;
237 }
238 }
239 );
240 })
241})()
242
243</script>
See also