Files
Jonathan Miller f49a3570b5
Universal: Auto Version Bump / Version Bump (push) Successful in 13s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 10s
feat: full scaffolding — manifests, Extension, provider, SQL (11 tables), language files
2026-06-23 11:06:00 -05:00

223 lines
8.7 KiB
SQL

--
-- MokoSuite Construction Tables
--
CREATE TABLE IF NOT EXISTS `#__mokosuiteconstruction_jobs` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`job_number` VARCHAR(20) NOT NULL DEFAULT '',
`title` VARCHAR(255) NOT NULL,
`description` TEXT,
`address` TEXT,
`city` VARCHAR(100) NOT NULL DEFAULT '',
`state` VARCHAR(50) NOT NULL DEFAULT '',
`postal_code` VARCHAR(20) NOT NULL DEFAULT '',
`owner_contact_id` INT DEFAULT NULL,
`architect_contact_id` INT DEFAULT NULL,
`superintendent_id` INT DEFAULT NULL,
`contract_value` DECIMAL(15,2) NOT NULL DEFAULT 0.00,
`approved_changes` DECIMAL(15,2) NOT NULL DEFAULT 0.00,
`revised_value` DECIMAL(15,2) NOT NULL DEFAULT 0.00,
`retention_pct` DECIMAL(5,2) NOT NULL DEFAULT 10.00,
`phase` ENUM('preconstruction','active','punch_list','closeout','warranty','completed') NOT NULL DEFAULT 'preconstruction',
`start_date` DATE DEFAULT NULL,
`end_date` DATE DEFAULT NULL,
`actual_start` DATE DEFAULT NULL,
`actual_end` DATE DEFAULT NULL,
`created` DATETIME NOT NULL,
`modified` DATETIME DEFAULT NULL,
`created_by` INT NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_job_number` (`job_number`),
KEY `idx_owner` (`owner_contact_id`),
KEY `idx_phase` (`phase`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `#__mokosuiteconstruction_cost_codes` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`job_id` INT UNSIGNED NOT NULL,
`division` VARCHAR(10) NOT NULL,
`section` VARCHAR(20) NOT NULL DEFAULT '',
`title` VARCHAR(255) NOT NULL,
`budget_amount` DECIMAL(15,2) NOT NULL DEFAULT 0.00,
`committed_amount` DECIMAL(15,2) NOT NULL DEFAULT 0.00,
`actual_amount` DECIMAL(15,2) NOT NULL DEFAULT 0.00,
`ordering` INT NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_job` (`job_id`),
KEY `idx_division` (`division`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `#__mokosuiteconstruction_change_orders` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`job_id` INT UNSIGNED NOT NULL,
`co_number` INT UNSIGNED NOT NULL DEFAULT 1,
`title` VARCHAR(255) NOT NULL,
`description` TEXT,
`amount` DECIMAL(15,2) NOT NULL DEFAULT 0.00,
`days_impact` INT NOT NULL DEFAULT 0,
`status` ENUM('draft','submitted','approved','rejected') NOT NULL DEFAULT 'draft',
`submitted_at` DATETIME DEFAULT NULL,
`approved_at` DATETIME DEFAULT NULL,
`approved_by` INT DEFAULT NULL,
`created` DATETIME NOT NULL,
`created_by` INT NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_job` (`job_id`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `#__mokosuiteconstruction_rfis` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`job_id` INT UNSIGNED NOT NULL,
`rfi_number` INT UNSIGNED NOT NULL DEFAULT 1,
`subject` VARCHAR(255) NOT NULL,
`question` TEXT NOT NULL,
`spec_section` VARCHAR(50) NOT NULL DEFAULT '',
`drawing_ref` VARCHAR(100) NOT NULL DEFAULT '',
`ball_in_court` VARCHAR(100) NOT NULL DEFAULT '',
`answer` TEXT,
`status` ENUM('open','answered','closed') NOT NULL DEFAULT 'open',
`submitted_by` INT DEFAULT NULL,
`answered_by` INT DEFAULT NULL,
`submitted_at` DATETIME NOT NULL,
`answered_at` DATETIME DEFAULT NULL,
`created` DATETIME NOT NULL,
PRIMARY KEY (`id`),
KEY `idx_job` (`job_id`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `#__mokosuiteconstruction_submittals` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`job_id` INT UNSIGNED NOT NULL,
`submittal_number` INT UNSIGNED NOT NULL DEFAULT 1,
`title` VARCHAR(255) NOT NULL,
`spec_section` VARCHAR(50) NOT NULL DEFAULT '',
`subcontractor_contact_id` INT DEFAULT NULL,
`status` ENUM('pending','in_review','approved','approved_as_noted','rejected','resubmit') NOT NULL DEFAULT 'pending',
`submitted_at` DATETIME DEFAULT NULL,
`reviewed_at` DATETIME DEFAULT NULL,
`reviewed_by` INT DEFAULT NULL,
`notes` TEXT,
`created` DATETIME NOT NULL,
PRIMARY KEY (`id`),
KEY `idx_job` (`job_id`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `#__mokosuiteconstruction_daily_logs` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`job_id` INT UNSIGNED NOT NULL,
`log_date` DATE NOT NULL,
`weather` VARCHAR(100) NOT NULL DEFAULT '',
`temperature_high` INT DEFAULT NULL,
`temperature_low` INT DEFAULT NULL,
`crew_count` INT UNSIGNED NOT NULL DEFAULT 0,
`work_performed` TEXT,
`equipment_used` TEXT,
`visitors` TEXT,
`safety_incidents` TEXT,
`delays` TEXT,
`photos_count` INT UNSIGNED NOT NULL DEFAULT 0,
`created_by` INT NOT NULL DEFAULT 0,
`created` DATETIME NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_job_date` (`job_id`, `log_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `#__mokosuiteconstruction_pay_applications` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`job_id` INT UNSIGNED NOT NULL,
`app_number` INT UNSIGNED NOT NULL DEFAULT 1,
`period_from` DATE NOT NULL,
`period_to` DATE NOT NULL,
`contract_sum` DECIMAL(15,2) NOT NULL DEFAULT 0.00,
`change_orders_total` DECIMAL(15,2) NOT NULL DEFAULT 0.00,
`revised_contract` DECIMAL(15,2) NOT NULL DEFAULT 0.00,
`work_completed` DECIMAL(15,2) NOT NULL DEFAULT 0.00,
`materials_stored` DECIMAL(15,2) NOT NULL DEFAULT 0.00,
`total_earned` DECIMAL(15,2) NOT NULL DEFAULT 0.00,
`retention_held` DECIMAL(15,2) NOT NULL DEFAULT 0.00,
`previous_payments` DECIMAL(15,2) NOT NULL DEFAULT 0.00,
`current_due` DECIMAL(15,2) NOT NULL DEFAULT 0.00,
`status` ENUM('draft','submitted','approved','paid') NOT NULL DEFAULT 'draft',
`submitted_at` DATETIME DEFAULT NULL,
`approved_at` DATETIME DEFAULT NULL,
`paid_at` DATETIME DEFAULT NULL,
`created` DATETIME NOT NULL,
`created_by` INT NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_job` (`job_id`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `#__mokosuiteconstruction_pay_app_lines` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`pay_app_id` INT UNSIGNED NOT NULL,
`cost_code_id` INT UNSIGNED NOT NULL,
`scheduled_value` DECIMAL(15,2) NOT NULL DEFAULT 0.00,
`previous_work` DECIMAL(15,2) NOT NULL DEFAULT 0.00,
`current_work` DECIMAL(15,2) NOT NULL DEFAULT 0.00,
`materials_stored` DECIMAL(15,2) NOT NULL DEFAULT 0.00,
`total_completed` DECIMAL(15,2) NOT NULL DEFAULT 0.00,
`pct_complete` DECIMAL(5,2) NOT NULL DEFAULT 0.00,
`balance_to_finish` DECIMAL(15,2) NOT NULL DEFAULT 0.00,
PRIMARY KEY (`id`),
KEY `idx_pay_app` (`pay_app_id`),
KEY `idx_cost_code` (`cost_code_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `#__mokosuiteconstruction_lien_waivers` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`job_id` INT UNSIGNED NOT NULL,
`vendor_contact_id` INT NOT NULL,
`type` ENUM('conditional_partial','unconditional_partial','conditional_final','unconditional_final') NOT NULL,
`amount` DECIMAL(15,2) NOT NULL DEFAULT 0.00,
`through_date` DATE DEFAULT NULL,
`received` TINYINT NOT NULL DEFAULT 0,
`received_at` DATETIME DEFAULT NULL,
`document_path` VARCHAR(500) NOT NULL DEFAULT '',
`created` DATETIME NOT NULL,
PRIMARY KEY (`id`),
KEY `idx_job` (`job_id`),
KEY `idx_vendor` (`vendor_contact_id`),
KEY `idx_type` (`type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `#__mokosuiteconstruction_punch_items` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`job_id` INT UNSIGNED NOT NULL,
`location` VARCHAR(255) NOT NULL DEFAULT '',
`description` TEXT NOT NULL,
`responsible_contact_id` INT DEFAULT NULL,
`priority` ENUM('high','medium','low') NOT NULL DEFAULT 'medium',
`status` ENUM('open','in_progress','completed','verified') NOT NULL DEFAULT 'open',
`photo_path` VARCHAR(500) NOT NULL DEFAULT '',
`completed_at` DATETIME DEFAULT NULL,
`verified_at` DATETIME DEFAULT NULL,
`created` DATETIME NOT NULL,
`created_by` INT NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_job` (`job_id`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `#__mokosuiteconstruction_subcontracts` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`job_id` INT UNSIGNED NOT NULL,
`subcontractor_contact_id` INT NOT NULL,
`trade` VARCHAR(100) NOT NULL DEFAULT '',
`scope` TEXT,
`contract_amount` DECIMAL(15,2) NOT NULL DEFAULT 0.00,
`retention_pct` DECIMAL(5,2) NOT NULL DEFAULT 10.00,
`status` ENUM('draft','executed','in_progress','completed','terminated') NOT NULL DEFAULT 'draft',
`executed_at` DATETIME DEFAULT NULL,
`insurance_gl_expires` DATE DEFAULT NULL,
`insurance_wc_expires` DATE DEFAULT NULL,
`created` DATETIME NOT NULL,
PRIMARY KEY (`id`),
KEY `idx_job` (`job_id`),
KEY `idx_sub` (`subcontractor_contact_id`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;