`;
// Employee Performance Chart Widget
const performanceWidget = document.createElement('div');
performanceWidget.className = 'pa-widget';
performanceWidget.innerHTML = `
${employee.name}
${log.tasks}
${log.hours}
${efficiency}
`;
tableBody.innerHTML += row;
});
employeeSelect.innerHTML = '';
workforceData.employees.forEach(emp => {
employeeSelect.innerHTML += ``;
});
};
const populateDataConfigForm = () => {
const employeeSelect = $('#dc-employee-select');
if(!employeeSelect) return;
employeeSelect.innerHTML = '';
workforceData.employees.forEach(emp => {
employeeSelect.innerHTML += ``;
});
loadEmployeeDataForEdit(employeeSelect.value);
};
const loadEmployeeDataForEdit = (employeeId) => {
const employee = workforceData.employees.find(e => e.id == employeeId);
if (employee) {
$('#dc-employee-name').value = employee.name;
$('#dc-employee-target').value = employee.weeklyTarget;
}
};
// --- EVENT HANDLERS --- //
const switchTab = (tabId) => {
activeTab = tabId;
tabContents.forEach(content => content.classList.toggle('active', content.id === tabId));
tabButtons.forEach(button => button.classList.toggle('active', button.dataset.tab === tabId));
if (tabId === 'dashboard') renderDashboard();
if (tabId === 'productivity-log') renderProductivityLog();
if (tabId === 'data-config') populateDataConfigForm();
};
tabButtons.forEach(button => {
button.addEventListener('click', () => switchTab(button.dataset.tab));
});
// Productivity Log Form
$('#pl-add-entry-form').addEventListener('submit', (e) => {
e.preventDefault();
const newLog = {
employeeId: parseInt($('#pl-employee').value),
tasks: parseInt($('#pl-tasks-completed').value),
hours: parseInt($('#pl-hours-worked').value)
};
workforceData.logs.push(newLog);
renderProductivityLog();
e.target.reset();
});
// Data Config Form
$('#dc-employee-select').addEventListener('change', (e) => loadEmployeeDataForEdit(e.target.value));
$('#dc-team-form').addEventListener('submit', (e) => {
e.preventDefault();
const employeeId = parseInt($('#dc-employee-select').value);
const employee = workforceData.employees.find(emp => emp.id === employeeId);
if (employee) {
employee.name = $('#dc-employee-name').value;
employee.weeklyTarget = parseInt($('#dc-employee-target').value);
alert('Employee data updated!');
populateDataConfigForm(); // Refresh form selects
}
});
// PDF Download
$('#download-pdf-btn').addEventListener('click', () => {
const { jsPDF } = window.jspdf;
const doc = new jsPDF();
const metrics = calculateMetrics();
doc.setFontSize(22);
doc.text("Workforce Productivity Summary", 105, 20, null, null, "center");
doc.autoTable({
startY: 30,
head: [['Metric', 'Value']],
body: [
['Total Tasks Completed', metrics.totalTasks],
['Total Hours Worked', metrics.totalHours],
['Average Efficiency (Tasks/Hr)', metrics.overallEfficiency]
],
theme: 'striped'
});
const tableData = metrics.employeePerformance.map(emp => [emp.name, emp.tasks, emp.target]);
doc.autoTable({
startY: doc.lastAutoTable.finalY + 10,
head: [['Employee', 'Tasks Completed', 'Weekly Target']],
body: tableData,
theme: 'grid'
});
doc.save('productivity-summary.pdf');
});
// Navigation Buttons
const tabOrder = ['dashboard', 'productivity-log', 'data-config'];
$('#next-btn').addEventListener('click', () => {
const currentIndex = tabOrder.indexOf(activeTab);
const nextIndex = (currentIndex + 1) % tabOrder.length;
switchTab(tabOrder[nextIndex]);
});
$('#prev-btn').addEventListener('click', () => {
const currentIndex = tabOrder.indexOf(activeTab);
const prevIndex = (currentIndex - 1 + tabOrder.length) % tabOrder.length;
switchTab(tabOrder[prevIndex]);
});
// --- INITIALIZATION --- //
switchTab('dashboard');
});
