# Chia công việc đồ án TKPM ## 1. Backend: Quân - https://hackmd.io/@MLuUNJpmRT2YJV4EgHbBFg/HyNlgJRwq ## 2. Frontend Staff: Minh - Tạo nhánh GitHub là `minh` ### 2.1. Màn hình Ticket #### a) Bối cảnh: - Trong model Ticket vừa có thêm thuộc tính `approvedTime` #### b) Giải thích: - `bookedTime` là thời điểm khách đặt vé, `approvedTime` là thời điểm staff duyệt vé - 3 hàm `isBooked`, `isPending`, `isApproved` #### c) Cần làm: - Xem lại logic 3 tab **Pending**, **Sold**, **Not sold** đã đúng chưa và sửa lại - Thêm cột **Approval time** cho bảng dữ liệu - Thiết kế detail card cho mỗi ticket (tham khảo Flight) #### d) Deadline: 20:00 ngày 31/05/2022 ### 2.2. Ngôn ngữ #### c) Cần làm: - Xem bên `intl_en.arb` để việt hóa cho file `intl_vi.arb` #### d) Deadline: 20:00 ngày 1/6/2022 ### 2.3. Màn hình Report #### c) Cần làm: - Xử lý nút in PDF, nghiên cứu thư viện `pdf` hoặc `syncfusion_flutter_pdf` #### d) Deadline: 20:00 ngày 2/6/2022 --- ## 3. Frontend Staff/Manager: Minh + Nam - Tạo nhánh GitHub là `minh2` - Xóa project trên máy, clone code client: https://github.com/phuongnam195/simplane-client-admin - Clone code server: https://github.com/phuongnam195/simplane-server - Dùng IntelliJ để chạy server - Tài khoản Manager: lehongquan 123456 - Tài khoản Staff: nam195 123456 (hoặc tự đăng ký) ### 3.1. Xuất PDF report cho người dùng Manager - Độ ưu tiên: 2/5 - Thêm cột số chuyến bay - Check manager: ``` if (UserManager.instance.getUser()?.isAdmin == true) ``` ### 3.2. Làm đẹp form Booking UI - Độ ưu tiên: 5/5 - Tham khảo add flight bên Manager ### 3.3. Xây dựng trang Nhân viên cho Manager - Độ ưu tiên: 3/5 - StaffPage, StaffBloc - Thêm page vô HomeScreen (tham khảo TicketPage) - UserRepository -> getStaffs - Hiện bảng gồm các cột: ID, Tên đăng nhập, Tên nhân viên, Số vé bán được, Doanh thu nhân viên - Long press dòng nào thì xóa nhân viên (nếu được thì làm dialog confirm): Tham khảo dòng 227 của flight_page.dart - Số vé và doanh thu đã có API trong ReportRepository: lưu ý cần sửa lại dummy data để đồng nhất ID nhân viên (reportsDummy và staffsDummy) ### 3.4. Xây dựng trang Sân bay cho Manager - Độ ưu tiên: 4/5 - AirportPage, AirportBloc - Thêm page vô HomeScreen (tham khảo TicketPage) - Không dùng dạng bảng nữa, mà tạo các Card (vì hiện 3 thuộc tính thôi) - Ví dụ: https://miro.medium.com/max/1344/0*LTEDsGZPpgai4Boe https://medium.com/dlt-labs-publication/how-to-build-a-flutter-card-list-in-less-than-10-minutes-9839f79a6c08 - Click vào 1 card (sân bay) thì hiện form sửa thông tin sân bay đó và có nút xóa (nghĩa là 2 nút Xóa và Cập nhật) - Nút (+) để thêm sân bay (tham khảo FlightPage) - Việc quản lý sân bay chỉ dùng dummy ## 4. Tài liệu: Minh + Nam + Quân - https://studenthcmusedu-my.sharepoint.com/:f:/g/personal/19120591_student_hcmus_edu_vn/ErIO_4pKVWRDkODOHq8UQjcBQqJaEOSKSyGsdS_XZkB7sw?e=Je0Yz8 - **A.Minh chọn tối thiểu 8 điểm ưu tiên nha** ### 4.1. Thông tin chung [Nam] - Độ ưu tiên: 1/5 ### 4.2. Phát biểu bài toán [Nam] - Độ ưu tiên: 2/5 ### 4.3. Mô hình Use Case [Minh] - Độ ưu tiên: 5/5 ### 4.4. Phân tích [Minh] - Độ ưu tiên: 3/5 ### 4.5. Thiết kế dữ liệu [Quân] - Độ ưu tiên: 3/5 ### 4.6. Thiết kế kiến trúc [Nam] - Độ ưu tiên: 2/5 ### 4.7. Thiết kế giao diện - Độ ưu tiên: 1/5 ### 4.8. Kết quả thực hiện - Độ ưu tiên: 1/5 ## 5. Backend: Quân ### 5.1. Token [x] - Thống nhất tất cả các attribute về **token** hoặc **accessToken** ### 5.2. DateTime - Thống nhất format chung cho datetime là `yyyy-MM-ddTHH:mm:ss.mmmuuuZ` - Nếu trong request không thể set format thì để dạng long và ghi tên hàm/phương thức Java tại đây: - T tự sửa code nhưng không cho merge (conflict quá nặng) nên m sửa lại nha ```java= package hcmus.nmq.utils; /** * 2:14 PM 4/17/2022 * LeHongQuan */ public class Constants { public static final String AUTHORIZATION = "AUTHORIZATION"; public static final String AUTHORIZATION_HEADER = "#hcmus"; public static final String HEADER_TOKEN_NAME = "accessToken"; // public static final String API_VERSION = "v1"; public static final String AUTH_SERVICE_URL = "/auth"; public static final String FLIGHT_SERVICE_URL = "/flight"; public static final String STAFF_SERVICE_URL = "/staff"; public static final String AIRPORT_SERVICE_URL = "/air-port"; public static final String TICKET_SERVICE_URL = "/ticket"; public static final String DATE_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.mmm"; } ``` ### 5.3. Delete flight [x] - Thêm method DELETE cho flight, tham số query là id ### 5.4 Làm api Report ### 5.5 Thêm model Staff [x] - https://hackmd.io/i_SWoYlvSryHckH4mN0fFA?both#Staff-only-Manager - totalTicket và totalRevenue là tính của toàn bộ, tất cả các tháng, các năm ### 5.6 Xóa các record Flight không có seatAmount, bookedAmount [x] ### 5.7 Thêm tài khoản Manager (admin) [x] - admin - admin ### 5.8 Lưu password dưới dạng hash [x] - Không lưu raw - Không trả password về sau khi sign-in và sign-up ### 5.9 Thêm attribute `ticketClassPrice` cho Flight ```json= "ticketClassPrice": { "P": 1000000.0, "L": 2000000.0, "C": 3000000.0, } ``` ### 5.10 Fix lỗi get list Ticket thiếu - ITicketRepositoryImpl.searchTicket chỉ trả về 2 record --- ### 5.11 Sửa lại Airport - method GET không require code => get all airports - Thêm thuộc tính id (chắc là database có rồi), chỉ là trả về thôi - id - code - name - address - Thêm api update Airport, request có đủ 4 thuộc tính, update code, name, address dựa vào id ### 5.12 API method DELETE cho User ### 5.13 Bảng Rule gồm 6 thuộc tính ```java= double minFlightDuration; // default = 25 minutes double maxMiddleAirport; // default = 3 double minStopDuration; // default = 5 minutes double maxStopDuration; // default = 25 minutes double latestTimeBooking; // default = 720 minutes double latestTimeCancelBooking; // default = 1440 minutes ``` - GET: lấy về json gồm 6 thuộc tính này - POST: cập nhật 1 lần cả 6 thuộc tính (gửi json 6 thuộc tính)