-- Work Allocation System Database Schema -- Create database CREATE DATABASE IF NOT EXISTS work_allocation; USE work_allocation; -- Departments table CREATE TABLE departments ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) NOT NULL UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); -- Sub-departments table (for Groundnut department) CREATE TABLE sub_departments ( id INT PRIMARY KEY AUTO_INCREMENT, department_id INT NOT NULL, name VARCHAR(200) NOT NULL, primary_activity VARCHAR(200) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (department_id) REFERENCES departments(id) ON DELETE CASCADE ); -- Users table (for all roles: SuperAdmin, Supervisor, Contractor, Employee) CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(100) NOT NULL UNIQUE, name VARCHAR(200) NOT NULL, email VARCHAR(200) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, role ENUM('SuperAdmin', 'Supervisor', 'Contractor', 'Employee') NOT NULL, department_id INT, contractor_id INT, is_active BOOLEAN DEFAULT TRUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (department_id) REFERENCES departments(id) ON DELETE SET NULL, FOREIGN KEY (contractor_id) REFERENCES users(id) ON DELETE SET NULL ); -- Contractor rates table CREATE TABLE contractor_rates ( id INT PRIMARY KEY AUTO_INCREMENT, contractor_id INT NOT NULL, rate DECIMAL(10, 2) NOT NULL, effective_date DATE NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (contractor_id) REFERENCES users(id) ON DELETE CASCADE ); -- Work allocations table CREATE TABLE work_allocations ( id INT PRIMARY KEY AUTO_INCREMENT, employee_id INT NOT NULL, supervisor_id INT NOT NULL, contractor_id INT NOT NULL, sub_department_id INT, description TEXT, assigned_date DATE NOT NULL, status ENUM('Pending', 'InProgress', 'Completed', 'Cancelled') DEFAULT 'Pending', completion_date DATE, rate DECIMAL(10, 2), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (employee_id) REFERENCES users(id) ON DELETE CASCADE, FOREIGN KEY (supervisor_id) REFERENCES users(id) ON DELETE CASCADE, FOREIGN KEY (contractor_id) REFERENCES users(id) ON DELETE CASCADE, FOREIGN KEY (sub_department_id) REFERENCES sub_departments(id) ON DELETE SET NULL ); -- Attendance table CREATE TABLE attendance ( id INT PRIMARY KEY AUTO_INCREMENT, employee_id INT NOT NULL, supervisor_id INT NOT NULL, check_in_time DATETIME NOT NULL, check_out_time DATETIME, work_date DATE NOT NULL, status ENUM('CheckedIn', 'CheckedOut') DEFAULT 'CheckedIn', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (employee_id) REFERENCES users(id) ON DELETE CASCADE, FOREIGN KEY (supervisor_id) REFERENCES users(id) ON DELETE CASCADE ); -- Insert default departments INSERT INTO departments (name) VALUES ('Tudki'), ('Dana'), ('Groundnut'); -- Insert Groundnut sub-departments INSERT INTO sub_departments (department_id, name, primary_activity) SELECT id, 'Mufali Aavak Katai', 'Loading/Unloading' FROM departments WHERE name = 'Groundnut' UNION ALL SELECT id, 'Mufali Aavak Dhang', 'Loading/Unloading' FROM departments WHERE name = 'Groundnut' UNION ALL SELECT id, 'Dhang Se Katai', 'Loading/Unloading' FROM departments WHERE name = 'Groundnut' UNION ALL SELECT id, 'Guthli Bori Silai Dhang', 'Loading/Unloading' FROM departments WHERE name = 'Groundnut' UNION ALL SELECT id, 'Guthali dada Pala Tulai Silai Dhang', 'Loading/Unloading' FROM departments WHERE name = 'Groundnut' UNION ALL SELECT id, 'Mufali Patthar Bori silai dhang', 'Loading/Unloading' FROM departments WHERE name = 'Groundnut' UNION ALL SELECT id, 'Mufali Patthar Bori Utrai', 'Loading/Unloading' FROM departments WHERE name = 'Groundnut' UNION ALL SELECT id, 'Bardana Bandal Loading Unloading', 'Loading/Unloading' FROM departments WHERE name = 'Groundnut' UNION ALL SELECT id, 'Bardana Gatthi Loading', 'Loading/Unloading' FROM departments WHERE name = 'Groundnut' UNION ALL SELECT id, 'Black Dana Loading/Unloading', 'Loading/Unloading' FROM departments WHERE name = 'Groundnut' UNION ALL SELECT id, 'Pre Cleaning', 'Pre Cleaning' FROM departments WHERE name = 'Groundnut' UNION ALL SELECT id, 'Destoner', 'Destoner' FROM departments WHERE name = 'Groundnut' UNION ALL SELECT id, 'Water', 'Water' FROM departments WHERE name = 'Groundnut' UNION ALL SELECT id, 'Decordicater', 'Decordicater & Cleaning' FROM departments WHERE name = 'Groundnut' UNION ALL SELECT id, 'Round Chalna', 'Round Chalna & Cleaning' FROM departments WHERE name = 'Groundnut' UNION ALL SELECT id, 'Cleaning', 'Decordicater & Cleaning' FROM departments WHERE name = 'Groundnut' UNION ALL SELECT id, 'Round Chalna No.1', 'Round Chalna No.1' FROM departments WHERE name = 'Groundnut'; -- Insert default SuperAdmin (password: admin123) -- Password is hashed using bcrypt: $2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi INSERT INTO users (username, name, email, password, role) VALUES ('admin', 'Super Admin', 'admin@workallocate.com', '$2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'SuperAdmin');