List
Bảng leave request với 4 tab lọc theo trạng thái (Pending/Approved/Rejected/All) + 4 thẻ thống kê nhanh (pending/approved/rejected/tổng ngày đã dùng). Nút duyệt/từ chối nằm ngay trên từng dòng.
List
Bảng leave request với 4 tab lọc theo trạng thái (Pending/Approved/Rejected/All) + 4 thẻ thống kê nhanh (pending/approved/rejected/tổng ngày đã dùng). Nút duyệt/từ chối nằm ngay trên từng dòng.
Calendar
Gantt nhiều nhân viên theo hàng, cột theo ngày/tuần/tháng tuỳ mức zoom (granularity), nhóm theo phòng ban. Có preset khoảng thời gian (tuần này/tháng này/3-6-12 tháng/tuỳ chỉnh) và tô màu ngày lễ + cuối tuần.
Timeline
Phiên bản gọn hơn Calendar — chỉ xem theo tháng, không đổi granularity, phù hợp nhìn nhanh ai đang nghỉ trong tháng.
Cả Calendar và Timeline chỉ hiển thị nhân viên đang active/probation (không hiện talent/candidate), và loại trừ request đã rejected.
Tạo request — từ modal “Tạo yêu cầu” (chọn person nếu tạo hộ, nếu không thì gắn theo người đang xem) với leave_type_id, start_date, end_date, reason tuỳ chọn.
Server tính số ngày (computeDays trong leave.controller.ts) — đếm từ start_date đến end_date, loại trừ thứ 7/CN và mọi ngày trong hr_company_holidays. Client cũng tự ước tính số ngày để hiển thị ngay trong modal (chỉ trừ cuối tuần, chưa trừ ngày lễ), nhưng con số chính thức luôn do server tính khi lưu.
Trạng thái pending — request mới luôn khởi tạo ở trạng thái này.
Duyệt / từ chối — cần quyền hr:leave.approve (toàn công ty) hoặc hr:leave.approve.dept (chỉ nhân viên thuộc phòng ban mình đứng đầu — xem Phòng ban). Từ chối bắt buộc nhập lý do qua modal riêng.
Trừ/hoàn ngày vào leave balance — không xảy ra ngay trong request update; controller ghi chú rõ việc này do hook xử lý khi hr_leave_requests được update (approved → trừ used, rejected/cancelled → hoàn lại).
Số ngày một người được nghỉ trong năm do policy engine tính (computeBalance trong leave-calculator.ts): tra hr_policies theo key leave_<loại> (vd leave_annual), lấy số ngày theo employment_type_id, cộng thêm tenure bonus nếu policy có cấu hình bậc thâm niên (years_employed >= after_years → cộng thêm bonus ngày).
Admin/HR Manager có thể override thủ công tổng số ngày của một balance (component hr/leave/override-modal.vue, dùng trong tab Leave của hồ sơ nhân viên — xem Nhân viên) kèm lý do, hoặc bấm “Reset” để tính lại từ policy (action: 'reset' xoá override, ghi lại policy_total).
Danh sách ngày nghỉ lễ (hr_company_holidays) được dùng để loại trừ khi tính số ngày nghỉ (computeDays) và tô màu trên Calendar/Timeline. Quản lý holiday (thêm/sửa/xoá, copy từ năm trước) nằm ở trang Thiết lập → Holidays, không phải ở trang Leave — xem Thiết lập.