Workforce Productivity Analyzer

Workforce Productivity Analyzer

Log New Entry

Employee Tasks Completed Hours Worked Efficiency (Tasks/Hr)

Configure Team Data

Total Hours Worked: ${metrics.totalHours}

Average Efficiency: ${metrics.overallEfficiency} Tasks/Hour

`; // Employee Performance Chart Widget const performanceWidget = document.createElement('div'); performanceWidget.className = 'pa-widget'; performanceWidget.innerHTML = `

Employee Task Completion vs. Target

`; dashboardGrid.appendChild(performanceWidget); const perfCtx = document.getElementById('performanceChart').getContext('2d'); chartInstances.performance = new Chart(perfCtx, { type: 'bar', data: { labels: metrics.employeePerformance.map(e => e.name), datasets: [ { label: 'Tasks Completed', data: metrics.employeePerformance.map(e => e.tasks), backgroundColor: 'rgba(39, 174, 96, 0.7)', borderColor: 'rgba(39, 174, 96, 1)', borderWidth: 1 }, { label: 'Weekly Target', data: metrics.employeePerformance.map(e => e.target), type: 'line', fill: false, borderColor: 'rgba(211, 84, 0, 1)', tension: 0.1 } ] }, options: { scales: { y: { beginAtZero: true } } } }); }; const renderProductivityLog = () => { const tableBody = $('#pl-log-table-body'); const employeeSelect = $('#pl-employee'); if(!tableBody || !employeeSelect) return; tableBody.innerHTML = ''; workforceData.logs.forEach(log => { const employee = workforceData.employees.find(e => e.id === log.employeeId); const efficiency = log.hours > 0 ? (log.tasks / log.hours).toFixed(2) : 0; const row = ` ${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'); });
Scroll to Top