2026-06-27 15:23:25 -05:00
|
|
|
CREATE TABLE IF NOT EXISTS `#__mokosuitelogistics_orders` (
|
|
|
|
|
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
|
|
|
`order_ref` VARCHAR(20) NOT NULL,
|
|
|
|
|
`customer_contact_id` INT DEFAULT NULL,
|
|
|
|
|
`customer_name` VARCHAR(255) NOT NULL,
|
|
|
|
|
`customer_phone` VARCHAR(50) NOT NULL DEFAULT '',
|
|
|
|
|
`customer_email` VARCHAR(255) NOT NULL DEFAULT '',
|
|
|
|
|
`status` ENUM('pending','confirmed','assigned','picked_up','in_transit','delivered','failed','cancelled','returned') NOT NULL DEFAULT 'pending',
|
|
|
|
|
`order_type` ENUM('standard','express','same_day','scheduled','bulk') NOT NULL DEFAULT 'standard',
|
|
|
|
|
`pickup_address` VARCHAR(500) NOT NULL,
|
|
|
|
|
`pickup_lat` DECIMAL(10,7) DEFAULT NULL,
|
|
|
|
|
`pickup_lng` DECIMAL(10,7) DEFAULT NULL,
|
|
|
|
|
`delivery_address` VARCHAR(500) NOT NULL,
|
|
|
|
|
`delivery_lat` DECIMAL(10,7) DEFAULT NULL,
|
|
|
|
|
`delivery_lng` DECIMAL(10,7) DEFAULT NULL,
|
|
|
|
|
`package_type` ENUM('envelope','small_box','medium_box','large_box','pallet','fragile','perishable','custom') NOT NULL DEFAULT 'small_box',
|
|
|
|
|
`weight_kg` DECIMAL(8,2) DEFAULT NULL,
|
|
|
|
|
`estimated_distance_km` DECIMAL(10,2) DEFAULT NULL,
|
|
|
|
|
`delivery_fee` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
|
|
|
|
|
`total_charge` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
|
|
|
|
|
`payment_method` ENUM('cash','card','account','prepaid','cod') NOT NULL DEFAULT 'card',
|
|
|
|
|
`payment_status` ENUM('pending','paid','refunded','failed') NOT NULL DEFAULT 'pending',
|
|
|
|
|
`notes` TEXT,
|
|
|
|
|
`created` DATETIME NOT NULL,
|
|
|
|
|
`created_by` INT NOT NULL DEFAULT 0,
|
|
|
|
|
PRIMARY KEY (`id`),
|
|
|
|
|
UNIQUE KEY `idx_ref` (`order_ref`),
|
|
|
|
|
KEY `idx_customer` (`customer_contact_id`),
|
|
|
|
|
KEY `idx_status` (`status`),
|
|
|
|
|
KEY `idx_type` (`order_type`),
|
|
|
|
|
KEY `idx_created` (`created`)
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
2026-06-27 20:20:33 +00:00
|
|
|
|
2026-06-27 15:23:25 -05:00
|
|
|
CREATE TABLE IF NOT EXISTS `#__mokosuitelogistics_deliveries` (
|
|
|
|
|
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
|
|
|
`order_id` INT UNSIGNED NOT NULL,
|
|
|
|
|
`driver_id` INT UNSIGNED DEFAULT NULL,
|
|
|
|
|
`route_id` INT UNSIGNED DEFAULT NULL,
|
|
|
|
|
`status` ENUM('assigned','en_route_pickup','picked_up','en_route_delivery','delivered','failed','returned') NOT NULL DEFAULT 'assigned',
|
|
|
|
|
`assigned_at` DATETIME DEFAULT NULL,
|
|
|
|
|
`picked_up_at` DATETIME DEFAULT NULL,
|
|
|
|
|
`delivered_at` DATETIME DEFAULT NULL,
|
|
|
|
|
`failed_at` DATETIME DEFAULT NULL,
|
|
|
|
|
`failure_reason` VARCHAR(500) NOT NULL DEFAULT '',
|
|
|
|
|
`attempt_number` TINYINT UNSIGNED NOT NULL DEFAULT 1,
|
|
|
|
|
`actual_distance_km` DECIMAL(10,2) DEFAULT NULL,
|
|
|
|
|
`driver_notes` TEXT,
|
|
|
|
|
`created` DATETIME NOT NULL,
|
|
|
|
|
PRIMARY KEY (`id`),
|
|
|
|
|
KEY `idx_order` (`order_id`),
|
|
|
|
|
KEY `idx_driver` (`driver_id`),
|
|
|
|
|
KEY `idx_route` (`route_id`),
|
|
|
|
|
KEY `idx_status` (`status`)
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
2026-06-27 20:20:33 +00:00
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS `#__mokosuitelogistics_routes` (
|
2026-06-27 15:23:25 -05:00
|
|
|
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
|
|
|
`route_ref` VARCHAR(20) NOT NULL,
|
|
|
|
|
`driver_id` INT UNSIGNED DEFAULT NULL,
|
|
|
|
|
`status` ENUM('planned','active','completed','cancelled') NOT NULL DEFAULT 'planned',
|
|
|
|
|
`planned_date` DATE NOT NULL,
|
|
|
|
|
`started_at` DATETIME DEFAULT NULL,
|
|
|
|
|
`completed_at` DATETIME DEFAULT NULL,
|
|
|
|
|
`total_stops` INT UNSIGNED NOT NULL DEFAULT 0,
|
|
|
|
|
`total_distance_km` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
|
|
|
|
|
`notes` TEXT,
|
|
|
|
|
`created` DATETIME NOT NULL,
|
|
|
|
|
PRIMARY KEY (`id`),
|
|
|
|
|
UNIQUE KEY `idx_ref` (`route_ref`),
|
|
|
|
|
KEY `idx_driver` (`driver_id`),
|
|
|
|
|
KEY `idx_status` (`status`),
|
|
|
|
|
KEY `idx_date` (`planned_date`)
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
2026-06-27 20:20:33 +00:00
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS `#__mokosuitelogistics_route_stops` (
|
2026-06-27 15:23:25 -05:00
|
|
|
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
|
|
|
`route_id` INT UNSIGNED NOT NULL,
|
|
|
|
|
`order_id` INT UNSIGNED DEFAULT NULL,
|
|
|
|
|
`stop_type` ENUM('pickup','delivery','warehouse','return') NOT NULL DEFAULT 'delivery',
|
|
|
|
|
`address` VARCHAR(500) NOT NULL,
|
|
|
|
|
`lat` DECIMAL(10,7) DEFAULT NULL,
|
|
|
|
|
`lng` DECIMAL(10,7) DEFAULT NULL,
|
|
|
|
|
`sequence_order` INT UNSIGNED NOT NULL DEFAULT 0,
|
|
|
|
|
`estimated_arrival` DATETIME DEFAULT NULL,
|
|
|
|
|
`actual_arrival` DATETIME DEFAULT NULL,
|
|
|
|
|
`status` ENUM('pending','arrived','completed','skipped') NOT NULL DEFAULT 'pending',
|
|
|
|
|
`notes` TEXT,
|
|
|
|
|
PRIMARY KEY (`id`),
|
|
|
|
|
KEY `idx_route` (`route_id`),
|
|
|
|
|
KEY `idx_order` (`order_id`)
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
2026-06-27 20:20:33 +00:00
|
|
|
|
2026-06-27 15:23:25 -05:00
|
|
|
CREATE TABLE IF NOT EXISTS `#__mokosuitelogistics_delivery_proofs` (
|
|
|
|
|
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
|
|
|
`delivery_id` INT UNSIGNED NOT NULL,
|
|
|
|
|
`proof_type` ENUM('signature','photo','both') NOT NULL DEFAULT 'photo',
|
|
|
|
|
`recipient_name` VARCHAR(255) NOT NULL DEFAULT '',
|
|
|
|
|
`signature_data` TEXT,
|
|
|
|
|
`photo_path` VARCHAR(500) NOT NULL DEFAULT '',
|
|
|
|
|
`geolocation_lat` DECIMAL(10,7) DEFAULT NULL,
|
|
|
|
|
`geolocation_lng` DECIMAL(10,7) DEFAULT NULL,
|
|
|
|
|
`notes` TEXT,
|
|
|
|
|
`created` DATETIME NOT NULL,
|
|
|
|
|
PRIMARY KEY (`id`),
|
|
|
|
|
KEY `idx_delivery` (`delivery_id`)
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
2026-06-27 20:20:33 +00:00
|
|
|
|
2026-06-27 15:23:25 -05:00
|
|
|
CREATE TABLE IF NOT EXISTS `#__mokosuitelogistics_pricing_rules` (
|
|
|
|
|
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
|
|
|
`name` VARCHAR(255) NOT NULL,
|
|
|
|
|
`order_type` ENUM('standard','express','same_day','scheduled','bulk','all') NOT NULL DEFAULT 'all',
|
|
|
|
|
`base_fee` DECIMAL(10,2) NOT NULL DEFAULT 5.00,
|
|
|
|
|
`per_km` DECIMAL(10,2) NOT NULL DEFAULT 1.00,
|
|
|
|
|
`per_kg` DECIMAL(10,2) NOT NULL DEFAULT 0.50,
|
|
|
|
|
`minimum_charge` DECIMAL(10,2) NOT NULL DEFAULT 5.00,
|
|
|
|
|
`express_multiplier` DECIMAL(4,2) NOT NULL DEFAULT 1.50,
|
|
|
|
|
`published` TINYINT NOT NULL DEFAULT 1,
|
|
|
|
|
`created` DATETIME NOT NULL,
|
|
|
|
|
PRIMARY KEY (`id`),
|
|
|
|
|
KEY `idx_order_type` (`order_type`)
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS `#__mokosuitelogistics_drivers` (
|
|
|
|
|
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
|
|
|
`contact_id` INT DEFAULT NULL,
|
|
|
|
|
`name` VARCHAR(255) NOT NULL,
|
|
|
|
|
`phone` VARCHAR(50) NOT NULL DEFAULT '',
|
|
|
|
|
`email` VARCHAR(255) NOT NULL DEFAULT '',
|
|
|
|
|
`license_number` VARCHAR(50) NOT NULL DEFAULT '',
|
|
|
|
|
`vehicle_description` VARCHAR(255) NOT NULL DEFAULT '',
|
|
|
|
|
`status` ENUM('available','on_delivery','off_duty','inactive') NOT NULL DEFAULT 'available',
|
|
|
|
|
`current_lat` DECIMAL(10,7) DEFAULT NULL,
|
|
|
|
|
`current_lng` DECIMAL(10,7) DEFAULT NULL,
|
|
|
|
|
`rating` DECIMAL(3,2) NOT NULL DEFAULT 5.00,
|
|
|
|
|
`total_deliveries` INT UNSIGNED NOT NULL DEFAULT 0,
|
|
|
|
|
`published` TINYINT NOT NULL DEFAULT 1,
|
|
|
|
|
`created` DATETIME NOT NULL,
|
|
|
|
|
PRIMARY KEY (`id`),
|
|
|
|
|
KEY `idx_contact` (`contact_id`),
|
|
|
|
|
KEY `idx_status` (`status`)
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS `#__mokosuitelogistics_warehouses` (
|
|
|
|
|
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
|
|
|
`name` VARCHAR(255) NOT NULL,
|
|
|
|
|
`address` VARCHAR(500) NOT NULL,
|
|
|
|
|
`lat` DECIMAL(10,7) DEFAULT NULL,
|
|
|
|
|
`lng` DECIMAL(10,7) DEFAULT NULL,
|
|
|
|
|
`manager_contact_id` INT DEFAULT NULL,
|
|
|
|
|
`phone` VARCHAR(50) NOT NULL DEFAULT '',
|
|
|
|
|
`published` TINYINT NOT NULL DEFAULT 1,
|
|
|
|
|
`created` DATETIME NOT NULL,
|
|
|
|
|
PRIMARY KEY (`id`),
|
|
|
|
|
KEY `idx_manager` (`manager_contact_id`)
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|