feat: add project documentation and development portal index page
This commit is contained in:
57
README.md
Normal file
57
README.md
Normal file
@@ -0,0 +1,57 @@
|
||||
# Karczma-Stoliki 🍻
|
||||
|
||||
System podglądu zamówień (KDS) oraz interaktywny panel dla gości restauracji, oparty na integracji z bazą MS SQL programu Gastro.
|
||||
|
||||
Aplikacja rozwiązuje problem sprawdzania statusu przygotowania zamówienia przez gości przy stoliku oraz udostępnia widok produkcyjny (Kitchen Display System) dla personelu na kuchni.
|
||||
|
||||
---
|
||||
|
||||
## 🏗 Struktura Katalogów
|
||||
|
||||
Projekt jest podzielony wg poniższej struktury:
|
||||
|
||||
```text
|
||||
karczma-stoliki/
|
||||
├── api/ # Endpointy Backendowe (PHP)
|
||||
│ ├── bills.php # Zwraca pozycje na rachunkach wg stolika (używane przez klientów)
|
||||
│ ├── kds.php # Zwraca status zamówień na kuchni (odfiltrowane)
|
||||
│ ├── get_table_name.php # Helper: Mapuje bezpieczny Hash (GUID) na nazwę stolika
|
||||
│ └── cache/ # Zapis lokalnego pliku JSON (tables_cache.json) z listą stolików
|
||||
├── config/ # Konfiguracja
|
||||
│ └── database.php # WSPÓLNA konfiguracja połączenia z MS SQL (Zmień hasło tylko tu!)
|
||||
├── public/ # Pliki serwowane użytkownikom
|
||||
│ ├── stolik2_api.html # Główny interfejs dla klienta (czyta Hash z URL)
|
||||
│ ├── assets/ # Style CSS i skrypty JS klienta (stolik2_api.js)
|
||||
│ └── staff/ # Narzędzia wewnętrzne dla obsługi
|
||||
│ ├── kds.php # Główny widok ekranu kuchennego (odpytuje api/kds.php)
|
||||
│ └── generator.php # Generator bezpiecznych kodów QR/linków do stolików
|
||||
├── docs/ # Dokumentacja i pliki dla AI
|
||||
│ └── ai.txt # Główne zrzuty struktury tabel z Gastro
|
||||
├── scripts/ # Skrypty narzędziowe / deweloperskie (wyciąganie schematów)
|
||||
└── legacy/ # Stare pliki (Node.js/WebSockety - nie używane na produkcji)
|
||||
```
|
||||
|
||||
## 🔒 Bezpieczeństwo URL (Hash)
|
||||
|
||||
Z powodów bezpieczeństwa, aby klienci w restauracji nie podglądali zamówień z innych stolików (zgadując adres np. `?table=1`), aplikacja używa natywnych identyfikatorów z bazy MS SQL (tj. GUID, np. `5D1BF524-F8B3-4D34-BEF5-9BA1A25E0475`).
|
||||
|
||||
- Link do stolika dla klienta: `http://<IP>/karczma-stoliki/public/stolik2_api.html?h=GUID`
|
||||
- Kelner generuje te linki / kody QR w zakładce `public/staff/generator.php`.
|
||||
- Gdy klient wchodzi pod link, `get_table_name.php` błyskawicznie "tłumaczy" Hash na nazwę stolika (np. "C-57") korzystając z pamięci podręcznej JSON wbudowanej w podkatalog `api/cache/`, odciążając w ten sposób bazę MS SQL.
|
||||
|
||||
*(Uwaga: widok kuchni `public/staff/kds.php` posiada ukryty parametr `kds_secret=karczma_kuchnia` po to, by omijać filtrowanie hashem i wyświetlać wszystkie zlecenia naraz)*
|
||||
|
||||
## 🛠 Wdrożenie (Setup)
|
||||
|
||||
1. Sklonuj lub wgraj repozytorium do katalogu `htdocs` serwera XAMPP.
|
||||
2. Zaktualizuj IP serwera SQL, użytkownika i hasło (`sa` / `karczma!@#26`) w pliku **`config/database.php`**.
|
||||
3. Upewnij się, że włączone i załadowane są sterowniki `sqlsrv` dla PHP.
|
||||
4. Upewnij się, że folder `api/cache` posiada prawa zapisu (`chmod 777` na Linuksie / Pełna kontrola na Windowsie) by skrypt mógł wygenerować `tables_cache.json`.
|
||||
5. Dla ułatwienia pracy, na roocie znajduje się `index.php` (Dev Portal), z którego możesz klikać we wszystkie moduły (do usunięcia na produkcji).
|
||||
|
||||
## 💡 Jak działa mapowanie zamówień?
|
||||
|
||||
- Aplikacja KDS wyciąga dane łącząc tabele `dbo.NGastroDTRachunek` i `dbo.NGastroDTRachunekPozycja`.
|
||||
- Filtruje ona zamówienia, używając `StatusRealizacji`.
|
||||
- Pozycje wydzielane łączone są sprytnym zapytaniem regex sprawdzającym pole `Opis` na wypadek, gdyby POS utracił przypisanie fizycznego ID stolika przy podziale rachunku.
|
||||
- Składniki zestawów (np. dodatki do Pizzy) sprytnie grupują się pod wspólnym węzłem wykorzystując klucz `GrupaZestawuID`.
|
||||
88
index.php
Normal file
88
index.php
Normal file
@@ -0,0 +1,88 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="pl">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Karczma-Stoliki - Dev Portal</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
background-color: #f4f4f9;
|
||||
color: #333;
|
||||
margin: 0;
|
||||
padding: 40px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
h1 {
|
||||
color: #2c3e50;
|
||||
}
|
||||
.container {
|
||||
background: white;
|
||||
padding: 30px;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
|
||||
max-width: 600px;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
.links-grid {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr;
|
||||
gap: 15px;
|
||||
margin-top: 20px;
|
||||
}
|
||||
.dev-link {
|
||||
display: block;
|
||||
padding: 15px 20px;
|
||||
background: #3498db;
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
font-size: 1.1rem;
|
||||
font-weight: bold;
|
||||
border-radius: 8px;
|
||||
transition: background 0.3s, transform 0.2s;
|
||||
}
|
||||
.dev-link:hover {
|
||||
background: #2980b9;
|
||||
transform: translateY(-2px);
|
||||
}
|
||||
.dev-link.kds { background: #e67e22; }
|
||||
.dev-link.kds:hover { background: #d35400; }
|
||||
|
||||
.dev-link.client { background: #2ecc71; }
|
||||
.dev-link.client:hover { background: #27ae60; }
|
||||
|
||||
.note {
|
||||
margin-top: 30px;
|
||||
font-size: 0.9rem;
|
||||
color: #7f8c8d;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="container">
|
||||
<h1>👨💻 Portal Deweloperski</h1>
|
||||
<p>Szybki dostęp do modułów aplikacji <strong>Karczma-Stoliki</strong>.</p>
|
||||
|
||||
<div class="links-grid">
|
||||
<a href="public/staff/generator.php" class="dev-link">
|
||||
🔗 Generator kodów QR (Kelner)
|
||||
</a>
|
||||
<a href="public/staff/kds.php" class="dev-link kds">
|
||||
🍳 Ekran KDS (Kuchnia)
|
||||
</a>
|
||||
<a href="public/stolik2_api.html" class="dev-link client">
|
||||
📱 Aplikacja dla Gościa (Poprosi o Hash)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="note">
|
||||
Plik tymczasowy (index.php) wygenerowany do testów. Przed publikacją docelową można go usunąć.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user