Personal Work Performance Analyzer
Analysis Period
Achievements / Accomplishments
Completed Tasks (with effort analysis)
Challenges / Obstacles Faced
Skills Utilized / Learned
Self-Identified Areas for Improvement
Input performance data on the first tab and click "Analyze Performance & View Report".
Period: ${startDate} to ${endDate}
`; const buildListSection = (title, category) => { let sectionHTML = `${title}
`; if (pwpaData[category].length > 0) { sectionHTML += `- `;
pwpaData[category].forEach(item => sectionHTML += `
- ${item.text} `); sectionHTML += `
None specified for this period.
`; } sectionHTML += `Completed Tasks & Effort Analysis
`; if (pwpaData.completedTasks.length > 0) { let totalEst = 0, totalActual = 0; reportHTML += `| Task Name | Est. Hours | Actual Hours | Variance (Actual-Est) |
|---|---|---|---|
| ${task.name} | ${task.estHours} | ${task.actualHours} | ${variance.toFixed(1)}h |
Total Tasks Completed: ${pwpaData.completedTasks.length}
`; reportHTML += `Total Estimated Hours: ${totalEst.toFixed(1)}h
Total Actual Hours: ${totalActual.toFixed(1)}h
`; if (totalEst > 0) { let accuracy = (totalActual / totalEst); let accuracyMsg = ""; if (accuracy === 1) accuracyMsg = "Spot on with estimations!"; else if (accuracy < 1) accuracyMsg = `Generally overestimated tasks by about ${((1 - accuracy) * 100).toFixed(0)}%.`; else accuracyMsg = `Generally underestimated tasks by about ${((accuracy - 1) * 100).toFixed(0)}%.`; reportHTML += `Estimation Trend: ${accuracyMsg}
`; } } else { reportHTML += `No completed tasks with effort data logged for this period.
`; } reportHTML += `Personal Work Performance Report
`; pdfHTML += `Period: ${startDate} to ${endDate}
`; // Get structured content from the display to ensure PDF matches what user sees // Need to ensure CSS classes for tables etc. are handled correctly by html2pdf or inline critical styles const reportContentForPDF = reportDisplayElement.innerHTML .replace(//g, '') // Style H4s
.replace(/
| /g, ' | ') .replace(/ | /g, ' | ')
.replace(/
|
|---|
