Files
karczma-aplikacja-stoliki/api/kds.php

126 lines
4.1 KiB
PHP

<?php
// api_kds.php
header('Content-Type: application/json; charset=utf-8');
require_once __DIR__ . '/../config/database.php';
require_once __DIR__ . '/get_table_name.php';
$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([
'status' => 'error',
'message' => 'Błąd połączenia z bazą danych.',
'errors' => sqlsrv_errors()
]));
}
$tableParam = $myTable;
// Zapytanie SQL wyciągające aktywne pozycje (StatusRealizacji < 4)
// Łączymy NGastroDTRachunekPozycja z NGastroDTRachunek (żeby mieć stolik) i z NGastroTowar (żeby mieć nazwę)
$tsql = "
SELECT
r.StolikID,
s.Nazwa AS NazwaStolika,
r.Numer AS NumerRachunku,
r.Opis,
r.NumerReczny AS NumerRecznyRachunku,
o.Imie AS OtwierajacyImie,
o.Nazwisko AS OtwierajacyNazwisko,
o.Nick AS OtwierajacyNick,
rp.ID AS PozycjaID,
rp.StatusRealizacji,
rp.Ilosc,
rp.DataDodania,
rp.Notatka,
CASE
WHEN rp.NazwaDanieOtwarte != '' THEN rp.NazwaDanieOtwarte
ELSE ISNULL(NULLIF(t.NazwaNaZamowieniu, ''), t.NazwaTowaru)
END AS NazwaTowaru,
ISNULL(NULLIF(tz.NazwaNaZamowieniu, ''), tz.NazwaTowaru) AS NazwaZestawu,
rp.GrupaZestawuID,
rp.TowarID
FROM dbo.NGastroDTRachunekPozycja rp
INNER JOIN dbo.NGastroDTRachunek r ON r.ID = rp.DTRachunekID
LEFT JOIN dbo.NGastroTowar t ON t.ID = rp.TowarID
LEFT JOIN dbo.NGastroTowar tz ON tz.ID = rp.ZestawID
LEFT JOIN dbo.NGastroStolik s ON s.ID = r.StolikID
LEFT JOIN dbo.NGastroUzytkownik u ON u.ID = r.UzytkownikOtwierajacyID
LEFT JOIN dbo.NSysOperator o ON o.ID = u.OperatorID
LEFT JOIN dbo.NGastroKonfiguracjaDrukowaniaZamowien kdz ON kdz.ID = ISNULL(rp.KonfiguracjaDrukowaniaZamowienID, t.KonfiguracjaDrukowaniaZamowienID)
WHERE r.Status = 0
AND rp.StatusRealizacji > 0
AND rp.StatusRealizacji < 4
AND kdz.ID IS NOT NULL
AND CAST(rp.DataDodania AS DATE) = CAST(GETDATE() AS DATE)
AND rp.DataUsuniecia = '1900-01-01'
ORDER BY rp.DataDodania ASC
";
$stmt = sqlsrv_query($conn, $tsql);
if ($stmt === false) {
die(json_encode([
'status' => 'error',
'message' => 'Błąd podczas wykonywania zapytania SQL.',
'errors' => sqlsrv_errors()
]));
}
$pozycje = [];
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
$stolikNazwa = strtolower($row['NazwaStolika'] ?? '');
$opis = strtolower($row['Opis'] ?? '');
$normalizedTableParam = str_replace('o', '0', $tableParam);
$normalizedStolikNazwa = str_replace('o', '0', $stolikNazwa);
$normalizedOpis = str_replace('o', '0', $opis);
$isMatched = false;
if (!$tableParam) {
$isMatched = true;
} else {
$pattern = '/\b' . preg_quote($normalizedTableParam, '/') . '\b/i';
if (
$normalizedStolikNazwa === $normalizedTableParam ||
$normalizedOpis === $normalizedTableParam ||
preg_match($pattern, $normalizedStolikNazwa) ||
preg_match($pattern, $normalizedOpis)
) {
$isMatched = true;
}
}
if ($isMatched) {
if ($row['DataDodania'] instanceof DateTime) {
$row['DataDodania'] = $row['DataDodania']->format('Y-m-d H:i:s');
}
$row['StolikID'] = $row['StolikID'] ? strtoupper($row['StolikID']) : null;
$row['PozycjaID'] = strtoupper($row['PozycjaID']);
$row['TowarID'] = strtoupper($row['TowarID']);
$pozycje[] = $row;
}
}
// Zwracamy czysty JSON
echo json_encode([
'status' => 'success',
'count' => count($pozycje),
'tableName' => strtoupper($myTable),
'data' => $pozycje
], JSON_UNESCAPED_UNICODE);
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
?>