Poprawki w API rachunków i kds

This commit is contained in:
2026-05-24 22:20:23 +02:00
parent 58fae2f0e6
commit f95f578bab
10 changed files with 597 additions and 53 deletions
+134
View File
@@ -0,0 +1,134 @@
<?php
$_GET['table'] = 'O-47';
header('Content-Type: application/json; charset=utf-8');
$serverName = '192.168.20.20';
$connectionOptions = [
'Database' => '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.']));
}
$tableParam = isset($_GET['table']) ? strtolower(trim($_GET['table'])) : '';
if (!$tableParam) {
die(json_encode(['status' => 'success', 'data' => []]));
}
// 1. & 2. & 3. Pobranie dzisiejszych rachunków ze statusem 0
$tsqlBills = "
SELECT
r.ID,
r.Numer,
r.Opis,
s.Nazwa as NazwaStolika
FROM dbo.NGastroDTRachunek r
LEFT JOIN dbo.NGastroStolik s ON s.ID = r.StolikID
WHERE CAST(r.DataOtwarcia as DATE) = CAST(GETDATE() as DATE)
AND r.Status = 0
";
$stmtBills = sqlsrv_query($conn, $tsqlBills);
if ($stmtBills === false) {
die(json_encode(['status' => 'error', 'message' => 'Błąd pobierania rachunków.', 'errors' => sqlsrv_errors()]));
}
$matchedBillIds = [];
$bills = [];
// 4. Filtrujemy rachunki po nazwie stolika (tak jak w JS)
while ($row = sqlsrv_fetch_array($stmtBills, SQLSRV_FETCH_ASSOC)) {
$stolikNazwa = strtolower($row['NazwaStolika'] ?? '');
$opis = strtolower($row['Opis'] ?? '');
// Elastyczne dopasowanie, uwzględnia literówkę 0 zamiast O
$normalizedTableParam = str_replace('o', '0', $tableParam);
$normalizedStolikNazwa = str_replace('o', '0', $stolikNazwa);
$normalizedOpis = str_replace('o', '0', $opis);
if (
$stolikNazwa === $tableParam ||
strpos($stolikNazwa, $tableParam) !== false ||
$opis === $tableParam ||
strpos($opis, $tableParam) !== false ||
$normalizedStolikNazwa === $normalizedTableParam ||
strpos($normalizedStolikNazwa, $normalizedTableParam) !== false ||
strpos($normalizedOpis, $normalizedTableParam) !== false
) {
$billId = $row['ID'];
$matchedBillIds[] = $billId;
$bills[$billId] = [
'id' => $billId,
'numer' => $row['Numer'],
'opis' => $row['Opis'],
'suma' => 0,
'pozycje' => []
];
}
}
if (empty($matchedBillIds)) {
die(json_encode(['status' => 'success', 'data' => []]));
}
// 5. Pobranie pozycji dla dopasowanych rachunków
$inClause = implode("','", $matchedBillIds);
$tsqlItems = "
SELECT
rp.DTRachunekID,
rp.ID as PozycjaID,
ISNULL(NULLIF(t.NazwaNaZamowieniu, ''), t.NazwaTowaru) as NazwaTowaru,
rp.Ilosc,
rp.Cena,
rp._c_Wartosc
FROM dbo.NGastroDTRachunekPozycja rp
LEFT JOIN dbo.NGastroTowar t ON t.ID = rp.TowarID
WHERE rp.DTRachunekID IN ('$inClause')
";
$stmtItems = sqlsrv_query($conn, $tsqlItems);
if ($stmtItems === false) {
die(json_encode(['status' => 'error', 'message' => 'Błąd pobierania pozycji.', 'errors' => sqlsrv_errors()]));
}
while ($row = sqlsrv_fetch_array($stmtItems, SQLSRV_FETCH_ASSOC)) {
$billId = $row['DTRachunekID'];
$nazwa = trim($row['NazwaTowaru'] ?? 'Brak nazwy');
$ilosc = floatval($row['Ilosc']);
$wartosc = floatval($row['_c_Wartosc']);
$cena = floatval($row['Cena']);
// Grouping
$key = $nazwa . "_" . $cena;
if (!isset($bills[$billId]['pozycje'][$key])) {
$bills[$billId]['pozycje'][$key] = [
'nazwa' => $nazwa,
'ilosc' => 0,
'cena' => $cena,
'wartosc' => 0
];
}
$bills[$billId]['pozycje'][$key]['ilosc'] += $ilosc;
$bills[$billId]['pozycje'][$key]['wartosc'] += $wartosc;
$bills[$billId]['suma'] += $wartosc;
}
$finalData = [];
foreach ($bills as $bill) {
$bill['pozycje'] = array_values($bill['pozycje']);
$finalData[] = $bill;
}
echo json_encode([
'status' => 'success',
'data' => $finalData
], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);