SOLUÇÕES INTELIGENTES DE ARMAZENAGEM

Traga eficiência ao seu armazém com uma gestão inteligente do espaço

Contatar

A Mecalux: experiência e inovação para o seu armazém

A Mecalux é uma das companhias lideres na tecnologia intralogística a nível mundial. É lider em automatização de armazéns e desenvolvimento de software. As suas estantes metálicas são sinónimo de qualidade na indústria.
Temos 55 anos de experiência, uma decidida aposta da inovação e - o mais importante - a satisfação dos nossos clientes. Sejam quais forem as características do seu negócio, temos uma solução de armazenagem para a sua empresa.
Background Gartner

A Mecalux nomeada em 2023 Gartner Magic Quadrant for Warehouse Management Systems

DOWNLOAD DO RELATÓRIO
Ocorreu um erro ao processar o template.
Java method "com.mecalux.util.service.impl.MlxUrlUtilServiceImpl.getUrlByJournalArticle(com.liferay.journal.model.JournalArticle, String, long)" threw an exception when invoked on com.mecalux.util.service.impl.MlxUrlUtilServiceImpl object "com.mecalux.util.service.impl.MlxUrlUtilServiceImpl@43669969"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign articleUrl = mlxUrlUtilServic...  [in template "20101#20128#3282409" at line 16, column 25]
----
1<#if mlxUrlUtilService?has_content> 
2    <#assign cdn = (mlxUrlUtilService.getCdn(groupId))!"" /> 
3<#assign globalGroupId = mlxConstants.getLongConstant("GroupIds","GLOBAL")/> 
4     
5    <#if entries?has_content> 
6            <div class="corporate--v3--slider--v1"> 
7            <div class="corporate--v3--slider--v1--container" data-js="slider" data-js-type="tiny-slider" data-js-config='{"container": ".corporate--v3--slider--v1--slider", "navPosition": "bottom", "mouseDrag": true,"loop":false, "controls": false}' data-gtm-block-name="Case_Study"> 
8                <h2 class="corporate--v3--slider--v1--title"><@corporate.mlxlanguage key="mlx.breadcrumb.practical-cases" /></h2> 
9                <div class="corporate--v3--slider--v1--slider" data-gtm-block-name="Case_Study"> 
10                     
11                    <#assign itemIndex = 0 /> 
12                    <#list entries as curEntry> 
13     
14                        <#assign article = mlxAssetHelperService.getJournalArticleByEntry(curEntry) /> 
15                        <#assign articleValues =  mlxJournalHelperService.getStructureFieldValues(article, "${locale}") /> 
16                        <#assign articleUrl = mlxUrlUtilService.getUrlByJournalArticle(article, "${locale}", groupId)?string /> 
17                        <#assign articleName = (articleValues["name"]?string)!"" /> 
18                        <#assign articleDescription = (articleValues["html_description"]?string)!"" /> 
19     
20                        <#assign clientStrKey = "CLIENT-STR" /> 
21                        <#assign articleClient = (mlxAssetHelperService.getFirstRelatedArticle(groupId, article.articleId, clientStrKey))!"" /> 
22                         
23                        <#assign itemIndex = itemIndex + 1 /> 
24                        <#assign itemMasterName = article["title"]!"" />  
25     
26                        <div class="corporate--v3--slider--v1--item"> 
27                            <div class="corporate--v3--slider--v1--info"> 
28                                <#if articleClient != ""> 
29                                    <#assign clientName = mlxJournalHelperService.getStructureFieldValue(articleClient, "name", "${locale}")?string /> 
30                                    <h3 class="corporate--v3--slider--v1--item-title">${clientName}</h3> 
31                                <#else> 
32                                    <#assign clientName = articleName> 
33                                </#if> 
34                                <#if articleName?has_content> 
35                                    <p class="corporate--v3--slider--v1--item-subtitle">${articleName}</p> 
36                                </#if> 
37                                <#if articleDescription?has_content> 
38                                    <p class="corporate--v3--slider--v1--item-description">${articleDescription?truncate(350, '...')} 
39                                        <a href="${articleUrl}" title="${clientName}" class="corporate--v3--slider--v1--item-link" data-gtm-event="click" data-gtm-event-click-category="[pageMaster]_Case_Study" data-gtm-event-label="${itemIndex}_/Case-study/Detail/${clientName}/${itemMasterName}"><@corporate.mlxlanguage key="mlx.search.article.readmore" /></a> 
40                                    </p> 
41                                </#if> 
42                            </div> 
43 
44                                <#assign articleImageContent = articleValues["list_imageFieldSet"]!"{}"  /> 
45                                <#assign articleImageContent = articleImageContent.list_image!""  /> 
46    <#assign imgWidth = '640'> 
47                                <#if articleImageContent?has_content> 
48                                    <#assign articleImage = jsonFactoryUtil.createJSONObject(articleImageContent) /> 
49                                    <#if articleImage?has_content> 
50                                         
51                                        <#assign fileEntry = mlxDLFileEntryHelperService.getDLFileEntry(articleImage.uuid, globalGroupId) /> 
52                                        <#assign articleImageUrl = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentUrl",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!""/> 
53                                        <#assign articleImageUrl = mlxUrlUtilService.getLRUrl(fileEntry) /> 
54                                        <#assign urlParamConcat = articleImageUrl?contains("?")?then("&","?")> 
55                                         
56                                        <div class="corporate--v3--slider--v1--thumbnail"> 
57                                         
58                                            <#assign articleVideoContent =  (mlxJournalHelperService.getStructureFieldValue(article, "video_gallery_fileFieldSet", "${locale}"))![] /> 
59 
60                                            <#if articleVideoContent?first.video_gallery_file?has_content> 
61                             										<#assign articleVideoJSON = jsonFactoryUtil.createJSONObject(articleVideoContent?first.video_gallery_file) /> 
62                    														<#assign articleVideoUUID = articleVideoJSON.getString("uuid")!"" /> 
63																							<#if articleVideoUUID != ""> 
64                                                <#assign fileEntry = mlxDLFileEntryHelperService.getDLFileEntry(articleVideoUUID, globalGroupId) /> 
65                                                <#assign articleVideoUrl = mlxUrlUtilService.getLRUrl(fileEntry) /> 
66                                                <#assign youtubeEmbeddedCode = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxYoutubeEmbeddedCode",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!""/> 
67                                                 
68                                                <#if youtubeEmbeddedCode?has_content> 
69                                                    <#assign htmlModalAttributes='data-fancybox="video-gallery-${curEntry?index}" data-type="iframe" data-src="https://www.youtube.com/embed${youtubeEmbeddedCode}" data-caption="${articleName}"' /> 
70                                                <#else> 
71                                                    <#assign htmlModalAttributes='data-fancybox="video-gallery-${curEntry?index}" data-type="html5video" data-src="${articleVideoUrl}" data-thumb="${articleImageUrl}" data-caption="${articleName}"' /> 
72                                                </#if> 
73     
74                                                <a href="#" class="corporate--v3--slider--v1--video-container" data-has-modal="true" ${htmlModalAttributes} data-gtm-event="modal" data-gtm-event-label="${articleImageUrl}"> 
75                                                    <figure class="corporate--v3--slider--v1--figure"> 
76                                                        <div class="corporate--v3--slider--v1--container-icon"> 
77                                                            <#assign images_folder = cdn + "/o/corporate-theme/images" /> 
78                                                            ${corporate.img(images_folder + '/common/th-play2.png', false,'data-role="play-btn" class="corporate--v3--slider--v1--video-icon" alt="play"')} 
79                                                        </div> 
80                                                        ${corporate.img(cdn + articleImageUrl + urlParamConcat + 'imwidth="'+ imgWidth + '"', true,  
81														'srcset="' + cdn + articleImageUrl + urlParamConcat + 'imwidth=320&imdensity=1 320w,' +  
82																	 cdn + articleImageUrl + urlParamConcat + 'imwidth=640&imdensity=1 640w" alt="' + clientName + '"', 'title="' + clientName + '"', 'class="corporate--v3--slider--v1--item-image corporate--v3--slider--v1--item-image-youtube"')}                                                    </figure>   
83                                                </a> 
84																									<#else>		 
85																								<figure class="corporate--v3--slider--v1--figure"> 
86                                                    ${corporate.img(cdn + articleImageUrl + urlParamConcat + 'imwidth="'+ imgWidth + '"', true,  
87                                                    'srcset="' + cdn + articleImageUrl + urlParamConcat + 'imwidth=320&imdensity=1 320w,' +  
88															     cdn + articleImageUrl + urlParamConcat + 'imwidth=640&imdensity=1 640w" alt="' + clientName + '"', 'title="' + clientName + '"', 'class="corporate--v3--slider--v1--item-image"')}                                                </figure> 
89                                             </#if> 
90                                            <#else> 
91     
92                                                <figure class="corporate--v3--slider--v1--figure"> 
93                                                    ${corporate.img(cdn + articleImageUrl + urlParamConcat + 'imwidth="'+ imgWidth + '"', true, 
94                                                    'srcset="' + cdn + articleImageUrl + urlParamConcat + 'imwidth=320&imdensity=1 320w,' +  
95                                                                 cdn + articleImageUrl + urlParamConcat + 'imwidth=640&imdensity=1 640w" alt="' + clientName + '"', 'title="' + clientName + '"', 'class="corporate--v3--slider--v1--item-image"')}                                                </figure> 
96     
97                                            </#if> 
98     
99                                        </div> 
100     
101                                    </#if> 
102                                </#if> 
103     
104                        </div> 
105     
106                    </#list> 
107                </div> 
108            <#assign pcasesMasterId=56006 /> <#-- referencias--> 
109            <#assign pcasesLayout=(mlxMastersHelperService.getLayoutByMasterAndGroup(pcasesMasterId,scopeGroupId)!"") /> 
110            <#if pcasesLayout == "" > 
111                <#assign pcasesMasterId=64015 /> <#-- clientes--> 
112                <#assign pcasesLayout=(mlxMastersHelperService.getLayoutByMasterAndGroup(pcasesMasterId,scopeGroupId)!"") /> 
113            </#if> 
114            <#assign pcasesUrl = pcasesLayout.getFriendlyURL() /> 
115                <a href="${pcasesUrl}" title='<@corporate.mlxlanguage key="mlx.practical-case.show-more" />' class="corporate--v3--slider--v1--viewmore" data-gtm-event="click" data-gtm-event-click-category="[pageMaster]_Case_Study" data-gtm-event-label="/Case-study"><@corporate.mlxlanguage key="mlx.practical-case.show-more" /></a> 
116     
117            </div> 
118        </div> 
119    </#if> 
120</#if> 
121<style> /*Fix Pagination*/ 
122    .lfr-pagination{ 
123        display: flex; 
124        justify-content: space-between; 
125        align-items: center; 
126
127     
128    .lfr-pagination .lfr-pagination-buttons { 
129        margin-top:0!important; 
130        padding: 0; 
131
132    @media (max-width: 960px){ 
133        .lfr-pagination{ 
134            flex-direction: column-reverse; 
135
136
137</style> 

PRODUTO DESTACADO

Robôs móveis autónomos (AMR) Robôs móveis autónomos (AMR)

ROBÔS MÓVEIS AUTÓNOMOS (AMR)

A solução robótica que flexibiliza o transporte interno de mercadorias

Automatize o fluxo interno de cargas com a inovadora gama de AMR da Mecalux. Dinamize inúmeras operações de intralogística e aumente a produtividade do armazém com veículos inteligentes projetados para operar com absoluta autonomia.

Saiba mais sobre os AMR

A MECALUX EM NÚMEROS

  • 55 anos

    55 anos

    de experiência

  • rede comercial

    +70 países

    com rede comercial

  • 11 centros produtivos

    11 centros

    produtivos

  • 7 centros I+D

    7 centros I+D

    de desenvolvimento tecnológico

Ocorreu um erro ao processar o template.
Java method "com.mecalux.util.service.impl.MlxUrlUtilServiceImpl.getUrlByJournalArticle(com.liferay.journal.model.JournalArticle, String, long)" threw an exception when invoked on com.mecalux.util.service.impl.MlxUrlUtilServiceImpl object "com.mecalux.util.service.impl.MlxUrlUtilServiceImpl@43669969"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign articleUrl = mlxUrlUtilServic...  [in template "20101#20128#3282448" at line 66, column 21]
----
1<#--MKTG-1196: US Date format --> 
2<#if mlxConstants?has_content> 
3    <#assign domain = themeDisplay.getPortalDomain() /> 
4    <#assign dateFormat = "dd MMM yyyy"/> 
5    <#if (domain?contains("us")) || (domain?contains("interlake")) > 
6        <#assign dateFormat = "MMMMMMMMM d, yyyy" /> 
7    </#if> 
8    <#if entries?has_content> 
9        <#assign globalGroupId = mlxConstants.getLongConstant("GroupIds","GLOBAL")/> 
10        <#assign cdn = (mlxUrlUtilService.getCdn(groupId))!"" /> 
11     
12        <div class="corporate--v3--slider--v2" data-gtm-block-name="News"> 
13            <div class="corporate--v3--slider--v2--container"> 
14                <#assign insightsMasterId = 58007 /> 
15                <#assign insights = (mlxMastersHelperService.getLayoutByMasterAndGroup(insightsMasterId, groupId))!{} /> 
16                <#assign insightsName = (insights.getName())!"" /> 
17                <#assign insightsUrl = (insights.getFriendlyURL())!"" /> 
18                <h2 class="corporate--v3--slider--v2--title">${insightsName}</h2> 
19                <a href="${insightsUrl}" title='<@corporate.mlxlanguage key="mlx.newsv3.go-to-news" />' class="corporate--v3--slider--v2--viewmore"><@corporate.mlxlanguage key="mlx.newsv3.go-to-news" /></a> 
20            </div> 
21            <div class="corporate--v3--slider--v2--slider" data-gtm-block-name="News" data-js="slider" data-js-type="tiny-slider" data-js-config='{"container": ".corporate--v3--slider--v2--slider", "navPosition": "bottom", "mouseDrag": true, "loop": false, "gutter": 10, "edgePadding": 40, "controls": false, "fixedWidth": 250}'> 
22                <#list entries as entry> 	 
23                     
24                    <#--StrKeys--> 
25                    <#assign practicalCaseStrKey = "PRACTICAL-CASE-STR" /> 
26                    <#assign articleStrKey = "ARTICLE-STR" /> 
27                    <#assign manualStrKey = "MANUAL-DE-ALMACENAJE-STR" /> 
28                    <#assign videoStrKey = "VIDEO-STR" /> 
29                    <#assign blogStrKey = "BLOG-POST-STR" /> 
30                    <#assign interviewStrKey = "INTERVIEW-STR" /> 
31 
32                     
33                    <#assign article = mlxAssetHelperService.getJournalArticleByEntry(entry) /> 
34                    <#assign articleValues = mlxJournalHelperService.getStructureFieldValues(article, "${locale}")  /> 
35                    <#assign articleName = (articleValues["name"]?string)!"" /> 
36                    <#assign articleImageContent = (articleValues["image_list"])!{}  /> 
37     
38                    <#assign currStr = article.getDDMStructure().getStructureKey() /> 
39                    <#if currStr == practicalCaseStrKey> 
40                        <#assign ribbonText><@corporate.mlxlanguage key='mlx.search.pcases' /></#assign> 
41                        <#assign articleImageContent = (articleValues.list_imageFieldSet["list_image"])!{}  /> 
42                    <#elseif currStr == articleStrKey> 
43                        <#assign ribbonText><@corporate.mlxlanguage key='mlx.search.news' /></#assign> 
44                    <#assign articleName = (articleValues["article_name"]?string)!"" /> 
45                    <#elseif currStr == manualStrKey> 
46                        <#assign ribbonText><@corporate.mlxlanguage key='mlx.software.content.type.articles' /></#assign> 
47                    <#elseif currStr == videoStrKey> 
48                        <#assign ribbonText><@corporate.mlxlanguage key='mlx.software.resources.videos.title' /></#assign> 
49                        <#assign videoFieldContent = (articleValues["video"])!{}  /> 
50 
51                        <#if videoFieldContent?has_content> 
52													  <#assign videoFieldUuid = jsonFactoryUtil.createJSONObject(videoFieldContent).getString("uuid") /> 
53                            <#assign videoFileEntry = mlxDLFileEntryHelperService.getDLFileEntry(videoFieldUuid, globalGroupId) /> 
54                            <#assign articleImageContent = (mlxDLFileEntryHelperService.getDLFileEntryMlxFieldValuePersisted("background", videoFileEntry.getFileEntryId()))!"" /> 
55                        </#if> 
56 
57                    <#elseif currStr == blogStrKey> 
58                        <#assign ribbonText><@corporate.mlxlanguage key='mlx.search.blog' /></#assign> 
59                        <#assign articleImageContent = (articleValues["list_image"])!{}  /> 
60                    <#elseif currStr == interviewStrKey> 
61                        <#assign ribbonText><@corporate.mlxlanguage key='mlx.interviews.title' /></#assign> 
62                        <#assign articleImageContent = (articleValues.hero["hero_image"]?eval)!{} /> 
63                        <#assign articleName = (articleValues.hero["hero_title"]?string)!"" /> 
64                    </#if> 
65                     
66                    <#assign articleUrl = mlxUrlUtilService.getUrlByJournalArticle(article, "${locale}", groupId)?string /> 
67                     
68                    <#if articleImageContent?has_content> 
69                        <#assign articleImage = jsonFactoryUtil.createJSONObject(articleImageContent) /> 
70                    </#if> 
71     
72                    <#assign article = mlxAssetHelperService.getJournalArticleByEntry(entry) /> 
73     
74                    <#assign articleDate = dateUtil.getDate(article.getDisplayDate(), dateFormat, locale)  /> 
75 
76                    <#if articleImage?has_content> 
77                        <div class="corporate--v3--slider--v2--item"> 
78                            <a href="${articleUrl}" title="${articleName}" class="corporate--v3--slider--v2--item-link-box"> 
79                                <#assign articleImageUrl = mlxDocumentsHelperService.getDocumentUrlFromUUID(articleImage.uuid, locale)!"" /> 
80                                                             
81                                <#if articleImage.uuid?has_content > 
82                                    <#assign fileEntry = mlxDLFileEntryHelperService.getDLFileEntry(articleImage.uuid, globalGroupId) /> 
83                                    <#assign docUrl = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentUrl",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!""/> 
84                                    <#if docUrl == ''> 
85                                        <#assign imgUrl = cdn + articleImageUrl /> 
86                                    <#else> 
87                                        <#assign imgUrl = cdn + docUrl + "." + fileEntry.getVersion() + "." + fileEntry.getExtension() /> 
88                                    </#if> 
89 
90                                    <#assign imgWidth = '320'> 
91                                    <#assign imgTitle = articleName> 
92                                    <#assign imgAlt = articleName> 
93                                    <#assign imgClass = 'corporate--v3--slider--v2--item-image'> 
94                                    <#assign urlParamConcat = imgUrl?contains("?")?then("&","?")> 
95                                    ${corporate.img(imgUrl + urlParamConcat + 'imwidth=' + imgWidth + '', true, 
96                                                                    'alt="' + imgAlt + '"', 'title="' + imgTitle + '"', 'class="' + imgClass + '"')} 
97                                    <span class="corporate--v3--slider--v2--item-upper-heading">${ribbonText}</span> 
98                                    <span class="corporate--v3--slider--v2--item-date">${articleDate}</span> 
99                                    <p class="corporate--v3--slider--v2--item-description">${articleName}</p> 
100                                    <span class="corporate--v3--slider--v2--item-link"><@corporate.mlxlanguage key="mlx.newsv3.read" /></span> 
101                                </#if> 
102                            </a> 
103                        </div>  
104                    </#if> 
105     
106                </#list> 
107            </div> 
108        </div> 
109     
110    </#if> 
111</#if> 

ESTAMOS ONDE ESTÁ O SEU ARMAZÉM

Temos escritórios em 23 países

VER TODOS OS NOSSOS ESCRITÓRIOS COMERCIAIS
TURQUIAEscritório em Istambul
ESLOVÉNIAEscritório em Brnik
ROMÉNIAEscritório em Bucareste
CROÁCIA
POLÔNIAEscritórios em Gliwice, Danzigue, Cracóvia, Posnânia, Varsóvia e Breslávia
ESLOVÁQUIAEscritório em Bratislava
REPUBLICA CHECAEscritório em Praga
ITÁLIAEscritório em Milão, Pádua, Roma e Turim
ALEMANHAEscritórios em Dormagen
PAÍSES BAIXOSEscritório em Amesterdão
BÉLGICAEscritório em Bruxelas
FRANÇAEscritórios em Páris, Aix-en-Provence, Bordéus, Lille, Lyon, Nantes - Ruão, Toulouse e Estrasburgo
REINO UNIDOEscritório em Birmingham
ESPANHAOficinas en Barcelona, Alicante, Bilbao, Córdoba, Gijón, La Coruña, Las Palmas, Madrid, Murcia, Palencia, Palma De Mallorca, Pamplona, San Sebastián, Sevilla, Tenerife, Valencia, Vitoria y Zaragoza
PORTUGALEscritórios em Lisboa e Porto
BRASILEscritório em Hortolândia
URUGUAIEscritório em Canelones
ARGENTINAEscritório em Buenos Aires
COLÔMBIAEscritórios em Bogotá e Cáli
CHILEEscritório em Santiago
MÉXICOEscritórios em Tijuana, Guadalajara, Hermosillo, Matamoros, Mérida, Cidade do México, Puebla e Monterrei
ESTADOS UNIDOSEscritórios em Chicago, Dallas, Pontiac, San Diego e Sumter
ESTAMOS ONDE ESTÁ O SEU ARMAZÉM

Alguns dos nossos clientes

Porcelanosa
bilstein group logo
Luís Simões
Adidas logótipo
Finieco logo
Cosmopak
Trazcarnes
Nestlé
Ocorreu um erro ao processar o template.
Java method "com.mecalux.util.service.impl.MlxSalesOfficeServiceImpl.getOfficesMapByCategoryId(long, String, long)" threw an exception when invoked on com.mecalux.util.service.impl.MlxSalesOfficeServiceImpl object "com.mecalux.util.service.impl.MlxSalesOfficeServiceImpl@3cd04e26"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign map = mlxSalesOfficeService.g...  [in template "20101#20128#3282514" at line 53, column 5]
----
1<#assign countryCode = (mlxExpandoService.getExpandoValueForClass("com.liferay.portal.kernel.model.Group","country-code", scopeGroupId).getString())!"" /> 
2<#assign masterName = mlxMastersHelperService.getMasterNameByLayout(layout) /> 
3 
4<!--INIT MKTG-464 SUCCESSPAGE REDESIGN(Estilos para hacer doble columna + Dark)--> 
5<style> 
6    .corporate--successpage--title, .corporate--successpage--subtitle {color:#fff!important} 
7    @media(min-width: 1300px){ 
8        .corporate--successpage--row { 
9            display:flex 
10
11        .corporate--successpage--item { 
12            max-width:50% 
13
14
15    .corporate--successpage *{ 
16        color: #fff 
17
18    .corporate--successpage{ 
19        background-color: #333!important 
20
21    .corporate--successpage--item-card { 
22        background-color: #444!important 
23
24    .corporate--successpage--description a { 
25        color: #fa6900 !important; 
26
27     
28    .corporate--successpage--description a:hover { 
29         color: #ff9549 !important 
30
31    </style> 
32    <!--END MKTG-464--> 
33     
34     
35    <#assign privacyMasterId = 46002 /> 
36     
37    <#assign globalGroupId = mlxConstants.getLongConstant("GroupIds","GLOBAL") /> 
38    <#assign office = '' /> 
39    <#assign siteInternationalArticleId = '3534343' /> 
40     
41    <#assign vocabularyId = mlxConstants.getLongConstant('VocabularyIds','VOCABULARY_OFFICES_COUNTRIES') /> 
42    <#assign categoryList = mlxAssetHelperService.getAssetCategoriesByVocabularyId(vocabularyId) /> 
43    <#assign currentOfficesCategory = 0 /> 
44     
45    <#assign language_id = themeDisplay.getLanguageId() /> 
46     
47    <#list categoryList as cat> 
48        <#if cat.description?contains(">"+countryCode+"<")> 
49            <#assign currentOfficesCategory = cat.categoryId />      
50        </#if> 
51    </#list> 
52     
53    <#assign map = mlxSalesOfficeService.getOfficesMapByCategoryId(currentOfficesCategory, language_id, groupId) /> 
54     
55     
56    <#assign telValue=mlxPhoneUtilService.getTelephone(mlxServiceContext)/> 
57    <#assign telDash = telValue?replace(" - ", " ")?replace(" ", "-")?replace("(", "")?replace(")", "") /> 
58     
59    <#assign cdn = (mlxUrlUtilService.getCdn(groupId))!"" /> <#-- AÑADIR CDN -->  
60 
61    <div id="corporate--v3--contact-form--v1" class="corporate--v3--contact-form--v1"  
62        data-gtm-event="form"  
63    	data-gtm-event-category="${ctaOriginParam!'CTA_Default'}"  
64    	data-gtm-event-ctaorigin="${ctaOriginParam!'CTA_Default'}"  
65    	data-gtm-event-gaformid="${mlxForm["gaFormId"]!''}"   
66    	data-gtm-event-formType="${mlxForm.getType()!''}"  
67    	data-gtm-event-formPosition="footer"  
68        data-js-form  
69        data-js-form-type="${mlxForm.getPopup()}"> 
70        <#-- Cambiar url del background por una de la document library cuando esté, de momento pongo la url de PRO actual --> 
71        <figure class="corporate--v3--contact-form--v1--figure">             
72            <#assign imgWidth = '2048'> 
73            <#assign imgUrl = '/documents/20128/3352716/10_contacta_bkg.jpg'> 
74            <#assign imgClass = 'corporate--v3--contact-form--v1--figure-image'> 
75            <#assign urlParamConcat = imgUrl?contains("?")?then("&","?")> 
76             
77            ${corporate.img(cdn + imgUrl + urlParamConcat + 'imwidth=' + imgWidth + '', true,  
78                            'alt="background contact"', 'class="' + imgClass + '" srcset="' + cdn + imgUrl + urlParamConcat + 'imwidth=640&imdensity=1 640w,' +  
79                                        cdn + imgUrl + urlParamConcat + 'imwidth=1024&imdensity=1 1024w,' +  
80                                        cdn + imgUrl + urlParamConcat + 'imwidth=2048&imdensity=1 2048w"')} 
81             
82        </figure> 
83        <div class="corporate--v3--contact-form--v1--container"> 
84            <div class="corporate--v3--contact-form--v1--info-section"> 
85            <p class="corporate--v3--contact-form--v1--title"><@corporate.mlxlanguage key="mlx.contactv3.title" /></p> 
86            <ul class="corporate--v3--contact-form--v1--info-list"> 
87                <p class="corporate--v3--contact-form--v1--subtitle"><@corporate.mlxlanguage key="mlx.contactv3.telephone.subtitle" /></p> 
88                <#-- Cambiar url del icono phone por una de la document library cuando esté, de momento pongo la url de PRO actual y tambien mirar de poner bien el alt --> 
89                <li class="corporate--v3--contact-form--v1--info-list--item"><span class="corporate--v3--contact-form--v1--info--icon">${corporate.img(cdn+'/documents/20128/3352716/10_contacta_ico_phone.svg/2eb57424-7250-dff9-7f15-812b2807b653', true, 'alt="$titlePhone" class="corporate--v3--contact-form--v1--icon"')}</span> 
90                <a class="corporate--v3--contact-form--v1--title-highlighted" href="tel:${telDash}" dir="ltr" rel="nofollow">${telValue}</a> 
91                </li> 
92                <#--<#if (offices?has_content)> --> 
93                <p class="corporate--v3--contact-form--v1--subtitle"> 
94                    <@corporate.mlxlanguage key="mlx.contactv3.offices.subtitle" /> 
95                </p> 
96                <#-- Cambiar url del icono location por una de la document library cuando esté, de momento pongo la url de PRO actual y tambien mirar de poner bien el alt --> 
97                <li class="corporate--v3--contact-form--v1--info-list--item"><span class="corporate--v3--contact-form--v1--info--icon">${corporate.img(cdn+'/documents/20128/3352716/10_contacta_ico_location.svg/4d23278d-3bf3-a723-0382-89edd823f884', true, 'alt="$titleLocation" class="corporate--v3--contact-form--v1--icon"')}</span> 
98                <#-- #set($article = $mlxHelperLocalServiceUtil.getArticleByAssetUrl($assetUrl, $globalGroupId, "$locale")) --> 
99                <ul class="corporate--v3--contact-form--v1--office-list"> 
100                     
101     
102                    <#assign language_id = themeDisplay.getLanguageId() /> 
103                    <#assign offices = mlxSalesOfficeService.getOfficesMapByCategoryId(3705718, language_id, groupId) /> 
104 
105                    <#if offices?has_content> 
106 
107                        <#list offices as key, value> 
108 
109                            <#list value as keyChild, valueChild> 
110 
111                                <#assign office = (mlxUrlUtilService.getJournalArticleByUrl(keyChild, locale, groupId, true))!"" /> 
112                                     
113                                <#if office?has_content> 
114                                 
115                                    <#assign officeValues = mlxJournalHelperService.getStructureFieldValues(office, languageId) /> 
116 
117                                    <#if key?index == 0> 
118 
119                                        <!--MAIN OFFICE--> 
120                                        <#assign globalContent = jsonFactoryUtil.createJSONObject(officeValues["contentWebFromGlobal"]) /> 
121                                        <#assign contentFromGlobalClassPK = globalContent.classPK />   
122                                        <#assign ja = mlxAssetHelperService.fetchLatestApprovedArticle(contentFromGlobalClassPK?number)/> 
123                                        <#assign jaMapStrValues = mlxJournalHelperService.getStructureFieldValues(ja, languageId) /> 
124                                         
125                                        <li class="corporate--v3--contact-form--v1--office-list--item"><span class="corporate--v3--contact-form--v1--office--name">${office.title?replace(" [SalesOffice]", "")?upper_case}</span> <p class="corporate--v3--contact-form--v1--office--location">${jaMapStrValues["street_address"]} ${jaMapStrValues["extended_street_address"]}${jaMapStrValues["postal_code"]?has_content?then(' - '+jaMapStrValues["postal_code"],"")}, ${jaMapStrValues["locality"]}</p></li> 
126 
127                                    <#else> 
128 
129                                        <#assign entry = mlxAssetHelperService.getAssetEntryByJournalArticle(office) /> 
130                                        <#assign ctgs = mlxAssetHelperService.getAssetCategoryListByJournalArticle(office) /> 
131 
132                                        <#list ctgs as cat> 
133 
134                                            <!--OTHER OFFICES DESTACADAS DE LA HOME--> 
135 
136                                            <#assign globalContent = jsonFactoryUtil.createJSONObject(officeValues["contentWebFromGlobal"]) /> 
137                                            <#assign contentFromGlobalClassPK = globalContent.classPK />   
138                                            <#assign ja = mlxAssetHelperService.fetchLatestApprovedArticle(contentFromGlobalClassPK?number)/> 
139                                            <#assign jaMapStrValues = mlxJournalHelperService.getStructureFieldValues(ja, languageId) /> 
140 
141 
142                                            <#if cat.name == "Oficina Destacada Home"> 
143 
144                                                <li class="corporate--v3--contact-form--v1--office-list--item"><span class="corporate--v3--contact-form--v1--office--name">${office.title?replace(" [SalesOffice]", "")?upper_case}</span> <p class="corporate--v3--contact-form--v1--office--location">${jaMapStrValues["street_address"]} - ${jaMapStrValues["extended_street_address"]} ${jaMapStrValues["postal_code"]}, ${jaMapStrValues["locality"]}</p></li>   
145 
146                                            </#if> 
147                                             
148                                        </#list> 
149 
150                                    </#if> 
151 
152                                </#if> 
153 
154                            </#list> 
155 
156                        </#list> 
157 
158                    <#else> 
159 
160                        <!--INTERNATIONAL OFFICE SI NO LLEGA NINGUNA OFICINA DESTACADA--> 
161 
162                        <#assign office = mlxAssetHelperService.fetchLatestApprovedArticle(globalGroupId, siteInternationalArticleId) /> 
163                        <#assign jaMapStrValues = mlxJournalHelperService.getStructureFieldValues(office, languageId) /> 
164                             
165                        <li class="corporate--v3--contact-form--v1--office-list--item"><span class="corporate--v3--contact-form--v1--office--name">${office.title?replace(" [SalesOffice]", "")?upper_case}</span> <p class="corporate--v3--contact-form--v1--office--location">${jaMapStrValues["street_address"]} ${jaMapStrValues["extended_street_address"]} - ${jaMapStrValues["postal_code"]}, ${jaMapStrValues["locality"]}</p></li>           
166                    </#if> 
167                     
168                    <!--VER MÁS OFICINAS--> 
169                    <#assign officeMasterId = 48003 /> 
170                    <#assign siteId = themeDisplay.getLayout().getGroupId()> 
171                    <#assign officeLayout=(mlxMastersHelperService.getLayoutByMasterAndGroup(officeMasterId,scopeGroupId)!"") /> 
172                     
173                    <#if officeLayout?has_content> 
174                        <#assign officePage = officeLayout.getFriendlyURL() /> 
175                        <li class="corporate--v3--contact-form--v1--office-list--viewmore"><a href="${officePage}" class="corporate--v3--contact-form--v1--office-list--viewmore-link"><@corporate.mlxlanguage key="mlx.contactv3.offices.see-more" /></a> 
176                        </li> 
177                    </#if> 
178     
179            </ul> 
180            </div> 
181            <div class="corporate--v3--contact-form--v1--form-section"> 
182            <p class="corporate--v3--contact-form--v1--subtitle"><@corporate.mlxlanguage key="mlx.contactv3.form.subtitle" /></p> 
183            <#--form:init--> 
184            <form action="${mlxFormSaveActionURL}" method="POST" class="formlyWrapper-Base" id="${pn!''}_contact" data-js-form-submittype="${mlxSubmit!''}"> 
185                <input name="${pn!''}utmz" type="hidden"/> 
186                <input type="hidden" id="${pn!''}g-recaptcha-response" name="${pn!''}g-recaptcha-response"> 
187                <input type="hidden" id="${pn!''}g-recaptcha-response-action" name="${pn!''}g-recaptcha-response-action" value="validate_captcha"> 
188                <div class="hide"> 
189                    <label><@corporate.mlxlanguage key="mlx.contact.adt.common.honeypot" /></label> 
190                    <input type="text" maxlength="480" id="myusername" name="${pn!''}myusername"> 
191                </div> 
192            <#--form:init--> 
193                <div class="corporate--v3--contact-form--v1--form--textbox" data-js="js__form-item"> 
194                    <label for="contact-name" class="hide"><@corporate.mlxlanguage key="mlx.contact.field.contact-name" /></label> 
195                    <input class="corporate--v3--contact-form--v1--form--textbox--input" name="${pn!''}contact-name" id="contact-name" title='<@corporate.mlxlanguage key="mlx.contact.field.contact-name" />' tabindex="1" placeholder='<@corporate.mlxlanguage key="mlx.contact.field.contact-name" />' type="text" maxlength="40" required="required" data-js="js__form-field" data-parsley-trigger="focusout" data-parsley-required="true" data-parsley-maxlength="40" value="${(previousFormValues['contact-name'])!''}"> 
196                </div> 
197                <div class="corporate--v3--contact-form--v1--form--textbox" data-js="js__form-item"> 
198                    <label for="contact-surname" class="hide"><@corporate.mlxlanguage key="mlx.contact.field.contact-surname" /></label> 
199                    <input class="corporate--v3--contact-form--v1--form--textbox--input" name="${pn!''}contact-surname" id="contact-surname" title='<@corporate.mlxlanguage key="mlx.contact.field.contact-surname" />' tabindex="2" placeholder='<@corporate.mlxlanguage key="mlx.contact.field.contact-surname" />' type="text" maxlength="40" required="required" data-js="js__form-field" data-parsley-trigger="focusout" data-parsley-required="true" data-parsley-maxlength="40" value="${(previousFormValues['contact-surname'])!''}"> 
200                </div> 
201                <div class="corporate--v3--contact-form--v1--form--textbox" data-js="js__form-item"> 
202                    <label for="contact-company" class="hide"><@corporate.mlxlanguage key="mlx.contact.field.contact-company" /></label> 
203                    <input class="corporate--v3--contact-form--v1--form--textbox--input" name="${pn!''}contact-company" id="contact-company" title='<@corporate.mlxlanguage key="mlx.contact.field.contact-company" />' tabindex="3" placeholder='<@corporate.mlxlanguage key="mlx.contact.field.contact-company" />' type="text" maxlength="120" required="required" data-js="js__form-field" data-parsley-trigger="focusout" data-parsley-required="true" data-parsley-maxlength="120" value="${(previousFormValues['contact-company'])!''}"> 
204                </div> 
205                <div class="corporate--v3--contact-form--v1--form--textbox" data-js="js__form-item"> 
206                    <label for="contact-email" class="hide"><@corporate.mlxlanguage key="mlx.contact.field.contact-email" /></label> 
207                    <input class="corporate--v3--contact-form--v1--form--textbox--input" name="${pn!''}contact-email" id="contact-email" title='<@corporate.mlxlanguage key="mlx.contact.field.contact-email" />' tabindex="4" placeholder='<@corporate.mlxlanguage key="mlx.contact.field.contact-email" />' type="text" maxlength="40" required="required" data-js="js__form-field" data-parsley-trigger="focusout" data-parsley-type='email' data-parsley-required="true" data-parsley-maxlength="100" value="${(previousFormValues['contact-email'])!''}"> 
208                </div> 
209                <div class="corporate--v3--contact-form--v1--form--row"> 
210                    <div class="corporate--v3--contact-form--v1--form--textbox-small" data-js="js__form-item"> 
211                        <label for="contact-telephone" class="hide"><@corporate.mlxlanguage key="mlx.contact.field.contact-telephone" /></label>   
212                        <input class="corporate--v3--contact-form--v1--form--textbox--input" name="${pn!''}contact-telephone" id="contact-telephone" title='<@corporate.mlxlanguage key="mlx.contact.field.contact-telephone" />' tabindex="5" placeholder='<@corporate.mlxlanguage key="mlx.contact.field.contact-telephone" />' type="text" maxlength="40" required="required" data-js="js__form-field" maxlength="40" data-parsley-trigger="focusout" data-parsley-required="true" data-parsley-maxlength="40" value="${(previousFormValues['contact-telephone'])!''}"> 
213                    </div> 
214                    <div class="corporate--v3--contact-form--v1--form--textbox-small" data-js="js__form-item"> 
215                        <label for="contact-postcode" class="hide"><@corporate.mlxlanguage key="mlx.contact.field.contact-postcode" /></label> 
216                        <input class="corporate--v3--contact-form--v1--form--textbox--input" name="${pn!''}contact-postcode" id="contact-postcode" title='<@corporate.mlxlanguage key="mlx.contact.field.contact-postcode" />' tabindex="6" placeholder='<@corporate.mlxlanguage key="mlx.contact.field.contact-postcode" />' type="text" maxlength="50" required="required" data-parsley-trigger="focusout"  data-parsley-required="true" data-parsley-maxlength="50" value="${(previousFormValues['contact-postcode'])!''}" > 
217                    </div> 
218                </div> 
219                <div class="corporate--v3--contact-form--v1--form--textbox" data-js="js__form-item"> 
220                <label for="contact-countryHidden" class="hide"><@corporate.mlxlanguage key="mlx.contact.field.contact-country" /></label> 
221                <#-- De momento el current countryCode lo pillo del campo personalizado de site contact-country-default, si hace falta cambiarlo es aqui --> 
222                <#assign countryCode = (mlxExpandoService.getExpandoValueForClass("com.liferay.portal.kernel.model.Group","country-code", scopeGroupId).getString())!"" /> 
223                <#-- Geolocalizar el pais por IP --> 
224                <#assign countryIp = (mlxGeoIpUtilService.getCountry(mlxServiceContext))!"" /> 
225                <#if !countryIp?has_content > 
226                    <#assign countryIp = countryCode /> <#-- si falla el pais por ip se pone el default --> 
227                </#if> 
228                 
229                    <select class="corporate--v3--contact-form--v1--form--textbox--select" tabindex="7" title='<@corporate.mlxlanguage key="mlx.contact.field.contact-country" />' id="contact-country" name="${pn!''}contact-country"> 
230                        <#-- Obtener select de paises --> 
231                        <#assign articleCountry = mlxMastersHelperService.getJournalArticleByMasterAndGroup(countrySelectorMasterId?number, groupId) /> 
232                        <#-- Se hace un replace para poner como seleccionado o el valor previo introducido o el codigo del pais actual --> 
233                        <#assign countryOptionsHtml = mlxJournalContentService.getContent(articleCountry, articleCountry.getDDMTemplateKey(),"${locale}",themeDisplay,'view')?replace('value="${(previousFormValues["contact-country"])!countryIp}"','value="${(previousFormValues["contact-country"])!countryIp}" selected') /> 
234                        ${countryOptionsHtml} 
235                    </select> 
236                </div> 
237                <div class="corporate--v3--contact-form--v1--form--textbox" data-js="js__form-item"> 
238                    <label for="contact-message" class="hide"><@corporate.mlxlanguage key="mlx.contact.field.contact-message" /></label>   
239                    <#if ((countryCode == "US" || countryCode == "ES") && masterName?lower_case?contains("software"))> 
240                        <textarea class="corporate--v3--contact-form--v1--form--textbox--input corporate--v3--contact-form--v1--form--textbox--textarea" name="${pn!''}contact-message" title='<@corporate.mlxlanguage key="mlx.contact.field.contact-message" />' id="contact-message" tabindex="8" placeholder='<@corporate.mlxlanguage key="mlx.contact.field.contact-message" />' maxlength="200" data-js="js__form-field" data-parsley-trigger="focusout" data-parsley-maxlength="200" data-parsley-required="true" required="required">${(previousFormValues['contact-message'])!''}</textarea> 
241                    <#else> 
242                    <textarea class="corporate--v3--contact-form--v1--form--textbox--input corporate--v3--contact-form--v1--form--textbox--textarea" name="${pn!''}contact-message" title='<@corporate.mlxlanguage key="mlx.contact.field.contact-message" />' id="contact-message" tabindex="8" placeholder='<@corporate.mlxlanguage key="mlx.contact.field.contact-message" /> <@corporate.mlxlanguage key="mlx.contact.adt.common.optional" />' maxlength="200" data-js="js__form-field" data-parsley-trigger="focusout" data-parsley-maxlength="200" >${(previousFormValues['contact-message'])!''}</textarea> 
243                    </#if> 
244                </div> 
245     
246                <div class="corporate--v3--contact-form--v1--form--bottom"> 
247                    <div class="corporate--v3--contact-form--v1--form--textbox corporate--v3--contact-form--v1--form--checkbox" data-js="js__form-item"> 
248                        <input id="contact-agree" name="${pn!''}contact-agree" tabindex="9" type="checkbox" data-parsley-required="true" data-parsley-trigger="change focusout" required requinetworking="" > 
249                        <label for="contact-agree"></label> 
250                        <#assign customPrivacyLayout = mlxMastersHelperService.getLayoutByMasterAndGroup(privacyMasterId, groupId) /> 
251                        <#assign customPrivacyUrl = customPrivacyLayout.getFriendlyURL(locale) /> 
252     
253                        <p class="corporate--v3--contact-form--v1--form--textbox-paragraph"> 
254                            <#if validator.isNotNull(i18nLabels["privacity"]!)> 
255                                ${(i18nLabels["privacity"])} 
256                            <#else> 
257                                ${languageUtil.format(locale, "mlx.contact.adt.common.agree", customPrivacyUrl + "?l=true")} 
258                            </#if> 
259                        </p> 
260                    </div> 
261                   <#-- 
262                    #set($mlxCacheUtilsService = $serviceLocator.findService("mecalux-portlet", "com.mecalux.service.MlxCacheUtilLocalService")) 
263                    #set($domainDataMap = $mlxCacheUtilsService.getDomainData($groupId)) 
264                    #set($expandoAtributes = $domainDataMap.getExpandoAttributesMap()) 
265                    #set($siteName = $expandoAtributes.get('Site-name')) 
266                     
267                    #set($newsAdvice = $languageUtil.get($locale, "mlx.contact.adt.common.lssi") + $languageUtil.get($locale, "mlx.contact.adt.common.optional")) 
268                     
269                    #if($siteName.toString().toLowerCase().contains(".com") && $newsAdvice.toString().toLowerCase().contains("interlake")) 
270                        #set($newsAdvice = $newsAdvice.replace("Interlake ", ""))	 
271                    #end 
272                    --> 
273                    <#assign langCommonLssi><@corporate.mlxlanguage key='mlx.contact.adt.common.lssi' /></#assign> 
274                    <#assign langCommonOptional><@corporate.mlxlanguage key='mlx.contact.adt.common.optional' /></#assign> 
275                    <#if validator.isNotNull(i18nLabels["lssi"]!)> 
276                        <#assign newsAdvice = (i18nLabels["lssi"]) /> 
277                    <#else> 
278                        <#assign newsAdvice = langCommonLssi + " " + langCommonOptional /> 
279                    </#if> 
280                    <#assign siteName = (mlxExpandoService.getExpandoValueForClass("com.liferay.portal.kernel.model.Group","site-name", scopeGroupId).getString())!"" /> 
281                    <#if (siteName?lower_case?contains(".com") && newsAdvice?lower_case?contains("interlake")) > 
282                        <#assign newsAdvice = newsAdvice?replace("Interlake ", "") />	 
283                    </#if> 
284                    <div class="corporate--v3--contact-form--v1--form--textbox corporate--v3--contact-form--v1--form--checkbox" data-js="js__form-item">  
285                        <input id="checkLssi" name="${pn!''}checkLssi" tabindex="10" type="checkbox"> 
286                        <label for="checkLssi"></label> 
287                        <p class="corporate--v3--contact-form--v1--form--textbox-paragraph">${newsAdvice}</p> 
288                    </div> 
289                </div> 
290                <div class="corporate--v3--contact-form--v1--form--textbox">  
291                    <#if validator.isNotNull(i18nLabels["button"]!)> 
292                        <#assign buttonSumbitValue = i18nLabels["button"]> 
293                    <#else> 
294                        <#assign buttonSumbitValue><@corporate.mlxlanguage key='mlx.contact.adt.common.button.submit' /></#assign> 
295                    </#if> 
296                    <button id="submitButton" type="submit" class="corporate--v3--contact-form--v1--button" tabindex="11" data-js="js__form-submit">${buttonSumbitValue}</button> 
297                </div> 
298            <#-- </form> --> 
299            <#-- Imagen de cargando --> 
300            <#--<img alt="" class="sending hide" src="${cdn}/o/corporate-theme/images/common/loading2.gif">--> 
301            ${corporate.img(cdn+"/o/corporate-theme/images/common/loading2.gif", false, 'alt=""', 'title=""', 'class="sending hide"')} 
302            <#--form:end--> 
303			<input type="hidden" title="track-consent" name="${pn}track-consent" id="track-consent" maxlength="10"> 
304			<input id="geotowns" type="hidden" value="" name="${pn!''}geotowns"> 
305			<input id="geotowns" type="hidden" value="" name="${pn!''}geotowns"> 
306			<input id="geostates" type="hidden" value="" name="${pn!''}geostates"> 
307            </form> 
308            <#--form:end--> 
309        </div> 
310    </div> 
311</div> 
312     
313<!-- DATOS ESTRUCTURADOS SEO JSON+LD --> 
314 
315<#assign domain = themeDisplay.getPortalDomain() />  
316<#assign currentUrl = "https://"+ domain /> 
317 
318<#-- logo --> 
319<#assign logo="/documents/20128/3456912/Mecalux-logo_600x60px.jpg" /> 
320<#if (domain?contains("es")) || (domain?contains("mecalux.es")) > 
321    <#assign logo="/documents/20128/3456912/MecaluxEsmena-logo_600x60px.jpg" /> 
322</#if> 
323<#if (domain?contains("us")) || (domain?contains("interlake")) > 
324    <#assign logo="/documents/20128/3456912/InterlakeMecalux-logo_600x60px.jpg" /> 
325</#if> 
326 
327<#assign telValue=mlxPhoneUtilService.getTelephone(mlxServiceContext)/> 
328<#assign telDash = telValue?replace("+", "")?replace(" - ", " ")?replace(" ", "-")?replace("(", "")?replace(")", "") /> 
329<#assign telValue=mlxPhoneUtilService.getTelephone(mlxServiceContext)/> 
330<script type="application/ld+json"> 
331
332        "@context": "https://schema.org", 
333        "@type": "Organization", 
334        "url": "${currentUrl}", 
335        "logo": "${currentUrl}${logo}", 
336        "contactPoint": [{ 
337            "@type": "ContactPoint", 
338            "telephone": "+${telDash}", 
339            "contactType": "customer service", 
340            "areaServed": "${countryCode}", 
341            "availableLanguage": [ 
342                "${locale.getDisplayLanguage()}" 
343                <#if siteName?lower_case?contains("belgique")> 
344                    ,"Dutch" 
345                </#if> 
346                <#if siteName?lower_case?contains("mecalux.be")> 
347                    ,"French" 
348                </#if> 
349                <#if locale.getDisplayLanguage() != "English"> 
350                    ,"English" 
351                </#if> 
352
353        },{ 
354            "@type": "ContactPoint", 
355            "telephone": "+${telDash}", 
356            "contactType": "sales", 
357            "areaServed": "${countryCode}", 
358            "availableLanguage": [ 
359                "${locale.getDisplayLanguage()}" 
360                <#if siteName?lower_case?contains("belgique")> 
361                    ,"Dutch" 
362                </#if> 
363                <#if siteName?lower_case?contains("mecalux.be")> 
364                    ,"French" 
365                </#if> 
366                <#if locale.getDisplayLanguage() != "English"> 
367                    ,"English" 
368                </#if> 
369
370        }] 
371
372</script> 
373 
374<script> 
375    window.addEventListener('load', function() { 
376      var heroContactLinks = document.querySelectorAll(".corporate--v3--hero-video--v1--contact"); 
377      var inContentCTALinks = document.querySelectorAll(".corporate--v3--highlighted--v1--third-column a"); 
378      var stickyCTALinks = document.querySelectorAll(".corporate--sticky-header--cta"); 
379     
380      function setGTMEventAttributes(category, ctaOrigin) { 
381        var contactForm = document.querySelector("#corporate--v3--contact-form--v1"); 
382        if (contactForm) { 
383          contactForm.setAttribute("data-gtm-event-category", category); 
384          contactForm.setAttribute("data-gtm-event-ctaorigin", ctaOrigin); 
385
386
387     
388      heroContactLinks.forEach(function(link) { 
389        link.addEventListener("click", function(ev) { 
390          setGTMEventAttributes("CTA_Hero", "CTA_Hero"); 
391        }); 
392      }); 
393     
394      inContentCTALinks.forEach(function(link) { 
395        link.addEventListener("click", function(ev) { 
396          setGTMEventAttributes("CTA_InContent", "CTA_InContent"); 
397        }); 
398      }); 
399     
400      stickyCTALinks.forEach(function(link) { 
401        link.addEventListener("click", function(ev) { 
402          setGTMEventAttributes("CTA_Sticky", "CTA_Sticky"); 
403        }); 
404      }); 
405    }); 
406</script>