Initial commit: IT Nexus Web-App
This commit is contained in:
233
backend/src/models/OffboardingProtocol.js
Normal file
233
backend/src/models/OffboardingProtocol.js
Normal file
@@ -0,0 +1,233 @@
|
||||
const { getDatabase } = require('../config/database');
|
||||
|
||||
class OffboardingProtocol {
|
||||
/**
|
||||
* Get all offboarding protocols with related information
|
||||
*/
|
||||
static getAll() {
|
||||
const db = getDatabase();
|
||||
const stmt = db.prepare(`
|
||||
SELECT
|
||||
op.*,
|
||||
e.username as employee_username,
|
||||
e.first_name as employee_first_name,
|
||||
e.last_name as employee_last_name,
|
||||
e.email as employee_email,
|
||||
r.name as employee_role_name,
|
||||
cu.username as created_by_username,
|
||||
uu.username as updated_by_username
|
||||
FROM offboarding_protocols op
|
||||
INNER JOIN users e ON op.employee_user_id = e.id
|
||||
INNER JOIN roles r ON e.role_id = r.id
|
||||
LEFT JOIN users cu ON op.created_by_user_id = cu.id
|
||||
LEFT JOIN users uu ON op.updated_by_user_id = uu.id
|
||||
ORDER BY op.created_at DESC
|
||||
`);
|
||||
return stmt.all();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get offboarding protocol by ID
|
||||
*/
|
||||
static getById(id) {
|
||||
const db = getDatabase();
|
||||
const stmt = db.prepare(`
|
||||
SELECT
|
||||
op.*,
|
||||
e.username as employee_username,
|
||||
e.first_name as employee_first_name,
|
||||
e.last_name as employee_last_name,
|
||||
e.email as employee_email,
|
||||
r.name as employee_role_name,
|
||||
cu.username as created_by_username,
|
||||
uu.username as updated_by_username
|
||||
FROM offboarding_protocols op
|
||||
INNER JOIN users e ON op.employee_user_id = e.id
|
||||
INNER JOIN roles r ON e.role_id = r.id
|
||||
LEFT JOIN users cu ON op.created_by_user_id = cu.id
|
||||
LEFT JOIN users uu ON op.updated_by_user_id = uu.id
|
||||
WHERE op.id = ?
|
||||
`);
|
||||
return stmt.get(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get offboarding protocols by status
|
||||
*/
|
||||
static getByStatus(status) {
|
||||
const db = getDatabase();
|
||||
const stmt = db.prepare(`
|
||||
SELECT
|
||||
op.*,
|
||||
e.username as employee_username,
|
||||
e.first_name as employee_first_name,
|
||||
e.last_name as employee_last_name,
|
||||
e.email as employee_email,
|
||||
cu.username as created_by_username
|
||||
FROM offboarding_protocols op
|
||||
INNER JOIN users e ON op.employee_user_id = e.id
|
||||
LEFT JOIN users cu ON op.created_by_user_id = cu.id
|
||||
WHERE op.status = ?
|
||||
ORDER BY op.created_at DESC
|
||||
`);
|
||||
return stmt.all(status);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get offboarding protocols for an employee
|
||||
*/
|
||||
static getByEmployee(employeeUserId) {
|
||||
const db = getDatabase();
|
||||
const stmt = db.prepare(`
|
||||
SELECT
|
||||
op.*,
|
||||
cu.username as created_by_username
|
||||
FROM offboarding_protocols op
|
||||
LEFT JOIN users cu ON op.created_by_user_id = cu.id
|
||||
WHERE op.employee_user_id = ?
|
||||
ORDER BY op.created_at DESC
|
||||
`);
|
||||
return stmt.all(employeeUserId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new offboarding protocol
|
||||
*/
|
||||
static create(protocolData) {
|
||||
const db = getDatabase();
|
||||
const stmt = db.prepare(`
|
||||
INSERT INTO offboarding_protocols (
|
||||
employee_user_id,
|
||||
status,
|
||||
exit_date,
|
||||
checklist_data,
|
||||
notes,
|
||||
created_by_user_id
|
||||
) VALUES (?, ?, ?, ?, ?, ?)
|
||||
`);
|
||||
|
||||
const result = stmt.run(
|
||||
protocolData.employee_user_id,
|
||||
protocolData.status,
|
||||
protocolData.exit_date,
|
||||
protocolData.checklist_data || null,
|
||||
protocolData.notes || null,
|
||||
protocolData.created_by_user_id
|
||||
);
|
||||
|
||||
return this.getById(result.lastInsertRowid);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update offboarding protocol
|
||||
*/
|
||||
static update(id, protocolData, updatedByUserId) {
|
||||
const db = getDatabase();
|
||||
|
||||
const fields = [];
|
||||
const values = [];
|
||||
|
||||
if (protocolData.status !== undefined) {
|
||||
fields.push('status = ?');
|
||||
values.push(protocolData.status);
|
||||
}
|
||||
if (protocolData.exit_date !== undefined) {
|
||||
fields.push('exit_date = ?');
|
||||
values.push(protocolData.exit_date);
|
||||
}
|
||||
if (protocolData.completion_date !== undefined) {
|
||||
fields.push('completion_date = ?');
|
||||
values.push(protocolData.completion_date);
|
||||
}
|
||||
if (protocolData.checklist_data !== undefined) {
|
||||
fields.push('checklist_data = ?');
|
||||
values.push(protocolData.checklist_data);
|
||||
}
|
||||
if (protocolData.notes !== undefined) {
|
||||
fields.push('notes = ?');
|
||||
values.push(protocolData.notes);
|
||||
}
|
||||
if (protocolData.pdf_file_path !== undefined) {
|
||||
fields.push('pdf_file_path = ?');
|
||||
values.push(protocolData.pdf_file_path);
|
||||
}
|
||||
|
||||
fields.push('updated_by_user_id = ?');
|
||||
fields.push('updated_at = CURRENT_TIMESTAMP');
|
||||
values.push(updatedByUserId, id);
|
||||
|
||||
const stmt = db.prepare(`
|
||||
UPDATE offboarding_protocols
|
||||
SET ${fields.join(', ')}
|
||||
WHERE id = ?
|
||||
`);
|
||||
|
||||
stmt.run(...values);
|
||||
return this.getById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update checklist data
|
||||
*/
|
||||
static updateChecklist(id, checklistData, updatedByUserId) {
|
||||
const db = getDatabase();
|
||||
const stmt = db.prepare(`
|
||||
UPDATE offboarding_protocols
|
||||
SET checklist_data = ?,
|
||||
updated_by_user_id = ?,
|
||||
updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = ?
|
||||
`);
|
||||
|
||||
stmt.run(checklistData, updatedByUserId, id);
|
||||
return this.getById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update PDF file path
|
||||
*/
|
||||
static updatePdfPath(id, pdfFilePath, updatedByUserId) {
|
||||
const db = getDatabase();
|
||||
const stmt = db.prepare(`
|
||||
UPDATE offboarding_protocols
|
||||
SET pdf_file_path = ?,
|
||||
updated_by_user_id = ?,
|
||||
updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = ?
|
||||
`);
|
||||
|
||||
stmt.run(pdfFilePath, updatedByUserId, id);
|
||||
return this.getById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete offboarding protocol
|
||||
*/
|
||||
static delete(id) {
|
||||
const db = getDatabase();
|
||||
const stmt = db.prepare('DELETE FROM offboarding_protocols WHERE id = ?');
|
||||
const result = stmt.run(id);
|
||||
return result.changes > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get statistics
|
||||
*/
|
||||
static getStatistics() {
|
||||
const db = getDatabase();
|
||||
|
||||
const totalStmt = db.prepare('SELECT COUNT(*) as total FROM offboarding_protocols');
|
||||
const pendingStmt = db.prepare("SELECT COUNT(*) as pending FROM offboarding_protocols WHERE status = 'pending'");
|
||||
const inProgressStmt = db.prepare("SELECT COUNT(*) as in_progress FROM offboarding_protocols WHERE status = 'in_progress'");
|
||||
const completedStmt = db.prepare("SELECT COUNT(*) as completed FROM offboarding_protocols WHERE status = 'completed'");
|
||||
|
||||
return {
|
||||
total: totalStmt.get().total,
|
||||
pending: pendingStmt.get().pending,
|
||||
in_progress: inProgressStmt.get().in_progress,
|
||||
completed: completedStmt.get().completed
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = OffboardingProtocol;
|
||||
Reference in New Issue
Block a user