Smart Break Interval Calculator
Work Session Details
Suggested Schedule
| Type | Start Time | End Time | Duration |
|---|
Total Focused Work Time: ${sbic_formatDuration(totalScheduledWork)}
Total Break Time: ${sbic_formatDuration(totalBreakTimeScheduled)}
Number of Breaks: ${sbic_scheduleData.filter(s=>s.type==='Break').length}
Estimated Session End Time: ${sbic_formatTime(overallEndTime)}
`; sbic_inputSummaryForPdf.totalBreak = sbic_formatDuration(totalBreakTimeScheduled); sbic_inputSummaryForPdf.numBreaks = sbic_scheduleData.filter(s=>s.type==='Break').length; sbic_inputSummaryForPdf.sessionEnd = sbic_formatTime(overallEndTime); document.getElementById('sbic-results-section').style.display = 'block'; document.getElementById('sbic-download-pdf-button').disabled = false; } function sbic_clearInputs() { document.getElementById('sbic-total-work-duration').value = "120"; document.getElementById('sbic-duration-unit').value = "minutes"; // Default back to minutes for 120 const now = new Date(); const currentMinutes = now.getMinutes(); const roundedMinutes = Math.ceil(currentMinutes / 15) * 15; now.setMinutes(roundedMinutes); now.setSeconds(0); now.setMilliseconds(0); if (roundedMinutes >= 60) { now.setHours(now.getHours() +1 ); now.setMinutes(0); } document.getElementById('sbic-start-time').value = `${String(now.getHours()).padStart(2,'0')}:${String(now.getMinutes()).padStart(2,'0')}`; document.getElementById('sbic-work-type').value = "General"; document.getElementById('sbic-break-preference').value = "Standard"; document.getElementById('sbic-schedule-tbody').innerHTML = ''; document.getElementById('sbic-schedule-summary').innerHTML = ''; document.getElementById('sbic-results-section').style.display = 'none'; document.getElementById('sbic-download-pdf-button').disabled = true; sbic_scheduleData = []; sbic_inputSummaryForPdf = {}; } function sbic_downloadPDF() { if (!tpc_jsPDF_loaded_SBIC || !tpc_autoTable_loaded_SBIC) { alert("SBIC Error: PDF libraries not loaded."); return; } if (sbic_scheduleData.length === 0) { alert("Please generate a schedule first."); return; } const doc = new TPC_jsPDF_SBIC(); const primaryColor = getComputedStyle(document.documentElement).getPropertyValue('--primary-color').trim(); const darkColor = getComputedStyle(document.documentElement).getPropertyValue('--dark-color').trim(); let finalY = 15; const reportDateStr = new Date().toLocaleDateString(); doc.setFontSize(18); doc.setTextColor(primaryColor); doc.text("Smart Break Interval Schedule", doc.internal.pageSize.getWidth() / 2, finalY, { align: 'center' }); finalY += 8; doc.setFontSize(10); doc.setTextColor(darkColor); doc.text(`Generated on: ${reportDateStr}`, doc.internal.pageSize.getWidth() / 2, finalY, { align: 'center'}); finalY += 10; doc.setFontSize(12); doc.setTextColor(primaryColor); doc.text("Session Parameters:", 14, finalY); finalY += 6; doc.setFontSize(9); doc.setTextColor(darkColor); doc.text(`Total Focused Work: ${sbic_inputSummaryForPdf.totalWork}`, 14, finalY); finalY += 5; doc.text(`Session Start Time: ${sbic_inputSummaryForPdf.startTime}`, 14, finalY); finalY += 5; doc.text(`Work Type: ${sbic_inputSummaryForPdf.workType}`, 14, finalY); finalY += 5; doc.text(`Break Preference: ${sbic_inputSummaryForPdf.breakPreference}`, 14, finalY); finalY += 7; doc.setFontSize(12); doc.setTextColor(primaryColor); doc.text("Schedule Summary:", 14, finalY); finalY += 6; doc.setFontSize(9); doc.setTextColor(darkColor); doc.text(`Total Break Time: ${sbic_inputSummaryForPdf.totalBreak}`, 14, finalY); finalY += 5; doc.text(`Number of Breaks: ${sbic_inputSummaryForPdf.numBreaks}`, 14, finalY); finalY += 5; doc.text(`Estimated Session End: ${sbic_inputSummaryForPdf.sessionEnd}`, 14, finalY); finalY += 10; doc.setFontSize(12); doc.setTextColor(primaryColor); doc.text("Detailed Schedule:", 14, finalY); finalY += 6; const tableBody = sbic_scheduleData.map(item => [ item.type, sbic_formatTime(item.startTime), sbic_formatTime(item.endTime), sbic_formatDuration(item.durationMinutes) ]); doc.autoTable({ startY: finalY, head: [['Type', 'Start Time', 'End Time', 'Duration']], body: tableBody, theme: 'grid', headStyles: { fillColor: primaryColor, textColor: '#ffffff', fontSize: 9 }, styles: { fontSize: 8, cellPadding: 2 } }); doc.save(`Smart_Break_Schedule_${new Date().toISOString().slice(0,10)}.pdf`); }