135 lines
3.9 KiB
PHP
135 lines
3.9 KiB
PHP
<?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);
|