Ukrycie opcji wzywania kelnera

This commit is contained in:
2026-05-27 14:46:19 +02:00
parent 22989d9f9b
commit d54c93623f
8 changed files with 967 additions and 67 deletions

52
parse.js Normal file
View File

@@ -0,0 +1,52 @@
const fs = require('fs');
const html = fs.readFileSync('menu.txt', 'utf8');
const items = [];
const regexCategory = /<div class="rm-category">([\s\S]*?)<\/div>\s*<\/div>/g;
const regexTitle = /class="restaurant-menu-category">([^<]+)<\/a>/;
const regexPosition = /<div class="rmc-position" data-position="([^"]*)" data-category-id="([^"]*)" data-tag="([^"]*)">([\s\S]*?)<\/div>\s*<\/div>\s*<\/div>/g; // wait, the structure is a bit complex for simple regex.
// Let's use basic string splitting.
const cats = html.split('<div class="rm-category">');
cats.shift(); // remove first empty
const result = [];
cats.forEach(catHtml => {
const titleMatch = catHtml.match(/class="restaurant-menu-category">([^<]+)<\/a>/);
const categoryName = titleMatch ? titleMatch[1].trim() : '';
const itemsMatches = catHtml.split('<div class="rmc-position"');
itemsMatches.shift();
const categoryItems = [];
itemsMatches.forEach(itemHtml => {
const idMatch = itemHtml.match(/data-position="([^"]*)"/);
const catIdMatch = itemHtml.match(/data-category-id="([^"]*)"/);
const tagMatch = itemHtml.match(/data-tag="([^"]*)"/);
const imgMatch = itemHtml.match(/<img[^>]+src="([^"]+)"/);
const titleTextMatch = itemHtml.match(/<h4>([^<]+)/);
const descMatch = itemHtml.match(/<span>([^<]*)<\/span>/);
const priceMatch = itemHtml.match(/<div class="rmc-other">\s*<span>([^<]+)<\/span>/);
categoryItems.push({
position: idMatch ? idMatch[1] : '',
categoryId: catIdMatch ? catIdMatch[1] : '',
tag: tagMatch ? tagMatch[1] : '',
image: imgMatch ? imgMatch[1] : '',
title: titleTextMatch ? titleTextMatch[1].trim() : '',
description: descMatch ? descMatch[1].trim() : '',
price: priceMatch ? priceMatch[1].trim() : ''
});
});
result.push({
categoryName,
items: categoryItems
});
});
fs.writeFileSync('public/menu.json', JSON.stringify(result, null, 2));
console.log('Saved public/menu.json');

View File

@@ -113,67 +113,8 @@
</ul>
</nav>
<div class="restaurant-menu-scroll">
<div class="rm-category" data-cat-id="1">
<div class="restaurant-menu-category">Na dobry początek</div>
<div class="rmc-positions">
<div class="rmc-position" data-position="331" data-category-id="1">
<img class="rmc-image" src="https://www.karczmabiesiada.eu/cache/images/files/potrawy/400_320_crop/losos-na-placku.webp" alt="" loading="lazy">
<div class="rmc-title">
<h4>Wędzony łosoś na chrupkim placku ziemniaczanym<span>ze śmietaną i sosem a'la duńskim</span></h4>
</div>
<div class="rmc-other"><span>31,00</span></div>
</div>
<div class="rmc-position" data-position="11" data-category-id="1">
<img class="rmc-image" src="https://www.karczmabiesiada.eu/cache/images/files/menu/400_320_crop/smalczyk.webp" alt="" loading="lazy">
<div class="rmc-title">
<h4>Skiśnięte ogórki i smolec swojej roboty z pieczywem<span></span></h4>
</div>
<div class="rmc-other"><span>28,00</span></div>
</div>
<div class="rmc-position" data-position="12" data-category-id="1">
<img class="rmc-image" src="https://www.karczmabiesiada.eu/cache/images/files/potrawy/400_320_crop/przystawki-Tatar-siekany.webp" alt="" loading="lazy">
<div class="rmc-title">
<h4>Tatar siekany z wołowiny z piklami i pieczywem<span></span></h4>
</div>
<div class="rmc-other"><span>62,00</span></div>
</div>
</div>
</div>
<div class="rm-category" data-cat-id="2">
<div class="restaurant-menu-category">Polywki</div>
<div class="rmc-positions">
<div class="rmc-position" data-position="18" data-category-id="2">
<img class="rmc-image" src="https://www.karczmabiesiada.eu/cache/images/files/wielkanocne-2020/400_320_crop/Karczma-biesiada-stalowa-wola-dania-na-wielkanoc.webp" alt="" loading="lazy">
<div class="rmc-title">
<h4>Żurek na wędzonce z jajkiem w chlebie<span></span></h4>
</div>
<div class="rmc-other"><span>31,00</span></div>
</div>
<div class="rmc-position" data-position="22" data-category-id="2">
<img class="rmc-image" src="https://www.karczmabiesiada.eu/cache/images/files/potrawy/400_320_crop/rosol-z-makaronem.webp" alt="" loading="lazy">
<div class="rmc-title">
<h4>Rosół wiejski z trzech rodzajów mięs z makaronem<span></span></h4>
</div>
<div class="rmc-other"><span>19,00</span></div>
</div>
</div>
</div>
<div class="rm-category" data-cat-id="3">
<div class="restaurant-menu-category">Co przez gospodarza lubiane</div>
<div class="rmc-positions">
<div class="rmc-position" data-position="363" data-category-id="3">
<img class="rmc-image" src="https://www.karczmabiesiada.eu/cache/images/files/aktualnosci/nowe-smaki-lato-2024/400_320_crop/pyszne-jedzenie-karczma-biesiada-6.webp" alt="" loading="lazy">
<div class="rmc-title">
<h4>Schab po zbóju z ogórkiem kiszonym podany z białym sosem i ziemniakami opiekanymi<span></span></h4>
</div>
<div class="rmc-other"><span>53,00</span></div>
</div>
</div>
</div>
<div class="restaurant-menu-scroll" id="menuContainer">
<!-- Dynamiczne menu załaduje się tutaj -->
</div>
</div>
</div> <!-- Koniec menuView -->
@@ -198,10 +139,10 @@
<span class="nav-icon">📖</span>
<span class="nav-label">Menu</span>
</div>
<div class="nav-item action-call" onclick="openWaiterDialog()">
<!-- <div class="nav-item action-call" onclick="openWaiterDialog()">
<span class="nav-icon">🛎️</span>
<span class="nav-label">Kelner</span>
</div>
</div> -->
<div class="nav-item action-bill" onclick="openBillDialog()">
<span class="nav-icon">💳</span>
<span class="nav-label">Rachunek</span>
@@ -280,7 +221,7 @@
<div style="display:flex; gap:12px;">
<button class="btn btn-secondary" style="flex:1;" onclick="goBackToBillList()"
id="btnBackToBills">Wróć</button>
<button class="btn btn-primary" style="flex:2;" onclick="goToStep('stepPayment')">Poproś rachunek</button>
<!-- <button class="btn btn-primary" style="flex:2;" onclick="goToStep('stepPayment')">Poproś rachunek</button> -->
</div>
</div>

View File

@@ -557,11 +557,13 @@ header {
display: flex;
align-items: center;
gap: 10px;
pointer-events: none;
}
.toast.active {
transform: translateX(-50%) translateY(0);
opacity: 1;
pointer-events: auto;
}
/* --- KITCHEN ANIMATION --- */

View File

@@ -798,6 +798,55 @@ window.fetchGUS = function () {
}, 1200);
};
// --- DYNAMIC MENU LOADING ---
async function loadMenu() {
try {
const response = await fetch('menu.json');
if (!response.ok) throw new Error('Nie udało się załadować menu');
const menuData = await response.json();
const container = document.getElementById('menuContainer');
if (!container) return;
container.innerHTML = '';
menuData.forEach(category => {
const catId = category.items.length > 0 ? category.items[0].categoryId : '';
const catDiv = document.createElement('div');
catDiv.className = 'rm-category';
catDiv.setAttribute('data-cat-id', catId);
let html = `<div class="restaurant-menu-category">${category.categoryName}</div>
<div class="rmc-positions">`;
category.items.forEach(item => {
html += `
<div class="rmc-position" data-position="${item.position}" data-category-id="${item.categoryId}">
<img class="rmc-image" src="${item.image}" alt="" loading="lazy">
<div class="rmc-title">
<h4>${item.title}<span>${item.description}</span></h4>
</div>
<div class="rmc-other"><span>${item.price}</span></div>
</div>
`;
});
html += `</div>`;
catDiv.innerHTML = html;
container.appendChild(catDiv);
});
} catch (err) {
console.error('Błąd ładowania menu:', err);
const container = document.getElementById('menuContainer');
if (container) {
container.innerHTML = '<p style="text-align:center; padding: 20px; color: var(--text-muted);">Nie udało się załadować menu.</p>';
}
}
}
// Inicjalizacja ładowania menu
loadMenu();
window.editCompanyData = function () {
const n = document.getElementById("cmpName");
const s = document.getElementById("cmpStreet");
@@ -910,7 +959,7 @@ window.initGeolocation = function () {
if (dist <= MAX_DISTANCE_METERS) {
startApp();
setTimeout(() => showToast(`Lokalizacja zweryfikowana (Dystans: ${Math.round(dist)}m, Dokładność: ${Math.round(accuracy)}m)`), 2000);
// setTimeout(() => showToast(`Lokalizacja zweryfikowana (Dystans: ${Math.round(dist)}m, Dokładność: ${Math.round(accuracy)}m)`), 2000);
} else {
geoMsg.innerHTML = `Wydaje się, że jesteś poza restauracją (ok. ${Math.round(dist)}m od nas).<br>Nasza aplikacja działa tylko na miejscu.<br><br>
<small style="color: #888;">Debug: Twoja odległość: ${Math.round(dist)}m, Dokładność sygnału: ${Math.round(accuracy)}m</small><br><br>

828
public/menu.json Normal file
View File

@@ -0,0 +1,828 @@
[
{
"categoryName": "Na dobry początek",
"items": [
{
"position": "331",
"categoryId": "1",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/potrawy/400_320_crop/losos-na-placku.webp",
"title": "Wędzony łosoś na chrupkim placku ziemniaczanym",
"description": "ze śmietaną i sosem a'la duńskim",
"price": "31,00"
},
{
"position": "11",
"categoryId": "1",
"tag": "kiszone,smalec",
"image": "https://www.karczmabiesiada.eu/cache/images/files/menu/400_320_crop/smalczyk.webp",
"title": "Skiśnięte ogórki i smolec swojej roboty z pieczywem",
"description": "",
"price": "28,00"
},
{
"position": "12",
"categoryId": "1",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/potrawy/400_320_crop/przystawki-Tatar-siekany.webp",
"title": "Tatar siekany z wołowiny z piklami i pieczywem",
"description": "",
"price": "62,00"
},
{
"position": "332",
"categoryId": "1",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/400_320_crop/sledz-w-oleju.webp",
"title": "Śledź w oleju z kwaśnym dżemem morelowo-żurawinowym podany z pieczywem",
"description": "",
"price": "29,00"
},
{
"position": "260",
"categoryId": "1",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/menu/400_320_crop/oscypki.webp",
"title": "Grillowane serki góralskie",
"description": "z żurawiną z Podhala",
"price": "21,00"
},
{
"position": "187",
"categoryId": "1",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/400_320_crop/rydze-z-cebula-na-grzance.webp",
"title": "Rydze z cebulą na grzance",
"description": "",
"price": "33,00"
}
]
},
{
"categoryName": "Polywki",
"items": [
{
"position": "18",
"categoryId": "2",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/wielkanocne-2020/400_320_crop/Karczma-biesiada-stalowa-wola-dania-na-wielkanoc.webp",
"title": "Żurek na wędzonce z jajkiem w chlebie",
"description": "",
"price": "31,00"
},
{
"position": "22",
"categoryId": "2",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/potrawy/400_320_crop/rosol-z-makaronem.webp",
"title": "Rosół wiejski z trzech rodzajów mięs z makaronem",
"description": "",
"price": "19,00"
},
{
"position": "25",
"categoryId": "2",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/potrawy/400_320_crop/zupy-Obszar-kompozycji-5.webp",
"title": "Barszcz czerwony ze swojskimi uszkami",
"description": "",
"price": "26,00"
},
{
"position": "374",
"categoryId": "2",
"tag": "",
"image": "/themes/karczmabiesiadanew/images/icon-menu.jpg",
"title": "Krem z pomidorów z mozzarellą",
"description": "",
"price": "22,00"
},
{
"position": "377",
"categoryId": "2",
"tag": "",
"image": "/themes/karczmabiesiadanew/images/icon-menu.jpg",
"title": "Kwaśnica z żeberkiem",
"description": "",
"price": "26,00"
}
]
},
{
"categoryName": "Co przez gospodarza lubiane, a i Wam polecane",
"items": [
{
"position": "363",
"categoryId": "3",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/aktualnosci/nowe-smaki-lato-2024/400_320_crop/pyszne-jedzenie-karczma-biesiada-6.webp",
"title": "Schab po zbóju z ogórkiem kiszonym podany z białym sosem i ziemniakami opiekanymi",
"description": "",
"price": "53,00"
},
{
"position": "324",
"categoryId": "3",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/potrawy/400_320_crop/miesa-Roladki-z-suszonymi-pomidorami.webp",
"title": "Kurczak z mozarellą i suszonymi pomidorami",
"description": "zawinięty boczkiem z dipem buraczkowym podany z kopytkami",
"price": "41,00"
},
{
"position": "379",
"categoryId": "",
"tag": "",
"image": "/themes/karczmabiesiadanew/images/icon-menu.jpg",
"title": "Polędwiczki w sosie kurkowym z kopytkami i ogórkiem kiszonym",
"description": "",
"price": "54,00"
},
{
"position": "188",
"categoryId": "3",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/400_320_crop/kaczka.webp",
"title": "Soczysta pierś z kaczki",
"description": "z sosem porzeczkowym z kopytkami i bukietem surówek",
"price": "69,00"
},
{
"position": "351",
"categoryId": "3",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/menu/nowosci-2024/400_320_crop/1-1.webp",
"title": "Stek z polędwicy wołowej",
"description": "z puree ziemniaczanym i sosem z zielonego pieprzu",
"price": "99,00"
},
{
"position": "238",
"categoryId": "3",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/potrawy/400_320_crop/syte-koryto.webp",
"title": "Syte koryto (micha mięs na stół)",
"description": "W zestawie podwójna porcja: golonki, karkówki, schabu z kością, kiełbaski baraniej, szaszłyka, bekonu, ziemniaków opiekanych i kapusty zasmażanej,",
"price": "275,00"
}
]
},
{
"categoryName": "Dania mięsne",
"items": [
{
"position": "325",
"categoryId": "3",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/potrawy/400_320_crop/miesa-karczek-grillowany.webp",
"title": "Karczek grillowany z sosem BBQ",
"description": "z ziemniakami opiekanymi i sałatką wiosenną",
"price": "51,00"
},
{
"position": "272",
"categoryId": "3",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/potrawy/400_320_crop/miesa-filet-w-sosie-smietanowo_.webp",
"title": "Filet drobiowy w sosie śmietanowo-koperkowym",
"description": "z ziemniakami gotowanymi i bukietem surówek",
"price": "42,00"
},
{
"position": "273",
"categoryId": "3",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/menu/400_320_crop/filet.webp",
"title": "Filet z kurczaka panierowany",
"description": "z frytkami i surówką z białej kapusty",
"price": "39,00"
},
{
"position": "274",
"categoryId": "3",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/potrawy/400_320_crop/miesa-schabowy2.webp",
"title": "Kotlet schabowy panierowany",
"description": "z ziemniakami opiekanymi i kapustą zasmażaną",
"price": "40,00"
},
{
"position": "326",
"categoryId": "3",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/potrawy/400_320_crop/miesa-golonka1.webp",
"title": "Golonka po chłopsku z rusztu",
"description": "(z kością) z ziemniakami opiekanymi i kapustą zasmażaną",
"price": "58,00"
},
{
"position": "364",
"categoryId": "3",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/aktualnosci/nowe-smaki-lato-2024/400_320_crop/pyszne-jedzenie-karczma-biesiada-8.webp",
"title": "Żeberka pieczone podane na kapuście zasmażanej z ziemniakami opiekanymi",
"description": "",
"price": "56,00"
}
]
},
{
"categoryName": "To co w wodzie pływo",
"items": [
{
"position": "39",
"categoryId": "5",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/menu/400_320_crop/pstrag_nowy.webp",
"title": "Pstrąg pieczony",
"description": "z warzywami sezonowymi i ziemniakami",
"price": "57,00"
},
{
"position": "284",
"categoryId": "5",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/menu/400_320_crop/morszczuk.webp",
"title": "Morszczuk w panierce",
"description": "z frytkami i surówką z marchwii i ananasa",
"price": "40,00"
},
{
"position": "352",
"categoryId": "",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/potrawy/400_320_crop/sandacz-na-sosie-cytrynowym-karczma-biesiada-stalowa-wola.webp",
"title": "Sandacz podany na sosie śmietanowo-cytrynowym",
"description": "z zapiekanką ziemniaczaną i warzywami sezonowymi",
"price": "75,00"
}
]
},
{
"categoryName": "Dania swojskie",
"items": [
{
"position": "45",
"categoryId": "4",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/potrawy/400_320_crop/miesa-placek-po-wiejsku.webp",
"title": "Placek po wiejsku z gulaszem",
"description": "i surówką z białej kapusty",
"price": "40,00"
},
{
"position": "46",
"categoryId": "4",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/potrawy/400_320_crop/nalesniki-ze-szpinakiem.webp",
"title": "Naleśniki ze szpinakiem",
"description": "",
"price": "27,00"
},
{
"position": "47",
"categoryId": "4",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/potrawy/400_320_crop/pierogi-ruskie.webp",
"title": "Pierogi ruskie",
"description": "z omastą lub z patelni",
"price": "27,00"
},
{
"position": "365",
"categoryId": "4",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/aktualnosci/nowe-smaki-lato-2024/400_320_crop/pyszne-jedzenie-karczma-biesiada-3.webp",
"title": "Pierogi z oscypkiem, żurawiną i chipsami z cebulki",
"description": "",
"price": "31,00"
},
{
"position": "353",
"categoryId": "4",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/400_320_crop/pierogi-z-miesem.webp",
"title": "Pierogi z mięsem z omastą lub z patelni",
"description": "",
"price": "29,00"
},
{
"position": "51",
"categoryId": "4",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/potrawy/400_320_crop/golabki-w-sosie-pomidorowym.webp",
"title": "Gołąbki w sosie pomidorowym",
"description": "",
"price": "31,00"
},
{
"position": "52",
"categoryId": "4",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/menu/400_320_crop/placki_z_wedzonka.webp",
"title": "Placki ziemniaczane ze śmietaną",
"description": "",
"price": "31,00"
}
]
},
{
"categoryName": "Makarony",
"items": [
{
"position": "373",
"categoryId": "6",
"tag": "",
"image": "/themes/karczmabiesiadanew/images/icon-menu.jpg",
"title": "Makaron tagliatelle z kurczakiem i szpinakiem w sosie śmietanowym",
"description": "",
"price": "41,00"
},
{
"position": "355",
"categoryId": "6",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/menu/nowosci-2024/400_320_crop/5.webp",
"title": "Makaron tagliatelle z podgrzybkami, gorgonzolą i boczkiem",
"description": "",
"price": "44,00"
}
]
},
{
"categoryName": "Sałatki",
"items": [
{
"position": "321",
"categoryId": "7",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/potrawy/400_320_crop/Salatka-z-ananasem-grillowanym-kurczakiem.webp",
"title": "Sałatka z grillowanym kurczakiem i ananasem",
"description": "Kurczak, ananas, sałata lodowa, jajo, ogórek, pomidor, sos ogrodowy, sos słodkie chili",
"price": "39,00"
},
{
"position": "320",
"categoryId": "7",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/potrawy/400_320_crop/salatka-grecka.webp",
"title": "Sałatka Grecka",
"description": "Ser favita, oliwki, cebula, ogórek, pomidor, sałata lodowa, sos ogrodowy",
"price": "37,00"
},
{
"position": "322",
"categoryId": "7",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/potrawy/400_320_crop/salatka-cezar.webp",
"title": "Sałatka Cezar",
"description": "Z kurczakiem, sosem czosnkowym, sałatą lodową, ser corregio i grzankami",
"price": "44,00"
}
]
},
{
"categoryName": "Burgery",
"items": [
{
"position": "361",
"categoryId": "",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/potrawy/400_320_crop/Burger-wolowy-karczma-biesiada-stalowa-wola.webp",
"title": "Buła z wołowiną",
"description": "",
"price": "41,00"
},
{
"position": "362",
"categoryId": "",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/menu/nowosci-2024/400_320_crop/3.webp",
"title": "Buła z kurczakiem",
"description": "",
"price": "38,00"
}
]
},
{
"categoryName": "Dania dla dzieci",
"items": [
{
"position": "287",
"categoryId": "9",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/400_320_crop/rosol-dla-dzieci.webp",
"title": "Rosół z makaronem",
"description": "porcja dziecięca",
"price": "14,00"
},
{
"position": "293",
"categoryId": "9",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/potrawy/400_320_crop/dzieci-nuggetsy-z-kurczaka.webp",
"title": "Nuggetsy z kurczaka",
"description": "z frytkami i surówką z marchwii i ananasa",
"price": "33,00"
},
{
"position": "294",
"categoryId": "9",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/400_320_crop/filet-z-frytkami-dla-dzieci.webp",
"title": "Filet z kurczaka z frytkami i bukietem surówek",
"description": "porcja dziecięca",
"price": "27,00"
},
{
"position": "295",
"categoryId": "9",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/400_320_crop/morszczuk-w-panierce-dla-dzieci.webp",
"title": "Morszczuk w panierce",
"description": "z ziemniakami i surówką z białej kapusty (porcja dziecięca)",
"price": "27,00"
},
{
"position": "296",
"categoryId": "9",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/400_320_crop/filet-w-sosie-dla-dzieci.webp",
"title": "Filet w sosie śmietanowo-koperkowym",
"description": "z ziemniakami gotowanymi (porcja dziecięca)",
"price": "28,00"
},
{
"position": "298",
"categoryId": "9",
"tag": "deser",
"image": "https://www.karczmabiesiada.eu/cache/images/files/menu/400_320_crop/nalesniki.webp",
"title": "Naleśniki z serem",
"description": "",
"price": "24,00"
},
{
"position": "299",
"categoryId": "9",
"tag": "deser",
"image": "https://www.karczmabiesiada.eu/cache/images/files/potrawy/400_320_crop/dzieci-Nalesniki-z-nutella.webp",
"title": "Naleśniki z nutellą",
"description": "",
"price": "28,00"
}
]
},
{
"categoryName": "Dodatki do drugich dań",
"items": [
{
"position": "56",
"categoryId": "8",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/400_320_crop/DSC088432.webp",
"title": "Ziemniaki gotowane",
"description": "",
"price": "10,00"
},
{
"position": "57",
"categoryId": "8",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/potrawy/400_320_crop/dodatki-ziemniaki-opiekane.webp",
"title": "Ziemniaki opiekane",
"description": "",
"price": "11,00"
},
{
"position": "58",
"categoryId": "8",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/400_320_crop/frytki.webp",
"title": "Frytki",
"description": "",
"price": "12,00"
},
{
"position": "380",
"categoryId": "",
"tag": "",
"image": "/themes/karczmabiesiadanew/images/icon-menu.jpg",
"title": "Kopytka",
"description": "",
"price": "11,00"
},
{
"position": "61",
"categoryId": "8",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/menu/400_320_crop/bukiet.webp",
"title": "Bukiet surówek",
"description": "",
"price": "12,00"
},
{
"position": "279",
"categoryId": "8",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/menu/400_320_crop/salatka-wiosenna.webp",
"title": "Sałatka wiosenna",
"description": "Pomidor, ogórek, papryka na liściu sałaty z lekkim sosem ogrodowym",
"price": "11,00"
},
{
"position": "62",
"categoryId": "8",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/menu/400_320_crop/3.webp",
"title": "Surówka z białej kapusty",
"description": "",
"price": "10,00"
},
{
"position": "67",
"categoryId": "8",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/menu/400_320_crop/buraczki.webp",
"title": "Surówka z buraczków",
"description": "",
"price": "10,00"
},
{
"position": "63",
"categoryId": "8",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/menu/400_320_crop/2.webp",
"title": "Surówka z marchwi i ananasa",
"description": "",
"price": "10,00"
},
{
"position": "65",
"categoryId": "8",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/menu/400_320_crop/kapusta-zasmazana.webp",
"title": "Kapusta zasmażana",
"description": "",
"price": "12,00"
},
{
"position": "381",
"categoryId": "",
"tag": "",
"image": "/themes/karczmabiesiadanew/images/icon-menu.jpg",
"title": "Mizeria",
"description": "",
"price": "11,00"
},
{
"position": "66",
"categoryId": "8",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/menu/400_320_crop/ogorek-kiszony.webp",
"title": "Ogórek kiszony",
"description": "",
"price": "10,00"
},
{
"position": "68",
"categoryId": "8",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/potrawy/400_320_crop/dodatki-Chlebek-swojski-z-ziarnami.webp",
"title": "Chlebek swojski",
"description": "",
"price": "6,00"
}
]
},
{
"categoryName": "Cosik na słodko",
"items": [
{
"position": "77",
"categoryId": "10",
"tag": "deser",
"image": "https://www.karczmabiesiada.eu/cache/images/files/400_320_crop/szarlotka.webp",
"title": "Szarlotka na gorąco z gałką lodów",
"description": "",
"price": "26,00"
},
{
"position": "78",
"categoryId": "10",
"tag": "deser",
"image": "https://www.karczmabiesiada.eu/cache/images/files/menu/400_320_crop/photo_2024-07-17_13-24-30.webp",
"title": "Sernik na musie truskawkowym",
"description": "",
"price": "24,00"
},
{
"position": "382",
"categoryId": "",
"tag": "",
"image": "/themes/karczmabiesiadanew/images/icon-menu.jpg",
"title": "Fondant czekoladowy na ciepło podany na sosie wiśniowym z gałką lodów",
"description": "",
"price": "31,00"
},
{
"position": "327",
"categoryId": "10",
"tag": "deser",
"image": "https://www.karczmabiesiada.eu/cache/images/files/potrawy/400_320_crop/deser-3.webp",
"title": "Deser lodowy",
"description": "3 gałki, smaki do wyboru",
"price": "20,00"
},
{
"position": "292",
"categoryId": "10",
"tag": "deser",
"image": "https://www.karczmabiesiada.eu/cache/images/files/potrawy/400_320_crop/deser-lodowy-dla-dzieci.webp",
"title": "Mini deser lodowy",
"description": "2 gałki, smaki do wyboru",
"price": "17,00"
}
]
},
{
"categoryName": "Napitki",
"items": [
{
"position": "81",
"categoryId": "11",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/menu/400_320_crop/photo_2024-07-17_13-24-04.webp",
"title": "Espresso",
"description": "",
"price": "9,00"
},
{
"position": "82",
"categoryId": "11",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/400_320_crop/kawa-czarna.webp",
"title": "Kawa czarna",
"description": "",
"price": "10,00"
},
{
"position": "83",
"categoryId": "11",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/menu/400_320_crop/kawa-biala1.webp",
"title": "Kawa biała",
"description": "",
"price": "11,00"
},
{
"position": "84",
"categoryId": "11",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/potrawy/400_320_crop/napoje-kawa-cappuccino.webp",
"title": "Cappuccino",
"description": "",
"price": "14,00"
},
{
"position": "86",
"categoryId": "11",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/400_320_crop/latte.webp",
"title": "Latte Machiato",
"description": "",
"price": "14,00"
},
{
"position": "90",
"categoryId": "11",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/400_320_crop/herbata-czarna.webp",
"title": "Herbata czarna",
"description": "",
"price": "10,00"
},
{
"position": "202",
"categoryId": "11",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/menu/400_320_crop/herbata1.webp",
"title": "Herbata Richmont",
"description": "",
"price": "14,00"
},
{
"position": "329",
"categoryId": "11",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/menu/400_320_crop/herbata-owocowa1.webp",
"title": "Herbata owocowa Richmont",
"description": "",
"price": "14,00"
},
{
"position": "330",
"categoryId": "11",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/menu/400_320_crop/photo_2024-07-19_08-00-49.webp",
"title": "Herbata zielona Richmont",
"description": "",
"price": "14,00"
}
]
},
{
"categoryName": "Napitki dla wysusonyk",
"items": [
{
"position": "301",
"categoryId": "11",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/potrawy/400_320_crop/napoje-lemoniady.webp",
"title": "Orzeźwiająca lemoniada",
"description": "",
"price": "18,00"
},
{
"position": "302",
"categoryId": "11",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/400_320_crop/modzajto-light.webp",
"title": "Modżajto light",
"description": "Drink bezalkoholowy",
"price": "20,00"
},
{
"position": "304",
"categoryId": "11",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/400_320_crop/sok-wyciskany.webp",
"title": "Sok wyciskany ze świeżych pomarańczy lub grejpfrutów",
"description": "",
"price": "20,00"
},
{
"position": "305",
"categoryId": "11",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/logos/400_320_crop/logo-cocacola.webp",
"title": "Coca-Cola, Coca-Cola zero, Fanta, Sprite",
"description": "",
"price": "11,00"
},
{
"position": "309",
"categoryId": "11",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/logos/400_320_crop/Kinley.webp",
"title": "Tonic Kinley",
"description": "Tonic Water",
"price": "11,00"
},
{
"position": "310",
"categoryId": "11",
"tag": "woda",
"image": "https://www.karczmabiesiada.eu/cache/images/files/logos/400_320_crop/logo-kropla.webp",
"title": "Kropla Beskidu 330ml",
"description": "gazowana, niegazowana",
"price": "9,00"
},
{
"position": "359",
"categoryId": "",
"tag": "",
"image": "/themes/karczmabiesiadanew/images/icon-menu.jpg",
"title": "Dzbanek wody gazowana/niegazowana",
"description": "",
"price": "19,00"
},
{
"position": "307",
"categoryId": "11",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/logos/400_320_crop/logo-fuzetea.webp",
"title": "Fuzetea",
"description": "cytrynowa z trawą cytrynową, brzoskwiniowa z hibiskusem",
"price": "10,00"
},
{
"position": "308",
"categoryId": "11",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/logos/400_320_crop/logo-cappy.webp",
"title": "Cappy",
"description": "pomarańcza, jabłko, multiwitamina, czarna porzeczka, grejpfrut",
"price": "10,00"
},
{
"position": "312",
"categoryId": "11",
"tag": "",
"image": "https://www.karczmabiesiada.eu/cache/images/files/logos/400_320_crop/logo-burn.webp",
"title": "Burn",
"description": "napój energetyczny",
"price": "13,00"
}
]
}
]

View File

@@ -5,7 +5,7 @@ $tsql = "SELECT ID, Nazwa FROM dbo.NGastroStolik ORDER BY Nazwa";
$stmt = sqlsrv_query($conn, $tsql);
$host = $_SERVER['HTTP_HOST'] ?? 'localhost';
$baseUrl = "http://$host/karczma-stoliki/public/stolik2_api.html?h=";
$baseUrl = "https://$host/app/public/app.html?h=";
echo "<!DOCTYPE html>
<html lang='pl'>

View File

@@ -293,6 +293,7 @@
orders[orderId] = {
number: orderId,
stolik: item.NazwaStolika || item.StolikID,
stolikId: item.StolikID,
time: item.DataDodania,
groups: {}
};
@@ -327,7 +328,8 @@
sortedOrders.forEach(order => {
const timeStr = new Date(order.time).toLocaleTimeString([], {hour: '2-digit', minute:'2-digit'});
const stolikText = order.stolik ? `STOLIK: ${order.stolik}` : 'BRAK STOLIKA';
const stolikLink = order.stolikId ? `<a href="../app.html?h=${order.stolikId}" target="_blank" style="color: var(--accent); text-decoration: underline;">STOLIK: ${order.stolik}</a>` : `STOLIK: ${order.stolik}`;
const stolikText = order.stolik ? stolikLink : 'BRAK STOLIKA';
let itemsHtml = '';

26
verify.js Normal file
View File

@@ -0,0 +1,26 @@
const fs = require('fs');
const txt = fs.readFileSync('menu.txt', 'utf8');
const json = JSON.parse(fs.readFileSync('public/menu.json', 'utf8'));
const txtItemCount = (txt.match(/<div class="rmc-position"/g) || []).length;
const txtCategoryCount = (txt.match(/<div class="rm-category">/g) || []).length - 1; // -1 because the first split in the previous script had an empty category if there was a preceding tag? Actually, let's just count `class="restaurant-menu-category"`
const txtCatNameCount = (txt.match(/class="restaurant-menu-category">/g) || []).length;
let jsonItemCount = 0;
json.forEach(cat => {
jsonItemCount += cat.items.length;
});
console.log(`Menu.txt item count: ${txtItemCount}`);
console.log(`JSON item count: ${jsonItemCount}`);
console.log(`Menu.txt category count: ${txtCatNameCount}`);
console.log(`JSON category count: ${json.length}`);
if (txtItemCount === jsonItemCount && txtCatNameCount === json.length) {
console.log("MATCH: Wszystkie pozycje i kategorie zostały prawidłowo przeniesione.");
} else {
console.log("MISMATCH: Występują braki!");
}