diff --git a/source/plg_system_mokosuitebooking/sql/install.mysql.sql b/source/plg_system_mokosuitebooking/sql/install.mysql.sql new file mode 100644 index 0000000..c79b8cd --- /dev/null +++ b/source/plg_system_mokosuitebooking/sql/install.mysql.sql @@ -0,0 +1,138 @@ +-- Copyright (C) 2026 Moko Consulting +-- SPDX-License-Identifier: GPL-3.0-or-later +-- Authored-by: Moko Consulting + +CREATE TABLE IF NOT EXISTS `#__mokosuitebooking_locations` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `name` VARCHAR(255) NOT NULL, + `address` VARCHAR(500) NOT NULL DEFAULT '', + `phone` VARCHAR(50) NOT NULL DEFAULT '', + `email` VARCHAR(255) NOT NULL DEFAULT '', + `timezone` VARCHAR(50) NOT NULL DEFAULT 'America/New_York', + `operating_hours` JSON DEFAULT NULL, + `published` TINYINT NOT NULL DEFAULT 1, + `ordering` INT NOT NULL DEFAULT 0, + `created` DATETIME NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE IF NOT EXISTS `#__mokosuitebooking_staff` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `contact_id` INT DEFAULT NULL, + `name` VARCHAR(255) NOT NULL, + `email` VARCHAR(255) NOT NULL DEFAULT '', + `phone` VARCHAR(50) NOT NULL DEFAULT '', + `title` VARCHAR(255) NOT NULL DEFAULT '', + `bio` TEXT, + `photo` VARCHAR(500) NOT NULL DEFAULT '', + `color` VARCHAR(7) NOT NULL DEFAULT '#3788d8', + `location_id` INT UNSIGNED DEFAULT NULL, + `published` TINYINT NOT NULL DEFAULT 1, + `ordering` INT NOT NULL DEFAULT 0, + `created` DATETIME NOT NULL, + PRIMARY KEY (`id`), + KEY `idx_contact` (`contact_id`), + KEY `idx_location` (`location_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE IF NOT EXISTS `#__mokosuitebooking_services` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `name` VARCHAR(255) NOT NULL, + `description` TEXT, + `category` VARCHAR(100) NOT NULL DEFAULT '', + `duration_minutes` SMALLINT UNSIGNED NOT NULL DEFAULT 60, + `buffer_before` SMALLINT UNSIGNED NOT NULL DEFAULT 0, + `buffer_after` SMALLINT UNSIGNED NOT NULL DEFAULT 0, + `price` DECIMAL(10,2) NOT NULL DEFAULT 0.00, + `deposit_required` DECIMAL(10,2) NOT NULL DEFAULT 0.00, + `max_participants` SMALLINT UNSIGNED NOT NULL DEFAULT 1, + `color` VARCHAR(7) NOT NULL DEFAULT '#3788d8', + `published` TINYINT NOT NULL DEFAULT 1, + `ordering` INT NOT NULL DEFAULT 0, + `created` DATETIME NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE IF NOT EXISTS `#__mokosuitebooking_schedules` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `staff_id` INT UNSIGNED NOT NULL, + `day_of_week` TINYINT UNSIGNED NOT NULL, + `start_time` TIME NOT NULL, + `end_time` TIME NOT NULL, + `location_id` INT UNSIGNED DEFAULT NULL, + `effective_from` DATE DEFAULT NULL, + `effective_to` DATE DEFAULT NULL, + `published` TINYINT NOT NULL DEFAULT 1, + PRIMARY KEY (`id`), + KEY `idx_staff` (`staff_id`), + KEY `idx_day` (`day_of_week`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE IF NOT EXISTS `#__mokosuitebooking_availability_overrides` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `staff_id` INT UNSIGNED NOT NULL, + `override_date` DATE NOT NULL, + `available` TINYINT NOT NULL DEFAULT 0, + `start_time` TIME DEFAULT NULL, + `end_time` TIME DEFAULT NULL, + `reason` VARCHAR(255) NOT NULL DEFAULT '', + `created` DATETIME NOT NULL, + PRIMARY KEY (`id`), + KEY `idx_staff` (`staff_id`), + KEY `idx_date` (`override_date`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE IF NOT EXISTS `#__mokosuitebooking_bookings` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `booking_ref` VARCHAR(20) NOT NULL, + `client_contact_id` INT DEFAULT NULL, + `client_name` VARCHAR(255) NOT NULL, + `client_email` VARCHAR(255) NOT NULL DEFAULT '', + `client_phone` VARCHAR(50) NOT NULL DEFAULT '', + `staff_id` INT UNSIGNED DEFAULT NULL, + `location_id` INT UNSIGNED DEFAULT NULL, + `status` ENUM('pending','confirmed','in_progress','completed','cancelled','no_show') NOT NULL DEFAULT 'pending', + `booking_date` DATE NOT NULL, + `start_time` TIME NOT NULL, + `end_time` TIME NOT NULL, + `total_price` DECIMAL(10,2) NOT NULL DEFAULT 0.00, + `deposit_paid` DECIMAL(10,2) NOT NULL DEFAULT 0.00, + `payment_status` ENUM('pending','partial','paid','refunded') NOT NULL DEFAULT 'pending', + `source` ENUM('admin','online','phone','walkin') NOT NULL DEFAULT 'admin', + `notes` TEXT, + `reminder_sent` TINYINT NOT NULL DEFAULT 0, + `created` DATETIME NOT NULL, + `created_by` INT NOT NULL DEFAULT 0, + PRIMARY KEY (`id`), + UNIQUE KEY `idx_ref` (`booking_ref`), + KEY `idx_client` (`client_contact_id`), + KEY `idx_staff` (`staff_id`), + KEY `idx_status` (`status`), + KEY `idx_date` (`booking_date`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE IF NOT EXISTS `#__mokosuitebooking_booking_services` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `booking_id` INT UNSIGNED NOT NULL, + `service_id` INT UNSIGNED NOT NULL, + `price` DECIMAL(10,2) NOT NULL DEFAULT 0.00, + `duration_minutes` SMALLINT UNSIGNED NOT NULL DEFAULT 60, + PRIMARY KEY (`id`), + KEY `idx_booking` (`booking_id`), + KEY `idx_service` (`service_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE IF NOT EXISTS `#__mokosuitebooking_waitlist` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `client_contact_id` INT DEFAULT NULL, + `client_name` VARCHAR(255) NOT NULL, + `client_email` VARCHAR(255) NOT NULL DEFAULT '', + `service_id` INT UNSIGNED DEFAULT NULL, + `staff_id` INT UNSIGNED DEFAULT NULL, + `preferred_date` DATE DEFAULT NULL, + `status` ENUM('waiting','notified','booked','expired','cancelled') NOT NULL DEFAULT 'waiting', + `notes` TEXT, + `created` DATETIME NOT NULL, + PRIMARY KEY (`id`), + KEY `idx_status` (`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;