254 lines
8.0 KiB
SQL
254 lines
8.0 KiB
SQL
CREATE TABLE IF NOT EXISTS outlets (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
name VARCHAR(255) NOT NULL,
|
|
address TEXT,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS categories (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
name VARCHAR(255) NOT NULL,
|
|
sort_order INT DEFAULT 0
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS products (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
category_id INT,
|
|
name VARCHAR(255) NOT NULL,
|
|
description TEXT,
|
|
price DECIMAL(10, 2) NOT NULL,
|
|
cost_price DECIMAL(10, 2) DEFAULT 0.00,
|
|
stock_quantity INT DEFAULT 0,
|
|
image_url VARCHAR(255),
|
|
promo_discount_percent DECIMAL(5, 2) DEFAULT NULL,
|
|
promo_date_from DATE DEFAULT NULL,
|
|
promo_date_to DATE DEFAULT NULL,
|
|
FOREIGN KEY (category_id) REFERENCES categories(id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS product_variants (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
product_id INT,
|
|
name VARCHAR(255) NOT NULL,
|
|
price_adjustment DECIMAL(10, 2) DEFAULT 0.00,
|
|
FOREIGN KEY (product_id) REFERENCES products(id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS areas (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
outlet_id INT,
|
|
name VARCHAR(255) NOT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (outlet_id) REFERENCES outlets(id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS tables (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
area_id INT,
|
|
name VARCHAR(50) NOT NULL,
|
|
capacity INT DEFAULT 4,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (area_id) REFERENCES areas(id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS user_groups (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
name VARCHAR(255) NOT NULL,
|
|
permissions TEXT,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS users (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
group_id INT,
|
|
username VARCHAR(255) NOT NULL UNIQUE,
|
|
password VARCHAR(255) NOT NULL,
|
|
full_name VARCHAR(255),
|
|
employee_id VARCHAR(50) UNIQUE,
|
|
email VARCHAR(255) UNIQUE,
|
|
profile_pic VARCHAR(255) DEFAULT NULL,
|
|
is_active BOOLEAN DEFAULT TRUE,
|
|
is_ratable TINYINT(1) DEFAULT 0,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (group_id) REFERENCES user_groups(id) ON DELETE SET NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS user_outlets (
|
|
user_id INT(11) NOT NULL,
|
|
outlet_id INT(11) NOT NULL,
|
|
PRIMARY KEY (user_id, outlet_id),
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (outlet_id) REFERENCES outlets(id) ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS customers (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
name VARCHAR(255) NOT NULL,
|
|
phone VARCHAR(20) UNIQUE,
|
|
email VARCHAR(255),
|
|
points INT DEFAULT 0,
|
|
loyalty_redemptions_count INT DEFAULT 0,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS payment_types (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
name VARCHAR(255) NOT NULL,
|
|
type ENUM('cash', 'card', 'api') DEFAULT 'cash',
|
|
api_provider VARCHAR(50) DEFAULT NULL,
|
|
is_active BOOLEAN DEFAULT 1,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS orders (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
outlet_id INT,
|
|
user_id INT(11) NULL,
|
|
customer_id INT DEFAULT NULL,
|
|
table_id INT,
|
|
table_number VARCHAR(50),
|
|
order_type ENUM('dine-in', 'delivery', 'drive-thru', 'takeaway') DEFAULT 'dine-in',
|
|
status ENUM('pending', 'preparing', 'ready', 'completed', 'cancelled') DEFAULT 'pending',
|
|
payment_type_id INT DEFAULT NULL,
|
|
total_amount DECIMAL(10, 2) NOT NULL,
|
|
customer_name VARCHAR(255),
|
|
customer_phone VARCHAR(50),
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (outlet_id) REFERENCES outlets(id),
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL,
|
|
FOREIGN KEY (customer_id) REFERENCES customers(id) ON DELETE SET NULL,
|
|
FOREIGN KEY (table_id) REFERENCES tables(id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS order_items (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
order_id INT,
|
|
product_id INT,
|
|
variant_id INT,
|
|
quantity INT NOT NULL,
|
|
unit_price DECIMAL(10, 2) NOT NULL,
|
|
FOREIGN KEY (order_id) REFERENCES orders(id),
|
|
FOREIGN KEY (product_id) REFERENCES products(id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS company_settings (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
company_name VARCHAR(255) NOT NULL DEFAULT 'My Restaurant',
|
|
address TEXT,
|
|
phone VARCHAR(50),
|
|
email VARCHAR(255),
|
|
vat_rate DECIMAL(5, 2) DEFAULT 0.00,
|
|
currency_symbol VARCHAR(10) DEFAULT '$',
|
|
currency_decimals INT DEFAULT 2,
|
|
logo_url VARCHAR(255),
|
|
favicon_url VARCHAR(255),
|
|
ctr_number VARCHAR(50),
|
|
vat_number VARCHAR(50),
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS loyalty_settings (
|
|
id INT PRIMARY KEY,
|
|
points_per_order INT DEFAULT 10,
|
|
points_for_free_meal INT DEFAULT 70,
|
|
is_enabled TINYINT(1) DEFAULT 1
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS integration_settings (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
provider VARCHAR(50) NOT NULL,
|
|
setting_key VARCHAR(100) NOT NULL,
|
|
setting_value TEXT,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
UNIQUE KEY unique_provider_key (provider, setting_key)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS expense_categories (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
name VARCHAR(255) NOT NULL,
|
|
description TEXT,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS expenses (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
category_id INT NOT NULL,
|
|
outlet_id INT NOT NULL,
|
|
amount DECIMAL(10, 2) NOT NULL,
|
|
description TEXT,
|
|
expense_date DATE NOT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (category_id) REFERENCES expense_categories(id),
|
|
FOREIGN KEY (outlet_id) REFERENCES outlets(id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS suppliers (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
name VARCHAR(255) NOT NULL,
|
|
contact_person VARCHAR(255),
|
|
email VARCHAR(255),
|
|
phone VARCHAR(50),
|
|
address TEXT,
|
|
vat_no VARCHAR(50),
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS purchases (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
supplier_id INT NULL,
|
|
purchase_date DATE NOT NULL,
|
|
total_amount DECIMAL(10, 2) DEFAULT 0.00,
|
|
status ENUM('pending', 'completed', 'cancelled') DEFAULT 'pending',
|
|
notes TEXT,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (supplier_id) REFERENCES suppliers(id) ON DELETE SET NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS purchase_items (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
purchase_id INT NOT NULL,
|
|
product_id INT NOT NULL,
|
|
quantity INT NOT NULL,
|
|
cost_price DECIMAL(10, 2) NOT NULL,
|
|
total_price DECIMAL(10, 2) NOT NULL,
|
|
FOREIGN KEY (purchase_id) REFERENCES purchases(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (product_id) REFERENCES products(id) ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS ads_images (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
image_path VARCHAR(255) NOT NULL,
|
|
title VARCHAR(255) DEFAULT NULL,
|
|
sort_order INT DEFAULT 0,
|
|
is_active TINYINT(1) DEFAULT 1,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS attendance_logs (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
user_id INT,
|
|
employee_id VARCHAR(50),
|
|
log_timestamp DATETIME,
|
|
log_type ENUM('IN', 'OUT', 'OTHER') DEFAULT 'IN',
|
|
device_id VARCHAR(100),
|
|
ip_address VARCHAR(45),
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS staff_ratings (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
user_id INT NOT NULL,
|
|
rating INT NOT NULL CHECK (rating >= 1 AND rating <= 5),
|
|
comment TEXT,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS service_ratings (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
rating INT NOT NULL CHECK (rating >= 1 AND rating <= 5),
|
|
comment TEXT,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|