(Feat): Initial Commit
This commit is contained in:
134
backend/database/schema.sql
Normal file
134
backend/database/schema.sql
Normal file
@@ -0,0 +1,134 @@
|
||||
-- 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');
|
||||
Reference in New Issue
Block a user