diff --git a/api_bills.php b/api/bills.php similarity index 91% rename from api_bills.php rename to api/bills.php index 6939d2e..042cb3a 100644 --- a/api_bills.php +++ b/api/bills.php @@ -1,20 +1,16 @@ 'Gastro', - 'Uid' => 'sa', - 'PWD' => 'karczma!@#26', - 'CharacterSet' => 'UTF-8', -]; -$conn = sqlsrv_connect($serverName, $connectionOptions); -if (!$conn) { - die(json_encode(['status' => 'error', 'message' => 'Błąd połączenia.'])); -} +require_once __DIR__ . '/../config/database.php'; +require_once __DIR__ . '/get_table_name.php'; -$tableParam = isset($_GET['table']) ? strtolower(trim($_GET['table'])) : ''; -// Usunąłem die() na pustym tableParam, aby ułatwić Ci testowanie w przeglądarce! +$hashParam = isset($_GET['h']) ? trim($_GET['h']) : ''; +$tableParam = getTableNameByHash($conn, $hashParam); +$tableParam = strtolower($tableParam); + +if (empty($tableParam)) { + die(json_encode(['status' => 'success', 'data' => []])); +} // 1. & 2. & 3. Pobranie dzisiejszych rachunków ze statusem 0 $tsqlBills = " @@ -175,5 +171,6 @@ foreach ($bills as $bill) { echo json_encode([ 'status' => 'success', + 'tableName' => strtoupper($tableParam), 'data' => $finalData ], JSON_UNESCAPED_UNICODE); diff --git a/api/cache/tables_cache.json b/api/cache/tables_cache.json new file mode 100644 index 0000000..813a479 --- /dev/null +++ b/api/cache/tables_cache.json @@ -0,0 +1 @@ +{"00E3F7CD-2DD6-4719-ABCE-FE45AADB6E11":"STOLIK 1","A7B40445-11F2-4078-AAE2-4FE70886C745":"STOLIK 2","7F434E77-5F23-49CD-8FD5-CA6EED6F9FD3":"STOLIK 3","28AF701C-4664-49BE-A5AB-F4AA60A47DF2":"STOLIK 4","59491B8A-EB04-4981-B825-CD644639247B":"STOLIK 5","C6B285A4-6DFC-4254-8195-20339C56D9DF":"STOLIK 6","585BA56A-5A33-4A9A-B2C0-168088500010":"STOLIK 7","C2AE32AD-C283-43D6-BB84-D5AE1E81CA6E":"STOLIK 8","E62159AC-E76A-400E-B883-144FB3F0EDAC":"STOLIK 9","86949E9C-B276-4A0C-8C04-CC1689D03D33":"STOLIK 11","72ADEDAC-BE8C-4AB6-9EA1-563C31DBF3C4":"STOLIK 11A","12EF66B0-D639-42FD-A4F1-9420AB65FB18":"STOLIK 10","FB62083F-7F98-42AA-B61E-CEA28F31717F":"STOLIK 13","13E84A2D-C4A3-4122-B166-9C42C011FA80":"STOLIK 14","480EA2AF-6C0C-40AE-9422-84CFC026D0B7":"STOLIK 15","A1B032B9-D849-4E16-8B27-46E3A45D0F86":"STOLIK 16","8E48ED78-3202-461F-A140-74FF63A50E9D":"STOLIK 17","B6D6D5A8-252C-43BA-8B87-6F9CAE39A747":"STOLIK 23","D799A844-B4E7-4025-94E2-8147E93DC525":"STOLIK 22","EF848BE1-DB17-42D7-A9C6-27B753F161B1":"STOLIK 21","FA6061CC-FA66-4474-9EB6-F26483596826":"STOLIK 20","92367DDA-B500-4C40-885A-0574163DDBBC":"STOLIK 19","0C64E565-9823-439C-B6D3-6FD38251F289":"STOLIK 18","A825B28F-3E79-4A3A-887C-A72F6BAFB299":"STOLIK T_24","4CD3FB15-7A6E-4FE7-8C48-07AB57CE5FBC":"STOLIK T_25","55283F68-78A0-4D00-9B47-FD305370932F":"STOLIK T_30","42A76757-3E9A-450D-A9C1-67A35A83F04A":"STOLIK T_29","D80DE0F0-5591-4ECE-8AD4-01CD77508D10":"O-65","60356B27-5569-4504-AFE2-E349155957EE":"0-64","1B78C97A-C555-44E2-A60E-D8EC251034C7":"O-63","43731846-7C88-4E86-9DBC-C4BB5EDD313F":"O-61","2304DE24-398C-4854-A352-78F6A6B8CFAB":"0-62","FB6E8FAD-3E35-4CF2-B604-59A140A09D84":"O-31","D06E92B4-7E45-46BA-92FC-DF4D6C7F0665":"O-32","54E81D67-D63C-49E5-B64F-8952D1CEA50F":"O-33","A44BB845-9950-47E4-90C8-CAFF1FF44F90":"O-34","09F2601D-C08C-498D-8376-27BDA690750A":"O-35","935BA7EE-1883-4B30-B581-48B72210BBDB":"O-36","F8052EE2-41BE-4286-B4F6-1361C1713270":"0-37","3EE3DF0A-70B2-47CC-848A-E1E7D23C64BB":"0-40","D57FCE56-BD9A-4BA9-8B37-A7E9B7DFDCE1":"0-37A","BB439A64-E7B9-4460-A9A1-BA06908FABC7":"O-38A","0CA2F62E-5EAB-4214-8B71-52ED86DCAF88":"O-38","EABA9383-59B5-4FCC-B45C-2CAF5DFEDC5C":"O-39","23ED63BF-D70E-4FA7-990E-BF91DD1E80C6":"O-40A","C626612E-AC85-41A4-9BEF-44231D5FCAA6":"O-41A","BC97200A-3334-4D49-A51A-0F20CF7B6E2D":"0-44","B54B052F-A284-4025-9F50-8345416AFE32":"0-45","AEEBA14C-0E0F-4E59-9EF2-7D95953DECF8":"O-46","5D1BF524-F8B3-4D34-BEF5-9BA1A25E0475":"O-47","266E2DE1-96E5-430C-80BE-1564B7E2A7C0":"O-48","3F1E9A2F-EF23-44DE-8D7D-0EE2398CAA45":"O-38","B764B09A-73FB-40C1-8788-B2940EC22756":"O-39","AD105452-3A99-4ED5-8E64-6AB2EABC7F37":"O-41","5F09DAC8-219C-4912-8190-DE8D90789DA4":"O-42","F63FA7C0-FE0A-454B-BF81-A63BA6EDA395":"0-72","1CCEC9F0-A636-42DD-8D78-70F3E8F06F31":"O-39A","8BE52ACA-4505-472A-9EEE-B1CD8F56F136":"O-42A","59B296A3-54FB-47E8-A6C5-ABFC07D921DC":"O-48A","DCE351C7-4C51-4892-A736-C43A6258D35A":"O-48B","E25860EF-285C-46E8-938C-67CEC2C1174A":"O-48","A116FD34-6A57-4819-A809-FA02AD834B4E":"O-70","F36A0857-964E-4BC4-B130-653E76874476":"O-71","BE4C3E15-016B-4C30-9023-0CF1527AE732":"C-55","D17FE879-BD11-4EBF-908C-E69E9BBE6FBB":"C-56","B0606B71-0310-46C4-9993-2408C1BBF26B":"C-59","7BC90104-2A30-4BE9-B6A8-82D8EB716E7A":"C-60","F59C03AB-60FE-4560-BB23-5070F4D64394":"C-57","02D53EE2-B1CF-4114-B56C-1D41FFDBC6E9":"C-58","57AF1C72-5CE5-4573-A026-D8D99D30C50D":"C-49A","5CB1B9E5-77E5-4A85-A1CC-6D950F696C60":"C-49","DB4CF965-C41D-4621-9039-B9F2BBD3AB3B":"C-50","2DD0A8F1-637C-4DB7-87D6-4B8D9276730C":"C-51","0116D15C-3378-48A6-ADB4-5AE4B090929D":"C-52","3C667D41-0F3A-446E-A96B-8EFD33596D89":"C-52","16D24F95-D9BA-4419-AFFD-F149D0B7CD50":"C-53"} \ No newline at end of file diff --git a/api/get_table_name.php b/api/get_table_name.php new file mode 100644 index 0000000..07432af --- /dev/null +++ b/api/get_table_name.php @@ -0,0 +1,40 @@ + 'Gastro', - 'Uid' => 'sa', - 'PWD' => 'karczma!@#26', - 'CharacterSet' => 'UTF-8', -]; +require_once __DIR__ . '/../config/database.php'; +require_once __DIR__ . '/get_table_name.php'; -// Połączenie z bazą -$conn = sqlsrv_connect($serverName, $connectionOptions); +$hashParam = isset($_GET['h']) ? trim($_GET['h']) : ''; +$myTable = getTableNameByHash($conn, $hashParam); +$myTable = strtolower($myTable); + +$isKitchen = (isset($_GET['kds_secret']) && $_GET['kds_secret'] === 'karczma_kuchnia'); + +if (empty($myTable) && !$isKitchen) { + die(json_encode(['status' => 'success', 'count' => 0, 'data' => []])); +} if (!$conn) { die(json_encode([ @@ -22,7 +23,7 @@ if (!$conn) { ])); } -$tableParam = isset($_GET['table']) ? strtolower(trim($_GET['table'])) : ''; +$tableParam = $myTable; // Zapytanie SQL wyciągające aktywne pozycje (StatusRealizacji < 4) // Łączymy NGastroDTRachunekPozycja z NGastroDTRachunek (żeby mieć stolik) i z NGastroTowar (żeby mieć nazwę) @@ -110,8 +111,9 @@ while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) { echo json_encode([ 'status' => 'success', 'count' => count($pozycje), + 'tableName' => strtoupper($myTable), 'data' => $pozycje -]); +], JSON_UNESCAPED_UNICODE); sqlsrv_free_stmt($stmt); sqlsrv_close($conn); diff --git a/config/database.php b/config/database.php new file mode 100644 index 0000000..fd376ac --- /dev/null +++ b/config/database.php @@ -0,0 +1,20 @@ + 'Gastro', + 'Uid' => 'sa', + 'PWD' => 'karczma!@#26', + 'CharacterSet' => 'UTF-8', +]; + +$conn = sqlsrv_connect($serverName, $connectionOptions); + +if (!$conn) { + die(json_encode([ + 'status' => 'error', + 'message' => 'Błąd połączenia z bazą danych.', + 'errors' => sqlsrv_errors() + ], JSON_UNESCAPED_UNICODE)); +} diff --git a/ai.txt b/docs/ai.txt similarity index 100% rename from ai.txt rename to docs/ai.txt diff --git a/demo_json_kds.txt b/docs/demo_json_kds.txt similarity index 100% rename from demo_json_kds.txt rename to docs/demo_json_kds.txt diff --git a/package-lock.json b/legacy/package-lock.json similarity index 100% rename from package-lock.json rename to legacy/package-lock.json diff --git a/package.json b/legacy/package.json similarity index 100% rename from package.json rename to legacy/package.json diff --git a/server.js b/legacy/server.js similarity index 100% rename from server.js rename to legacy/server.js diff --git a/public/assets/js/stolik2_api.js b/public/assets/js/stolik2_api.js index 5a250e7..e266544 100644 --- a/public/assets/js/stolik2_api.js +++ b/public/assets/js/stolik2_api.js @@ -7,20 +7,22 @@ window.kitchenAnimations = [ ]; window.selectedAnimationHtml = null; -const params = new URLSearchParams(location.search); - let tableParam = (params.get("table") || "").trim(); + const params = new URLSearchParams(location.search); + let hashParam = (params.get("h") || "").trim(); - // Jeśli brak numeru stolika w URL – zapytaj użytkownika - if (!tableParam) { - const input = prompt("Podaj numer stolika:"); + // Jeśli brak hasha w URL – zapytaj użytkownika (np. do testów) + if (!hashParam) { + const input = prompt("Podaj bezpieczny hash stolika (wymagane):"); const trimmed = (input || "").trim(); if (trimmed) { const newUrl = new URL(location.href); - newUrl.searchParams.set("table", trimmed); + newUrl.searchParams.set("h", trimmed); location.replace(newUrl.toString()); } } + let tableParam = ""; // Puste, zostanie uzupełnione przez backend + // UI Elements const loadingScreen = document.getElementById("loadingScreen"); const loaderMsg = document.getElementById("loaderMsg"); @@ -338,15 +340,20 @@ const params = new URLSearchParams(location.search); // API Fetch Logic async function fetchOrders() { try { - if (!tableParam) { + if (!hashParam) { updateUI([]); return; } - const response = await fetch(`../api_kds.php?table=${encodeURIComponent(tableParam)}`); + const response = await fetch(`../api/kds.php?h=${encodeURIComponent(hashParam)}`); const result = await response.json(); if (result.status === 'success') { + if (result.tableName && result.tableName !== '') { + tableLabel.textContent = `Stolik ${result.tableName}`; + tableParam = result.tableName; // Aktualizacja do właściwej nazwy na poczet innych zapytań + } + // API teraz samo filtruje i zwraca tylko to co nas interesuje (za pomocą mocnego wyrażenia regularnego) const matches = result.data; @@ -434,7 +441,7 @@ const params = new URLSearchParams(location.search); goToStep("stepBillList"); try { - const res = await fetch(`../api_bills.php?table=${encodeURIComponent(tableParam)}`); + const res = await fetch(`../api/bills.php?h=${encodeURIComponent(hashParam)}`); const result = await res.json(); if (result.status === 'success' && result.data.length > 0) { diff --git a/public/staff/generator.php b/public/staff/generator.php new file mode 100644 index 0000000..922e9e9 --- /dev/null +++ b/public/staff/generator.php @@ -0,0 +1,50 @@ + + +
+ +Skopiuj poniższe linki lub wygeneruj z nich kody QR do umieszczenia na stolikach.
+| Nazwa stolika | +Hash (ID z bazy) | +Bezpieczny Link (KOD QR) | +
|---|---|---|
| $nazwa | +$id | +$link | +