Sindbad~EG File Manager
-- Programs Module Database Schema
-- Created: 2025-11-20
-- Programs Table
CREATE TABLE IF NOT EXISTS programs (
id INT AUTO_INCREMENT PRIMARY KEY,
program_name VARCHAR(255) NOT NULL,
program_description TEXT,
program_type ENUM('daily', 'weekly', 'monthly', 'yearly', 'special') DEFAULT 'weekly',
category VARCHAR(100),
area_id INT,
district_id INT,
assembly_id INT,
start_date DATE,
end_date DATE,
start_time TIME,
end_time TIME,
recurrence VARCHAR(50), -- 'none', 'daily', 'weekly', 'monthly', 'yearly'
recurrence_days VARCHAR(100), -- JSON array of days for weekly: ['monday', 'wednesday']
venue VARCHAR(255),
venue_address TEXT,
coordinator_name VARCHAR(100),
coordinator_phone VARCHAR(20),
max_participants INT,
is_active BOOLEAN DEFAULT TRUE,
created_by INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (area_id) REFERENCES areas(id) ON DELETE SET NULL,
FOREIGN KEY (district_id) REFERENCES districts(id) ON DELETE SET NULL,
FOREIGN KEY (assembly_id) REFERENCES assemblies(id) ON DELETE SET NULL,
FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE SET NULL,
INDEX idx_program_type (program_type),
INDEX idx_area (area_id),
INDEX idx_district (district_id),
INDEX idx_assembly (assembly_id),
INDEX idx_dates (start_date, end_date),
INDEX idx_active (is_active)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Program Instances Table (for recurring programs)
CREATE TABLE IF NOT EXISTS program_instances (
id INT AUTO_INCREMENT PRIMARY KEY,
program_id INT NOT NULL,
instance_date DATE NOT NULL,
instance_time TIME,
status ENUM('scheduled', 'ongoing', 'completed', 'cancelled') DEFAULT 'scheduled',
actual_start_time DATETIME,
actual_end_time DATETIME,
attendance_count INT DEFAULT 0,
notes TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (program_id) REFERENCES programs(id) ON DELETE CASCADE,
INDEX idx_program (program_id),
INDEX idx_date (instance_date),
INDEX idx_status (status),
UNIQUE KEY unique_program_instance (program_id, instance_date)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Program Attendance Table
CREATE TABLE IF NOT EXISTS program_attendance (
id INT AUTO_INCREMENT PRIMARY KEY,
program_id INT NOT NULL,
instance_id INT,
member_id INT,
attendance_date DATE NOT NULL,
check_in_time DATETIME,
check_out_time DATETIME,
status ENUM('present', 'absent', 'late', 'excused') DEFAULT 'present',
marked_by INT,
notes TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (program_id) REFERENCES programs(id) ON DELETE CASCADE,
FOREIGN KEY (instance_id) REFERENCES program_instances(id) ON DELETE SET NULL,
FOREIGN KEY (member_id) REFERENCES members(id) ON DELETE CASCADE,
FOREIGN KEY (marked_by) REFERENCES users(id) ON DELETE SET NULL,
INDEX idx_program (program_id),
INDEX idx_instance (instance_id),
INDEX idx_member (member_id),
INDEX idx_date (attendance_date),
INDEX idx_status (status),
UNIQUE KEY unique_program_attendance (program_id, instance_id, member_id, attendance_date)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Program Participants Table (for registration)
CREATE TABLE IF NOT EXISTS program_participants (
id INT AUTO_INCREMENT PRIMARY KEY,
program_id INT NOT NULL,
member_id INT NOT NULL,
registration_date DATETIME DEFAULT CURRENT_TIMESTAMP,
status ENUM('registered', 'confirmed', 'waitlist', 'cancelled') DEFAULT 'registered',
registered_by INT,
notes TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (program_id) REFERENCES programs(id) ON DELETE CASCADE,
FOREIGN KEY (member_id) REFERENCES members(id) ON DELETE CASCADE,
FOREIGN KEY (registered_by) REFERENCES users(id) ON DELETE SET NULL,
INDEX idx_program (program_id),
INDEX idx_member (member_id),
INDEX idx_status (status),
UNIQUE KEY unique_program_participant (program_id, member_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Insert default programs (skip if already exists)
INSERT IGNORE INTO programs (program_name, program_description, program_type, recurrence, start_time, end_time, created_by, is_active) VALUES
('Sunday Service', 'Main Sunday worship service', 'weekly', 'weekly', '09:00:00', '12:00:00', 1, TRUE),
('Wednesday Bible Study', 'Midweek Bible study and prayer meeting', 'weekly', 'weekly', '18:00:00', '20:00:00', 1, TRUE),
('Youth Fellowship', 'Youth ministry fellowship and activities', 'weekly', 'weekly', '16:00:00', '18:00:00', 1, TRUE),
('Monthly Communion Service', 'Monthly Holy Communion service', 'monthly', 'monthly', '10:00:00', '12:00:00', 1, TRUE),
('Annual Convention', 'Yearly church convention', 'yearly', 'yearly', '08:00:00', '17:00:00', 1, TRUE);
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists