import { useAlert } from '../context/AlertContext'
import { useAuth } from '../context/AuthContext'
import Forbidden from '../components/Forbidden'
import { motion } from 'framer-motion'
import ConfirmModal from '../components/ConfirmModal'
import AdminDatePicker from '../components/AdminDatePicker'
import BulkAttendanceModal from '../components/BulkAttendanceModal'
import ShiftFormModal from '../components/ShiftFormModal'
import AttendanceShiftTable from '../components/AttendanceShiftTable'
import useModalLock from '../hooks/useModalLock'
import useAttendanceAdmin from '../hooks/useAttendanceAdmin'
import { formatMinutes } from '../utils/attendanceHelpers'
function getFundBarBackground(data) {
if (data.overtime > 0) return 'linear-gradient(135deg, var(--warning), #d97706)'
if (data.covered >= data.fund) return 'linear-gradient(135deg, var(--success), #059669)'
return 'var(--gradient)'
}
export default function AttendanceAdmin() {
const alert = useAlert()
const { hasPermission } = useAuth()
const {
loading, month, setMonth,
filterUserId, setFilterUserId,
data, hasData,
showBulkModal, setShowBulkModal,
bulkSubmitting, bulkForm, setBulkForm,
showCreateModal, setShowCreateModal,
createForm, setCreateForm,
showEditModal, setShowEditModal,
editingRecord, editForm, setEditForm,
deleteConfirm, setDeleteConfirm,
projectList,
createProjectLogs, setCreateProjectLogs,
editProjectLogs, setEditProjectLogs,
openCreateModal, handleCreateShiftDateChange, handleCreateSubmit,
openBulkModal, toggleBulkUser, toggleAllBulkUsers, handleBulkSubmit,
openEditModal, handleEditSubmit,
handleDelete, handlePrint
} = useAttendanceAdmin({ alert })
useModalLock(showBulkModal)
useModalLock(showEditModal)
useModalLock(showCreateModal)
if (!hasPermission('attendance.admin')) return
return (
Správa docházky
{hasData && (
<>
>
)}
{/* Filters */}
{/* User Totals */}
{loading && (
{[0, 1, 2].map(i => (
))}
)}
{!loading && Object.keys(data.user_totals).length > 0 && (
{Object.entries(data.user_totals).map(([uid, userData]) => (
{userData.name}
{userData.working ? '✓' : '✗'}
{formatMinutes(userData.minutes)}
odpracováno
{userData.vacation_hours > 0 && (
Dov: {userData.vacation_hours}h
)}
{userData.sick_hours > 0 && (
Nem: {userData.sick_hours}h
)}
{userData.holiday_hours > 0 && (
Sv: {userData.holiday_hours}h
)}
{userData.unpaid_hours > 0 && (
Nep: {userData.unpaid_hours}h
)}
{userData.fund !== null && (
Fond: {userData.worked_hours}h / {userData.fund}h
{userData.overtime > 0 && (
+{userData.overtime}h
)}
{userData.overtime <= 0 && userData.missing > 0 && (
-{userData.missing}h
)}
)}
{data.leave_balances[uid] && (
Zbývá dovolené: {data.leave_balances[uid].vacation_remaining.toFixed(1)}h / {data.leave_balances[uid].vacation_total}h
)}
))}
)}
{/* Records Table */}
{loading && (
{[0, 1, 2, 3, 4].map(i => (
))}
)}
{!loading && (
setDeleteConfirm({ show: true, record })}
/>
)}
{/* Modals */}
setShowBulkModal(false)}
form={bulkForm}
setForm={setBulkForm}
users={data.users}
onSubmit={handleBulkSubmit}
submitting={bulkSubmitting}
toggleUser={toggleBulkUser}
toggleAllUsers={toggleAllBulkUsers}
/>
setShowCreateModal(false)}
onSubmit={handleCreateSubmit}
form={createForm}
setForm={setCreateForm}
projectLogs={createProjectLogs}
setProjectLogs={setCreateProjectLogs}
projectList={projectList}
users={data.users}
onShiftDateChange={handleCreateShiftDateChange}
/>
setShowEditModal(false)}
onSubmit={handleEditSubmit}
form={editForm}
setForm={setEditForm}
projectLogs={editProjectLogs}
setProjectLogs={setEditProjectLogs}
projectList={projectList}
editingRecord={editingRecord}
/>
setDeleteConfirm({ show: false, record: null })}
onConfirm={handleDelete}
title="Smazat záznam"
message="Opravdu chcete smazat tento záznam docházky?"
confirmText="Smazat"
confirmVariant="danger"
/>
)
}