Ứng dụng giúp sắp xếp các TNV theo nhóm, mỗi nhóm sẽ làm việc 1 tuần, hoặc số ngày cố định, tùy chương trình.
- Admin tạo chương trình mới, đặt tên, đặt ngày tháng bắt đầu và kết thúc, đặt ngày "mở đăng ký".
- Sinh khung thời gian làm việc (timeslot). Admin chỉ định số ngày mỗi khung sẽ kéo dài (mặc định là 7). Ứng dụng sẽ dựa vào ngày tháng của chương trình để sinh các slot.
- Tới ngày mở đơn đăng ký, địa chỉ của đơn đăng ký sẽ có thể được truy cập (public available).
- Khi truy cập link đăng ký, người dùng sẽ được yêu cầu đăng nhập, hoặc đăng ký nếu chưa có tài khoản.
- Người dùng cần đăng ký tài khoản, xây dựng profile (tên, hình, email, điện thoại, ngày sinh, CMND...). Có thể đăng nhập/đăng ký bằng tài khoản mạng xã hội (Facebook, Google+).
- Nên có bước xác thực email và số điện thoại.
- Nếu đã đăng nhập, form đăng ký chương trình sẽ yêu cầu người dùng đánh dấu vào những slot mà họ có thể tham gia.
- Admin vào trang tạo nhóm tự động (mỗi nhóm sẽ được gán với 1 timeslot, theo quan hệ 1-1). Trước khi sinh nhóm, admin có thể đặt ra tiêu chí, ví dụ nhóm phải có ít nhất một cựu tình nguyện viên.
- Khi sinh nhóm tự động, ứng dụng sẽ sắp xếp TNV ngẫu nhiên, có xét đến khoảng thời gian TNV có thể tham gia, và tiêu chí xếp người của admin.
- Ứng dụng sẽ trưng bày bản review phân nhóm trước khi admin thông qua.
- Khi bảng phân nhóm đã được lưu, admin có thể yêu cầu sắp xếp lại.
- Khi admin lưu bảng phân nhóm, những TNV bị thay đổi nhóm (tuần làm việc) sẽ được email thông báo tự động.
- Khi TNV cần thay đổi tuần làm việc, có thể vào form gửi yêu cầu thay đổi. TNV được xem bảng phân nhóm và chọn thử.
- Khi TNV gửi yêu cầu, admin được thông báo và có thể thấy một trang liệt kê danh sách các yêu cầu.
- Admin có thể xem trang chi tiết một yêu cầu đổi tuần làm việc. Trong trang này sẽ thể hiện bảng phân nhóm review, giả định TNV đã được chuyển. Nếu việc chuyển đổi gây phá vỡ tiêu chí (như làm cho 1 nhóm không có cựu TNV) thì sẽ có dấu hiệu cảnh báo.
- Admin bấm nút Approve, bảng phân nhóm được lưu và email gửi thông báo.
- Admin bấm nút Reject, viết lí do từ chối. Email được tự động gửi đến TNV.
- Admin có thể tự dời đổi TNV bất kì trong bảng phân nhóm (bằng cách kéo thả). Sau khi lưu bảng, sẽ có email thông báo đến TNV bị thay đổi.
- Admin chọn một thành viên trong nhóm làm trưởng nhóm (captain). Thành viên này sẽ được thể hiện hơi khác trong bảng (tô màu đậm hơn chẳng hạn).
Các model (diễn đạt theo ORM). Ở đây theo mẫu của Django, nên một số model (Group, Permission) không đề cập (dùng lại của Django).
-
Program
name
start_at
(timezone-aware DateTime type)end_at
description
open_for_registration
(True/False)close_at
require_experienced_member
(Team must have member who used to join previous program)
-
Timeslot
program
(ForeignKey)start_at
end_at
-
Team
timeslot
(on-to-one relationship)name
program
(the same as timeslot.program. Exists here just to let lookup faster).
-
User
email
(for login)password
full_name
phone_number
is_superuser
(Can edit everything)is_staff
(Can edit some, depending on role)
-
Application
program
user
status
(pending/rejected/enrolled)submitted_at
solved_at
solved_by
-
WorkableTime
application
timeslot
-
TeamMember
(Represent many-to-many relationship betweenTeam
andUser
)team
user
is_captain
-
MoveRequest
user
created_at
original_team
(ForeignKey)destination_team
(ForeignKey)accepted_at
rejected_at
reject_reason
is_solved
(boolean, prevent user from creating many pending requests)solved_by
(ForeignKey to User)