Files
MokoSuiteResto/source/packages/plg_system_mokosuiteresto/sql/install.mysql.sql
T
2026-06-27 20:17:13 +00:00

155 lines
6.9 KiB
SQL

-- MokoSuiteResto Schema
-- Copyright (C) 2026 Moko Consulting
-- SPDX-License-Identifier: GPL-3.0-or-later
CREATE TABLE IF NOT EXISTS `#__mokosuiteresto_menus` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`title` VARCHAR(255) NOT NULL,
`description` TEXT NULL,
`menu_type` ENUM('food','drink','dessert','special') NOT NULL DEFAULT 'food',
`active` TINYINT(1) NOT NULL DEFAULT 1,
`ordering` INT NOT NULL DEFAULT 0,
`created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_active` (`active`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `#__mokosuiteresto_menu_items` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`menu_id` INT UNSIGNED NOT NULL,
`title` VARCHAR(255) NOT NULL,
`description` TEXT NULL,
`price` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
`category` VARCHAR(100) NULL,
`allergens` JSON NULL,
`calories` INT UNSIGNED NULL,
`image` VARCHAR(500) NULL,
`available` TINYINT(1) NOT NULL DEFAULT 1,
`ordering` INT NOT NULL DEFAULT 0,
`created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_menu` (`menu_id`),
KEY `idx_available` (`available`),
CONSTRAINT `fk_menuitem_menu` FOREIGN KEY (`menu_id`) REFERENCES `#__mokosuiteresto_menus`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `#__mokosuiteresto_modifiers` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`menu_item_id` INT UNSIGNED NOT NULL,
`title` VARCHAR(255) NOT NULL,
`price_adjustment` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
`modifier_type` ENUM('add','remove','substitute') NOT NULL DEFAULT 'add',
`ordering` INT NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_menu_item` (`menu_item_id`),
CONSTRAINT `fk_modifier_item` FOREIGN KEY (`menu_item_id`) REFERENCES `#__mokosuiteresto_menu_items`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `#__mokosuiteresto_tables` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`table_number` VARCHAR(20) NOT NULL,
`section` VARCHAR(100) NULL,
`capacity` INT UNSIGNED NOT NULL DEFAULT 4,
`status` ENUM('available','occupied','reserved','maintenance') NOT NULL DEFAULT 'available',
`pos_x` INT NULL,
`pos_y` INT NULL,
`created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_table_number` (`table_number`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `#__mokosuiteresto_reservations` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`contact_id` INT UNSIGNED NULL COMMENT 'FK to CRM contacts',
`table_id` INT UNSIGNED NULL,
`guest_name` VARCHAR(255) NOT NULL,
`guest_phone` VARCHAR(50) NULL,
`guest_email` VARCHAR(255) NULL,
`party_size` INT UNSIGNED NOT NULL DEFAULT 2,
`reservation_date` DATE NOT NULL,
`reservation_time` TIME NOT NULL,
`duration_minutes` INT UNSIGNED NOT NULL DEFAULT 90,
`status` ENUM('pending','confirmed','seated','completed','cancelled','no_show') NOT NULL DEFAULT 'pending',
`notes` TEXT NULL,
`created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_date` (`reservation_date`),
KEY `idx_status` (`status`),
KEY `idx_contact` (`contact_id`),
KEY `idx_table` (`table_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `#__mokosuiteresto_orders` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`table_id` INT UNSIGNED NULL,
`reservation_id` INT UNSIGNED NULL,
`contact_id` INT UNSIGNED NULL COMMENT 'FK to CRM contacts',
`order_number` VARCHAR(50) NOT NULL,
`order_type` ENUM('dine_in','takeout','delivery') NOT NULL DEFAULT 'dine_in',
`status` ENUM('open','preparing','ready','served','closed','cancelled') NOT NULL DEFAULT 'open',
`subtotal` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
`tax` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
`tip` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
`total` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
`payment_method` VARCHAR(50) NULL,
`payment_status` ENUM('unpaid','partial','paid','refunded') NOT NULL DEFAULT 'unpaid',
`server_user_id` INT UNSIGNED NULL,
`notes` TEXT NULL,
`created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_order_number` (`order_number`),
KEY `idx_table` (`table_id`),
KEY `idx_status` (`status`),
KEY `idx_created` (`created`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `#__mokosuiteresto_order_items` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`order_id` INT UNSIGNED NOT NULL,
`menu_item_id` INT UNSIGNED NOT NULL,
`quantity` INT UNSIGNED NOT NULL DEFAULT 1,
`unit_price` DECIMAL(10,2) NOT NULL,
`modifiers` JSON NULL,
`notes` TEXT NULL,
`status` ENUM('pending','preparing','ready','served','cancelled') NOT NULL DEFAULT 'pending',
`created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_order` (`order_id`),
CONSTRAINT `fk_orderitem_order` FOREIGN KEY (`order_id`) REFERENCES `#__mokosuiteresto_orders`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `#__mokosuiteresto_inventory` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`item_name` VARCHAR(255) NOT NULL,
`category` VARCHAR(100) NULL,
`unit` VARCHAR(50) NOT NULL DEFAULT 'each',
`quantity_on_hand` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
`reorder_level` DECIMAL(10,2) NULL,
`cost_per_unit` DECIMAL(10,2) NULL,
`supplier` VARCHAR(255) NULL,
`last_restocked` DATETIME NULL,
`created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_category` (`category`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `#__mokosuiteresto_inventory_transactions` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`inventory_id` INT UNSIGNED NOT NULL,
`transaction_type` ENUM('restock','usage','waste','adjustment') NOT NULL,
`quantity` DECIMAL(10,2) NOT NULL,
`notes` TEXT NULL,
`user_id` INT UNSIGNED NULL,
`created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_inventory` (`inventory_id`),
KEY `idx_type` (`transaction_type`),
CONSTRAINT `fk_invtx_inventory` FOREIGN KEY (`inventory_id`) REFERENCES `#__mokosuiteresto_inventory`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;