Appearance
Buổi học của lớp (Batch Sessions)
BatchSession là một buổi học cụ thể của lớp — có thời gian, hình thức (online/offline/hybrid), trainer phụ trách. Training Manager chịu trách nhiệm tạo + quản lý lịch buổi học; trainer chỉ điểm danh + ghi nhật ký.
Một dòng tóm tắt
4 cách tạo BatchSession: đơn lẻ (manual), hàng loạt theo lịch (generate), clone từ lớp khác, từ template chương trình. Chọn cách phù hợp theo cohort.
Vào quản lý BatchSessions
Hai nơi truy cập:
- Sidebar → Đào tạo → Buổi học (
/admin/batch-sessions) — list toàn bộ buổi của tất cả lớp. - Trang chi tiết Batch → tab Buổi học — chỉ buổi của lớp đó.
Bảng list hiển thị:
- Tiêu đề
- Lớp (link đến Batch)
- Thời gian (
starts_at→ends_at) - Hình thức (online/offline/hybrid)
- Giảng viên phụ trách
- Trạng thái (Đã lên lịch / Đang diễn ra / Đã kết thúc / Đã huỷ)
Filter: trạng thái, batch, mode, khoảng ngày.
Cấu trúc BatchSession
| Trường | Ý nghĩa |
|---|---|
batch_id | Lớp sở hữu buổi (FK) |
title | Tiêu đề buổi (vd: "Buổi 3 — Generators trong Python") |
description | Mô tả + agenda (rich text) |
starts_at / ends_at | Thời gian bắt đầu / kết thúc (datetime) |
mode | online / offline / hybrid |
location | Phòng học / địa điểm vật lý (offline / hybrid) |
meeting_url | URL Zoom / Meet / Teams (online / hybrid) |
recording_url | URL bản ghi (cập nhật sau buổi) |
trainer_id | Trainer dạy chính buổi này (User) |
status | Đã lên lịch / Đang diễn ra / Đã kết thúc / Đã huỷ |
Tạo buổi học đơn lẻ
Trong tab Buổi học của Batch → Tạo buổi:
- Điền form:
- Tiêu đề + Mô tả
- Bắt đầu + Kết thúc — chọn datetime
- Hình thức (online/offline/hybrid)
- Địa điểm (cho offline/hybrid)
- Link tham gia (cho online/hybrid)
- Giảng viên — chọn từ trainer của lớp (filter qua relation
batch_trainers)
- Status mặc định: Đã lên lịch.
- Click Lưu.
Giảng viên không bắt buộc là Lead
Trường trainer_id cho buổi cụ thể không nhất thiết là Lead của lớp. Có thể assign Assistant hoặc Mentor. Nếu xoay tua dạy, thay đổi giữa các buổi.
Tạo hàng loạt theo lịch (Generate)
Khi cohort có lịch lặp đều (mỗi T2/T4/T6, 16 tuần), không nhập thủ công 48 buổi:
- Trang Batch → Header → Tạo buổi học hàng loạt.
- Form có 2 section:
Section "Lịch"
- Ngày bắt đầu (datetime của buổi đầu).
- Giờ bắt đầu + Thời lượng (phút).
- Kết thúc theo:
- Theo số buổi — vd: 30 buổi.
- Theo ngày — vd: 2026-12-31.
- Các ngày trong tuần — tick T2/T4/T6,... (
days_of_week). - Mẫu tiêu đề — hỗ trợ biến
:index(số thứ tự) và:date(ngày). Vd:Buổi :index — :date.
Section "Mặc định cho buổi học"
- Hình thức mặc định (online/offline/hybrid).
- Giảng viên mặc định — gán cho mọi buổi tạo ra (có thể đổi sau).
- Mẫu link tham gia — hỗ trợ
:index. Vd:https://meet.google.com/abc-cohort-:index.
- Click Xem trước → modal hiện preview list buổi (ngày + tiêu đề).
- Confirm → tạo hàng loạt.
Mẫu tiêu đề chuyên nghiệp
Vài ví dụ template:
Buổi :index — :date→ "Buổi 1 — 04/04/2026"Tuần :index — Chủ đề(sửa lại sau)Lecture :index of 30→ "Lecture 5 of 30"
Giới hạn
- Hệ thống có cap số buổi tối đa mỗi lần generate (mặc định ~100). Vượt → lỗi "Số buổi vượt quá giới hạn".
- Phải tick ít nhất một ngày trong tuần.
- Nếu pattern không tìm đủ ngày phù hợp với
count→ lỗi "Không tìm thấy đủ ngày phù hợp".
Clone từ lớp khác
Khi mở cohort mới giống cohort cũ:
- Trang Batch mới → Header → Sao chép buổi học.
- Form:
- Lớp nguồn — chọn Batch cũ.
- Chế độ ngày:
- Dịch theo số ngày — sao chép cấu trúc, dịch tất cả buổi
+Nngày. - Neo theo ngày cụ thể — buổi đầu mới = ngày bạn chọn; các buổi khác giữ khoảng cách.
- Dịch theo số ngày — sao chép cấu trúc, dịch tất cả buổi
- Đặt lại trạng thái về Đã lên lịch (recommend bật — clone từ lớp đã
Completedmà không reset thì buổi mới cũngCompleted). - Xoá meeting URL (recommend bật — link cũ không hợp).
- Xoá giảng viên được gán (tuỳ — có thể giữ nếu cùng trainer).
- Click Xem trước → confirm.
WARNING
- Recording URL luôn bị xoá (không có ý nghĩa với cohort mới).
- Source batch không được trùng với target.
- Nếu source không có buổi, lỗi "Lớp nguồn không có buổi học nào".
Từ template chương trình
Nếu Program có Session Template (xem Programs → Template buổi học):
- Trang Batch → Header → Tạo từ template chương trình.
- Modal hiện preview các buổi sẽ tạo dựa vào:
start_datecủa Batch (anchor)template.day_offsetcho từng template
- Confirm → tạo hàng loạt.
Ưu điểm template
- Curriculum chuẩn — không nhập lại 30 buổi mỗi cohort.
- Tiêu đề + agenda đã viết sẵn — chỉ cần chỉnh khi cần.
- Có thể dùng cùng lúc với Generate (rare).
WARNING
- Yêu cầu Batch đã có
start_date. - Yêu cầu Program đã có template (nếu chưa, đề nghị Tenant Admin /
course_managertạo).
Import buổi học từ CSV
Header → Nhập buổi học:
- Tải template CSV mẫu (cột: title, starts_at, duration, mode, location, meeting_url, trainer_email).
- Điền theo template.
- Upload → preview → confirm.
Khi nào dùng?
- Cohort có lịch hoàn toàn không lặp (mỗi buổi khác giảng viên / khác giờ).
- Bạn đã có file Excel sẵn từ phía khách hàng B2B → import nhanh.
Sửa BatchSession
Click vào dòng buổi → trang chi tiết → Sửa:
- Đổi metadata (tiêu đề, mô tả, thời gian, mode, location, meeting URL, trainer).
- Thêm
recording_urlsau khi buổi kết thúc (cho học viên xem lại).
Đổi giờ buổi đã ở Live / Completed?
- Hệ thống cho sửa, nhưng gây nhiễu attendance (đếm điểm danh dựa vào status, không dựa vào giờ thật).
- Cẩn thận với buổi
Completedđã có attendance — đừng đổi giờ cho thấy "khác lịch", học viên thấy lịch sử bất thường.
Vòng đời Status
Đã lên lịch ──[Trainer click "Bắt đầu buổi"]──► Đang diễn ra
│
└──[Tự động / Tenant Admin]──► Đã kết thúc
Đã lên lịch / Đang diễn ra ──[Bạn / Tenant Admin huỷ]──► Đã huỷ| Status | Khi nào | Cho phép điểm danh? |
|---|---|---|
Đã lên lịch (scheduled) | Mặc định khi tạo | ❌ — phải bắt đầu trước |
Đang diễn ra (live) | Trainer click "Bắt đầu" | ✅ |
Đã kết thúc (completed) | Đã chuyển | ✅ — cho điểm danh muộn |
Đã huỷ (cancelled) | Bạn huỷ | ❌ — read-only |
Huỷ buổi học
Trang chi tiết buổi → Huỷ:
- Modal yêu cầu lý do (sẽ gửi cho học viên qua thông báo, nếu cấu hình).
- Confirm → status =
cancelled.
Hệ thống auto:
- Gửi notification + email cho học viên đã enroll.
- Block điểm danh từ lúc này.
Chuyển Completed thủ công
Trainer thường tự click "Bắt đầu" để vào điểm danh; bạn (Training Manager) thường:
- Chuyển sang
Completedcuối kỳ nếu trainer quên. - Reschedule (chuyển sang
Cancelled+ tạo buổi mới) nếu lý do bất khả kháng.
Báo cáo điểm danh
Cấp buổi học
Trang chi tiết buổi → tab Điểm danh:
- Bảng học viên với trạng thái: Có mặt / Muộn / Vắng / Có phép.
- Số liệu tổng: % có mặt buổi này.
Cấp lớp
Xem chi tiết: Theo dõi & báo cáo.
Export
Trang chi tiết Batch → Xuất báo cáo điểm danh (AttendanceExportService):
- Định dạng CSV / XLSX.
- Cột: học viên × buổi → trạng thái.
- Hữu ích cho B2B billing (báo cáo điểm danh hàng tháng).
Lịch buổi học (Calendar view)
Sidebar → Đào tạo → Lịch buổi học (nếu Tenant Admin bật).
Hiển thị tất cả buổi của tất cả lớp dạng lịch tháng — màu theo lớp.
TIP
Trainer có view tương tự ở /trainer/sessions/calendar. Bạn ở /admin thấy toàn bộ lớp; trainer chỉ thấy lớp mình.
Quan hệ với các module khác
Với Calendar (học viên)
BatchSession xuất hiện trong Lịch học tập của học viên đã enroll Batch — tự động.
Với Notifications
Hệ thống tự gửi reminder:
- 24h trước buổi.
- 30 phút trước (nếu online).
- 5 phút trước (popup nếu online + có meeting URL).
Cấu hình template trong Notifications → Email Templates (Tenant Admin work).
Với Trainer Panel
Trainer phụ trách thấy buổi trong:
- Widget Buổi học hôm nay ở dashboard
/trainer. - Widget Sắp diễn ra (7 ngày tới).
- Tab Buổi học trong trang Batch của họ.
Với Gamification
- Học viên đến đủ buổi → cộng điểm streak (rule cấu hình).
- Buổi học không tự cộng điểm (chỉ điểm danh + rule riêng).
Câu hỏi thường gặp
Tôi tạo 50 buổi nhầm — undo được không? Không có batch undo. Cách tạm: lọc theo created_at desc → chọn các buổi vừa tạo → bulk delete (nếu Filament cho phép).
Đổi giảng viên cho 30 buổi cùng lúc? Bulk action "Đổi trainer" nếu UI cung cấp; nếu không, sửa từng buổi hoặc nhờ Tenant Admin update DB.
Buổi đã Completed mà tôi mới phát hiện trainer chưa điểm danh? Status Completed vẫn cho phép điểm danh muộn. Báo trainer vào trang điểm danh, cập nhật + lưu.
Học viên báo "không thấy lịch buổi học"? Kiểm tra:
- Học viên đã enroll Batch chưa?
- Module Calendar có bật?
- Buổi ở status
Scheduled/Live/Completed(không phảiCancelled)? - Refresh / clear cache.
Có thể đặt lại lịch hàng loạt khi cohort dời lịch? Bulk action "Dịch lịch" nếu UI có; nếu không, sửa từng buổi. Đề xuất tính năng nếu nhu cầu thường.
Buổi học ở 2 lớp khác nhau dùng cùng giờ — conflict trainer? Hệ thống không tự kiểm tra conflict trainer. Tự rà — vd: trainer A vừa được assign buổi 10:00 lớp X, lại assign 10:00 lớp Y → cảnh báo (chưa có) hoặc bạn phải tự kiểm.
Recording URL có thể tự động lấy từ Zoom/Meet không? Hiện không có integration tự pull recording. Trainer / bạn phải nhập manual sau buổi.
Học viên xin nghỉ buổi cụ thể — có ghi vào đâu? Trainer ghi vào điểm danh status Excused (Có phép). Có thể ghi nhật ký lớp với @mention học viên + lý do.