diff --git a/src/admin/hooks/useAttendanceAdmin.ts b/src/admin/hooks/useAttendanceAdmin.ts index a3ebaed..c9a0345 100644 --- a/src/admin/hooks/useAttendanceAdmin.ts +++ b/src/admin/hooks/useAttendanceAdmin.ts @@ -245,110 +245,154 @@ function buildLeaveSummaryHtml(userId: string, userData: Record, pr } function buildUserSectionHtml(userId: string, userData: Record, printData: Record): string { - const records = (printData.records || []).filter((r: any) => String(r.user_id) === userId) - let rows = '' - for (const record of records) { + const leaveHtml = printData.leave_balances[userId] + ? buildLeaveSummaryHtml(userId, userData, printData) + : '' + + const recordRows = (userData.records || []).map((record: any) => { const leaveType = record.leave_type || 'work' - const typeBadge = leaveType === 'work' - ? 'Práce' - : `${getLeaveTypeName(leaveType)}` - const workMins = calculateWorkMinutesPrint(record) - const hoursStr = workMins > 0 ? `${Math.floor(workMins / 60)}:${String(workMins % 60).padStart(2, '0')}` : (leaveType !== 'work' ? `${record.leave_hours || 8}h` : '—') - rows += ` + const isLeave = leaveType !== 'work' + const workMinutes = calculateWorkMinutesPrint(record) + const hours = Math.floor(workMinutes / 60) + const mins = workMinutes % 60 + const breakCell = (isLeave || !record.break_start || !record.break_end) + ? '—' + : `${formatTimeOrDatetimePrint(record.break_start, record.shift_date)} - ${formatTimeOrDatetimePrint(record.break_end, record.shift_date)}` + + return ` ${formatDate(record.shift_date)} - ${typeBadge} - ${formatTimeOrDatetimePrint(record.arrival_time, record.shift_date)} - ${record.break_start ? formatTimeOrDatetimePrint(record.break_start, record.shift_date) + ' – ' + formatTimeOrDatetimePrint(record.break_end, record.shift_date) : '—'} - ${formatTimeOrDatetimePrint(record.departure_time, record.shift_date)} - ${hoursStr} - ${buildProjectLogsHtml(record)} + ${getLeaveTypeName(leaveType)} + ${isLeave ? '—' : formatTimeOrDatetimePrint(record.arrival_time, record.shift_date)} + ${breakCell} + ${isLeave ? '—' : formatTimeOrDatetimePrint(record.departure_time, record.shift_date)} + ${workMinutes > 0 ? `${hours}:${String(mins).padStart(2, '0')}` : '—'} + ${buildProjectLogsHtml(record)} ${record.notes || ''} ` - } + }).join('') - const leaveSummary = printData.leave_balances[userId] ? buildLeaveSummaryHtml(userId, userData, printData) : '' + const fundRow = userData.fund !== null + ? ` + Fond měsíce: + ${userData.covered}h / ${userData.fund}h + ${renderFundStatus(userData)} + ` + : '' return `
-

${userData.name}

- ${leaveSummary} +
+

${userData.name}

+ Odpracováno: ${formatMinutes(userData.minutes)} h +
+ ${leaveHtml} - - - - - - ${rows} + + + + + + + + + + + ${recordRows} - - - + + + - - - - + ${fundRow}
DatumTypPříchodPauzaOdchodHodinyProjektyPoznámka
DatumTypPříchodPauzaOdchodHodinyProjektyPoznámka
Celkem odpracováno${formatMinutes(userData.minutes)}
Odpracováno:${formatMinutes(userData.minutes)} h
Fond: ${userData.fund ?? '—'}h (${userData.business_days ?? '—'} prac. dnů)${renderFundStatus(userData)}
` } function buildPrintHtml(pData: Record, userSections: string, emptyMsg: string, filterNote: string): string { - const now = new Date() - const generated = now.toLocaleDateString('cs-CZ') + ' ' + now.toLocaleTimeString('cs-CZ', { hour: '2-digit', minute: '2-digit' }) return ` - -Docházka - ${pData.month_name} - + + + Docházka - ${pData.month_name} + -
-
- Logo -
-
EVIDENCE DOCHÁZKY
-
BOHA Automation s.r.o.
+ + + + ` }