163 lines
6.2 KiB
SQL
163 lines
6.2 KiB
SQL
--
|
|
-- MokoSuite Booking Tables
|
|
--
|
|
|
|
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 '',
|
|
`city` VARCHAR(100) NOT NULL DEFAULT '',
|
|
`state` VARCHAR(100) NOT NULL DEFAULT '',
|
|
`postal_code` VARCHAR(20) NOT NULL DEFAULT '',
|
|
`country` VARCHAR(100) NOT NULL DEFAULT '',
|
|
`timezone` VARCHAR(50) NOT NULL DEFAULT 'America/New_York',
|
|
`phone` VARCHAR(50) NOT NULL DEFAULT '',
|
|
`email` VARCHAR(255) NOT NULL DEFAULT '',
|
|
`photo` VARCHAR(500) NOT NULL DEFAULT '',
|
|
`notes` TEXT,
|
|
`published` TINYINT NOT NULL DEFAULT 1,
|
|
`ordering` INT NOT NULL DEFAULT 0,
|
|
`created` DATETIME NOT NULL,
|
|
`created_by` INT NOT NULL DEFAULT 0,
|
|
PRIMARY KEY (`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 30,
|
|
`buffer_minutes` SMALLINT UNSIGNED NOT NULL DEFAULT 0,
|
|
`price` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
|
|
`currency` VARCHAR(3) NOT NULL DEFAULT 'USD',
|
|
`max_attendees` SMALLINT UNSIGNED NOT NULL DEFAULT 1,
|
|
`requires_deposit` TINYINT NOT NULL DEFAULT 0,
|
|
`deposit_amount` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
|
|
`color` VARCHAR(7) NOT NULL DEFAULT '#3788d8',
|
|
`photo` VARCHAR(500) NOT NULL DEFAULT '',
|
|
`published` TINYINT NOT NULL DEFAULT 1,
|
|
`ordering` INT NOT NULL DEFAULT 0,
|
|
`created` DATETIME NOT NULL,
|
|
`created_by` INT NOT NULL DEFAULT 0,
|
|
PRIMARY KEY (`id`),
|
|
KEY `idx_category` (`category`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS `#__mokosuitebooking_staff` (
|
|
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`contact_id` INT DEFAULT NULL,
|
|
`user_id` INT DEFAULT NULL,
|
|
`display_name` VARCHAR(255) NOT NULL,
|
|
`title` VARCHAR(255) NOT NULL DEFAULT '',
|
|
`email` VARCHAR(255) NOT NULL DEFAULT '',
|
|
`phone` VARCHAR(50) NOT NULL DEFAULT '',
|
|
`bio` TEXT,
|
|
`photo` VARCHAR(500) NOT NULL DEFAULT '',
|
|
`color` VARCHAR(7) NOT NULL DEFAULT '#3788d8',
|
|
`services_json` JSON DEFAULT NULL,
|
|
`locations_json` JSON 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_user` (`user_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,
|
|
`location_id` INT UNSIGNED DEFAULT NULL,
|
|
`day_of_week` TINYINT UNSIGNED NOT NULL,
|
|
`start_time` TIME NOT NULL,
|
|
`end_time` TIME NOT NULL,
|
|
`effective_from` DATE DEFAULT NULL,
|
|
`effective_until` DATE DEFAULT NULL,
|
|
`published` TINYINT NOT NULL DEFAULT 1,
|
|
PRIMARY KEY (`id`),
|
|
KEY `idx_staff` (`staff_id`),
|
|
KEY `idx_location` (`location_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_date` (`staff_id`, `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,
|
|
`contact_id` INT DEFAULT NULL,
|
|
`staff_id` INT UNSIGNED DEFAULT NULL,
|
|
`location_id` INT UNSIGNED DEFAULT NULL,
|
|
`customer_name` VARCHAR(255) NOT NULL,
|
|
`customer_email` VARCHAR(255) NOT NULL DEFAULT '',
|
|
`customer_phone` VARCHAR(50) NOT NULL DEFAULT '',
|
|
`booking_date` DATE NOT NULL,
|
|
`start_time` TIME NOT NULL,
|
|
`end_time` TIME NOT NULL,
|
|
`status` ENUM('pending','confirmed','in_progress','completed','cancelled','no_show') NOT NULL DEFAULT 'pending',
|
|
`total_price` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
|
|
`deposit_paid` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
|
|
`payment_status` ENUM('unpaid','partial','paid','refunded') NOT NULL DEFAULT 'unpaid',
|
|
`notes` TEXT,
|
|
`internal_notes` TEXT,
|
|
`source` ENUM('admin','website','api','walk_in') NOT NULL DEFAULT 'admin',
|
|
`cancelled_at` DATETIME DEFAULT NULL,
|
|
`cancellation_reason` VARCHAR(500) NOT NULL DEFAULT '',
|
|
`reminder_sent` TINYINT NOT NULL DEFAULT 0,
|
|
`created` DATETIME NOT NULL,
|
|
`created_by` INT NOT NULL DEFAULT 0,
|
|
`modified` DATETIME DEFAULT NULL,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `uk_ref` (`booking_ref`),
|
|
KEY `idx_contact` (`contact_id`),
|
|
KEY `idx_staff` (`staff_id`),
|
|
KEY `idx_location` (`location_id`),
|
|
KEY `idx_date` (`booking_date`),
|
|
KEY `idx_status` (`status`)
|
|
) 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,
|
|
`staff_id` INT UNSIGNED DEFAULT NULL,
|
|
`price` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
|
|
`duration_minutes` SMALLINT UNSIGNED NOT NULL DEFAULT 30,
|
|
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,
|
|
`contact_id` INT DEFAULT NULL,
|
|
`service_id` INT UNSIGNED NOT NULL,
|
|
`staff_id` INT UNSIGNED DEFAULT NULL,
|
|
`location_id` INT UNSIGNED DEFAULT NULL,
|
|
`customer_name` VARCHAR(255) NOT NULL,
|
|
`customer_email` VARCHAR(255) NOT NULL DEFAULT '',
|
|
`customer_phone` VARCHAR(50) NOT NULL DEFAULT '',
|
|
`preferred_date_start` DATE DEFAULT NULL,
|
|
`preferred_date_end` DATE DEFAULT NULL,
|
|
`preferred_time_start` TIME DEFAULT NULL,
|
|
`preferred_time_end` TIME DEFAULT NULL,
|
|
`status` ENUM('waiting','notified','booked','expired','cancelled') NOT NULL DEFAULT 'waiting',
|
|
`notified_at` DATETIME DEFAULT NULL,
|
|
`notes` TEXT,
|
|
`created` DATETIME NOT NULL,
|
|
PRIMARY KEY (`id`),
|
|
KEY `idx_service` (`service_id`),
|
|
KEY `idx_status` (`status`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; |