'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);