The following has evaluated to null or missing:
==> mlxPhoneUtilService [in template "20101#20128#SEARCH-BAR-V3-STR-DEFAULT-TEMPLATE" at line 4, 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: #assign telValue = mlxPhoneUtilServic... [in template "20101#20128#SEARCH-BAR-V3-STR-DEFAULT-TEMPLATE" at line 4, column 1]
----
1<#assign cdn = (mlxUrlUtilService.getCdn(scopeGroupId))!"" />
2<#assign countryCode = (mlxExpandoService.getExpandoValueForClass("com.liferay.portal.kernel.model.Group","country-code", scopeGroupId).getString())!"" />
3
4<#assign telValue = mlxPhoneUtilService.getTelephone(mlxServiceContext)!"" />
5<#assign telDash = telValue?replace(" - ", " ")?replace(" ", "-")?replace("(", "")?replace(")", "") />
6<#assign telAlt = languageUtil.get(locale, "mlx.theme.menu.telephone") />
7<#assign openingHours = (mlxExpandoService.getExpandoValueForClass("com.liferay.portal.kernel.model.Group","opening-hours", scopeGroupId).getString())!"" />
8
9
10<#assign styleCss = "opacity: 0; pointer-events: none;" />
11
12
13<div class="corporate--header-contact">
14 <a href="tel:${telDash}" rel="nofollow" class="corporate--header-contact--button phone" id="working-time-phone" style="${styleCss}">
15 ${corporate.img(cdn + '/o/corporate-theme/theme-images/00_menu_ico_phone_orange.svg', false, 'class="corporate--header-contact--button-image"')}
16 <span>${telValue}</span>
17 </a>
18
19 <#assign contactMasterId=46017 />
20 <#assign contactLayout=(mlxMastersHelperService.getLayoutByMasterAndGroup(contactMasterId,scopeGroupId)!"") />
21 <#assign contactLabel = languageUtil.get(locale, "mlx.theme.menu.contact") />
22 <#assign contactLogo = themeDisplay.getPathThemeImages() + "/icons/00_menu_ico_mail_white.svg" />
23 <#if contactLayout?has_content>
24 <#assign contactUrl = contactLayout.getFriendlyURL() />
25 <a href="${contactUrl}?cta_origin=CTA_header" class="corporate--header-contact--button mail" title="${contactLabel}" data-gtm-event="click" data-gtm-event-label="/Contact" data-gtm-event-click-category="[currentPage]_Header_Contact">
26 ${corporate.img(cdn + '/o/corporate-theme/theme-images/00_menu_ico_mail_white.svg', false, 'alt="${contactLabel}"', 'title="${contactLabel}"', 'class="corporate--header-contact--button-image"')}
27 <span>${contactLabel}</span>
28 </a>
29 </#if>
30</div>
31
32<script>
33document.addEventListener("DOMContentLoaded", async () => {
34 try {
35 const workingTimeElement = document.getElementById('working-time-phone');
36 if (!workingTimeElement) return;
37
38 // 🔹 Llamada segura a una API interna autenticada
39 const url = new URL(window.location.origin + '/o/corporate-publics-rest-services/v1.0/telephone');
40 const response = await fetch(
41 url,
42 {
43 method: 'GET',
44 headers: {
45 'Accept': 'application/json',
46 'x-csrf-token': Liferay.authToken // 👈 Token necesario para evitar 403 Forbidden
47 },
48 credentials: 'include' // 👈 Envia las cookies de sesión del usuario
49 }
50 );
51
52 if (!response.ok) {
53 console.error('Error al llamar a la API:', response.status, response.statusText);
54 return;
55 }
56
57 const obj = await response.json();
58
59 if (obj && obj.telephone) {
60 const tel = obj.telephone;
61 workingTimeElement.setAttribute('href', 'tel:' + tel.replace(/[^\d+]+/g, ''));
62 workingTimeElement.querySelector('span').textContent = tel;
63 }
64
65 // Fade-in effect
66 workingTimeElement.style.transition = 'all 0.4s ease-out';
67 workingTimeElement.style.opacity = '1';
68 workingTimeElement.style.pointerEvents = 'auto';
69 } catch (error) {
70 console.error('Error al obtener el teléfono:', error);
71 }
72});
73</script>
Wydajna mroźnia firmy Serfrial w Hiszpanii
Serfrial wyposażył swoją mroźnię w nowy system magazynowy
Serfrial, spółka należąca do grupy hiszpańskiego operatora logistycznego Fuentes, zmodernizował dwie ze swoich chłodni zlokalizowanych w miejscowości Las Torres de Cotillas w południowo-wschodniej Hiszpanii. Obiekty zostały wyposażone w półautomatyczny system Pallet Shuttle, czyli regały wjezdne obsługiwane przez przemieszczające się wewnątrz kanałów towarowych wózki z napędem elektrycznym. Dzięki modernizacji w obiektach można obecnie składować 26 880 palet.
O firmie Serfrial
Powstała w 1991 roku w Murcji grupa Fuentes to jeden z wiodących w Europie operatorów logistycznych. Dysponuje liczną i nowoczesną flotą ciężarówek, zapewniając usługi transportowe przez całą dobę dla ponad 5000 klientów z różnych branż.
Należąca do Grupo Fuentes spółka Serfrial specjalizuje się w składowaniu i dystrybucji produktów mrożonych i chłodzonych. W ostatnich latach wyremontowała i rozbudowała swoje centrum logistyczne w Las Torres de Cotillas nieopodal Murcji. Inwestycja w poprawę infrastruktury pomogła firmie nie tylko utrzymać dotychczasowe tempo wzrostu, ale także stworzyła lepsze perspektywy na przyszłość.
Potrzeby i rozwiązanie
Serfrial potrzebował systemu składowania, który pozwoliłby maksymalnie wykorzystać dostępną powierzchnię, a jednocześnie zapewniłby dynamiczny i masowy przepływ towaru.
Centrum logistyczne firmy składa się z dwóch chłodni. Do jednej z nich Mecalux dostarczył dwa bloki regałów z systemem Pallet Shuttle. Mierzą one 12 m wysokości i podzielone są na sześć poziomów ładunkowych o głębokości 27,5 m.
Rok później, aby sprostać wzrostowi sprzedaży, Serfrial powierzył Mecaluxowi wyposażenie drugiej chłodni, również w regały z systemem Pallet Shuttle, lecz o innych wymiarach: są to cztery bloki o wysokości 14,5 m z ośmioma poziomami ładunkowymi o głębokości 17 m.
Regały z systemem Pallet Shuttle
Regały do składowania akumulacyjnego z wózkami Pallet Shuttle to system, do którego zalet należą prostota i efektywność działania, a także minimalny udział operatorów w jego obsłudze, ponieważ do przemieszczania ładunków wewnątrz kanałów towarowych wykorzystywane są samojezdne wózki z napędem elektrycznym.
Operator wprowadza wózek Pallet Shuttle do odpowiedniego kanału, a następnie na wejściu do niego umieszcza paletę, którą wózek pobiera i transportuje do pierwszego wolnego miejsca. W celu pobrania ładunku z regału proces ten jest wykonywany w odwrotnej kolejności.
Sterowanie wózkami Pallet Shuttle
Do sterowania wózkami Pallet Shuttle służą tablety z łączem Wi-Fi. Każdy tablet umożliwia obsługę wszystkich wózków według kolejności zgłaszających się operatorów.
Korzystając z tabletu, można m.in. wybrać takie funkcje jak załadunek i rozładunek kanałów, inwentaryzacja składowanych palet, zarządzanie uprawnieniami do korzystania z wózków czy lokalizacja wózków za pomocą sygnału dźwiękowego i świetlnego.
Korzyści dla Klienta:
- Większa pojemność magazynowa: chłodnie firmy Serfrial mieszczą łącznie 26 880 palet o wymiarach 1200 x 800 mm.
- Większa wydajność magazynu: system Pallet Shuttle funkcjonuje przy minimalnym udziale człowieka – pobieranie i odkładanie palet obsługuje automatyczny wózek przemieszczający się wewnątrz kanałów towarowych.
- Maksymalne wykorzystanie powierzchni: regały zajmują większość powierzchni w obu chłodniach.
| Chłodnie wyposażone w Pallet Shuttle | |
|---|---|
| Pojemność magazynowa: | 26 880 palet |
| Wymiary palety: | 800 x 1200 mm / 1000 x 1200 mm / 1200 x 1200 mm |
| Maksymalna waga palety: | 1050 kg |
| Liczba kanałów: | 1148 |
| Wysokość regałów: | 12 i 14,5 m |
| Głębokość kanałów: | 27,5 i 17 m |
Galeria
Mroźnia z regałami do składowania akumulacyjnego i wózkami Pallet Shuttle
Zapytaj eksperta