Entdecke kulinarische Geheimnisse: Top Restaurants auf Mallorca
Restaurant Treurer Olive Grove
Mallorca bietet eine unvergleichliche Vielfalt an kulinarischen Köstlichkeiten, die Gourmets und Feinschmecker gleichermaßen begeistern werden. Die Insel ist nicht nur für ihre atemberaubenden Strände bekannt, sondern auch für ihre exquisite Gastronomie. Egal, ob Sie auf der Suche nach traditioneller mallorquinischer Küche oder modernen Gourmet-Erlebnissen sind, Mallorcas Restaurants lassen keine Wünsche offen. Von urigen Tapas-Bars bis hin zu Michelin-ausgezeichneten Restaurants, entdecken Sie Orte, die Ihren Gaumen erfreuen werden. Lassen Sie sich von uns durch eine kulinarische Reise führen, die Sie zu den besten Adressen der Insel führt.
Contenidos / Contents
Wie wählt man die besten Restaurants auf Mallorca aus?
Die Wahl des perfekten Restaurants kann eine Herausforderung sein, da es so viele ausgezeichnete Möglichkeiten gibt. Überlegen Sie zunächst, welche Art von Küche Sie bevorzugen – mögen Sie die traditionelle mallorquinische Küche oder möchten Sie etwas Neues ausprobieren, wie zum Beispiel die mediterran-asiatische Küche? Berücksichtigen Sie auch die Lage: ein romantischer Abend mit Meerblick oder ein authentisches Erlebnis in einer ländlichen Bodega könnten Ihre Wahl beeinflussen. Lesen Sie Bewertungen, fragen Sie die Einheimischen und schauen Sie, ob Köche wie José Cortés, Marga Coll oder Andreu Genestra mit ihren innovativen Konzepten dabei sind. Auch gastronomische Auszeichnungen wie Michelin-Sterne können ein Hinweis auf herausragende Qualität sein. Denken Sie daran, dass die besten Restaurants oft schon im Voraus ausgebucht sind, also planen Sie voraus und buchen Sie frühzeitig.
Wo finde ich Insider-Informationen über Restaurants auf Mallorca?
Restaurantempfehlungen liegen oft abseits der ausgetretenen Pfade. Schauen Sie sich in den kleinen Dörfern um oder fragen Sie die Einheimischen, wo sie essen gehen. Sie werden oft Kleinode entdecken, wie z. B. eine kleine Bodega im Herzen der Altstadt, die authentische Gerichte serviert. Soziale Medien und spezialisierte Food-Blogs sind ebenfalls wertvolle Quellen, um versteckte Kleinode zu entdecken. Und vergessen Sie nicht, die lokalen Märkte zu besuchen: Oft gibt es dort Stände oder kleine Restaurants, die exzellente Speisen anbieten.Authentische mallorquinische Bodegas und familiengeführte Restaurants bieten oft ein unvergessliches kulinarisches Erlebnis mit einer persönlichen Note.
Welche außergewöhnlichen Restaurants gibt es auf Mallorca?
Mallorca beherbergt einige außergewöhnliche Restaurants, die einzigartige Erlebnisse bieten. Von Restaurants in alten Windmühlen bis hin zu versteckten Restaurants auf Klippen bietet die Insel unvergessliche Orte für ein besonderes Essen.
Eines dieser außergewöhnlichen Restaurants ist das „DINS“ von Santi Taura, wo Sie innovative Interpretationen regionaler Rezepte erwarten. Ein weiteres ist das Restaurant „Aromata“, das für seine regional inspirierten Gerichte und seine gemütliche Atmosphäre bekannt ist.
Das Restaurant Treurer auf dem Anwesen Treurer in Algaida auf Mallorca bietet ein gastronomisches Erlebnis, bei dem mediterrane und mallorquinische Aromen im Mittelpunkt stehen. Unter der Leitung von Küchenchef José Cortés bietet das Restaurant Gerichte aus lokalen und saisonalen Zutaten, von denen viele mit dem hauseigenen nativen Olivenöl extra verfeinert werden. Die Umgebung des Restaurants, umgeben von Olivenbäumen und mit Blick auf das Randa-Tal, bietet eine einzigartige Atmosphäre, um die Küche zu genießen. Für Reservierungen rufen Sie bitte die Nummer +34 651 696 322 an.
Das Restaurant befindet sich in Port Verd, einer kleinen Bucht in der Nähe von Cala Bona auf Mallorca, und bietet ein unvergessliches kulinarisches Erlebnis. Mit seiner exklusiven Lage und seinem professionellen Team zeichnet es sich durch seine Haute Cuisine aus, die Traditionen mit modernen Akzenten verbindet.
Das Lokal befindet sich an der Plaça del Pont, 07014 Palma, Illes Balears, und ist eine Vermutería, die ein einzigartiges gastronomisches Erlebnis bietet. Es zeichnet sich durch seine traditionellen Gerichte und Pintxos sowie durch Gourmetkonserven, Wurstwaren, Pökelfleisch und Eingelegtes aus. Für Reservierungen kannst du unter der Nummer +34 871 004 080 anrufen.
Das Lokal in der Carrer de la Rosa 5, 07003 Palma, Balearen, ist traditionell eingerichtet, aber avantgardistisch im Herzen. Es bietet Qualitätskonserven, Tapas und hausgemachte, authentische Gerichte. Sie erreichen das Lokal unter der Telefonnummer +34 971 77 89 29.
Das Restaurant des Fontsanta Hotel Thermal Spa & Wellness bietet eine avantgardistische mediterrane Küche, die mit den besten Zutaten aus der Region und vom Markt zubereitet wird. Der aus Viña del Mar, Chile, stammende Küchenchef Jhonatan Maldonado leitet die Küche und verbindet Innovation mit Respekt für lokale Produkte. Das Restaurant verfügt über gemütliche Innenräume, private Salons und eine Terrasse mit Blick auf die Hotelgärten und bietet somit eine ideale Atmosphäre, um die gastronomischen Angebote zu genießen.
Das Es Fum ist ein Restaurant, das seit November 2011 mit einem Michelin-Stern ausgezeichnet ist und sich im St. Regis Mardavall Mallorca Resort in Costa d’en Blanes befindet. Unter der Leitung von Küchenchef Miguel Navarro bietet es ein kulinarisches Erlebnis, das Technik und Kreativität vereint und sich durch seine Degustationsmenüs auszeichnet, die die frischesten lokalen Zutaten der Saison enthalten. Das Restaurant verfügt über eine romantische Terrasse mit atemberaubendem Blick auf das Mittelmeer, die eine ideale Atmosphäre für ein unvergessliches Abendessen bietet.
Wenn Sie etwas wirklich Einzigartiges suchen, besuchen Sie ein Restaurant in einer Höhle oder genießen Sie ein Abendessen in einem historischen Herrenhaus.
Rustikale Restaurants sind auf Mallorca weit verbreitet und bieten eine rustikale und gemütliche Atmosphäre. Diese Lokale sind in der Regel familiengeführt und spiegeln die traditionelle mallorquinischeKüche und Kultur wider. Viele dieser Restaurants sind in alten Gebäuden untergebracht, die liebevoll restauriert wurden, um ihren ursprünglichen Charme zu bewahren.
Probieren Sie typische Tapas und lokale Weine, während Sie in einem dieser urigen Lokale sitzen. Es ist eine ideale Gelegenheit, die herzliche Gastfreundschaft der Mallorquiner zu erleben. Einige der renommiertesten Köche der Insel, wie z. B. Alvaro Salazar, haben ihre Wurzeln in diesen traditionellen Lokalen, bevor sie ihre eigene moderne Note hinzufügten.
Wo gibt es die besten Restaurants am Meer auf Mallorca?
Die besten Restaurants am Meer befinden sich entlang der wunderschönen Küste der Insel. Orte wie Puerto de Pollensa bieten eine Auswahl an erstklassigen Restaurants, in denen oft fangfrischer Fisch und Meeresfrüchte serviert werden.
Viele dieser Restaurants bieten Terrassen oder Sitzgelegenheiten mit Blick auf das Meer, wo Sie die salzige Meeresbrise genießen können, während Sie speisen. Stellen Sie sich vor, Sie genießen Paella oder frische Meeresfrüchte, während Sie auf das azurblaue Meer blicken – ein unvergessliches Erlebnis.
Einige der besten Restaurants am Meer sind auch dafür bekannt, dass sie lokale Rezepte mit einem modernen Touch anbieten, so dass Sie traditionelle mallorquinische Gerichte in einem neuen Licht erleben können.
Welche Restaurants auf Mallorca bieten die beste Aussicht?
Es gibt überall auf Mallorca Restaurants mit atemberaubenden Aussichten. Egal, ob Sie das Tramuntana-Gebirge oder den Sonnenuntergang über dem Mittelmeer betrachten möchten, die Restaurants der Insel bieten einige der spektakulärsten Aussichten. Viele dieser Restaurants befinden sich auf einer Anhöhe, z. B. auf einer Klippe oder einem Hügel, und bieten ihren Gästen eine unvergleichliche Aussicht.
Einige Restaurants verfügen auch über Dachterrassen oder Gärten, von denen aus man einen Panoramablick auf die umliegende Landschaft hat.Die nachhaltige Gastronomie Mallorcas und Restaurants, die sich auf lokale Produkte spezialisiert haben, bieten nicht nur außergewöhnliche kulinarische Momente, sondern auch die Möglichkeit, die Schönheit der Insel zu genießen. Entdecken Sie die kulinarische Vielfalt Mallorcas in einem der vielen ausgezeichneten Restaurants der Insel.
Ob Sie nun ein romantisches Abendessen bei Sonnenuntergang oder ein lebhaftes Tapas-Erlebnis suchen, die Insel bietet für jeden Anlass und Geschmack das richtige Ambiente und Menü. Genießen Sie die einzigartigen Aromen und die herzliche Gastfreundschaft, die Mallorca zu einem wahren Paradies für Feinschmecker machen.
Die besten Restaurants auf Mallorca
Mediterrane Küche
Restaurant Treurer
Sa Torre de Santa Eugenia
Restaurant Zaranda
Fisch und Meeresfrüchte
La Bóveda
Casa Fernando
Es Fum
Sa Roqueta
Mare Nostrum
Fusion
El Sótano
Es Roquissar
Adrián Quetglas
Von Tokio bis Lima
Michelin-Stern
Andreu Genestra
Ca Na Toneta
DINS Santi Taura
Es Fum
Fusion 19
Maca de Castro
Marc Fosh
Sa Clastra
VORO
Zaranda
Sonstige
365
Adrián Quetglas
Aromata
Arrels
Bens d’Avall
Ca Ses Sauerschell’s
Ca’n Boqueta
Daica
El Txoko
Es Fanals
Guethary
Joan Marc
Kairiku
La Bodeguilla
La Fortaleza
La Vieja
Mambo
Miceli
Periplo Portixol
Quadrat
Stagier
Sumaq
Terrae
Tess de Mar
Häufig gestellte Fragen zu den besten Restaurants auf Mallorca
Wo gibt es die besten Restaurants auf Mallorca?
Die besten Restaurants findet man sowohl in der Hauptstadt Palma als auch in den kleineren Küstendörfern und in den ländlichen Gebieten. Berühmte Lokale wie “Zaranda” oder “Es Fum” bieten Gourmeterlebnisse, während gemütliche Dorfrestaurants ein authentisches kulinarisches Erlebnis garantieren. Vom Sternerestaurant bis zur traditionellen Tapas-Bar gibt es auf Mallorca ein Restaurant für jeden Geschmack.
Welche Restaurants auf Mallorca sind für Kinder geeignet?
Es gibt viele kinderfreundliche Restaurants auf Mallorca, die Spielbereiche und kinderfreundliche Menüs anbieten. Oft befinden sich diese Restaurants an den Stränden oder in touristischeren Gegenden, wo die ganze Familie entspannt essen kann. Viele kinderfreundliche Restaurants sind stolz darauf, lokale Zutaten zu verwenden und köstliche Gerichte zu servieren, die auch den kleinsten Gästen schmecken.
Welches sind die besten Tapas-Restaurants auf Mallorca?
Die besten Tapas-Restaurants bieten eine Vielfalt an kleinen Tellern, die die lokale Küche widerspiegeln. Besuchen Sie “La Boveda” in Palma oder “Ca’n Pedro” in Genova für einige der besten Tapas der Insel, wo Sie eine Auswahl an Tapas von klassischen Patatas Bravas bis hin zu innovativen Kreationen genießen können.
Wo kann man auf Mallorca frischen Fisch probieren?
Für frischen Fisch und Meeresfrüchte sollten Sie die Küstengebiete besuchen, wo die Fischer jeden Tag ihren Fang anlanden. Restaurants in Hafennähe wie “Sa Roqueta” in Palma oder “Casa Fernando” in Cala d’Or sind bekannt für ihre frischen Fischgerichte, die von einfachem gegrilltem Fisch bis hin zu raffinierten Gourmetgerichten reichen, die die Frische des Meeres hervorheben.
Eine Anzahlung ist erforderlich, um Ihre Reservierung zu bestätigen
0.00 €
Erstattungsfähig bei Stornierung mindestens 24 Stunden im Voraus
Kartendaten
Ich akzeptiere die Reservierungsbedingungen und die Datenschutzrichtlinie
Reservierungsbedingungen
Reservierung und Pünktlichkeit Wir halten Ihren reservierten Tisch 15 Minuten als Kulanz frei. Sollten Sie voraussichtlich später eintreffen, wären wir Ihnen dankbar, wenn Sie uns dies mitteilen könnten. Andernfalls können wir die Verfügbarkeit der Reservierung nicht garantieren.
Stornierungen Stornierungen, die mit weniger als 24 Stunden im Voraus vorgenommen werden, sind in keinem Fall erstattungsfähig.
Mindestalter Der Zutritt ist nur Personen ab 14 Jahren gestattet.
Haustiere Haustiere sind auf unserer Terrasse willkommen, sofern sie sauber, ruhig, angeleint und unter der Aufsicht ihres Halters bleiben und zu keinem Zeitpunkt andere Gäste stören. Wir behalten uns das Recht vor, den Tisch zuzuweisen, den wir für am geeignetsten halten. Während der Wintersaison bitten wir Sie, uns vor der Reservierung zu kontaktieren.
Kleiderordnung Wir empfehlen smart casual Kleidung: elegant, bequem und zwanglos.
Miteinander Wir bitten Sie, eine ruhige Atmosphäre zu bewahren, laute Stimmen zu vermeiden und sowohl gegenüber den anderen Gästen als auch gegenüber unserem Team Respekt zu zeigen. Rauchen ist nur im dafür vorgesehenen Bereich gestattet.
Ernährungseinschränkungen Sollten Sie Allergien, Unverträglichkeiten oder Ernährungseinschränkungen haben, wären wir Ihnen dankbar, wenn Sie uns dies vor Ihrer Ankunft mitteilen könnten. Sobald der Service begonnen hat, können wir nicht garantieren, dass Änderungen am Menü möglich sind.
Um die Atmosphäre und das Wohlbefinden aller Anwesenden zu wahren, behalten wir uns das Recht vor, das Verlassen des Lokals zu verlangen, wenn ein Verhalten das Miteinander oder den normalen Ablauf des Services stört.
'; }).join('');
var offset = (new Date(flavorCalYear, flavorCalMonth, 1).getDay() + 6) % 7;
var dim = new Date(flavorCalYear, flavorCalMonth + 1, 0).getDate();
for (var i = 0; i < offset; i++) h += '';
var minStr = formatDateLocal(flavorMinDate);
var maxStr = formatDateLocal(flavorMaxDate);
for (var d = 1; d <= dim; d++) {
var date = new Date(flavorCalYear, flavorCalMonth, d);
var dateStr = formatDateLocal(date);
var isSel = flavorData.date === dateStr;
var isToday = date.toDateString() === today.toDateString();
var isPast = dateStr < minStr || dateStr > maxStr;
var isClosed = !isPast && flavorOpenDays.indexOf(date.getDay()) === -1;
var isBlocked = !isPast && !isClosed && flavorBlockedDates[dateStr];
var cls = 'flavor-cal-day';
if (isPast) cls += ' past';
else if (isClosed || isBlocked) cls += ' closed';
else if (isSel) cls += ' on';
else if (isToday) cls += ' today';
if (isPast || isClosed || isBlocked) {
h += '
' + d + '
';
} else {
h += '';
}
}
grid.innerHTML = h;
grid.querySelectorAll('.flavor-cal-day[data-date]').forEach(function(b) {
b.addEventListener('click', function() {
flavorData.date = b.dataset.date;
flavorData.time = null;
flavorRenderCalendar();
flavorLoadTimeSlots(flavorData.date);
});
});
}
document.getElementById('flavorCalPrev').addEventListener('click', function() {
var now = new Date();
if (flavorCalMonth <= now.getMonth() && flavorCalYear <= now.getFullYear()) return;
flavorCalMonth--;
if (flavorCalMonth < 0) { flavorCalMonth = 11; flavorCalYear--; }
flavorRenderCalendar();
});
document.getElementById('flavorCalNext').addEventListener('click', function() {
flavorCalMonth++;
if (flavorCalMonth > 11) { flavorCalMonth = 0; flavorCalYear++; }
flavorRenderCalendar();
});
// =====================
// TIME SLOTS
// =====================
function flavorLoadTimeSlots(dateStr) {
var container = document.getElementById('flavorSlots');
var guests = flavorData.guests || 2;
container.innerHTML = '
' + flavorI18n.loadingTimes + '
';
fetch(flavorRestUrl + 'restaurants/' + flavorRestaurantId + '/available-slots?date=' + dateStr + '&guests=' + guests)
.then(function(r) { return r.json(); })
.then(function(data) {
if (data.success && data.data && data.data.length > 0) {
var html = '';
data.data.forEach(function(slot) {
var timeShort = slot.time.substring(0, 5);
if (slot.available) {
var cls = 'flavor-slot' + (flavorData.time === timeShort ? ' on' : '');
html += '';
} else {
var reasonText = flavorI18n.notAvailable;
if (slot.reason === 'capacity') reasonText = flavorI18n.capacityFull;
else if (slot.reason === 'max_reservations') reasonText = flavorI18n.maxReservations;
else if (slot.reason === 'min_advance') reasonText = flavorI18n.minAdvance;
html += '';
}
});
container.innerHTML = html;
container.querySelectorAll('.flavor-slot:not(.busy)').forEach(function(b) {
b.addEventListener('click', function() {
flavorData.time = b.dataset.t;
container.querySelectorAll('.flavor-slot').forEach(function(s) { s.classList.remove('on'); });
b.classList.add('on');
flavorCheckStep1();
});
});
} else {
container.innerHTML = '
';
var cp = document.getElementById('flavorOkCopy');
if (cp) cp.addEventListener('click', function() {
var done = function() { cp.textContent = flavorI18n.okCopied; setTimeout(function() { cp.textContent = flavorI18n.okCopy; }, 2000); };
if (navigator.clipboard && navigator.clipboard.writeText) navigator.clipboard.writeText(code).then(done, function() {});
});
try { flavorContainer.scrollIntoView({behavior: 'smooth', block: 'start'}); } catch (e) {}
if (typeof flavorRunTrackingSnippet === 'function') {
// Snippet de tracking "reserva creada" (Meta Pixel, GA, etc. según lo que haya configurado el restaurante)
flavorRunTrackingSnippet('flavor-tracking-reservation');
// Si el depósito ya se ha cobrado en el mismo flujo, el evento de pago también corresponde ahora
if (depositAmount > 0) flavorRunTrackingSnippet('flavor-tracking-payment');
}
}
function flavorShowError(message) {
flavorContainer.innerHTML =
'
' +
'
\u2717
' +
'
' + flavorI18n.error + '
' +
'
' + message + '
' +
'' +
'
';
}
// =====================
// TOAST
// =====================
function flavorToast(message, type) {
type = type || 'warning';
var existing = document.querySelector('.flavor-toast-modal');
var existingOverlay = document.querySelector('.flavor-toast-overlay');
if (existing) existing.remove();
if (existingOverlay) existingOverlay.remove();
var overlay = document.createElement('div');
overlay.className = 'flavor-toast-overlay';
document.body.appendChild(overlay);
var toast = document.createElement('div');
toast.className = 'flavor-toast-modal';
toast.innerHTML = '
' + message + '
';
document.body.appendChild(toast);
function closeToast() {
toast.classList.remove('show');
overlay.classList.remove('show');
setTimeout(function() { toast.remove(); overlay.remove(); }, 250);
}
overlay.onclick = closeToast;
setTimeout(function() { overlay.classList.add('show'); toast.classList.add('show'); }, 10);
setTimeout(closeToast, 2500);
}
// =====================
// BLOCKED DATES & INIT
// =====================
fetch(flavorRestUrl + 'restaurants/' + flavorRestaurantId + '/blocked-dates')
.then(function(r) { return r.json(); })
.then(function(data) {
if (data.success && data.data) {
flavorBlockedDates = data.data;
flavorRenderCalendar();
flavorSelectFirstAvailableDate();
}
})
.catch(function() { flavorSelectFirstAvailableDate(); });
// Día pedido por URL (?date=AAAA-MM-DD, p. ej. desde el botón del email del menú del día).
// Solo se usa si ese día se puede reservar; si no, se sigue con el primer día disponible.
function flavorTryUrlDate() {
var q;
try { q = new URLSearchParams(window.location.search).get('date'); } catch (e) { return false; }
if (!q || !/^\d{4}-\d{2}-\d{2}$/.test(q)) return false;
var today = (typeof flavorTodayInTz === 'function') ? flavorTodayInTz() : new Date();
today.setHours(0, 0, 0, 0);
var p = q.split('-'), d = new Date(+p[0], +p[1] - 1, +p[2]);
var diff = Math.round((d - today) / 86400000);
if (diff < 0 || diff > flavorMaxAdvanceDays) return false;
if (flavorOpenDays.indexOf(d.getDay()) === -1 || flavorBlockedDates[q]) return false;
if (diff === 0) {
var hour = (typeof flavorGetTzParts === 'function') ? flavorGetTzParts(new Date()).hour : new Date().getHours();
if (24 - hour < flavorMinAdvanceHours) return false;
}
flavorCalMonth = d.getMonth(); flavorCalYear = d.getFullYear();
flavorSelectDate(q);
return true;
}
function flavorSelectFirstAvailableDate() {
if (flavorTryUrlDate()) return;
var today = new Date(); today.setHours(0,0,0,0);
for (var i = 0; i <= flavorMaxAdvanceDays; i++) {
var check = new Date(today);
check.setDate(today.getDate() + i);
var dateStr = formatDateLocal(check);
if (flavorOpenDays.indexOf(check.getDay()) === -1) continue;
if (flavorBlockedDates[dateStr]) continue;
if (i === 0) { var hoursLeft = 24 - new Date().getHours(); if (hoursLeft < flavorMinAdvanceHours) continue; }
flavorSelectDate(dateStr);
return;
}
}
function flavorSelectDate(dateStr) {
flavorData.date = dateStr;
flavorData.time = null;
flavorRenderCalendar();
flavorLoadTimeSlots(dateStr);
}
// =====================
// GESTION DE RESERVAS
// =====================
var flavorCurrentReservation = null;
var flavorManagementToken = '';
function flavorShowManage() {
document.querySelectorAll('.flavor-panel').forEach(function(s) { s.style.display = 'none'; });
document.querySelector('.flavor-stepper').style.display = 'none';
document.querySelector('.flavor-manage-view').style.display = 'block';
document.querySelector('.flavor-manage-search').style.display = 'block';
document.querySelector('.flavor-manage-result').style.display = 'none';
document.querySelector('.flavor-manage-modify').style.display = 'none';
}
function flavorHideManage() {
document.querySelector('.flavor-manage-view').style.display = 'none';
document.querySelectorAll('.flavor-panel').forEach(function(s) { s.style.display = 'none'; });
document.getElementById('flavorPanel1').style.display = 'block';
document.getElementById('flavorPanel1').classList.add('active');
document.querySelector('.flavor-stepper').style.display = 'flex';
flavorStep = 1;
flavorUpdateStepper();
flavorCurrentReservation = null;
}
function flavorManageTab(tab) {
document.querySelectorAll('.flavor-manage-tab').forEach(function(t) { t.classList.remove('active'); });
document.querySelectorAll('.flavor-manage-tab-content').forEach(function(c) { c.classList.remove('active'); });
document.querySelector('.flavor-manage-tab-content[data-tab="' + tab + '"]').classList.add('active');
event.target.classList.add('active');
}
function flavorSearchByCode() {
var code = document.getElementById('flavor-manage-code').value.trim();
if (!code) { flavorToast(flavorI18n.enterCode); return; }
flavorSearchReservation({ code: code });
}
function flavorSearchByData() {
var firstName = document.getElementById('flavor-manage-firstname').value.trim();
var lastName = document.getElementById('flavor-manage-lastname').value.trim();
var phone = document.getElementById('flavor-manage-phone').value.trim();
var date = document.getElementById('flavor-manage-date').value;
var time = document.getElementById('flavor-manage-time').value;
if (!firstName) { flavorToast(flavorI18n.enterName); return; }
if (!lastName) { flavorToast(flavorI18n.enterLastName); return; }
if (!phone) { flavorToast(flavorI18n.enterPhone); return; }
if (!date) { flavorToast(flavorI18n.enterDate); return; }
if (!time) { flavorToast(flavorI18n.enterTime); return; }
flavorSearchReservation({ first_name: firstName, last_name: lastName, phone: phone, date: date, time: time + ':00' });
}
function flavorSearchReservation(params) {
document.querySelector('.flavor-loader').style.display = 'flex';
var url = flavorRestUrl + 'reservations/search?restaurant_id=' + flavorRestaurantId;
if (params.code) { url += '&code=' + encodeURIComponent(params.code); }
else {
url += '&first_name=' + encodeURIComponent(params.first_name);
url += '&last_name=' + encodeURIComponent(params.last_name);
url += '&phone=' + encodeURIComponent(params.phone);
url += '&date=' + encodeURIComponent(params.date);
url += '&time=' + encodeURIComponent(params.time);
}
fetch(url)
.then(function(r) { return r.json(); })
.then(function(data) {
document.querySelector('.flavor-loader').style.display = 'none';
if (data.success && data.data) { flavorCurrentReservation = data.data; flavorManagementToken = data.management_token || ''; flavorShowReservationResult(data.data); }
else { flavorToast(data.message || flavorI18n.reservationNotFound, 'error'); }
})
.catch(function() { document.querySelector('.flavor-loader').style.display = 'none'; flavorToast(flavorI18n.searchError, 'error'); });
}
function flavorShowReservationResult(res) {
document.querySelector('.flavor-manage-search').style.display = 'none';
document.querySelector('.flavor-manage-result').style.display = 'block';
document.querySelector('.flavor-manage-modify').style.display = 'none';
var dateParts = res.reservation_date.split('-');
var dateStr = dateParts[2] + '/' + dateParts[1] + '/' + dateParts[0];
var statusText = flavorI18n.confirmed, statusClass = 'confirmed';
if (res.status === 'pending') { statusText = flavorI18n.pending; statusClass = 'pending'; }
if (res.status === 'cancelled') { statusText = flavorI18n.cancelled; statusClass = 'cancelled'; }
document.querySelector('.flavor-reservation-code').textContent = res.reservation_code;
document.querySelector('.flavor-reservation-status').textContent = statusText;
document.querySelector('.flavor-reservation-status').className = 'flavor-reservation-status ' + statusClass;
document.querySelector('.flavor-reservation-date').textContent = dateStr;
document.querySelector('.flavor-reservation-time').textContent = res.reservation_time.substring(0, 5);
document.querySelector('.flavor-reservation-guests').textContent = res.guests + ' ' + flavorI18n.people;
document.querySelector('.flavor-reservation-name').textContent = res.first_name + ' ' + res.last_name;
document.querySelector('.flavor-reservation-email').textContent = res.email || '';
document.querySelector('.flavor-reservation-phone').textContent = res.phone || '';
var allergiesRow = document.querySelector('.flavor-reservation-allergies');
if (res.allergies && res.allergies.trim()) { allergiesRow.style.display = 'flex'; document.querySelector('.flavor-reservation-allergies-text').textContent = res.allergies; } else { allergiesRow.style.display = 'none'; }
var dietaryRow = document.querySelector('.flavor-reservation-dietary');
if (res.dietary_restrictions && res.dietary_restrictions.trim()) { dietaryRow.style.display = 'flex'; document.querySelector('.flavor-reservation-dietary-text').textContent = res.dietary_restrictions; } else { dietaryRow.style.display = 'none'; }
var notesRow = document.querySelector('.flavor-reservation-notes');
if (res.notes && res.notes.trim()) { notesRow.style.display = 'flex'; document.querySelector('.flavor-reservation-notes-text').textContent = res.notes; } else { notesRow.style.display = 'none'; }
var menuSection = document.querySelector('.flavor-reservation-menu');
var hasMenu = (res.menu_starters && res.menu_starters.trim()) || (res.menu_mains && res.menu_mains.trim()) || (res.menu_desserts && res.menu_desserts.trim());
if (hasMenu) {
menuSection.style.display = 'block';
var st = document.querySelector('.flavor-reservation-starters'); if (res.menu_starters && res.menu_starters.trim()) { st.style.display = 'block'; document.querySelector('.flavor-reservation-starters-text').textContent = res.menu_starters; } else { st.style.display = 'none'; }
var mn = document.querySelector('.flavor-reservation-mains'); if (res.menu_mains && res.menu_mains.trim()) { mn.style.display = 'block'; document.querySelector('.flavor-reservation-mains-text').textContent = res.menu_mains; } else { mn.style.display = 'none'; }
var ds = document.querySelector('.flavor-reservation-desserts'); if (res.menu_desserts && res.menu_desserts.trim()) { ds.style.display = 'block'; document.querySelector('.flavor-reservation-desserts-text').textContent = res.menu_desserts; } else { ds.style.display = 'none'; }
} else { menuSection.style.display = 'none'; }
var actionsDiv = document.querySelector('.flavor-manage-actions');
if (res.status === 'cancelled') { actionsDiv.style.display = 'none'; } else { actionsDiv.style.display = 'flex'; }
}
function flavorShowModify() {
document.querySelector('.flavor-manage-result').style.display = 'none';
document.querySelector('.flavor-manage-modify').style.display = 'block';
var res = flavorCurrentReservation;
var select = document.getElementById('flavor-modify-guests');
select.innerHTML = '';
for (var i = flavorMinGuests; i <= Math.min(flavorMaxGuests, 12); i++) {
var opt = document.createElement('option');
opt.value = i; opt.textContent = i + ' ' + (i === 1 ? flavorI18n.person : flavorI18n.people);
if (i === parseInt(res.guests)) opt.selected = true;
select.appendChild(opt);
}
document.getElementById('flavor-modify-date').value = res.reservation_date;
document.getElementById('flavor-modify-first-name').value = res.first_name || '';
document.getElementById('flavor-modify-last-name').value = res.last_name || '';
document.getElementById('flavor-modify-email').value = res.email || '';
document.getElementById('flavor-modify-phone').value = res.phone || '';
document.getElementById('flavor-modify-allergies').value = res.allergies || '';
document.getElementById('flavor-modify-dietary').value = res.dietary_restrictions || '';
document.getElementById('flavor-modify-notes').value = res.notes || '';
document.getElementById('flavor-modify-shared-table').checked = parseInt(res.shared_table) === 1;
document.getElementById('flavor-modify-starters').value = res.menu_starters || '';
document.getElementById('flavor-modify-mains').value = res.menu_mains || '';
document.getElementById('flavor-modify-desserts').value = res.menu_desserts || '';
flavorLoadModifyTimeSlots(res.reservation_date);
}
function flavorLoadModifyTimeSlots(date) {
var select = document.getElementById('flavor-modify-time');
select.innerHTML = '';
var guests = document.getElementById('flavor-modify-guests').value;
fetch(flavorRestUrl + 'restaurants/' + flavorRestaurantId + '/available-slots?date=' + date + '&guests=' + guests)
.then(function(r) { return r.json(); })
.then(function(data) {
select.innerHTML = '';
if (data.success && data.data && data.data.length > 0) {
data.data.forEach(function(slot) {
if (slot.available) { var opt = document.createElement('option'); opt.value = slot.time.substring(0, 5); opt.textContent = slot.time.substring(0, 5); select.appendChild(opt); }
});
var currentTime = flavorCurrentReservation.reservation_time;
var hasCurrentTime = false;
for (var i = 0; i < select.options.length; i++) { if (select.options[i].value === currentTime) { hasCurrentTime = true; break; } }
if (!hasCurrentTime && date === flavorCurrentReservation.reservation_date) {
var opt = document.createElement('option'); opt.value = currentTime; opt.textContent = currentTime.substring(0, 5) + ' ' + flavorI18n.current; opt.selected = true; select.insertBefore(opt, select.firstChild);
}
} else { select.innerHTML = ''; }
})
.catch(function() { select.innerHTML = ''; });
}
document.getElementById('flavor-modify-date').addEventListener('change', function() { flavorLoadModifyTimeSlots(this.value); });
function flavorBackToResult() {
document.querySelector('.flavor-manage-modify').style.display = 'none';
document.querySelector('.flavor-manage-result').style.display = 'block';
}
function flavorSaveModification() {
if (!flavorCurrentReservation) return;
var newTime = document.getElementById('flavor-modify-time').value;
if (!newTime) { flavorToast(flavorI18n.selectTimeFirst); return; }
document.querySelector('.flavor-loader').style.display = 'flex';
fetch(flavorRestUrl + 'reservations/' + flavorCurrentReservation.id + '/modify', {
method: 'PUT',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
management_token: flavorManagementToken,
guests: parseInt(document.getElementById('flavor-modify-guests').value),
reservation_date: document.getElementById('flavor-modify-date').value,
reservation_time: newTime,
first_name: document.getElementById('flavor-modify-first-name').value,
last_name: document.getElementById('flavor-modify-last-name').value,
email: document.getElementById('flavor-modify-email').value,
phone: document.getElementById('flavor-modify-phone').value,
allergies: document.getElementById('flavor-modify-allergies').value,
dietary_restrictions: document.getElementById('flavor-modify-dietary').value,
notes: document.getElementById('flavor-modify-notes').value,
shared_table: document.getElementById('flavor-modify-shared-table').checked ? 1 : 0,
menu_starters: document.getElementById('flavor-modify-starters').value,
menu_mains: document.getElementById('flavor-modify-mains').value,
menu_desserts: document.getElementById('flavor-modify-desserts').value
})
})
.then(function(r) { return r.json(); })
.then(function(data) {
document.querySelector('.flavor-loader').style.display = 'none';
if (data.success) { flavorCurrentReservation = data.data; flavorShowReservationResult(data.data); flavorToast(flavorI18n.modifySuccess, 'success'); }
else { flavorToast(data.message || flavorI18n.modifyError, 'error'); }
})
.catch(function() { document.querySelector('.flavor-loader').style.display = 'none'; flavorToast(flavorI18n.modifyError, 'error'); });
}
function flavorCancelReservation() {
if (!flavorCurrentReservation) return;
var _bl = String(window.BR_DIALOG_LANG || 'es');
BRDialog.confirm(flavorI18n.cancelConfirm, {danger: true, ok: ({es: 'Sí, cancelar', ca: 'Sí, cancel·lar', en: 'Yes, cancel', de: 'Ja, stornieren'})[_bl] || 'Sí, cancelar', cancel: ({es: 'No', ca: 'No', en: 'No', de: 'Nein'})[_bl] || 'No'})
.then(function(ok){ if (ok) flavorCancelReservationGo(); });
}
function flavorCancelReservationGo() {
document.querySelector('.flavor-loader').style.display = 'flex';
fetch(flavorRestUrl + 'reservations/' + flavorCurrentReservation.id + '/cancel-public', { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ management_token: flavorManagementToken }) })
.then(function(r) { return r.json(); })
.then(function(data) {
document.querySelector('.flavor-loader').style.display = 'none';
if (data.success) { flavorCurrentReservation.status = 'cancelled'; flavorShowReservationResult(flavorCurrentReservation); flavorToast(flavorI18n.cancelSuccess, 'success'); }
else { flavorToast(data.message || flavorI18n.cancelError, 'error'); }
})
.catch(function() { document.querySelector('.flavor-loader').style.display = 'none'; flavorToast(flavorI18n.cancelError, 'error'); });
}
// == Init ==
flavorRenderCalendar();
flavorCheckStep1();
// Datos del cliente desde el botón del email del menú (?bk=código cifrado). El servidor lo canjea
// por email, nombre y teléfono; solo se rellenan los campos vacíos.
(function() {
var k;
try { k = new URLSearchParams(window.location.search).get('bk'); } catch (e) { return; }
if (!k) return;
fetch(flavorRestUrl + 'menu-prefill?k=' + encodeURIComponent(k) + '&r=' + encodeURIComponent(flavorRestaurantId))
.then(function(r) { return r.ok ? r.json() : null; })
.then(function(d) {
if (!d || !d.success) return;
function put(id, v) {
var el = document.getElementById(id);
if (!el || !v || el.value) return;
el.value = v;
el.dispatchEvent(new Event('input', { bubbles: true }));
el.dispatchEvent(new Event('change', { bubbles: true }));
}
put('flavor-email', d.email);
put('flavor-first-name', d.first_name);
put('flavor-last-name', d.last_name);
var ph = String(d.phone || '').replace(/\s+/g, '');
if (ph) {
var sel = document.getElementById('flavor-prefix');
if (sel && ph.charAt(0) === '+') {
for (var i = 0; i < sel.options.length; i++) {
var pre = sel.options[i].value || sel.options[i].text;
if (ph.indexOf(pre) === 0) { sel.value = pre; ph = ph.slice(pre.length); break; }
}
}
put('flavor-phone', ph);
}
})
.catch(function() {});
})();
// Detect manage_code in URL
(function() {
var urlParams = new URLSearchParams(window.location.search);
var manageCode = urlParams.get('manage_code');
if (manageCode || window.location.hash === '#manage') {
flavorShowManage();
setTimeout(function() { var el = document.getElementById('manage'); if (el) { window.scrollTo({ top: window.pageYOffset + el.getBoundingClientRect().top - 20, behavior: 'smooth' }); } }, 500);
if (manageCode) { document.getElementById('flavor-manage-code').value = manageCode; setTimeout(function() { flavorSearchReservation({ code: manageCode }); }, 300); }
}
})();
// Detectar retorno de Stripe Checkout externo con ?payment=success (link de pago enviado por email).
// Dispara el snippet de tracking de pago del depósito. Se ejecuta una sola vez y limpiamos el
// parámetro de la URL para que un F5 no vuelva a disparar el evento.
(function() {
try {
var params = new URLSearchParams(window.location.search);
if (params.get('payment') === 'success') {
flavorRunTrackingSnippet('flavor-tracking-payment');
// Limpiar los parámetros payment=success&code=... de la URL sin recargar
if (window.history && window.history.replaceState) {
params.delete('payment');
params.delete('code');
var qs = params.toString();
var cleanUrl = window.location.pathname + (qs ? '?' + qs : '') + window.location.hash;
window.history.replaceState({}, document.title, cleanUrl);
}
}
} catch (e) {}
})();
Miguel Miralles
Miquel Miralles, Treurer's CEO, is part of the owner family, being already the second generation involved in the project. He has a background in economics and law, and has taken numerous courses related to foreign trade, olive agronomy and extra virgin olive oil production techniques. His training and experience of more than 15 years in the world of olive oil are her guarantee to lead this project.
Vollständiger Reiseführer zum mallorquinischen Kunsthandwerk in Porreres, Algaida und Llucmajor: besuchbare Werkstätten, mallorquinisches Ikat, Anreise…