| Server IP : 193.86.120.172 / Your IP : 216.73.216.215 Web Server : Apache/2.4.63 (Unix) System : Linux JServices 3.10.108 #86003 SMP Wed Oct 22 13:20:46 CST 2025 x86_64 User : kubec ( 1026) PHP Version : 8.2.28 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /volume1/web/hotel_jservices_cz/ |
Upload File : |
-- ============================================================
-- Hotel DEMO — databázové schéma
-- MariaDB / MySQL, charset utf8mb4
-- Spustit jednorázově při instalaci
-- ============================================================
SET NAMES utf8mb4;
SET foreign_key_checks = 0;
-- ------------------------------------------------------------
-- UŽIVATELÉ A AUTENTIZACE
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS uzivatele (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
jmeno VARCHAR(50) NOT NULL,
prijmeni VARCHAR(50) NOT NULL,
login VARCHAR(100) NOT NULL UNIQUE,
email VARCHAR(150) DEFAULT NULL, -- povinné pro admin/manazer
heslo_hash VARCHAR(255) NOT NULL,
role ENUM('admin','manazer','zamestnanec') NOT NULL DEFAULT 'zamestnanec',
aktivni TINYINT(1) NOT NULL DEFAULT 1,
zmena_hesla_zakaz TINYINT(1) NOT NULL DEFAULT 0, -- demo účet
vytvoril_id INT UNSIGNED DEFAULT NULL, -- kdo vytvořil účet
vytvoreno DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
posl_prihlaseni DATETIME DEFAULT NULL,
CONSTRAINT fk_uzivatele_vytvoril
FOREIGN KEY (vytvoril_id) REFERENCES uzivatele(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_czech_ci;
CREATE TABLE IF NOT EXISTS uzivatel_session (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
uzivatel_id INT UNSIGNED NOT NULL,
token VARCHAR(64) NOT NULL UNIQUE,
zapamatovat TINYINT(1) NOT NULL DEFAULT 0, -- 0 = 24h, 1 = 30 dní
platnost_do DATETIME NOT NULL,
vytvoreno DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_session_uzivatel
FOREIGN KEY (uzivatel_id) REFERENCES uzivatele(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS uzivatel_opravneni (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
uzivatel_id INT UNSIGNED NOT NULL,
opravneni VARCHAR(50) NOT NULL, -- např. 'kartoteka', 'hodnoceni', 'trzby', 'storno'
povoleno TINYINT(1) NOT NULL DEFAULT 0,
UNIQUE KEY uq_uzivatel_opravneni (uzivatel_id, opravneni),
CONSTRAINT fk_opravneni_uzivatel
FOREIGN KEY (uzivatel_id) REFERENCES uzivatele(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Výchozí admin účet (heslo: změňte po první instalaci)
-- heslo_hash odpovídá heslu "Admin1234!" — ZMĚŇTE IHNED
INSERT INTO uzivatele (jmeno, prijmeni, login, email, heslo_hash, role, zmena_hesla_zakaz)
VALUES (
'Administrátor', 'Systému', 'admin',
'admin@vashotel.cz',
'$2y$12$placeholder_zmente_heslo_ihned_po_instalaci_prosim',
'admin', 0
) ON DUPLICATE KEY UPDATE id = id;
-- ------------------------------------------------------------
-- MICROSOFT OAUTH TOKENY (SMTP + GRAPH)
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS oauth_tokeny (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
provider VARCHAR(30) NOT NULL UNIQUE, -- 'microsoft' nebo 'microsoft_graph'
access_token TEXT NOT NULL,
refresh_token TEXT NOT NULL,
expiry DATETIME NOT NULL,
aktualizovano DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ------------------------------------------------------------
-- POKOJE A TYPY
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS typy_pokoju (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nazev VARCHAR(100) NOT NULL,
kapacita TINYINT UNSIGNED NOT NULL DEFAULT 2, -- max. počet osob
cena_za_noc DECIMAL(10,2) NOT NULL,
min_pobyt_noci TINYINT UNSIGNED NOT NULL DEFAULT 1,
popis TEXT DEFAULT NULL,
snidane_dostupne TINYINT(1) NOT NULL DEFAULT 1, -- 0 = apartmán s kuchyní
aktivni TINYINT(1) NOT NULL DEFAULT 1,
poradi TINYINT UNSIGNED NOT NULL DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_czech_ci;
CREATE TABLE IF NOT EXISTS pokoje (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
typ_id INT UNSIGNED NOT NULL,
cislo VARCHAR(10) NOT NULL, -- např. "101", "202A"
nazev VARCHAR(100) DEFAULT NULL, -- volitelný název, např. "Zahradní pokoj"
aktivni TINYINT(1) NOT NULL DEFAULT 1,
poradi TINYINT UNSIGNED NOT NULL DEFAULT 0,
CONSTRAINT fk_pokoje_typ
FOREIGN KEY (typ_id) REFERENCES typy_pokoju(id) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_czech_ci;
-- ------------------------------------------------------------
-- DOPLŇKOVÉ SLUŽBY
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS doplnky (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nazev VARCHAR(100) NOT NULL,
cena DECIMAL(10,2) NOT NULL DEFAULT 0,
typ_uctovani ENUM('jednorazove','za_noc') NOT NULL DEFAULT 'jednorazove',
kapacita TINYINT UNSIGNED DEFAULT NULL, -- NULL = neomezeno (parkování = 5 apod.)
aktivni TINYINT(1) NOT NULL DEFAULT 1,
poradi TINYINT UNSIGNED NOT NULL DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_czech_ci;
-- Výchozí doplňky
INSERT INTO doplnky (nazev, cena, typ_uctovani, kapacita, poradi) VALUES
('Snídaně', 250.00, 'za_noc', NULL, 1),
('Parkování', 150.00, 'za_noc', 5, 2),
('Dobíjení elektrovozidel', 100.00, 'za_noc', 2, 3),
('Pozdní check-out (do 14:00)',300.00, 'jednorazove', NULL, 4)
ON DUPLICATE KEY UPDATE id = id;
-- ------------------------------------------------------------
-- REZERVACE
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS rezervace (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
pokoj_id INT UNSIGNED NOT NULL,
datum_prijezdu DATE NOT NULL,
datum_odjezdu DATE NOT NULL,
pocet_noci TINYINT UNSIGNED NOT NULL,
checkin_cas TIME DEFAULT NULL, -- NULL = výchozí z nastavení (14:00)
checkout_cas TIME DEFAULT NULL, -- NULL = výchozí z nastavení (10:00)
checkin_zmenil_id INT UNSIGNED DEFAULT NULL,
checkout_zmenil_id INT UNSIGNED DEFAULT NULL,
-- Host
jmeno VARCHAR(50) NOT NULL,
prijmeni VARCHAR(50) NOT NULL,
email VARCHAR(150) NOT NULL,
telefon VARCHAR(20) DEFAULT NULL,
pocet_hostu TINYINT UNSIGNED NOT NULL DEFAULT 1,
poznamka TEXT DEFAULT NULL,
-- Stav a cena
stav ENUM('ceka','potvrzena','zrusena') NOT NULL DEFAULT 'ceka',
cena_zaklad DECIMAL(10,2) NOT NULL, -- cena z typu pokoje × noci (snapshot)
cena_upravena DECIMAL(10,2) DEFAULT NULL, -- admin override celkové ceny
sleva_castka DECIMAL(10,2) DEFAULT NULL,
sleva_stav ENUM('navrzena','schvalena','zamitnuta') DEFAULT NULL,
sleva_poznamka VARCHAR(255) DEFAULT NULL,
sleva_schvalil_id INT UNSIGNED DEFAULT NULL,
-- Tokeny a integrace
token_zmena VARCHAR(64) NOT NULL, -- pro e-mailový odkaz na změnu
ms_event_id VARCHAR(255) DEFAULT NULL, -- Outlook Calendar event ID
vytvoril_id INT UNSIGNED DEFAULT NULL, -- NULL = zákazník sám přes web
-- E-maily a hodnocení
pripominka_odeslana TINYINT(1) NOT NULL DEFAULT 0,
hodnoceni_zadost_odeslana TINYINT(1) NOT NULL DEFAULT 0,
duvod_zruseni VARCHAR(255) DEFAULT NULL,
vytvoreno DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_rezervace_pokoj
FOREIGN KEY (pokoj_id) REFERENCES pokoje(id) ON DELETE RESTRICT,
CONSTRAINT fk_rezervace_checkin_zmenil
FOREIGN KEY (checkin_zmenil_id) REFERENCES uzivatele(id) ON DELETE SET NULL,
CONSTRAINT fk_rezervace_checkout_zmenil
FOREIGN KEY (checkout_zmenil_id) REFERENCES uzivatele(id) ON DELETE SET NULL,
CONSTRAINT fk_rezervace_sleva_schvalil
FOREIGN KEY (sleva_schvalil_id) REFERENCES uzivatele(id) ON DELETE SET NULL,
CONSTRAINT fk_rezervace_vytvoril
FOREIGN KEY (vytvoril_id) REFERENCES uzivatele(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_czech_ci;
CREATE TABLE IF NOT EXISTS rezervace_doplnky (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
rezervace_id INT UNSIGNED NOT NULL,
doplnek_id INT UNSIGNED NOT NULL,
nazev VARCHAR(100) NOT NULL, -- snapshot názvu v čase rezervace
cena DECIMAL(10,2) NOT NULL, -- snapshot ceny za jednotku
typ_uctovani ENUM('jednorazove','za_noc') NOT NULL,
pocet_noci TINYINT UNSIGNED NOT NULL DEFAULT 1,
cena_celkem DECIMAL(10,2) NOT NULL, -- cena × pocet_noci
CONSTRAINT fk_rez_dopl_rezervace
FOREIGN KEY (rezervace_id) REFERENCES rezervace(id) ON DELETE CASCADE,
CONSTRAINT fk_rez_dopl_doplnek
FOREIGN KEY (doplnek_id) REFERENCES doplnky(id) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_czech_ci;
-- ------------------------------------------------------------
-- BLOKOVANÉ TERMÍNY
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS blokovane_terminy (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
pokoj_id INT UNSIGNED NOT NULL,
datum_od DATE NOT NULL,
datum_do DATE NOT NULL,
duvod VARCHAR(255) DEFAULT NULL,
vytvoril_id INT UNSIGNED DEFAULT NULL,
vytvoreno DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_blokovane_pokoj
FOREIGN KEY (pokoj_id) REFERENCES pokoje(id) ON DELETE CASCADE,
CONSTRAINT fk_blokovane_vytvoril
FOREIGN KEY (vytvoril_id) REFERENCES uzivatele(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_czech_ci;
-- ------------------------------------------------------------
-- ZÁKAZNÍCI (kartotéka)
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS zakaznici (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
jmeno VARCHAR(50) NOT NULL,
prijmeni VARCHAR(50) NOT NULL,
email VARCHAR(150) NOT NULL UNIQUE,
telefon VARCHAR(20) DEFAULT NULL,
poznamka TEXT DEFAULT NULL,
vytvoreno DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_czech_ci;
-- ------------------------------------------------------------
-- HODNOCENÍ
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS hodnoceni (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
rezervace_id INT UNSIGNED NOT NULL UNIQUE, -- jedno hodnocení na rezervaci
hvezdicky TINYINT UNSIGNED NOT NULL, -- 1–5
vytvoreno DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_hodnoceni_rezervace
FOREIGN KEY (rezervace_id) REFERENCES rezervace(id) ON DELETE CASCADE,
CONSTRAINT chk_hodnoceni_hvezdicky
CHECK (hvezdicky BETWEEN 1 AND 5)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ------------------------------------------------------------
-- NASTAVENÍ
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS nastaveni (
klic VARCHAR(60) NOT NULL PRIMARY KEY,
hodnota TEXT NOT NULL DEFAULT '',
popis VARCHAR(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_czech_ci;
INSERT INTO nastaveni (klic, hodnota, popis) VALUES
-- Základní údaje hotelu
('hotel_nazev', 'Hotel DEMO', 'Název hotelu (zobrazuje se v e-mailech a UI)'),
('hotel_telefon', '+420 000 000 000', 'Telefonní kontakt hotelu'),
('hotel_email', 'recepce@vashotel.cz', 'Kontaktní e-mail hotelu'),
('hotel_adresa', 'Ulice 1, 000 00 Město','Adresa hotelu'),
('hotel_web', 'https://vashotel.cz', 'Webová adresa hotelu'),
-- Check-in / Check-out
('checkin_cas', '14:00', 'Výchozí čas check-in'),
('checkout_cas', '10:00', 'Výchozí čas check-out'),
-- Rezervace
('rezervace_min_predem_dni','1', 'Minimálně kolik dní dopředu lze rezervovat'),
('rezervace_storno_dni', '3', 'Počet dní před příjezdem pro bezplatné storno'),
('min_pobyt_noci', '1', 'Výchozí minimální délka pobytu (noci)'),
-- Kapacity doplňků (lze přepsat přímo v tabulce doplnky)
('parkovani_kapacita', '5', 'Celkový počet parkovacích míst'),
('dobijeni_kapacita', '2', 'Celkový počet dobíjecích míst'),
-- Připomínka před příjezdem
('pripominka_zapnuta', '1', 'Odesílat připomínku hostovi před příjezdem'),
('pripominka_hodin', '48', 'Kolik hodin před příjezdem odeslat připomínku'),
-- Hodnocení
('hodnoceni_zapnuto', '1', 'Odesílat žádost o hodnocení po odjezdu'),
('hodnoceni_hodin_po', '24', 'Kolik hodin po odjezdu odeslat žádost o hodnocení'),
('hodnoceni_verejne', '1', 'Zobrazovat průměrné hodnocení na rezervační stránce'),
-- Úvodní text na rezervační stránce
('uvodni_text', 'Vítejte! Rezervujte si pobyt online rychle a pohodlně.', 'Text na úvodní stránce rezervace'),
-- Bankovní účet (pro QR platbu)
('cislo_uctu', '', 'Číslo účtu pro QR platbu (formát 1234567890/0800)')
ON DUPLICATE KEY UPDATE popis = VALUES(popis);
SET foreign_key_checks = 1;
-- ============================================================
-- Hotovo! Další kroky:
-- 1. Změňte heslo admin účtu (UPDATE uzivatele SET heslo_hash = ... WHERE login = 'admin')
-- 2. Vyplňte nastavení hotelu (UPDATE nastaveni SET hodnota = ... WHERE klic = ...)
-- 3. Přidejte typy pokojů a pokoje přes admin rozhraní
-- ============================================================