Giter VIP home page Giter VIP logo

dang-ky-hoc-phan-uit's Introduction

Tool Đăng Ký Học Phần UIT

Giới thiệu

Tool Đăng Ký Học Phần UIT là một ứng dụng web hỗ trợ các bạn sinh viên UIT đăng ký học phần được dễ dàng, tiện lợi. Ứng dụng gồm 2 phần chính: 1. Tool Soạn Thời Khoá Biểu (chuẩn bị cho ĐKHP) và 2. Script Đăng Ký Học Phần - hỗ trợ ĐKHP nhanh hơn đăng ký thủ công - được gen ra từ bước 1. Soạn thời khoá biểu.

Trước kia, để 1. Soạn Thời Khoá Biểu mất vài ngày, bây giờ chỉ mất vài phút, để 2. ĐKHP mất vài phút, bây giờ chỉ mất vài giây.

Các update ở phiên bản 2024

Preview

Ở phiên bản mới nhất, người dùng có thể preview Thời Khoá Biểu ngay trong Grid Danh Sách Lớp bằng 1 trong 2 cách:

1. Sử dụng tab Preview trên Sidebar image
2. Mở 2 tab browser (tiện lợi cho người có 2 màn hình) image

Selection Behavior

Ở phiên bản mới nhất:

1. Những slot bị trùng TKB sẽ không hiện checkbox (non-selectable), giúp nhanh chóng chỉ ra những lớp nào có thể chọn được image
2. Khi chọn thừa lớp cho môn, sẽ hiện các cặp lớp thừa lên Thời Khoá Biểu image
3. Có thể tương tác trực tiếp lên Thời Khoá Biểu: Click để xoá môn, Shift+Click và Ctrl+Shift+Click cho các trường hợp đặc biệt khác Những lớp chung môn cũng sẽ hiện biểu tượng icon thùng rác khi hover để nhanh chóng nhận biết lớp nào sẽ bị xoá sau khi click. image

Filters/Columns/RowGroup

Ở phiên bản mới nhất, các filters, columns, row group configs đã được cải thiện cho mượt mà hơn và hoạt động hợp lý hơn. Các configs này sẽ hiện ở 4 nơi:

1. Ngay trên Header Name của column image
2. Tab "Filters" ở Sidebar image
3. Tab "Columns" ở Sidebar image
4. Context Menu (khi click chuột phải lên Grid) image

Others

1. Chia sẻ TKB Khi bấm vào nút chia sẻ TKB, các bạn sẽ được đưa đến 1 url với query param https://dkhp-uit.vercel.app?self_selected={1 danh sách mã lớp}. Url này có thể dùng đễ lưu lại trạng thái các lớp đã chọn, hoặc chia sẻ cho bạn bè. image

NOTE: Thời Khoá Biểu hiển thị sẽ ưu tiên danh sách mã lớp trên url. Nếu bạn muốn hiển thị Thời Khoá Biểu theo các lớp được chọn ở local, phải xoá url query param đó đi (url query param có ưu tiên hiển thị cao hơn các lớp được chọn ở local).

2. Tải hình ảnh TKB về máy image
3. Copy script image

Old doc (before 2024)

Giới thiệu

Tool Đăng Ký Học Phần UIT là một ứng dụng hỗ trợ các bạn sinh viên UIT đăng ký học phần được dễ dàng, tiện lợi.

Vì sẽ có rất nhiều đối tượng sinh viên, và rất nhiều trong số đó chỉ muốn sử dụng một số tính năng nhất định của ứng dụng mà không muốn sử dụng toàn bộ ứng dụng. Do đó, các tính năng của ứng dụng đã được tách rời, làm cho không phụ thuộc vào nhau, giúp phục vụ nhiều đối tượng sinh viên nhất có thể.
Chẳng hạn, bạn master Excel, có thể tự soạn thời khoá biểu cho bản thân mình nên không cần sử dụng tính năng Soạn thời khoá biểu của ứng dụng này, thì bạn vẫn có thể sử dụng tính năng Vẽ thời khoá biểu để xem thời khoá biểu bạn đã soạn, hoặc sử dụng tính năng Tạo script ĐKHP nhanh để tạo lợi thế ĐKHP nhờ script tự động thao tác nhanh hơn so với đăng ký học phần thủ công.

Usecase

Lược đồ usecase tổng quát

Lược đồ usecase tổng quát So với usecase trên trường học thì «cần» ở đây là «include», «có thể giúp» là «extend»

Tách usecase

Lược đồ tách usecase

Phân tích tính năng

Input + Hành động người dùng + Hệ thống xử lý = Output

Tính năng Input Hành động người dùng Output
0. Tạo nguồn dữ liệu - Sử dụng dữ liệu mặc định
- Tải lên file excel
- Crawl từ trang dkhp.uit.edu.vn
Dữ liệu lớp học
1. Soạn thời khoá biểu Dữ liệu lớp học Sort, filter, pick lớp Danh sách lớp học sẽ ĐK
2. Vẽ thời khoá biểu - Dữ liệu lớp học
- Danh sách lớp học sẽ ĐK
Giao diện thời khoá biểu
- Copy to clipboard
- Tải về máy
3. Tạo script ĐKHP nhanh Danh sách lớp học sẽ ĐK Script ĐKHP nhanh
4. Xem giao diện ĐKHP Giao diện ĐKHP mẫu

Mối quan hệ giữa các tính năng

Lược đồ mối quan hệ giữa các tính năng

Tách tính năng Vẽ thời khoá biểu Lược đồ tách tính năng vẽ thời khoá biểu
Tách tính năng Tạo script ĐKHP nhanh Lược đồ tách tính năng tạo script ĐKHP nhanh

Phân rã chức năng

Lược đồ phân rã chức năng

Cấu trúc giao diện

Giao diện gồm 5 màn hình tương ứng với 5 tính năng bên trên:

  • Tính năng Tạo nguồn dữ liệu → Màn hình Tạo dữ liệu
  • Tính năng Soạn thời khoá biểu → Màn hình Soạn TKB
  • Tính năng Vẽ thời khoá biểu → Màn hình Vẽ TKB
  • Tính năng Tạo script ĐKHP nhanh → Màn hình Script ĐKHP nhanh
  • Tính năng Xem giao diện ĐKHP → Màn hình Giao diện ĐKHP

Hướng dẫn bảo trì dự án

Về thiết kế hệ thống, bảo trì các lược đồ (diagrams)

Bảo trì mã nguồn

Cách khởi chạy dự án

Code convention

Cách chạy testcase

Cập nhật thời khoá biểu mặc định

dang-ky-hoc-phan-uit's People

Contributors

dependabot[bot] avatar loia5tqd001 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

dang-ky-hoc-phan-uit's Issues

TODOLIST

  • To not remove selectedClasses when uploading new excel file if neccessary
  • Tạo extension ĐKHP thay vì script (less trivial problems, works e2e)
    • Get data from protected GoogleSheets
    • Paste data to tool dkhp-uit.vercel.app
    • Get data from step 3 dkhp-uit.vercel.app
    • Paste data to site dkhp.uit.edu.vn
  • Support fetch from file GoogleSheets readonly instead of file Excel (maybe with extension)
  • Viết đầy đủ testcase cho các nghiệp vụ với unit test, ensure happy path to work reliably, apply them to the CI/CD pipeline
  • Refactor code for the cleaner flow (after having enough tests first)
  • Add step 4 for the new UI, step 5 for FAQ
  • Improve: Những môn có 2 buổi / tuần như Anh văn, khi click chọn 1 lớp => tự động chọn cả 2 lớp
  • Feature: Cho phép tự sửa dataset
  • Config lại project với React18 (transition) maybe để fix performance issue, and config proper TSConfig, Prettier(ignore), Eslint(ignore), Editorconfig, Commitlint, Husky, CI/CD, env variables, protected branch...
  • Setup Sentry to monitor logs/errors
  • Update README
  • Fix LeftDrawer collapsed bug (not high priority)
  • Fix: Trường cho phép đăng ký xen kẽ lớp thực hành HT1 cách tuần nhưng hiện tại tool chưa cho phép
  • Optimize: Ứng dụng vẫn còn chậm, lag
    • 4: Convert innerHtml to React's component
    • 2: Tìm thư viện Table khác hoặc tự viết một cái thay cho AgGrid
  • Fix: Màu ken xẽ ở bước (2) xếp lớp chưa đúng
  • Fix-Bug: Khi filter Hệ Đào tạo đang là rỗng, chọn sang CLC/CQUI,... không có tác dụng, phải loai lại trang mới chạy đúng
  • Fix: Bước 4 bị render một đống dấu phẩy *éo biết từ đâu ra
  • Fix: Nhiều state bị reset, persist them (can't make it impulsively, need to carefully design first though)
  • Improve: Nếu lớp nào không chọn được (do trùng TKB, môn đã chọn rồi) thì đánh dấu dòng đó để người dùng phân biệt ngay từ cái nhìn đầu tiên luôn.
  • Change: Đổi con mắt ở bước 2 thành 1 Select giống Hệ đào tạo filter
  • Feature: Thêm arbitrary search cho Table
  • Change: Tương tác trực tiếp trên TKB ở bước 3
  • Improve: Chọn lớp lý thuyết => tự động chọn lớp thực hành tương ứng, chọn lớp thực hành tự động chọn lớp lý thuyết tương ứng. Bỏ chọn cũng tương tự.
  • Refactor AgGrid
  • Migrate from localStorage to indexedDB, mitigated from redux
  • Have a way to open 2 windows/tabs 2 and 3 at the same time:
    • Make LeftDrawer collapsible
    • Sync data between browser tabs (when making changes in one tab will affect another)

Rework

  • Migrate from cra to vite
  • Upgrade all dependencies
  • Re-design and fix UI

Lỗi không cho phép 2 môn HT1 trùng

Expect

Hai môn HT1IT005.L11.CNCL.1IT004.L11.CNCL.1 phải đều được nằm cùng nhau vì 2 môn này có thể học xen kẽ tuần.

Actual

Trùng thời khóa biểu: IT005.L11.CNCL.1:Thứ3Tiết12345 - IT004.L11.CNCL.1:Thứ3Tiết12345. Nếu bạn thấy lỗi là do chương trình vui lòng báo lỗi tại đây

Mong bạn cập nhật bản vá lỗi này~

Cập nhật csdl

Chưa cập nhật môn Máy học CS114
Trên dkhp.uit.edu.vn đã có môn này

FAQ

0. Cách tải file excel từ file Google Sheets protected.

  1. Chuyển file trường đăng sang chế độ preview: https://stackoverflow.com/a/46493867
  2. Copy content từ file trường đăng sang file mới (Ctrl A Ctrl C ctrl V)
    2.1. Tinh chỉnh file mới cho đúng format của file excel trường hay đăng (nếu cần thiết)
  3. Tải về file mới dưới định dạng xlsx

Ví dụ file HK2 2023-2024 mình published có thể xem ở đây
https://docs.google.com/spreadsheets/d/e/2PACX-1vRyf8-kMRTo4CllfPA4sjbjxkhGhR1tT7yD1HASjmClqTwwkJBgWRvuxJPIAK8Wdw/pubhtml

1. Gặp warning Don't paste code into DevTools Console... phải làm sao?

image
  • Đơn giản, gõ allow pasting rồi enter. Sau 1 lần thì lần sau sẽ không gặp nữa. Pro tip: xử lý cái này trước khi ĐKHP thực chiến. Read more here.

2. Script sài có ổn định không, còn dùng được cho học kì này không?

Pro tip: Các bạn nên paste sẵn script, đợi trang load ra thì Enter để chạy thôi để tối ưu hoá thời gian, đừng để trang load ra rồi mới paste script.
Script vẫn luôn sống sót qua nhiều năm và dùng được cho học kì gần nhất. Tuy nhiên, bên cạnh đó, các bạn nên luôn sẵn sàng với phương án back-up tự đăng ký tay:

  • Ở bước 3, tool có gen ra "danh sách mã lớp cách nhau bằng dấu phẩy".
  • Các bạn copy danh sách đó vào ô search của web ĐKHP
image
  • Trang web của trường sẽ filter ra danh sách mã lớp theo đó, các bạn tự tay tick tất cả các mã lớp cần chọn (thay vì được script click cho)
  • Rồi submit

Thật ra cũng không chậm hơn là mấy. Nếu có vấn đề gì có thể inbox nói mình biết. Mình khuyến khích các bạn đăng ký sát theo TKB gợi ý của trường.

3. Sài script đăng ký có góp phần làm server trường down, lỗi 502 không?

KHÔNG.
Ngày xưa trang web đăng ký học phần của trường mình có hỗ trợ đăng ký nhanh out-of-the-box luôn. Script này chỉ như mang lại tính năng ngày xưa đó trở về với hiện tại thôi. Các bạn có thể xem giao diện ngày xưa ở đây
Về việc làm server trường down, ngày xưa khi trường chưa có captcha, có nhiều tool, các tool đó giúp tự động mở browser, tự động đăng nhập, tự động nhập lớp, tự động đăng ký, và nếu như các bước đó gặp lỗi, tool sẽ tự động retry và tạo ra rất nhiều request tới server, làm nghẽn server. Trong khi đó, script này, các bạn phải tự đăng nhập, tự vượt captcha, nếu bị 502 các bạn phải tự reload trang, script chỉ giúp bạn nhanh hơn một vài click chuột chứ không auto và tra tấn server, không tạo ra thêm request cho server so với một người đăng ký thủ công bình thường, cho nên không góp phần làm nghẽn server. Script chỉ có vài dòng và các bạn biết javascript đọc phát là hiểu luôn, nó chỉ ảnh hưởng ở mức client.

Old questions

4. Anh làm cho thời khoá biểu (bước 3) hiện ngay trong bước Xếp lớp (bước 2) luôn được không, em phải tab qua tab lại giữa 2 bước mà thấy nó chậm quá

Update 2023: Đã thêm tính năng

5. Trường cho phép đăng ký xen kẽ cách tuần giữa 2 lớp thực hành hình thức 1 (HT1) mà sao tool của anh không cho?

Update 2023: Như mình nói bên dưới, không khuyến khích nhét xen kẽ / hình như mới nhất trường k có hỗ trợ, nên mình sẽ không hỗ trợ.

Hồi mình học có nhiều môn thầy cô đã ưng ưng đổi lại và nhiều lớp .1 học cùng tuần với .2, nên không có gì đảm bảo lớp .1 sẽ học xen kẽ tuần với lớp .2 cả, nên mình đã nghĩ là trường không cho phép đăng ký xen kẽ như vậy. Nhưng mà sau khi hỏi lại cố vấn học tập thì có vẻ như trường cho phép đăng ký xen kẽ, nên tính năng đó đang nằm trong todolist, mình sẽ update sau. Mình cũng ngại update sau khi release nên khả năng cao nó sẽ chỉ xuất hiện trong học kỳ tiếp theo.

Tuy nhiên dù gì đi nữa, các lớp có thực hành thường sẽ theo mô típ là 3 tiết lý thuyết buổi sáng + 5 tiết thực hành buổi chiểu, hoặc 5 tiết thực hành buổi sáng + 3 tiết lý thuyết buổi chiều trong cùng một ngày. Nên nếu nhét được 2 buổi thực hành xen kẽ, cũng khó mà nhét được 2 buổi lý thuyết. Với lại lỡ như giáo viên đổi như mình ngày xưa thì sao, trong khi thời khoá biểu UIT mình thấy không thiếu chỗ tới mức phải nhét, nên nói thật là không khuyến khích đăng ký kiểu đó. Tuy nhiên mình vẫn sẽ update để đáp ứng được mọi usecase ❤️.

6. Nếu thấy hữu dụng thì thả star repository Github này giúp mình nhé ❤️

một môn có 2 lịch

Môn giải tích lớp MA006.L12 trong tkb có 2 lớp với 2 giờ học khác nhau là ca 9,10 vào thứ 3 và ca 6,7,8 vào thứ 5. Lúc xếp lịch thì em bị nói là trùng lịch của ca vào t3 vs môn khác nhưng tại bên cái tkb của trang hỗ trợ tạo thời khóa biểu để ca là 6,7,8 vào thứ 5.
Làm ơn xin hỗ trợ.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.