Smart Task Schedule Customizer
Add New Task
Current Task List
No tasks added yet.
Scheduling Availability
Please input tasks, define availability, and click "Generate Customized Schedule" on the first tab.
No tasks scheduled for this day.
"; } scheduleHTML += `Unscheduled Tasks (${unscheduledTasks.length})
`; unscheduledTasks.forEach(task => { scheduleHTML += `
${task.name} (Priority: ${task.priority}, Est: ${task.estTime} min
${task.dueDate ? `, Due: ${new Date(task.dueDate+"T00:00:00").toLocaleDateString()}` : ''})
- Reason: Not enough time or past due before fitting.
`;
});
}
const scheduleOutputEl = document.getElementById('stsc-schedule-output');
if(scheduleOutputEl) scheduleOutputEl.innerHTML = scheduleHTML;
stscOpenTab(null, 'stsc-schedule');
stscUpdateNavButtons();
}
function stscDownloadPDF() {
const scheduleOutputElement = document.getElementById('stsc-schedule-output');
if (!scheduleOutputElement || scheduleOutputElement.innerHTML.includes("Please input tasks")) {
alert("Please generate a schedule first.");
return;
}
let pdfHTML = `Customized Task Schedule
`; // Add Initial Task List to PDF pdfHTML += `Initial Task List (${stscTasks.length})
`; if (stscTasks.length > 0) { stscTasks.forEach(task => { pdfHTML += `
${task.name}
Priority: ${task.priority} | Est. Time: ${task.estTime} min ${task.dueDate ? ` | Due: ${new Date(task.dueDate+"T00:00:00").toLocaleDateString()}` : ''}
`;
});
} else {
pdfHTML += "Priority: ${task.priority} | Est. Time: ${task.estTime} min ${task.dueDate ? ` | Due: ${new Date(task.dueDate+"T00:00:00").toLocaleDateString()}` : ''}
No tasks were initially listed.
"; } // Add schedule content (already generated and in scheduleOutputElement) pdfHTML += scheduleOutputElement.innerHTML; // This already has "Generated Schedule" h3 and then day breakdowns & unscheduled const pdfContainer = document.getElementById('stsc-report-content-for-pdf'); if (!pdfContainer) return; pdfContainer.innerHTML = pdfHTML; const opt = { margin: [0.5, 0.3, 0.5, 0.3], filename: 'Customized_Task_Schedule.pdf', image: { type: 'jpeg', quality: 0.98 }, html2canvas: { scale: 2, useCORS: true, logging: false, scrollX: 0, scrollY: 0, windowWidth: pdfContainer.scrollWidth }, jsPDF: { unit: 'in', format: 'letter', orientation: 'portrait' }, pagebreak: { mode: ['avoid-all', 'css', 'legacy'] } }; html2pdf().from(pdfContainer).set(opt).save().then(() => { pdfContainer.innerHTML = ''; }).catch(err => { console.error("Error generating PDF:", err); pdfContainer.innerHTML = ''; alert("An error occurred while generating the PDF. Check console for details."); }); }