# Web # Ecom - Client \#... # TMS-1242: SignUp - Đăng ký # **Tài liệu mô tả trang Đăng ký (Sign Up)** ## **1. Mô tả tổng quan** Trang **Đăng ký** là nơi để người dùng tiến hành tạo tài khoản để có thể sử dụng các chức năng bắt buộc đăng nhập của web. Có 2 cách đăng ký tài khoản: - ĐĂng ký điền thông tin vào form đăng ký trên trang. - Đăng ký bằng tài khoản google, hoạt động như chức năng đăng ký bằng google của các trang web khác ## [![Screenshot from 2025-03-03 16-41-49.png](https://book.app.tms-s.vn/uploads/images/gallery/2025-03/scaled-1680-/screenshot-from-2025-03-03-16-41-49.png)](https://book.app.tms-s.vn/uploads/images/gallery/2025-03/screenshot-from-2025-03-03-16-41-49.png) ## **2. Các chức năng và luồng hoạt động** ### Đăng ký tài khoản mặc định - Tại phần header lúc chưa đăng nhập của web, nhấn vào nút đăng ký ở bên góc phải trên của trang web để vào trang đăng ký. - Tiến hành nhập thông tin cần thiết ở form đăng ký (Sign Up). - Nhấn nút `Đăng ký (Sign Up)`. - Nếu thành công: thông báo thành công và chuyển sang trang đăng nhập. - Nếu thất bại: thông báo lỗi. ## **3. API Endpoint**
Phương thứcRouteMô tả
POST`/api/v1/auth/post/register`Gửi dữ liệu xuống api xác thực và đăng ký
## **4. Mô tả giao diện - DB: ecom.users**
**Trường -en****Trường -vi****Cột DB****Mô tả****Yêu cầu****Ví dụ**
**Full name****Họ và tên**`name`Nhập tên đầy đủ của người dùng.- Bắt buộc nhập`johndoe`
**Email****Email**`email`Nhập địa chỉ email hợp lệ.- Bắt buộc nhập - Đúng định dạng email - Không trùng`johndoe@example.com`
**Username****Tên đăng nhập**`username`Nhập tên đăng nhập duy nhất.- Bắt buộc nhập - Không trùng`johndoe`
**Password****Mật khẩu**`password`Nhập mật khẩu bảo mật.- Bắt buộc nhập`ttd123@`
**Re-Password****Nhập lại mật khẩu**Không lưu DBXác nhận lại mật khẩu.- Bắt buộc nhập`ttd123@`
--- ### Ref task: #1242 - QA # TMS-1236: Danh sách sản phẩm # **Tài liệu mô tả danh sách sản phẩm trên trang web** ## **1. Mô tả tổng quan** Trang danh sách sản phẩm là trang dùng để hiển thị tất cả sản phẩm mẫu nón. Tại đây, người dùng có thể: - Xem danh sách sản phẩm mẫu nón. - Tìm kiếm sản phẩm muốn xem. - Thêm sản phẩm vào danh sách yêu thích. - Thêm sản phẩm vào giỏ hàng - Xem chi tiết của sản phẩm. --- ## **2. Các chức năng và luồng hoạt động** ### **2.1 Xem danh sách sản phẩm mẫu nón** - Khi vừa đăng nhập xong/vừa vào trang web và đang ở trên HomePage, để chuyển đến trang danh sách sản phẩm thì người dùng cần click vào option Products trên thanh header. - Khi vào trang sẽ hiển thị toàn bộ danh sách sản phẩm theo dạng phân trang (paginate), tại đây người dùng có thể click vào từng trang để xem sản phẩm theo mỗi trang - Mỗi component chứa sản phẩm sẽ bao gồm các thông tin như Tên sản phẩm, Mô tả sản phẩm, button Add to cart, nhóm button chức năng nằm bên phải component ( bao gồm button Add to wishlist và quickview) ,hình ảnh sản phẩm ( nếu sản phẩm có hình thì sẽ hiển thị hình ảnh sản phẩm,nếu không thì hiển thị No Images) và phần label Giá bán sẽ mặc định để text Liên hệ - Phía dưới trang sản phẩm sẽ có 1 thanh paginate dữ liệu , người dùng có thể chọn số lượng items hiển thị trên 1 trang ở component Filters phía trên trang danh sách ( đang mặc định có 3 option là 30, 50 và 100 items và nếu không chọn thì mặc định paginate 30), lúc này dựa vào sự lựa chọn của user mà số lượng trang dưới thanh paginate sẽ được hiển thị, khi click chọn vào trang nào thì dữ liệu của trang đó sẽ được hiển thị ra.Ví dụ user chọn 50 items, đang có 100 dữ liệu trong database -> thì sẽ hiển thị 2 trang dưới thanh paginate. - Cách hiển thị của component paginate: Luôn hiển thị trang đầu tiên và trang cuối, nếu chọn trang khác cách trang đầu tiên hơn 2 trang thì sẽ hiển thị dấu ... ( ví dụ: đang có 40 trang và chọn trang thứ 5 thì sẽ hiển thị dạng \[1 ... 3 4 5 6 7 ... 40\]), nhóm trang cố định ở giữa ... và ... sẽ luôn là 5 trang, trường hợp nếu chọn trang cuối cùng thì component hiển thị \[ 1 ... 35 36 37 38 39 40\], nếu chọn trang 1 thì hiển thị \[1 2 3 4 5 ... 40\]. - Trên component All Filters có dòng Showing(a)of(b)results : ví dụ dữ liệu tìm kiếm có 5 kết quả, và đang có tổng 10 dữ liệu trong database thì (a) sẽ là 5 và (b) sẽ là 10, kết quả đúng sẽ là Showing 5-of 10 results. ### **2.2 Tìm kiếm sản phẩm** - Có 2 cách: - Cách 1: Tìm kiếm trên ô select và ô input trên thanh header -Trên thanh header cho phép người dùng tìm kiếm theo danh mục sản phẩm (trong ô select) và tên/mã sản phẩm trên ô input kế bên ô select. Khi chọn dữ liệu trong ô select thì lập tức dữ liệu tương ứng với option đã chọn sẽ được hiển thị ra (Option default cho ô select là Select all, khi không muốn chọn option khác thì chọn option Select all).Đối với input nhập dữ liệu tên/mã sản phẩm thì sau khi nhập xong rồi ấn enter thì trang sẽ hiển thị toàn bộ sản phẩm liên quan đến những gì người dùng nhập, khi không muốn lọc theo giá trị vừa nhập thì click vào button clear kế bên giá trị vừa nhập để trang hiển thị lại dữ liệu ban đầu. - Cách 2: Tìm kiếm bằng bộ lọc (Filters) -Trên component Filters ( bao gồm các button : All Filters, Text Showing(a)-of(b)results, option Sort by và option Show) khi click vào button All Filters sẽ hiển thị 1 bộ lọc, trong đó sẽ có lọc dữ liệu theo các nhóm như : Kiểu nón, Chi nhánh, Nguyên phụ liệu, Logo và Thời gian vận chuyển. Chọn dữ liệu muốn lọc bằng cách click chuột vào các checkbox chứa giá trị muốn chọn. Trường hợp các nhóm dữ liệu có nhiều hơn 11 dữ liệu thì sẽ hiển thị thêm text Others, khi click vào sẽ hiển thị component Others, trong component này khi scroll xuống sẽ hiển thị đầy đủ dữ liệu của nhóm dữ liệu đó. Khi muốn xóa tất cả bộ lọc trên component thì click vào button Reset Filters, còn khi muốn xác nhận chọn bộ lọc đó thì click vào button Confirm ( trên modal Others) hoặc button Apply Filters , lúc này trang sẽ tiến hành lọc toàn bộ dữ liệu theo những giá trị đã chọn -Khi click vào option Sort by thì dữ liệu trên trang sẽ được sắp xếp theo thứ tự đã chọn ( hiện tại có 2 loại cho Sort by là Cũ nhất và Mới nhất, tức là trang sẽ sắp xếp sản phẩm theo Cũ nhất hoặc Mới nhất lên đầu trang) -Khi click vào option Show thì dữ liệu trên trang sẽ được paginate theo option đã chọn - Khi tìm kiếm không có bất kì kết quả nào thì hiển thị No results found ### **2.3 Thêm sản phẩm vào danh sách yêu thích** - Trên mỗi component chứa thông tin sản phẩm ở phía góc tay phải sẽ có nhóm nút chức năng, trên đó có nút Add to wishlist, khi click vào thì sản phẩm đó sẽ được thêm vào Danh sách yêu thích. Khi thêm thành công thì biểu tượng wishlist trên thanh header sẽ được cập nhật số lượng ### **2.4 Xem chi tiết sản phẩm** - Cách 1: Click vào từng component chứa sản phẩm để chuyển sang trang chi tiết sản phẩm (đang ẩn chuyển trang khi click vào sản phẩm do task TMS-1238 chưa xong) - Cách 2: Trên component Swiper ngay phía dưới thanh header có thể click vào ảnh/tên sản phẩm để chuyển sang trang chi tiết sản phẩm (đang ẩn chuyển trang khi click vào sản phẩm do task TMS-1238 chưa xong) - Cách 3: Click vào button QuickView trên component chứa sản phẩm để mở ra modal hiển thị chi tiết sản phẩm (đang ẩn chuyển trang khi click vào sản phẩm do task TMS-1238 chưa xong) ### **2.5 Thêm sản phẩm vào giỏ hàng** - Khi chọn button Add to cart trên component chứa sản phẩm thì sản phẩm đó sẽ được thêm vào giỏ hàng, tương tự danh sách yêu thích, lúc này biểu tượng giỏ hàng trên thanh header sẽ được cập nhật số lượng khi thêm mới sản phẩm vào giỏ ### **2.6 Chức năng trở về đầu trang** - Khi lướt trang danh sách xuống dưới sẽ có 1 button scroll to top hiển thị ở góc dưới cùng bên phải của trang, click vào sẽ chuyển về đầu trang - Khi lướt xuống dưới trang danh sách thì phần header cũng được giữ lại --- ### **2.7 Swiper** - Khi click vào button sang trái hay phải thì slide chứa sản phẩm sẽ trượt qua và hiển thị sản phẩm trong slide phía trước/ phía sau.Mỗi slide mặc định 3 sản phẩm mà mỗi khi trượt qua trái/phải thì hiển thị thêm 1 sản phẩm mới ( có thể dùng chuột để kéo sang trái/phải). Do đang mặc định hiển thị 5 sản phẩm mới nhất nên khi hiển thị tới sản phẩm cuối cùng hay đầu tiên thì sẽ không kéo qua/click chuyển slide qua trái/phải được nữa. Ví dụ đang có 5 dữ liệu của sản phẩm mới nhất, slide đầu tiên đang có 3 sản phẩm (A, B, C) đầu tiên rồi thì khi click vào button chuyển sang trái thì sẽ không chuyển slide được nữa, khi click chuyển slide sang phải thì slide kế tiếp sẽ hiển thị thêm 1 sản phẩm mới bao gồm B, C, D, click chuyển slide sang phải 1 lần nữa thì hiển thị C,D,E và E là sản phẩm cuối thì click chuyển slide sang phải sẽ không chuyển slide nữa, ngược lại khi slide đang hiển thị sản phẩm cuối thì có thể click/kéo slide sang bên trái để xem lại các sản phẩm trước. - Mỗi component trên 1 slide sẽ hiển thị: Ảnh 3D của sản phẩm (nếu không có thì hiển thị No Images như danh sách sản phẩm), Danh mục của sản phẩm (nếu có thì sẽ hiển thị), Tên sản phẩm (nếu có) và Mô tả sản phẩm (nếu có) --- ## **3. API Endpoint**
Phương thứcRouteMô tả
`GET``/api/v1/auth/get/products`Lấy danh sách sản phẩm từ database
`GET``/api/v1/auth/get/list-hat-styles`Lấy danh sách mẫu nón từ database
`GET``/api/v1/auth/get/list-material-styles`Lấy danh sách nguyên phụ liệu từ database
`GET``/api/v1/auth/get/list-branch`Lấy danh sách chi nhánh từ database
`GET``/api/v1/auth/get/list-logo`Lấy danh sách logo từ database
`GET``/api/v1/auth/get/list-delivery`Lấy danh sách mẫu nón từ database
`GET``/api/v1/auth/get/list-product-category`Lấy danh sách danh mục của mẫu nón từ database
--- ## **4. Cấu trúc dữ liệu danh sách sản phẩm** ### **4.1 Bảng `ecom_summary.product_patterns_summary`** - Lưu đồng bộ thông tin giữa mẫu nón ở TTD và ecom.
FieldsÝ nghĩaMô tả
`product_id`ID mẫu nónID mẫu nón từ TTD
`delivery_time_id`ID thời gian vận chuyểnID thời gian vận chuyển của mẫu nón
`company_branch_id`ID chi nhánhID chi nhánh của mẫu nón
`material_id`ID nguyên phụ liệuID nguyên phụ liệu của mẫu nón
`hat_models`Kiểu nónKiểu nón của mẫu nón
`product_category_id`ID danh mụcID danh mục của mẫu nón
`code`Code mẫu nónCode của mẫu nón
`name`Tên mẫu nónTên của mẫu nón
`description`Mô tảMô tả của mẫu nón
`size_id`ID kích thướcID kích thước của mẫu nón
`size_code`Code kích thướcCode của kích thước mẫu nón
`size_name`Tên kích thướcTên của kích thước mẫu nón
`logo_id`ID logoID logo của mẫu nón
`logo_code`Code logoCode của logo mẫu nón
`logo_name`Tên logoTên của logo mẫu nón
`color_id`ID màuID màu của mẫu nón
`color_code`Code màuCode của màu mẫu nón
`color_name`Tên màuTên của màu mẫu nón
`style_id`ID styleID style của mẫu nón
`style_code`Code styleCode của style mẫu nón
`style_name`Tên styleTên của style mẫu nón
`video_path`Đường dẫn videoĐường dẫn video của mẫu nón
`image_3d_path`Đường dẫn ảnh 3DĐường dẫn ảnh 3D của mẫu nón
`creator_id`Người tạoNgười tạo mẫu nón
`created_at`Ngày tạoNgày tạo mẫu nón
`updated_at`Ngày cập nhậtNgày cập nhật mẫu nón
--- - Note: Hiện tại dữ liệu đã được lấy sẵn từ TTD qua, riêng cột product\_category\_id cần map thủ công từ bảng product\_categories sang bằng cách lấy id của bảng product\_categories gắn qua cột product\_category\_id của bảng product\_patterns\_summary từ DB ecom - Tương tự cột material\_id ở bảng product\_patterns\_summary cũng map thủ công bằng cách lấy id từ bảng materials đưa vào cột material\_id của bảng product\_patterns\_summary từ DB ecom - Tương tự cột delivery\_time\_id ở bảng product\_patterns\_summary cũng map thủ công bằng cách lấy id từ bảng delivery\_time đưa vào cột delivery\_time\_id của bảng product\_patterns\_summary từ DB ecom - Tương tự cột hat\_models ở bảng product\_patterns\_summary cũng map thủ công bằng cách lấy id từ bảng hat\_models đưa vào cột hat\_models của bảng product\_patterns\_summary từ DB ecom - Cột company\_branch\_id ở bảng product\_patterns\_summary được map thủ công bằng cách lấy id của bảng company\_branchs ở DB TTĐ đưa vào cột company\_branch\_id ở bảng product\_patterns\_summary từ DB ecom ( note: A.Tài confirm lấy theo brand nhưng hiện tại đang cho hiển thị theo branch tạm thời tester vẫn test bình thường) - Tương tự cột size\_id,size\_code,size\_name ở bảng product\_patterns\_summary cũng map thủ công bằng cách lấy id,code,name từ bảng size đưa vào cột size\_id,size\_code,size\_name của bảng product\_patterns\_summary từ DB ecom - Tương tự cột logo\_id,logo\_code,logo\_name ở bảng product\_patterns\_summary cũng map thủ công bằng cách lấy id,code,name từ bảng logo đưa vào cột logo\_id,logo\_code,logo\_name của bảng product\_patterns\_summary từ DB ecom - Tương tự cột color\_id,color\_code,color\_name ở bảng product\_patterns\_summary cũng map thủ công bằng cách lấy id,code,name từ bảng colors đưa vào cột color\_id,color\_code,color\_name của bảng product\_patterns\_summary từ DB ecom - Tương tự cột style\_id,style\_code,style\_name ở bảng product\_patterns\_summary cũng map thủ công bằng cách lấy id,code,name từ bảng style đưa vào cột style\_id,style\_code,style\_name của bảng product\_patterns\_summary từ DB ecom ### **4.2 Bảng `ecom.delivery_time`** - Bảng master lưu thông tin thời gian vận chuyển mẫu nón
FieldsÝ nghĩaMô tả
`code`CodeCode của mỗi khung thời gian vận chuyển
`min_days`Ngày ngắn nhấtNgày giao hàng sớm nhất
`max_days`Ngày chậm nhấtNgày giao hàng chậm nhất
`created_at`Ngày tạoNgày tạo thời gian vận chuyển
`updated_at`Ngày cập nhậtNgày cập nhật thời gian vận chuyển
`deleted_at`Ngày xóaNgày xóa thời gian vận chuyển
--- ### **4.3 Bảng `ecom.logo`** - Bảng master lưu thông tin logo của mẫu nón
FieldsÝ nghĩaMô tả
`code`CodeCode của logo
`name`TênTên của logo
`created_at`Ngày tạoNgày tạo logo
`updated_at`Ngày cập nhậtNgày cập nhật logo
`deleted_at`Ngày xóaNgày xóa logo
--- ### **4.4 Bảng `ecom.product_categories`** - Bảng master lưu thông tin danh mục của mẫu nón
FieldsÝ nghĩaMô tả
`code`CodeCode của danh mục
`name`TênTên của danh mục
`user_id`Người tạoNgười tạo danh mục
`created_at`Ngày tạoNgày tạo danh mục
`updated_at`Ngày cập nhậtNgày cập nhật danh mục
`deleted_at`Ngày xóaNgày xóa danh mục
--- ### **4.5 Bảng `ecom.hat_models`** - Bảng master lưu thông tin kiểu nón của mẫu nón
FieldsÝ nghĩaMô tả
`code`CodeCode của kiểu nón
`name`TênTên của kiểu nón
`created_at`Ngày tạoNgày tạo kiểu nón
`updated_at`Ngày cập nhậtNgày cập nhật kiểu nón
`deleted_at`Ngày xóaNgày xóa kiểu nón
--- ### **4.6 Bảng `ecom.size`** - Bảng master lưu thông tin kích thước của mẫu nón
FieldsÝ nghĩaMô tả
`code`CodeCode của kích thước
`name`TênTên của kích thước
`created_at`Ngày tạoNgày tạo kích thước
`updated_at`Ngày cập nhậtNgày cập nhật kích thước
`deleted_at`Ngày xóaNgày xóa kích thước
--- ### **4.7 Bảng `ecom.style`** - Bảng master lưu thông tin style của mẫu nón
FieldsÝ nghĩaMô tả
`code`CodeCode của style
`name`TênTên của style
`created_at`Ngày tạoNgày tạo style
`updated_at`Ngày cập nhậtNgày cập nhật style
`deleted_at`Ngày xóaNgày xóa style
--- ### **4.8 Bảng `ecom.colors`** - Bảng master lưu thông tin màu của mẫu nón
FieldsÝ nghĩaMô tả
`code`CodeCode của màu
`name`TênTên của màu
`created_at`Ngày tạoNgày tạo màu
`updated_at`Ngày cập nhậtNgày cập nhật màu
`deleted_at`Ngày xóaNgày xóa màu
--- ## **5. Giao diện danh sách sản phẩm** ### **5.1 Danh sách sản phẩm**
Fields(EN)Fields (VI)Cột DBTên DBMô tả
**Name****Tên sản phẩm**`name`ecom\_summary.product\_patterns\_summaryTên của mẫu nón
**Description****Mô tả sản phẩm**`description`ecom\_summary.product\_patterns\_summaryMô tả sản phẩm
**Images****Ảnh 3D của mẫu nón**`image_3d_path`ecom\_summary.product\_patterns\_summaryLink ảnh 3D của mẫu nón
**Showing****Hiển thị**Không cóKhông cóTrang hiện tại người dùng đang xem
**results****Kết quả**Không cóKhông cóTổng số trang chứa dữ liệu
**Hat styles****Kiểu nón**hat\_modelsdev\_test\_data.product\_pattern\_infoKiểu nón
**Branch****Chi nhánh**namedev\_test\_auth.company\_branchChi nhánh
**Material****Nguyên phụ liệu**namedev\_test\_data.product\_detailsNguyên phụ liệu
**Logo****Nguyên phụ liệu**nameecom.logoLogo của mẫu nón
**Delivery time****Thời gian vận chuyển**min\_days-max\_daysecom.delivery\_timeThời gian giao hàng sớm nhất-Thời gian giao hàng chậm nhất
**Select category****Chọn danh mục**nameecom.product\_categoriesCác loại danh mục của mẫu nón
**Search for code/name of items****Tìm kiếm mã/tên sản phẩm**name, codeecom\_summary.product\_patterns\_summaryMã/Tên sản phẩm
## **6. Tóm tắt** - Người dùng có thể xem danh sách sản phẩm, thêm sản phẩm vào danh sách yêu thích, vào giỏ hàng , xem chi tiết sản phẩm và tìm kiếm sản phẩm --- ## **7. Các chức năng đang tạm ẩn và chưa triển khai** - Chức năng so sánh sản phẩm - Chức năng lướt xem các sản phẩm trên thanh Swiper ( hiện tại khi click vào ảnh/tên sản phẩm trên component của swiper thì chưa chuyển đến trang chi tiết sản phẩm được do task TMS-1238 của dev-Tuấn chưa lên) - Các hình ảnh banner trên trang cũng đang được gắn cưng theo template do chưa có xác nhận về ảnh sẽ hiển thị - Chức năng chat ( hiện tại chỉ có giao diện cho khung chat và button mở khung chat) - Các footer hiện tại cũng đang hiển thị theo template - Thanh sidebar bên tay trái sẽ hiển thị các mẫu nón theo từng danh mục của mẫu nón ( hiện tại thanh sidebar này vẫn đang gắn cứng dữ liệu theo template) - Chức năng chi tiết sản phẩm (dev-Tuấn) chưa gắn component chi tiết, chưa gắn chuyển sang trang chi tiết khi click vào sản phẩm --- ### Ref task: #1236, #1237 - Chi # TMS-1239: Cart - Giỏ hàng # **Tài liệu mô tả giỏ hàng trên trang web** ## **1. Mô tả tổng quan** Trang giỏ hàng là nơi hiển thị danh sách các sản phẩm mà người dùng đã chọn để mua. Tại đây, người dùng có thể: - Xem danh sách sản phẩm đã thêm vào giỏ. - Điều chỉnh số lượng sản phẩm. - Chọn các thông tin của sản phẩm: color, size, styles, material, logo(có thể chọn hoặc không). - Xóa sản phẩm khỏi giỏ hàng. - Tiến hành thanh toán. - Lưu trạng thái giỏ hàng. --- ## **2. Các chức năng và luồng hoạt động** **Note: Các dữ liệu thông tin của sản phẩm (color, size, styles, material, logo) hiện tại đang được map thủ công. Hướng dẫn cách map dữ liệu: [Hướng dẫn map dữ liệu dành cho sản phẩm](https://book.app.tms-s.vn/books/web/page/huong-dan-map-du-lieu-danh-cho-san-pham)** ### **2.1 Review giỏ hàng** Khi người dùng nhấn nút `Add To Cart` thì sản phẩm đó sẽ được thêm vào giỏ hàng và có thể xem nhanh tại phần review của giỏ hàng. 1. Tại bất kỳ trang danh sách sản phẩm nào hoặc tại danh sách yêu thích: modal hiện lên để người dùng chọn các thông tin chi tiết của sản phẩm như size, logo, color, style, material, cuối cùng nhấn `save` để thêm sản phẩm 2. Tại trang chi tiết sản phẩm: vì đã có chọn thông tin từ trang chi tiết nên sản phẩm nên không hiển thị modal nữa. Khi bấm Add To Cart là sản phẩm sẽ được thêm Tại đây người dùng có thể: - Xem nhanh các sản phẩm đang có trong giỏ hàng theo tiêu chí mới đến cũ: tên, hình ảnh, số lượng, giá (nếu có). - Xem tổng tiền của các sản phẩm (nếu có giá cả của sản phẩm). - Vào trang giỏ hàng bằng cách nhấn **`View cart (Xem giỏ hàng)`** - Thanh toán nhanh tất cả sản phẩm có trong giỏ hàng, nhấn **`Checkout (Thanh toán)`** - Chuyển đến trang chi tiết sản phẩm bằng cách nhấn vào tên sản phẩm. ### **2.2 Thêm sản phẩm vào giỏ hàng (Add to Cart)** Khi người dùng nhấn nút `Add To Cart` thì sản phẩm đó sẽ được thêm vào giỏ hàng và có thể xem nhanh tại phần review của giỏ hàng. 1. Tại bất kỳ trang danh sách sản phẩm nào hoặc tại danh sách yêu thích: modal hiện lên để người dùng chọn các thông tin chi tiết của sản phẩm như size, logo, color, style, material, cuối cùng nhấn `save` để thêm sản phẩm 2. Tại trang chi tiết sản phẩm: vì đã có chọn thông tin từ trang chi tiết nên sản phẩm nên không hiển thị modal nữa. Khi bấm Add To Cart là sản phẩm sẽ được thêm - Sản phẩm sẽ xuất hiện trong giỏ hàng theo tiêu chí mới đến cũ cùng với các thông tin chi tiết như tên, giá, số lượng, tổng tiền, v.v cùng với các chi tiết của sản phẩm: color, size, style, logo, material. - Các sản phẩm giống nhau hoàn toàn về tên sản phẩm, các thông tin của sản phẩm như size, logo, color, style, material thì tính là cùng 1 sản phẩm hiện 1 dòng, trường hợp còn lại tính là khác sản phẩm, hiện nhiều dòng. #### **Note: Các sản phẩm trong giỏ hàng đã được xóa sẽ được làm mờ kèm dòng thông báo "Sản phẩm đã được xóa" (đang cập nhật, chưa lên staging)** ### **2.3 Tiếp tục mua sắm (Continue Shopping)** - Khi người dùng nhấn vào nút `Continue Shopping`, hệ thống sẽ đưa họ trở lại trang danh sách sản phẩm để tiếp tục mua hàng. ### **2.4 Cập nhật giỏ hàng (Update Cart)** - Nhấn nút "Cập nhật giỏ hàng": Khi đã đăng nhập, các thao tác trên giỏ hàng (thêm, xóa, chỉnh sửa số lượng,...) chỉ được lưu lại và áp dụng chính thức khi người dùng nhấn nút "Cập nhật giỏ hàng" trên trang giỏ hàng. - Không nhấn nút "Cập nhật giỏ hàng": Các thay đổi chỉ được lưu tạm thời trên thiết bị đang sử dụng. Nếu người dùng đăng nhập trên một thiết bị khác, giỏ hàng sẽ không có những thay đổi đã thực hiện trên thiết bị trước đó. ### **2.5 Chọn sản phẩm để thanh toán (Select Product for Checkout)** - Người dùng có thể chọn từng sản phẩm bằng cách tick vào ô checkbox hoặc chọn tất cả sản phẩm cùng lúc. - Chỉ các sản phẩm được chọn mới được đưa vào quá trình thanh toán khi nhấn nút `Proceed To Checkout (Tiến hành thanh toán)`. ### **2.6 Thanh toán** Có 2 cách để tiến hành thanh toán (đặt hàng): 1. Khi nhấn nút `Proceed To Checkout (Tiến hành thanh toán)` tại trang giỏ hàng: - Hệ thống hiển thị popop xác nhận đặt hàng những sản phẩm đã chọn trong giỏ hàng. 2. Khi nhấn nút `Checkout (Thanh toán)` tại review giỏ hàng: - Hệ thống hiển thị popop xác nhận đặt hàng tất cả các sản phẩm trong giỏ hàng. Popup xác nhận: - Nhấn `Xác nhận (Confirm )` để đặt hàng, thông báo thành công hệ thống sẽ lưu các thông tin sản phẩm đã đặt hàng, sau đó chuyển sang trang xác nhận đã đặt hàng. - Nhấn `Hủy (Cancel)` để trở lại, tắt popup và không đặt hàng. Trang xác nhận đã đặt hàng: - Sau 15s tự chuyển sang trang sản phẩm để tiếp tục mua sắm - Nhấn `Tiếp tục mua sắm` để chuyển sang trang sản phẩm để tiếp tục mua sắm ### **2.7 Xóa sản phẩm trong giỏ hàng** Khi nhấn nút `icon thùng rác ở mỗi dòng`: - Hệ thống sẽ tiến hành xóa sản phẩm đó ở giỏ hàng trên máy. - Bấm `update cart` để tiến hành cập nhật các thay đổi ở giỏ hàng của máy lên database. - Hiển thị thông báo xác nhận đơn hàng đã được cập nhật thành công. ### **2.8 Chuyển đến trang chi tiết sản phẩm** - Tại trang giỏ hàng, nhấn vào hình ảnh sản phẩm hoặc tên sản phẩm, có thể chuyển đến trang chi tiết sản phẩm. ### **2.9 Chọn chi tiết cho sản phẩm (color, size, style, logo, material)** 1. Phần chi tiết sản phẩm (color, size, style, logo, material) sẽ được hiện ở bên dứoi tên sản phẩm, khi nhấn vào dropdown mở ra cho phép ngừoi dùng lựa chọn: - Các sản phẩm tên giống nhau nhưng chi tiết khác nhau sẽ được hiện độc lập ở giỏ hàng (ít nhất 1 chi tiết khác nhau cũng khác nhau -> 2sản phẩm) - Nếu giống nhau toàn bộ về sản phẩm và thông tin chi tiết sản phẩm thì tính là 1 sản phẩm. 2. Tương tự như ở chi tiết sản phẩm, tại đây ngừoi dùng có thể chọn thay đổi color, size, style, logo, material của sản phẩm hiện tại: - Đối với color, size, style: người dùng nhấp vào các ô tên/mã color, size, style tương ứng để chọn chi tiết cho sản phẩm, mỗi chi tiết chỉ được chọn 1 ô tương ứng. - Đối với logo, material: ngừoi dùng chọn vào ô select, các mã/tên của logo, material tương ứng sẽ hiện lên cho phép chọn, chỉ được chọn 1 lựa chọn cho mỗi logo, material. --- ## **3. API Endpoint**
Phương thứcRouteMô tả
`GET``/api/v1/auth/get/shop-order`Lấy dữ liệu giỏ hàng từ database
`POST``/api/v1/auth/post/shop-order/save`Lưu dữ liệu giỏ hàng vào database
`POST``/api/v1/auth/post/shop-order/update`Cập nhật giỏ hàng (thay đổi số lượng, xóa)
`POST``/api/v1/auth/post/shop-order/checkout`Xử lý thanh toán giỏ hàng
--- ## **4. Cấu trúc dữ liệu giỏ hàng** ### **4.1 Bảng `ecom.shop-order`** - Chứa thông tin ID của người dùng.
**Trường (EN)****Ý nghĩa****Mô tả**Tên cột/bảng dữ liệu tham chiếu
`user_id`ID người dùngID của người đặt hàngCột `id` trong bảng `ecom.users`
`created_at`Ngày tạoNgày đơn hàng được tạo
`updated_at`Ngày cập nhậtNgày đơn hàng được cập nhật
`deleted_at`Ngày xóaNgày đơn hàng bị xóa mềm (Soft Delete)
### **4.2 Bảng `ecom.shop-order-details`** - Chứa chi tiết các sản phẩm trong đơn hàng của ngừoi dùng.
Trường (EN)Ý nghĩaMô tảTên cột/bảng dữ liệu tham chiếu
`shop-order_id`ID đơn hàngID của đơn hàngCột `id` trong bảng `ecom.shop-order`
`product_id`ID sản phẩmID của sản phẩmCột `product_id` trong bảng `ecom_summary.product_patterns_summary`
`color_id`ID màuID màuCột `id` trong bảng `ecom.colors`
`size_id`ID kích thướcID kích thướcCột `id` trong bảng `ecom.size`
`style_id`ID kiểu nónID kiểu nónCột `id` trong bảng `ecom.style`
`logo_id`ID logoID logoCột `id` trong bảng `ecom.logo`
`material_id`ID của vật tưID của sản phẩmCột `id` trong bảng `ecom.materials`
`price`Giá gốcGiá sản phẩm
`quantity`Số lượngSố lượng sản phẩm
`total_price`Tạm tínhTổng giá của sản phẩm đó (`price * quantity`)
`is_checkout`Đặt hàngĐánh dấu sản phẩm đã được thanh toán chưa
`created_at`Ngày tạoNgày đơn hàng được tạo
`updated_at`Ngày cập nhậtNgày đơn hàng được cập nhật
`deleted_at`Ngày xóaNgày đơn hàng được xóa
--- ## **5. Giao diện giỏ hàng** ### **5.1 Danh sách sản phẩm hiển thị trong trang giỏ hàng**
Trường (EN)Trường (VI)Cột DBTên DBMô tả
**Product****Sản phẩm**`name``ecom_summary.product_patterns_summary`Hiển thị tên sản phẩm trong giỏ hàng
**Product****Sản phẩm**`image_3d_path``ecom_summary.product_patterns_summary`Hiển thị hình ảnh sản phẩm trong giỏ hàng
**Color****Màu sắc**`name``ecom.colors`Hiển thị màu sắc sản phẩm trong giỏ hàng
**Size****Kích thước**`name``ecom.size`Hiển thị kích thước sản phẩm trong giỏ hàng
**Style****Kiểu**`name``ecom.style`Hiển thị kiểu sản phẩm trong giỏ hàng
**Logo****Logo**`name``ecom.logo`Hiển thị logo sản phẩm trong giỏ hàng
**Material****Nguyên phụ liệu**`name``ecom.materials`Hiển thị nguyên phụ liệu của sản phẩm trong giỏ hàng
**Unit Price****Đơn giá**`price`Giá sản phẩm đơn lẻ (không có để `contact-liên hệ`)
**Quantity****Số lượng**`quantity`Số lượng sản phẩm trong giỏ (4 số)
**Subtotal****Tạm tính**`total_price`Tổng tiền của sản phẩm trong giỏ (không có để `contact-liên hệ`)
**Remove****Xóa**KhôngXóa sản phẩm khỏi giỏ hàng
### **5.2 Tổng giá trị hiển thị trên trang giỏ hàng (Checkout Summary)**
Trường (EN)Trường (VI)Cột DBMô tả
**Subtotal****Tạm tính**KhôngTổng tiền của tất cả sản phẩm đã chọn (không có để `contact-liên hệ`)
**Shipping****Phí vận chuyển**KhôngPhí vận chuyển (nếu có)
**Total****Tổng cộng**KhôngTổng giá trị đơn hàng sau phí vận chuyển (không có để `contact-liên hệ`)
--- ## **6. Tóm tắt** - Người dùng có thể thêm sản phẩm vào giỏ hàng và thêm vào review giỏ hàng từ danh sách sản phẩm hoặc trang chi tiết sản phẩm. - Giỏ hàng có thể cập nhật số lượng sản phẩm, xóa sản phẩm, chọn sản phẩm để thanh toán và chuyển đến trang chi tiết sản phẩm. - Giỏ hàng còn có thể cho phép chọn, cập nhật các chi tiết của sản phẩm như: size, logo, style, material, color. - Review giỏ hàng có thể xem nhanh các sản phẩm có trong giỏ hàng, tiến hành thanh toán nhanh tất cả sản phẩm có trong giỏ hàng, chuyển đến trang chi tiết sản phẩm, chuyển đến trang giỏ hàng. - Sau khi chọn sản phẩm, người dùng có thể tiến hành thanh toán. - Dữ liệu giỏ hàng được lưu vào cơ sở dữ liệu thông qua các API đã định nghĩa. # **Note:** Phần summary checkout hiện đang được ẩn trên app mobile chờ cập nhật. --- ### Ref task: #1239 - QA # TMS-1306: wishlist - yêu thích # **Tài liệu mô tả trang "Wishlist-Yêu thích" trên trang web** ## **1. Mô tả tổng quan** Trang Yêu thích là nơi hiển thị danh sách các sản phẩm mà người dùng đã đánh dấu yêu thích với sản phẩm bất kì. Tại đây, người dùng có thể: - Xem danh sách sản phẩm đã đánh dấu yêu thích. - Xóa sản phẩm khỏi danh sách yêu thích. - Tiến hành thêm vào giỏ hàng --- ## **2. Các chức năng và luồng hoạt động** ### **2.1 Thêm sản phẩm vào danh sách yêu thích (Add to Wishlist)** - Khi người dùng nhấn nút `Add To Wishlist` tại bất kỳ trang danh sách sản phẩm hoặc chi tiết sản phẩm nào, sản phẩm đó sẽ được thêm vào danh sách yêu thích. - Hệ thống sẽ hiển thị sản phẩm ngay trên yêu thích (wishlist) với thông tin chi tiết. ### **2.2 Thêm sản phẩm vào giỏ hàng (Add to Cart)** Thêm 1 sản phẩm vào giỏ hàng: - Khi người dùng nhấn nút `Add To Cart` tại trang yêu thích ở từng dòng, sản phẩm đó sẽ được thêm vào giỏ hàng. - Hệ thống sẽ hiển thị sản phẩm ngay trên trang giỏ hàng với thông tin chi tiết. Thêm nhiều sản phẩm vào giỏ hàng: - Người dùng tick vào ô checkbox hoặc chọn tất cả sản phẩm cùng lúc. - Khi người dùng nhấn nút `Add To Cart` ở trên danh sách yêu thích, các sản phẩm đó sẽ được thêm vào giỏ hàng. - Hệ thống sẽ hiển thị sản phẩm ngay trên trang giỏ hàng với thông tin chi tiết. ### **2.3 Chọn sản phẩm để xóa khỏi Danh sách yêu thích** Khi nhấn nút `icon thùng rác ở mỗi dòng`, hệ thống sẽ tiến hành xóa sản phẩm đó ở trang. Chọn xóa danh sách sản phẩm: - Người dùng có thể chọn từng sản phẩm bằng cách tick vào ô checkbox hoặc chọn tất cả sản phẩm cùng lúc. - Chỉ các sản phẩm được chọn mới được xóa khi nhấn xóa ở phía trên danh sách. --- ## **3. API Endpoint liên quan**
Phương thứcRouteMô tả
`GET``/api/v1/auth/get/shop-wishlist`Lấy dữ liệu wishlist từ database
`POST``/api/v1/auth/post/shop-wishlist/save`Lưu dữ liệu wishlist vào database
`POST``/api/v1/auth/post/shop-wishlist/delete`Xóa 1 hoặc nhiều sản phẩm ra khỏi database
--- ## **4. Cấu trúc dữ liệu giỏ hàng** ### **4.1 Bảng `ecom.wishlist`** - Chứa thông tin đơn hàng của người dùng.
Trường (EN)Ý nghĩaMô tả
`user_id`ID người dùngID của người đặt hàng
`product_id`ID sản phẩmID của của mẫu nón
`created_at`Ngày tạoNgày wishlist được thêm vào
`updated_at`Ngày cập nhậtNgày wishlist được cập nhật
`deleted_at`Ngày xóaNgày đwishlist được xóa
--- ## **5. Giao diện Wishlist - Yêu thích** ### **5.1 Danh sách sản phẩm trong giỏ hàng**
Trường (EN)Trường (VI)Cột DBMô tả
**Product****Sản phẩm**KhôngCột hiển thị thông tin hình ảnh sản phẩm và tên sản phẩm
`product_patterns_summary.image_3d_path`Hiển thị hình ảnh sản phẩm
`product_patterns_summary.name`Hiển thị tên sản phẩm
**Unit Price****Đơn giá**khôngGiá sản phẩm đơn lẻ (nhưng chưa có -> contact)
**Stock Status****Tình trạng hàng**KhôngTình trạng cuả sản phảm (chưa có -> gắn cứng: còn hàng)
**Action****Hành động**KhôngChọn thêm vào giỏ hoặc liên hệ tùy vào tình trạng hàng (chưa có tình trạng -> gán cứng: thêm vào giỏ)
**Remove****Xóa**KhôngXóa sản phẩm khỏi wishlist
--- ## **6. Tóm tắt** - Người dùng có thể thêm sản phẩm vào wishlist từ danh sách sản phẩm hoặc trang chi tiết sản phẩm. - Tại trang wishlist có thể thêm sản phẩm vào giỏ hàng, xóa sản phẩm khỏi trang wishlist, xem tình trạng của sản phẩm, lưu trữ sản phẩm khi cần thiết, tìm kiếm sản phẩm dễ dàng. - Dữ liệu wishlist được lưu vào cơ sở dữ liệu thông qua các API đã định nghĩa. --- ### Ref task: #1306 - QA # TMS - 1243: Sign In - Đăng nhập # **Tài liệu mô tả trang Đăng nhập (Sign In)** ## **1. Mô tả tổng quan** Trang **Đăng nhập** là nơi để người dùng tiến hành đăng nhập vào tài khoản của mình để sử dụng các tính năng của website: - Đăng nhập điền thông tin vào form đăng nhập trên trang. - Đăng nhập bằng tài khoản google, hoạt động như chức năng đăng nhập bằng google của các trang web khác ## [![sign in.png](https://book.app.tms-s.vn/uploads/images/gallery/2025-03/scaled-1680-/sign-in.png)](https://book.app.tms-s.vn/uploads/images/gallery/2025-03/sign-in.png) ## **2. Các chức năng và luồng hoạt động** ### Đăng nhập tài khoản mặc định - Tại phần header lúc chưa đăng nhập của web, nhấn vào nút đăng nhập ở bên góc phải trên của trang web để vào trang đăng nhập. - Tiến hành nhập thông tin cần thiết ở form đăng nhập (Sign In). - Nhấn nút `Đăng nhập (Sign In)`. - Nếu thành công: thông báo thành công và chuyển sang trang chủ của web. - Nếu thất bại: thông báo lỗi. ## **3. API Endpoint**
Phương thứcRouteMô tả
POST`/a-login`Gửi dữ liệu qua controller tại client để tiến hành đăng nhập
## **4. Mô tả giao diện - DB: ecom.users**
**Trường -en****Trường -vi****Cột DB****Mô tả****Yêu cầu****Ví dụ**
**Username****Tên đăng nhập**`username`Nhập tên đăng nhập duy nhất.- Bắt buộc nhập - Không trùng`johndoe`
**Password****Mật khẩu**`password`Nhập mật khẩu bảo mật.- Bắt buộc nhập`ttd123@`
--- ### Ref task: #1243 - Hưng # TMS-1238 ProductDetail-Chi tiết sản phẩm # **Tài liệu mô tả chi tiết sản phẩm trên web** ## **1. Mô tả tổng quan** Trang chi tiết sản phẩm là nơi hiển thi chi tiết sản phẩm bao gồm hình ảnh, tên, giá, mô tả và các thông tin liên quan. Người dùng có thể thêm sản phẩm vào giỏ hàng hoặc danh sách yêu thích. --- ## **2 Các chức năng và luồng hoạt động** [![](https://book.app.tms-s.vn/uploads/images/gallery/2025-03/scaled-1680-/image-1741677236916.png)](https://book.app.tms-s.vn/uploads/images/gallery/2025-03/image-1741677236916.png) ### **2.1 Lựa chọn màu sắc cho sản phẩm** 1. Có thể lựa chọn màu sắc mong muốn cho sản phẩm bằng cách nhấp vào mã màu tương ứng. 2. Màu sắc đang được chọn sẽ được đánh dấu nổi bật và sẽ thể hiện tên màu đang được chon. ### **2.2 Lựa chọn kiểu cho sản phẩm** 1. Có thể lựa chọn kiểu mong muốn cho sản phẩm bằng cách nhấp vào mã kiểu tương ứng. 2. Kiểu đang được chọn sẽ được đánh dấu nổi bật và sẽ thể hiện tên kiểu đang được chọn. ### **2.3 Lựa chọn kích cỡ cho sản phẩm** 1. Có thể lựa chọn kích cỡ mong muốn cho sản phẩm bằng cách nhấp vào mã kích cỡ tương ứng. 2. Kích cỡ đang được chọn sẽ được đánh dấu nổi bật và sẽ thể hiện tên kích cỡ đang được chọn. ### **2.4 Lựa chọn logo cho sản phẩm** - Lựa chon logo mong muốn cho sản phẩm từ ô select (mỗi sản phẩm chi được chọn 1 logo). ### **2.5 Lựa chọn nguyên phụ liệu cho sản phẩm** - Lựa chon nguyên phụ liệu mong muốn cho sản phẩm từ ô select (mỗi sản phẩm chi được chọn 1 nguyên phụ liệu). ### **2.6 Thêm sản phẩm vào giỏ hàng** - Khi người dùng nhấn nút `Add to cart` sản phẩm đó sẽ được thêm vào giỏ hàng với số lượng như khách hàng chọn ( Nếu sản phẩm đã có trong giỏ hàng sẽ cộng thêm trực tiếp). - Sản phẩm sẽ xuất hiện trong giỏ hàng cùng với các thông tin chi tiết như tên, giá, số lượng, tổng tiền và các option lựa chọn. ### **2.7 Thêm vào danh sách yêu thích** - Khi người dùng nhấn icon Add To Wishlist tại bất kỳ trang danh sách sản phẩm hoặc chi tiết sản phẩm nào, sản phẩm đó sẽ được thêm vào danh sách yêu thích. - Hệ thống sẽ hiển thị sản phẩm ngay trên yêu thích (wishlist) với thông tin chi tiết. ### **2.8 Mua ngay** - Khi người dùng nhấn nút `buy now` sản phẩm sẽ được thêm trực tiếp vào cart và chuyển tới trang giỏ hàng ### **2.9 Xem thông tin của sản phẩm** - Trang chi tiết sản phẩm sẽ bao gồm các thông tin của sản phẩm nhưng SKU(Mã sản phẩm), Màu sắc, logo, phân loại, các hình ảnh của sản phẩm trong đó sẽ có 2 hình ảnh cố định là hình 3D và video của sản phẩm ### **2.10 Xem danh sách sản phẩm xem gần nhất** - Trên giao diện chi tiết sẽ có `swiper` thể hiện danh sách các sản phẩm xem gần nhất. - Người dùng có thể trượt ngang để xem thêm sản phẩm. Có các nút next / prev để chuyển đổi giữa các sản phẩm. Danh sách sẽ bao gồm 6 sản phẩm xem gần nhất: - Đối với trường hợp chưa vào xem sản phẩm nào sẽ ẩn swipper. ### **2.11 Xem danh sách sản phẩm yêu thích** - Nếu người dùng đang đăng nhập thể hiện danh sách yêu thích, danh sách hiển thị sản phẩm từ mục yêu thích của người dùng. - Người dùng có thể trượt ngang để xem thêm sản phẩm. Có các nút next / prev để chuyển đổi giữa các sản phẩm. ## **3. API Endpoint**
Phương thứcRouteMô tả
`GET``/api/v1/auth/get/list-colors-map `Lấy danh sách màu được map với sản phẩm từ database
`GET``/api/v1/auth/get/list-logo-map`Lấy danh sách logo được map với sản phẩm từ database
`GET``/api/v1/auth/get/list-style-map`Lấy danh sách kiểu được map với sản phẩm từ database
`GET``api/v1/auth/get/list-size-map`Lấy danh sách kích cỡ map với sản phẩm từ database
`GET``api/v1/auth/get/list-material-map`Lấy danh sách nguyên phụ liệu map với sản phẩm từ database
`GET``api/v1/auth/get/product-pattern-summary-by-id`Lấy chi tiết sản phẩm từ bảng database summary
--- ## **4. Cấu trúc dữ liệu danh sách sản phẩm** ### **4.1 Bảng `ecom_summary.product_patterns_summary`** - Lưu đồng bộ thông tin giữa mẫu nón ở TTD và ecom.
FieldsÝ nghĩaMô tả
`product_id`ID mẫu nónID mẫu nón từ TTD
`delivery_time_id`ID thời gian vận chuyểnID thời gian vận chuyển của mẫu nón
`company_branch_id`ID chi nhánhID chi nhánh của mẫu nón
`material_id`ID nguyên phụ liệuID nguyên phụ liệu của mẫu nón
`hat_models`Kiểu nónKiểu nón của mẫu nón
`product_category_id`ID danh mụcID danh mục của mẫu nón
`code`Code mẫu nónCode của mẫu nón
`name`Tên mẫu nónTên của mẫu nón
`description`Mô tảMô tả của mẫu nón
`size_id`ID kích thướcID kích thước của mẫu nón
`size_code`Code kích thướcCode của kích thước mẫu nón
`size_name`Tên kích thướcTên của kích thước mẫu nón
`logo_id`ID logoID logo của mẫu nón
`logo_code`Code logoCode của logo mẫu nón
`logo_name`Tên logoTên của logo mẫu nón
`color_id`ID màuID màu của mẫu nón
`color_code`Code màuCode của màu mẫu nón
`color_name`Tên màuTên của màu mẫu nón
`style_id`ID styleID style của mẫu nón
`style_code`Code styleCode của style mẫu nón
`style_name`Tên styleTên của style mẫu nón
`video_path`Đường dẫn videoĐường dẫn video của mẫu nón
`image_3d_path`Đường dẫn ảnh 3DĐường dẫn ảnh 3D của mẫu nón
`creator_id`Người tạoNgười tạo mẫu nón
`created_at`Ngày tạoNgày tạo mẫu nón
`updated_at`Ngày cập nhậtNgày cập nhật mẫu nón
--- - Note: Hiện tại dữ liệu đã được lấy sẵn từ TTD qua, riêng cột product\_category\_id cần map thủ công từ bảng product\_categories sang bằng cách lấy id của bảng product\_categories gắn qua cột product\_category\_id của bảng product\_patterns\_summary từ DB ecom - Tương tự cột material\_id ở bảng product\_patterns\_summary cũng map thủ công bằng cách lấy id từ bảng materials đưa vào cột material\_id của bảng product\_patterns\_summary từ DB ecom - Tương tự cột delivery\_time\_id ở bảng product\_patterns\_summary cũng map thủ công bằng cách lấy id từ bảng delivery\_time đưa vào cột delivery\_time\_id của bảng product\_patterns\_summary từ DB ecom - Tương tự cột hat\_models ở bảng product\_patterns\_summary cũng map thủ công bằng cách lấy id từ bảng hat\_models đưa vào cột hat\_models của bảng product\_patterns\_summary từ DB ecom - Cột company\_branch\_id ở bảng product\_patterns\_summary được map thủ công bằng cách lấy id của bảng company\_branchs ở DB TTĐ đưa vào cột company\_branch\_id ở bảng product\_patterns\_summary từ DB ecom - Tương tự cột size\_id,size\_code,size\_name ở bảng product\_patterns\_summary cũng map thủ công bằng cách lấy id,code,name từ bảng size đưa vào cột size\_id,size\_code,size\_name của bảng product\_patterns\_summary từ DB ecom - Tương tự cột logo\_id,logo\_code,logo\_name ở bảng product\_patterns\_summary cũng map thủ công bằng cách lấy id,code,name từ bảng logo đưa vào cột logo\_id,logo\_code,logo\_name của bảng product\_patterns\_summary từ DB ecom - Tương tự cột color\_id,color\_code,color\_name ở bảng product\_patterns\_summary cũng map thủ công bằng cách lấy id,code,name từ bảng colors đưa vào cột color\_id,color\_code,color\_name của bảng product\_patterns\_summary từ DB ecom - Tương tự cột style\_id,style\_code,style\_name ở bảng product\_patterns\_summary cũng map thủ công bằng cách lấy id,code,name từ bảng style đưa vào cột style\_id,style\_code,style\_name của bảng product\_patterns\_summary từ DB ecom - ### **4.2 Bảng `ecom.product_logo_maps`** - Bảng map lưu thông tin logo của mẫu nón
FieldsÝ nghĩaMô tả
`product_id`product idid của sản phẩm
`logo_id`logo\_idid của logo
`created_at`Ngày tạoNgày map logo vào sản phẩm
`updated_at`Ngày cập nhậtNgày cập nhật logo vào sản phẩm
`deleted_at`Ngày xóaNgày xóa xóa dữ liệu logo khỏi sản phẩm
--- ### **4.3 Bảng `ecom.product_material_maps`** - Bảng map lưu thông tin kiểu nón của mẫu nón
FieldsÝ nghĩaMô tả
`product_id`product idid của sản phẩm
`material_id`material idid của nguyên phụ liệu
`created_at`Ngày tạoNgày map npl vào sản phẩm
`updated_at`Ngày cập nhậtNgày cập nhật npl vào sản phẩm
`deleted_at`Ngày xóaNgày xóa xóa dữ liệu npl khỏi sản phẩm
--- ### **4.4 Bảng `ecom.product_size_maps`** - Bảng map lưu thông tin kích thước của mẫu nón
FieldsÝ nghĩaMô tả
`product_id`product idid của sản phẩm
`size_id`size idid của kích cỡ
`created_at`Ngày tạoNgày map size vào sản phẩm
`updated_at`Ngày cập nhậtNgày cập nhật size vào sản phẩm
`deleted_at`Ngày xóaNgày xóa xóa dữ liệu size khỏi sản phẩm
--- ### **4.5 Bảng `ecom.product_style_maps`** - Bảng map lưu thông tin style của mẫu nón
FieldsÝ nghĩaMô tả
`product_id`product idid của sản phẩm
`style_id`style idid của style
`created_at`Ngày tạoNgày map style vào sản phẩm
`updated_at`Ngày cập nhậtNgày cập nhật style vào sản phẩm
`deleted_at`Ngày xóaNgày xóa xóa dữ liệu style khỏi sản phẩm
--- ### **4.6 Bảng `ecom.product_colors_maps`** - Bảng map lưu thông tin màu của mẫu nón
FieldsÝ nghĩaMô tả
`product_id`product idid của sản phẩm
`color_id`color idid của màu sắc
`created_at`Ngày tạoNgày map màu sắc vào sản phẩm
`updated_at`Ngày cập nhậtNgày cập nhật màu sắc vào sản phẩm
`deleted_at`Ngày xóaNgày xóa xóa dữ liệu màu sắc khỏi sản phẩm
--- ## **5. Giao diện danh sách sản phẩm** ### **5.1 Danh sách sản phẩm**
Fields(EN)Fields (VI)Cột DBTên DBMô tả
**Name****Tên sản phẩm**`name`ecom\_summary.product\_patterns\_summaryTên của mẫu nón
**Description****Mô tả sản phẩm**`description`ecom\_summary.product\_patterns\_summaryMô tả sản phẩm
**Images****Ảnh 3D của mẫu nón**`image_3d_path`ecom\_summary.product\_patterns\_summaryLink ảnh 3D của mẫu nón
**Video****Video của mẫu nón**`video_path`ecom\_summary.product\_patterns\_summaryLink video của mẫu nón
**SKU****Mã sản phẩm**codeecom\_summary.product\_patterns\_summaryMã sản phẩm
**Select Color****Chọn màu sản phẩm**nameecom.colorschọn màu của của mẫu nón
**Select Material****Chọn nguyên phụ liệu**name, codeecom.materialMã/Tên Nguyên phụ liệu của mẫu nón
**Select Size****Chọn kích cỡ**name, codeecom.sizeMã/Tên kích cỡ của mẫu nón
**Select Style****Chọn Kiểu**name, codeecom.styleMã/Tên kiểu của mẫu nón
**Select logo****Chọn nguyên logo**name, codeecom.logoMã/Tên Nguyên phụ liệu của logo
## **7. Tóm tắt** - Thể hiện chi tiết của sản phẩm và các lựa chọn cho sản phẩm nhầm thêm vào giỏ hàng --- ### Ref task: #1238 - PTAT # Hướng dẫn map dữ liệu dành cho sản phẩm # **Hướng dẫn Map Dữ Liệu từ `product_pattern_summary` với Các Bảng Thuộc Tính** ## 1. Mô Tả Bảng ### `product_patterns_summary` Bảng này chứa thông tin tổng hợp về mẫu sản phẩm với cột `product_id` đại diện cho sản phẩm.
FieldsÝ nghĩaMô tả
`product_id`ID mẫu nónID mẫu nón từ TTD
`delivery_time_id`ID thời gian vận chuyểnID thời gian vận chuyển của mẫu nón
`company_branch_id`ID chi nhánhID chi nhánh của mẫu nón
`material_id`ID nguyên phụ liệuID nguyên phụ liệu của mẫu nón
`hat_models`Kiểu nónKiểu nón của mẫu nón
`product_category_id`ID danh mụcID danh mục của mẫu nón
`code`Code mẫu nónCode của mẫu nón
`name`Tên mẫu nónTên của mẫu nón
`description`Mô tảMô tả của mẫu nón
`size_id`ID kích thướcID kích thước của mẫu nón
`size_code`Code kích thướcCode của kích thước mẫu nón
`size_name`Tên kích thướcTên của kích thước mẫu nón
`logo_id`ID logoID logo của mẫu nón
`logo_code`Code logoCode của logo mẫu nón
`logo_name`Tên logoTên của logo mẫu nón
`color_id`ID màuID màu của mẫu nón
`color_code`Code màuCode của màu mẫu nón
`color_name`Tên màuTên của màu mẫu nón
`style_id`ID styleID style của mẫu nón
`style_code`Code styleCode của style mẫu nón
`style_name`Tên styleTên của style mẫu nón
`video_path`Đường dẫn videoĐường dẫn video của mẫu nón
`image_3d_path`Đường dẫn ảnh 3DĐường dẫn ảnh 3D của mẫu nón
`creator_id`Người tạoNgười tạo mẫu nón
`created_at`Ngày tạoNgày tạo mẫu nón
`updated_at`Ngày cập nhậtNgày cập nhật mẫu nón
--- ### Các Bảng Map #### `product_logo_maps`
idproduct\_idlogo\_id
110110
210211
310312
#### `product_style_maps`
idproduct\_idstyle\_id
110120
210221
310322
#### `product_color_maps`
idproduct\_idcolor\_id
11011
21012
31023
41031
#### `product_size_maps`
idproduct\_idsize\_id
110130
210231
310332
#### `product_material_maps`
idproduct\_idmaterial\_id
110140
210241
310342
## 2. Cách Map Dữ Liệu Để lấy thông tin đầy đủ về mẫu sản phẩm cùng các thuộc tính, có thể sử dụng truy vấn SQL sau: ```sql SELECT pps.id AS pattern_id, pps.product_id, pps.name, plm.logo_id, psm.style_id, pcm.color_id, psm2.size_id, pmm.material_id FROM product_patterns_summary pps LEFT JOIN product_logo_maps plm ON pps.product_id = plm.product_id LEFT JOIN product_style_maps psm ON pps.product_id = psm.product_id LEFT JOIN product_color_maps pcm ON pps.product_id = pcm.product_id LEFT JOIN product_size_maps psm2 ON pps.product_id = psm2.product_id LEFT JOIN product_material_maps pmm ON pps.product_id = pmm.product_id; ``` ### Kết Quả Mong Muốn
Pattern IDProduct IDTên MẫuLogo IDStyle IDColor IDSize IDMaterial ID
1101Pattern A102013040
1101Pattern A102023040
2102Pattern B112133141
3103Pattern C122213242
## 3. Hướng Dẫn Thêm Dữ Liệu vào Các Bảng Thuộc Tính ### **1. phpMyAdmin** 1. Mở phpMyAdmin. 2. Chọn cơ sở dữ liệu `ecom`. 3. Chọn bảng bạn muốn cập nhật (`product_logo_maps`, `product_style_maps`, `product_color_maps`, `product_size_maps`, `product_material_maps`). 4. Nhấp vào tab **Insert** (Chèn dữ liệu). 5. Nhập `product_id` và `id` của các thông tin map như màu sắc từ bảng `colors`, kích cỡ từ bảng `size`, logo từ bảng `logo`, nguyên phụ liệu từ bảng `material`, kiểu từ bảng `style`. 6. Nhấn **Go** để lưu dữ liệu. ### **2. Dùng Giao Diện Dòng Lệnh SQL (nếu có hỗ trợ)** 1. Mở giao diện SQL (MySQL Workbench, DBeaver, hoặc pgAdmin nếu dùng PostgreSQL). 2. Chạy câu lệnh sau: ```sql INSERT INTO product_size_map (product_id, size_id) VALUES (104, 33); ``` Lệnh trên sẽ thêm một dòng mới với `product_id = 104` và `size_id = 33`. ## 4. Tổng Kết - Map dữ liệu bằng `JOIN` để lấy đầy đủ thông tin sản phẩm. - Người dùng có thể thêm dữ liệu qua phpMyAdmin hoặc giao diện SQL. - Dễ dàng quản lý các thuộc tính sản phẩm như logo, style, color, size, material. ### Ref task: #1238-Tuan # TMS-1427: Thêm option tác nghiệm thêu # **TÀI LIỆU TÁC NGHIỆP THÊU** ## **1. Mô tả tổng quan** ## Option tác nghiệp thêu dành cho tài khoản thuê và tác nghiệp quản lý tác nghiệp thêu. Option tác nghiệp thêu được thêm vào danh sách đơn hàng bán (Đơn hàng múi/SA, đơn hàng dự trữ, đơn hàng khách hàng). Chức năng giúp quản lý BTP, loại mũi kim, Số lượng mũi kim,màu chỉ , NPL chỉ thêu. ## **2. Các c** # TMS-1428: Thêm thông tin kiểm tra, duyệt hoàn tất đơn hàng, tải excel cho các trang danh sách: DHM/DHSA/DHDT/DHKH ## 1.Mô tả: Các trang danh sách đơn hàng múi, sa, dự trữ, khách hàng khi tỉ số **số lượng thành phẩm/số lượng đơn hàng** đạt trên 80% thì cho phép duyệt HOÀN TẤT đơn hàng, tải excel và kiểm tra đơn hàng. --- ## 2. Các chức năng thêm và luồng hoạt động. **Permission: Sales có thể kiểm tra và duyệt hoàn tất đối với đơn hàng đã tạo, QA có thể kiểm tra và duyệt hoàn tất với mọi đơn hàng** ### 2.1 Kiểm tra đơn hàng: - Mở modal kiểm tra: nhấn vào nút kiểm tra trên đơn hàng ### 2.2 Duyệt hoàn tất đơn hàng - Trên mỗi dòng đơn hàng sẽ có nút duyệt hoàn tất đơn hàng. ### 2.3 Tải excel: --- ## 3. Bảng dữ liệu. SLDH: `order_info_summary` SLTP: `box_order_details` --- ### Ref task: #1428 - QA & A.Tuyên # TMS-1457: [U][WH][Danh sách xuất chuyển kho thành phẩm] # **Tài liệu mô tả trang: Danh sách xuất chuyển kho thành phẩm** ## **1. Mô tả tổng quan** Trang **Danh sách xuất chuyển kho thành phẩm** là nơi để người dùng tiến hành thực hiện các thao tác liên quan đến việc xuất chuyển kho thành phẩm: - Xem danh sách xuất chuyển kho thành phẩm. - Tìm kiếm phiếu xuất chuyển kho thành phẩm bất kỳ. - Tải file excel và pdf của phiếu xuất CKTP. - Tạo phiếu xuất CKTP cho đơn hàng thành phẩm có số lượng tồn trong kho. [![Screenshot from 2025-04-08 14-49-20.png](https://book.app.tms-s.vn/uploads/images/gallery/2025-04/scaled-1680-/screenshot-from-2025-04-08-14-49-20.png)](https://book.app.tms-s.vn/uploads/images/gallery/2025-04/screenshot-from-2025-04-08-14-49-20.png) --- ## **2. Các chức năng và luồng hoạt động** ### Cấp quyền cho tài khoản sử dụng chức năng: - Tài khoản kho - Bộ phận: Quản lý kho - Chức vụ: Nhân viên kho - Chức năng: Danh sách xuất chuyển kho thành phẩm. ### 2.1 Xem danh sách phiếu xuất CKTP - Đăng nhập vào tài khoản đã cấp quyền. - Tại leftbar, tìm icon chức năng `QUẢN LÍ THÀNH PHẨM` sau đó tìm và chọn vào chức năng `Danh sách xuất chuyển kho thành phẩm`. - Khi chọn chức năng xong, hệ thống sẽ điều hướng đến trang `Danh sách xuất chuyển kho thành phẩm` nếu tài khoản có quyền, ngược lại thống báo tài khoản không có quyền và hiện popup xác nhận di chuyển về trang chủ hoặc đăng xuất. - Đối với các tài khoản được cấp quyền 2 chi nhánh. Ở phần tiêu đề có ô select để chọn chi nhánh muốn xem danh sách phiếu CKTP. Tại đây, chọn tất cả để xem danh sách của cả 2 chi nhánh, hoặc chọn vào chi nhánh mong muốn để xem danh sách phiếu xuất CKTP. **Ghi chú: mỗi trang chỉ hiện tối đa 20 phiếu xuất CKTP, nếu muốn xem nhiều hơn có thể chọn xem các trang tiếp theo ở phần paginate bên dưới danh sách phiếu. Chỉ cần chọn số ở phần paginate, hệ thống sẽ tải trang muốn xem.** ### 2.2 Tìm kiếm phiếu xuất CKTP - Tại trang, nhấn vào nút tìm kiếm ngay cạnh tiêu đề trang để tiến hành tìm kiếm. - Popup hiện lên cho phép tìm kiếm theo: 1.Mã phiếu xuất 2.Mã/Tên đơn hàng 3.Tên kiện 4.Người xuất 5.Ngày xuất (từ ngày - đến ngày) - Sau khi nhập các thông tin cần thiết, nhấn nút tìm kiếm. - Nút mũi tên góc trên bên phải để xóa nhanh tất cả dữ liệu tìm kiếm. ### 2.3 Tạo phiếu xuất CKTP #### Ở giao diện chính nhấn vào nút để mở modal `Xuất chuyển kho thành phẩm`. [![create.png](https://book.app.tms-s.vn/uploads/images/gallery/2025-04/scaled-1680-/create.png)](https://book.app.tms-s.vn/uploads/images/gallery/2025-04/create.png) #### Tiến hành tạo phiếu xuất CKTP theo các bước: 1. Chọn nơi nhận: hiện có 2 chi nhánh nên mặc định là xuất chuyển kho cho chi nhánh còn lại (khác chi nhánh của tài khoản xuất). Nếu có nhiều hơn 2 chi nhánh sẽ phải chọn chi nhánh nhận. 2. Chọn đơn hàng thành phẩm muốn xuất chuyển kho: có thể chọn ĐHKH hoặc DHM/DHSA điều kiện là đơn hàng đó có tồn kho (SL tồn kho > 0). Tại đây có thể xuất chuyển kho nhiều đơn hàng. 3. Sau khi chọn đơn hàng xong nhấn tìm kiếm, hệ thống sẽ lấy thông tin của đơn hàng và hiện ra component đơn hàng cùng với kiện chứa đơn hàng đó và gợi ý sẵn số lương đơn hàng chứa trong kiện. 4. Tiến hành nhập số lượng muốn xuất (0 < Số lượng <= SL tồn kho). Có thể nhập hoặc bỏ trống ghi chú. ***Nếu đơn hàng có nhiều kiện nhưng không muốn xuất hết các kiện có thể nhấn nút dấu x ở sau ô nhập ghi chú để loại bỏ kiện hàng đó*** 5. Sau khi nhập xong nhấn nút lưu để xuất CKTP hoặc nhấn đóng nếu không muốn xuất. ### 2.4 Tải excel danh sách, excel chi tiết và pdf chi tiết. 1. Tải excel danh sách: nhấn vào nút tải cạnh ô tìm kiếm để tải excel danh sách (khi di chuột vào hiện title 'Tải excel danh sách). 2. Tải excel chi tiết: nhấn vào nút tải bên trái ở từng dòng trong danh sách phiếu xuất cktp (khi di chuột vào hiện title 'Tải excel chi tiết). 3. Tải pdf chi tiết: nhấn vào nút tải bên phải ở từng dòng trong danh sách phiếu xuất cktp (khi di chuột vào hiện title 'Tải pdf chi tiết). - Khi nhấn vào tải, website sẽ hiện thông báo tải file. Để xem file đã tải tài khoản cần được cấp quyền chức năng `DS file đã tải` (cấp quyền và truy cập trang chức năng tương tự như trên). - Tại trang `DS file đã tải` file excel hoặc pdf vừa tải sẽ hiện thông tin ở dòng đầu tiên của danh sách, tại trang này hiển thị tên file, người tạo, ngày tạo, trạng thái file và nút tải xuống, nhấn vào nút tải trên dòng đó để tải và xem file. --- ## **3. API Endpoint**
Phương thứcRouteMô tả
GET`/get-list-export-goods-wh-transfer-summary`Lấy thông tin danh sách phiếu xuất CKTP và tìm kiếm.
GET`/search_branch`Lấy danh sách chi nhánh (nơi nhận)
GET`/get-order-for-export-goods-wh-transfer`Lấy danh sách đơn hàng có thể xuất CKTP
GET`/get-order-detail-for-export-goods-wh-transfer`Lấy thông tin danh sách đơn hàng xuất CKTP
GET`/get-order-detail-for-export-goods-wh-transfer`Lấy thông tin danh sách đơn hàng xuất CKTP
GET`/down-expt-goods-wh-transfer-pdf/{id}`Tải file pdf chi tiết
POST`/download-excel-export-goods-wh-transfer`Tải file excel chi tiết và danh sách
POST`/export-goods-warehouse-transfer/save`Lưu dữ liệu khi tạo phiếu xuất CKTP
--- ## **4. Mô tả cơ sở dữ liệu** #### **Bảng `export_goods_warehouse_transfer_summary`**
TrườngÝ nghĩaMô tảTên cột/bảng dữ liệu tham chiếu
`id`Khóa chínhĐịnh danh duy nhất cho mỗi bản ghi, tự động tăngKhông
`arrange_number`Số thứ tự sắp xếpSố thứ tự để sắp xếp các bản ghi theo chi nhánhKhông
`code`Mã phiếu CKTPMã phiếu CKTP, định dạng chuỗi ký tựKhông
`to_company_branch_id`ID chi nhánh nhậnID của chi nhánh nhận, tham chiếu đến bảng chi nhánh`id` (bảng `company_branchs`)
`company_branch_id`ID chi nhánh gửiID của chi nhánh gửi, tham chiếu đến bảng chi nhánh`id` (bảng `company_branchs`)
`creator_id`ID người tạoID của người tạo, tham chiếu đến bảng người dùng`id` (bảng `users`)
`unique_id`ID duy nhấtChuỗi định danh duy nhất cho bản ghiKhông
`created_at`Thời gian tạoThời gian bản ghi được tạo, định dạng timestamp, có thể để trốngKhông
`updated_at`Thời gian cập nhậtThời gian bản ghi được cập nhật, định dạng timestamp, có thể để trốngKhông
`deleted_at`Thời gian xóa mềmThời gian bản ghi bị xóa mềm, định dạng timestamp, có thể để trốngKhông
#### **Bảng `export_goods_warehouse_transfer_detail_summary`**
TrườngÝ nghĩaMô tảTên cột/bảng dữ liệu tham chiếu
`id`Khóa chínhĐịnh danh duy nhất cho mỗi bản ghi chi tiết, tự động tăngKhông
`order_summary_id`ID bản tổng hợpID của bảng tổng hợp đơn hàng`id` (bảng `summary.order_info_summary`)
`export_goods_warehouse_transfer_id`ID giao dịch chuyển khoID của giao dịch chuyển kho, tham chiếu đến bảng tổng hợp`id` (bảng `summary.export_goods_warehouse_transfer_summary`)
`quantity`Số lượngSố lượng đơn hàng xuất CKTP, định dạng số thập phân (16,2)Không
`note`Ghi chúGhi chú cho đơn hàng xuất CKTP, định dạng văn bản, không bắt buộcKhông
`prod_storage_location_id`ID kiện trong khoID của kiện trong kho`product_storage_location_id` (bảng `marketing.product_storage_location_infos`)
`storage_location_name`Tên kiện trong khoTên của kiện trong kho, định dạng chuỗi ký tự, có thể để trống, lưu lại tên kiện khi xuất lấy từ cột `marketing.product_storage_location_infos.name`Không
`qrcode_storage_location_export`Mã QR xuất khoMã QR cho vị trí lưu trữ khi xuất kho, định dạng chuỗi, có thể để trốngKhông
`qrcode_prod_storage_location`Mã QR kiệnMã QR của kiện trong kho, định dạng chuỗi, có thể để trống. Lưu lại qrcode kiện khi xuất hết kiện đó.Không
`creator_id`ID người tạoID của người tạo bản ghi, tham chiếu đến bảng người dùng`id` (bảng `users`)
`created_at`Thời gian tạoThời gian bản ghi được tạo, định dạng timestamp, có thể để trốngKhông
`updated_at`Thời gian cập nhậtThời gian bản ghi được cập nhật, định dạng timestamp, có thể để trốngKhông
`deleted_at`Thời gian xóa mềmThời gian bản ghi bị xóa mềm, định dạng timestamp, có thể để trốngKhông
### Mô tả tổng quan - **Bảng `export_goods_warehouse_transfer_summary`**: Lưu trữ thông tin xuất CKTP của đơn hàng giữa các chi nhánh công ty. Mỗi bản ghi đại diện cho một phiếu xuất CKTP, bao gồm thông tin về chi nhánh gửi/nhận, mã phiếu xuất, và các thông tin quản lý (người tạo, thời gian tạo/cập nhật/xóa). - **Bảng `export_goods_warehouse_transfer_detail_summary`**: Lưu trữ chi tiết của từng phiếu xuất CKTP, bao gồm số lượng, kiện, mã QR, và ghi chú. Và liên kết với bảng tổng hợp đơn hàng `summary.order_info_summary` để lưu thông tin đơn hàng xuất CKTP. ### Mối quan hệ - Bảng `export_goods_warehouse_transfer_detail_summary` có quan hệ **1-nhiều** với bảng `export_goods_warehouse_transfer_summary` thông qua các cột `id` và `export_goods_warehouse_transfer_id`. - Các cột như `to_company_branch_id`, `company_branch_id`, `creator_id`, và `prod_storage_location_id` tham chiếu đến các bảng khác (như `company_branchs`, `users`, `product_storage_location_infos`) để đảm bảo tính toàn vẹn dữ liệu. --- ## **5. Mô tả giao diện - DB**
**Trường****Cột DB****Bảng DB khác****Ghi chú**
**Mã phiếu xuất**`code`Mã phiếu xuất CKTP
**Mã/Tên đơn hàng**`name/code``summary.order_info_summary`Lấy name hoặc code dài hơn
**Tên kiện**`storage_location_name`
**SL xuất**`quantity`Số lượng xuất CKTP của đơn hàng
**Người xuất**`fullname``users`Tên người xuất CKTP đơn hàng
**Ngày xuất**Lấy ngày xuất hiện tại
**Nơi xuất**`name``company_branchs`Tên chi nhánh xuất CKTP
**Nơi nhận**`name``company_branchs`Tên chi nhánh nhận CKTP
**Đơn hàng**`name/code``marketing.customerOrder` và `marketing.orderDetailMã tên đơn hàng hiển thị lúc tạo phiếu xuất CKTP
**Số lượng**`quantity``marketing.product_storage_stages`Số lượng tồn kho của đơn hàng
**Ghi chú**`note`Ghi chú theo kiện khi xuất CKTP
--- ### Ref task: #1457 - QA # TMS-1458: [U][WH][Danh sách nhập chuyển kho thành phẩm] # **Tài liệu mô tả trang: Danh sách xuất chuyển kho thành phẩm** ## **1. Mô tả tổng quan** Trang **Danh sách nhập chuyển kho thành phẩm** là nơi để người dùng tiến hành thực hiện các thao tác liên quan đến việc nhập chuyển kho thành phẩm: - Xem danh sách nhập chuyển kho thành phẩm. - Tìm kiếm phiếu nhập chuyển kho thành phẩm bất kỳ. - Tải file excel và pdf của phiếu nhập CKTP. - Tạo phiếu nhập CKTP cho đơn hàng đã được xuất chuyển kho thành phẩm. [![](https://book.app.tms-s.vn/uploads/images/gallery/2025-04/scaled-1680-/image-1744169619761.png)](https://book.app.tms-s.vn/uploads/images/gallery/2025-04/image-1744169619761.png) --- ## **2. Các chức năng và luồng hoạt động** ### Cấp quyền cho tài khoản sử dụng chức năng: - Tài khoản kho - Bộ phận: Quản lý kho - Chức vụ: Nhân viên kho - Chức năng: Danh sách nhập chuyển kho thành phẩm. ### 2.1 Xem danh sách phiếu nhập CKTP - Đăng nhập vào tài khoản đã cấp quyền. - Tại leftbar, tìm icon chức năng `QUẢN LÍ THÀNH PHẨM` sau đó tìm và chọn vào chức năng `Danh sách nhập chuyển kho thành phẩm`. - Khi chọn chức năng xong, hệ thống sẽ điều hướng đến trang `Lịch sử nhập chuyển kho thành phẩm` nếu tài khoản có quyền, ngược lại thống báo tài khoản không có quyền và hiện popup xác nhận di chuyển về trang chủ hoặc đăng xuất. - Đối với các tài khoản được cấp quyền 2 chi nhánh. Ở phần tiêu đề có ô select để chọn chi nhánh muốn xem danh sách phiếu CKTP. Tại đây, chọn tất cả để xem danh sách của cả 2 chi nhánh, hoặc chọn vào chi nhánh mong muốn để xem danh sách phiếu nhập CKTP. **Ghi chú: mỗi trang chỉ hiện tối đa 20 phiếu nhập CKTP, nếu muốn xem nhiều hơn có thể chọn xem các trang tiếp theo ở phần paginate bên dưới danh sách phiếu. Chỉ cần chọn số ở phần paginate, hệ thống sẽ tải trang muốn xem.** ### 2.2 Tìm kiếm phiếu nhập CKTP - Tại trang, nhấn vào nút tìm kiếm ngay cạnh tiêu đề trang để tiến hành tìm kiếm. - Popup hiện lên cho phép tìm kiếm theo: 1.Mã/Tên đơn hàng 2.Mã/Tên mẫu nón 3.Mã xuất kho 4.Mã nhập kho 5.Ngày xuất (từ ngày - đến ngày) - Sau khi nhập các thông tin cần thiết, nhấn nút tìm kiếm. - Nút mũi tên góc trên bên phải để xóa nhanh tất cả dữ liệu tìm kiếm. ### 2.3 Tạo phiếu nhập CKTP #### Ở giao diện chính nhấn vào nút `Nhập chuyển kho thành phẩm` để mở modal. [![](https://book.app.tms-s.vn/uploads/images/gallery/2025-04/scaled-1680-/image-1744169932840.png)](https://book.app.tms-s.vn/uploads/images/gallery/2025-04/image-1744169932840.png) #### Tiến hành tạo phiếu nhập CKTP theo các bước: 1. Chọn phiếu xuất chuyển kho thành phẩm cần nhập(Hệ thống sẽ chỉ chọn các phiếu xuất có nơi nhận là chi nhanh của nguời sử dụng). 2. Sau khi phiếu xuất nhấn xác nhận, hệ thống sẽ lấy thông tin của của các phiếu xuất và hiện ra component chưa thống tin phiếu xuất bao gồm đơn hàng, số lượng xuất, số lượng đã nhập gợi ý sẵn số lương mà đơn hàng đó chưa nhập. 3. Tiến hành nhập số lượng muốn nhập(0 < Số lượng ). Có thể nhập hoặc bỏ trống ghi chú. ***Nếu phiếu xuất có nhiều đơn hàng nhưng không muốn nhập hết các đơn hàng có thể nhấn nút dấu x ở sau ô nhập ghi chú để loại bỏ đơn hàng đó*** 4. Sau khi nhập xong nhấn nút lưu để nhập CKTP hoặc nhấn đóng nếu không muốn không. ### 2.4 Tải excel danh sách, excel chi tiết và pdf chi tiết. 1. Tải excel danh sách: nhấn vào nút tải cạnh ô tìm kiếm để tải excel danh sách (khi di chuột vào hiện title 'Tải excel danh sách). 2. Tải excel chi tiết: nhấn vào nút tải bên trái ở từng dòng trong danh sách phiếu xuất cktp (khi di chuột vào hiện title 'Tải excel chi tiết). 3. Tải pdf chi tiết: nhấn vào nút tải bên phải ở từng dòng trong danh sách phiếu xuất cktp (khi di chuột vào hiện title 'Tải pdf chi tiết). - Khi nhấn vào tải, website sẽ hiện thông báo tải file. Để xem file đã tải tài khoản cần được cấp quyền chức năng `DS file đã tải` (cấp quyền và truy cập trang chức năng tương tự như trên). - Tại trang `DS file đã tải` file excel hoặc pdf vừa tải sẽ hiện thông tin ở dòng đầu tiên của danh sách, tại trang này hiển thị tên file, người tạo, ngày tạo, trạng thái file và nút tải xuống, nhấn vào nút tải trên dòng đó để tải và xem file. --- ## **3. API Endpoint**
Phương thứcRouteMô tả
GET`/get-list-export-goods-wh-transfer-summary`Lấy thông tin danh sách phiếu xuất CKTP và tìm kiếm.
GET`/search_branch`Lấy danh sách chi nhánh (nơi nhận)
GET`/get-order-for-export-goods-wh-transfer`Lấy danh sách đơn hàng có thể xuất CKTP
GET`/get-order-detail-for-export-goods-wh-transfer`Lấy thông tin danh sách đơn hàng xuất CKTP
GET`/get-order-detail-for-export-goods-wh-transfer`Lấy thông tin danh sách đơn hàng xuất CKTP
GET`/down-expt-goods-wh-transfer-pdf/{id}`Tải file pdf chi tiết
POST`/download-excel-export-goods-wh-transfer`Tải file excel chi tiết và danh sách
POST`/export-goods-warehouse-transfer/save`Lưu dữ liệu khi tạo phiếu xuất CKTP
--- ## **4. Mô tả cơ sở dữ liệu** #### **Bảng `export_goods_warehouse_transfer_summary`**
TrườngÝ nghĩaMô tảTên cột/bảng dữ liệu tham chiếu
`id`Khóa chínhĐịnh danh duy nhất cho mỗi bản ghi, tự động tăngKhông
`arrange_number`Số thứ tự sắp xếpSố thứ tự để sắp xếp các bản ghi theo chi nhánhKhông
`code`Mã phiếu CKTPMã phiếu CKTP, định dạng chuỗi ký tựKhông
`to_company_branch_id`ID chi nhánh nhậnID của chi nhánh nhận, tham chiếu đến bảng chi nhánh`id` (bảng `company_branchs`)
`company_branch_id`ID chi nhánh gửiID của chi nhánh gửi, tham chiếu đến bảng chi nhánh`id` (bảng `company_branchs`)
`creator_id`ID người tạoID của người tạo, tham chiếu đến bảng người dùng`id` (bảng `users`)
`unique_id`ID duy nhấtChuỗi định danh duy nhất cho bản ghiKhông
`created_at`Thời gian tạoThời gian bản ghi được tạo, định dạng timestamp, có thể để trốngKhông
`updated_at`Thời gian cập nhậtThời gian bản ghi được cập nhật, định dạng timestamp, có thể để trốngKhông
`deleted_at`Thời gian xóa mềmThời gian bản ghi bị xóa mềm, định dạng timestamp, có thể để trốngKhông
#### **Bảng `export_goods_warehouse_transfer_detail_summary`**
TrườngÝ nghĩaMô tảTên cột/bảng dữ liệu tham chiếu
`id`Khóa chínhĐịnh danh duy nhất cho mỗi bản ghi chi tiết, tự động tăngKhông
`order_summary_id`ID bản tổng hợpID của bảng tổng hợp đơn hàng`id` (bảng `summary.order_info_summary`)
`export_goods_warehouse_transfer_id`ID giao dịch chuyển khoID của giao dịch chuyển kho, tham chiếu đến bảng tổng hợp`id` (bảng `summary.export_goods_warehouse_transfer_summary`)
`quantity`Số lượngSố lượng đơn hàng xuất CKTP, định dạng số thập phân (16,2)Không
`note`Ghi chúGhi chú cho đơn hàng xuất CKTP, định dạng văn bản, không bắt buộcKhông
`prod_storage_location_id`ID kiện trong khoID của kiện trong kho`product_storage_location_id` (bảng `marketing.product_storage_location_infos`)
`storage_location_name`Tên kiện trong khoTên của kiện trong kho, định dạng chuỗi ký tự, có thể để trống, lưu lại tên kiện khi xuất lấy từ cột `marketing.product_storage_location_infos.name`Không
`qrcode_storage_location_export`Mã QR xuất khoMã QR cho vị trí lưu trữ khi xuất kho, định dạng chuỗi, có thể để trốngKhông
`qrcode_prod_storage_location`Mã QR kiệnMã QR của kiện trong kho, định dạng chuỗi, có thể để trống. Lưu lại qrcode kiện khi xuất hết kiện đó.Không
`creator_id`ID người tạoID của người tạo bản ghi, tham chiếu đến bảng người dùng`id` (bảng `users`)
`created_at`Thời gian tạoThời gian bản ghi được tạo, định dạng timestamp, có thể để trốngKhông
`updated_at`Thời gian cập nhậtThời gian bản ghi được cập nhật, định dạng timestamp, có thể để trốngKhông
`deleted_at`Thời gian xóa mềmThời gian bản ghi bị xóa mềm, định dạng timestamp, có thể để trốngKhông
### Mô tả tổng quan - **Bảng `export_goods_warehouse_transfer_summary`**: Lưu trữ thông tin xuất CKTP của đơn hàng giữa các chi nhánh công ty. Mỗi bản ghi đại diện cho một phiếu xuất CKTP, bao gồm thông tin về chi nhánh gửi/nhận, mã phiếu xuất, và các thông tin quản lý (người tạo, thời gian tạo/cập nhật/xóa). - **Bảng `export_goods_warehouse_transfer_detail_summary`**: Lưu trữ chi tiết của từng phiếu xuất CKTP, bao gồm số lượng, kiện, mã QR, và ghi chú. Và liên kết với bảng tổng hợp đơn hàng `summary.order_info_summary` để lưu thông tin đơn hàng xuất CKTP. ### Mối quan hệ - Bảng `export_goods_warehouse_transfer_detail_summary` có quan hệ **1-nhiều** với bảng `export_goods_warehouse_transfer_summary` thông qua các cột `id` và `export_goods_warehouse_transfer_id`. - Các cột như `to_company_branch_id`, `company_branch_id`, `creator_id`, và `prod_storage_location_id` tham chiếu đến các bảng khác (như `company_branchs`, `users`, `product_storage_location_infos`) để đảm bảo tính toàn vẹn dữ liệu. --- ## **5. Mô tả giao diện - DB**
**Trường****Cột DB****Bảng DB khác****Ghi chú**
**Mã phiếu xuất**`code`Mã phiếu xuất CKTP
**Mã/Tên đơn hàng**`name/code``summary.order_info_summary`Lấy name hoặc code dài hơn
**Tên kiện**`storage_location_name`
**SL xuất**`quantity`Số lượng xuất CKTP của đơn hàng
**Người xuất**`fullname``users`Tên người xuất CKTP đơn hàng
**Ngày xuất**Lấy ngày xuất hiện tại
**Nơi xuất**`name``company_branchs`Tên chi nhánh xuất CKTP
**Nơi nhận**`name``company_branchs`Tên chi nhánh nhận CKTP
**Đơn hàng**`name/code``marketing.customerOrder` và `marketing.orderDetailMã tên đơn hàng hiển thị lúc tạo phiếu xuất CKTP
**Số lượng**`quantity``marketing.product_storage_stages`Số lượng tồn kho của đơn hàng
**Ghi chú**`note`Ghi chú theo kiện khi xuất CKTP
--- ### Ref task: #1458 - PTAT # TMS-1456:[U][WH][Danh sách đơn hàng thành phẩm] # **Tài liệu mô tả trang: Danh sách đơn hàng thành phẩm** ## **1. Mô tả tổng quan** Trang **Danh sách đơn hàng thành phẩm** là nơi để người dùng tiến hành xem được các đơn hàng đang có trong kho thành phẩm: - Xem danh sách đơn hàng đang có trong kho thành phầm ( xem được số lượng đơn hàng, số lượng tồn kho, số lượng nhập chuyển kho, số lượng xuất chuyển kho) - Tìm kiếm đơn hàng - Tải file excel và pdf của đơn hàng. --- ## **2. Các chức năng và luồng hoạt động** ### Cấp quyền cho tài khoản sử dụng chức năng: - Tài khoản kho - Bộ phận: Quản lý kho - Chức vụ: Nhân viên kho - Chức năng: Danh sách đơn hàng tồn kho. - ### 2.1 Xem danh sách đơn hàng thành phẩm: - Đăng nhập vào tài khoản đã cấp quyền. - Tại leftbar, tìm icon chức năng `QUẢN LÍ THÀNH PHẨM` sau đó tìm và chọn vào chức năng `Danh sách đơn hàng thành phẩm`. - Khi chọn chức năng xong, hệ thống sẽ điều hướng đến trang `Danh sách đơn hàng thành phẩm` nếu tài khoản có quyền, ngược lại thống báo tài khoản không có quyền và hiện popup xác nhận di chuyển về trang chủ hoặc đăng xuất. **Ghi chú: mỗi trang chỉ hiện tối đa 20 dòng dữ liệu của đơn hàng, nếu muốn xem nhiều hơn có thể chọn xem các trang tiếp theo ở phần paginate bên dưới trang danh sách. Chỉ cần chọn số ở phần paginate, hệ thống sẽ tải trang muốn xem.**### 2.2 Tìm kiếm - Tại trang, nhấn vào nút tìm kiếm ngay cạnh tiêu đề trang để tiến hành tìm kiếm. - Popup hiện lên cho phép tìm kiếm theo: 1.Mã/Tên đơn hàng 2.Loại đơn hàng - Sau khi nhập các thông tin cần thiết, nhấn nút tìm kiếm. - Nút mũi tên góc trên bên phải để xóa nhanh tất cả dữ liệu tìm kiếm. - ### 2.3 Cập nhật số lượng tồn kho, số lượng đã xuất CK, số lượng đã nhập CK: 1. Số lượng tồn kho sẽ hiển thị theo dạng 3 dòng: Tổng SL tồn, TTĐ và TĐ nếu đơn hàng đó có tồn kho ở cả 2 chi nhánh TTĐ và TĐ. Nếu đơn hảng chỉ tồn kho ở 1 chi nhánh thì sẽ hiển thị 1 dòng bao gồm tên chi nhánh + số lượng ( TTĐ/TĐ: 3). 2. Số lượng đã xuất CK sẽ hiển thị theo dạng 3 dòng: Tổng SL xuất, TTĐ và TĐ nếu đơn hàng đó có xuất kho ở cả 2 chi nhánh TTĐ và TĐ. Nếu đơn hảng chỉ xuất chuyển kho ở 1 chi nhánh thì sẽ hiển thị 1 dòng bao gồm tên chi nhánh + số lượng ( TTĐ/TĐ: 3). 3. Số lượng đã nhập CK sẽ hiển thị theo dạng 3 dòng: Tổng SL nhập, TTĐ và TĐ nếu đơn hàng đó được nhập chuyển kho ở cả 2 chi nhánh TTĐ và TĐ. Nếu đơn hảng chỉ nhập chuyển kho ở 1 chi nhánh thì sẽ hiển thị 1 dòng bao gồm tên chi nhánh + số lượng ( TTĐ/TĐ: 3). 4. Khi tiến hành chức năng Nhập kho thành phẩm ở trang \[Lịch sử nhập chuyển kho thành phẩm\] và chức năng Xuất kho thành phẩm ở trang \[Danh sách xuất chuyển kho thành phẩm\] thì SL đã xuất CK , SL đã nhập CK và SL tồn trên trang Danh sách đơn hàng thành phẩm sẽ được cập nhật tương ứng. 5. ### 2.4 Tải excel danh sách, excel chi tiết và pdf chi tiết. 6. Tải excel danh sách: nhấn vào nút tải cạnh ô tìm kiếm để tải excel danh sách (khi di chuột vào hiện title 'Tải excel danh sách đơn hàng thành phẩm). 7. Tải excel chi tiết: nhấn vào nút tải bên trái ở từng dòng trong danh sách đơn hàng thành phẩm (khi di chuột vào hiện title 'Tải excel chi tiết danh sách đơn hàng thành phẩm). 8. Tải pdf chi tiết: nhấn vào nút tải bên phải ở từng dòng trong danh sách đơn hàng thành phẩm (khi di chuột vào hiện title 'Tải PDF chi tiết danh sách đơn hàng thành phẩm). - Khi nhấn vào tải, website sẽ hiện thông báo tải file. Để xem file đã tải tài khoản cần được cấp quyền chức năng `DS file đã tải` (cấp quyền và truy cập trang chức năng tương tự như trên). - Tại trang `DS file đã tải` file excel hoặc pdf vừa tải sẽ hiện thông tin ở dòng đầu tiên của danh sách, tại trang này hiển thị tên file, người tạo, ngày tạo, trạng thái file và nút tải xuống, nhấn vào nút tải trên dòng đó để tải và xem file. --- ## **3. API Endpoint**
Phương thứcRouteMô tả
GET`/get-list-order-inventory-warehouse`Lấy thông tin danh sách đơn hàng thành phẩm và tìm kiếm.
POST`/download-excel-list-order-inventory-warehouse`Tải file excel chi tiết và danh sách
POST`/download-pdf-list-order-inventory-warehouse`Tải file pdf chi tiết
--- ## **4. Mô tả cơ sở dữ liệu** #### **Bảng `order_stock_entries_summary`**
FieldsÝ nghĩaMô tảTên cột/bảng dữ liệu tham chiếu
`id`Khóa chínhĐịnh danh duy nhất cho mỗi bản ghi, tự động tăngKhông
`order_summary_id`ID đơn hàngID của đơn hàng tham chiếu đến bảng order\_info\_summary`id` bảng `order_info_summary`
`order_type_id`ID loại đơn hàngID của loại đơn hàng được lấy từ bảng order\_info\_summary khi lưu`order_type_id` bảng `order_info_summary`
`order_code`Mã đơn hàngMã đơn hàng được lấy từ bảng order\_info\_summary tương ứng với order\_summary\_id`code` (bảng `order_info_summary`)
`order_name`Tên của đơn hàngTên đơn hàng được lấy từ bảng order\_info\_summary tương ứng với order\_summary\_id`name` (bảng `order_info_summary`)
`order_type`Loại đơn hàngLoại đơn hàng được lấy từ bảng order\_info\_summary tương ứng với order\_summary\_id`order_type` (bảng `order_info_summary`)
`order_quantity`Số lượng đơn hàngSố lượng đơn hàng được lấy từ bảng order\_info\_summary tương ứng với order\_summary\_id`quantity` (bảng `order_info_summary`)
`product_storage_location_id`ID khoID kho của đơn hàng được tham chiếu đến bảng product\_storage\_locations`id` (bảng `product_storage_locations`)
`warehouse_location_name`Tên kiệnTên kiện của đơn hàng được tham chiếu đến bảng product\_storage\_location\_infos`name` (bảng `product_storage_location_infos`)
`total_import_quantity`Tổng nhập chuyển khoTổng số lượng nhập chuyển kho của đơn hàng theo kiệnKhông
`total_export_quantity`Tổng xuất chuyển khoTổng số lượng xuất chuyển kho của đơn hàng theo kiệnKhông
`company_branch_id`ID chi nhánhID chi nhánh của kiện chứa đơn hàng được tham chiếu đến bảng company\_branchs`id` (bảng `company_branchs`)
`created_at`Thời gian tạoThời gian bản ghi được tạo, định dạng timestamp, có thể để trốngKhông
`updated_at`Thời gian cập nhậtThời gian bản ghi được cập nhật, định dạng timestamp, có thể để trốngKhông
`deleted_at`Thời gian xóa mềmThời gian bản ghi bị xóa mềm, định dạng timestamp, có thể để trốngKhông
### Mô tả tổng quan - **Bảng `order_stock_entries_summary`**: Lưu trữ thông tin của đơn hàng có trong kho thành phẩm với các thông tin như ID đơn hàng, Mã đơn hàng, Tên đơn hàng, Số lượng đơn hàng, Vị trí kiện của đơn hàng, Tổng số lượng nhập chuyển kho và Tổng số lượng xuất kho của đơn hàng.Lần đầu tiên chạy job `api/post/run/job/save-order-stock-entries-summary` để lấy toàn bộ dữ liệu từ bảng `product_storage_stages` cập nhật dữ liệu sang bảng này. Các lần sau khi nhập/xuất thành phẩm thì sẽ tự động cập nhật lại các cột số lượng trong bảng --- ## **5. Mô tả giao diện - DB**
**Fiels****Cột DB****Bảng DB****Ghi chú**
**Mã/Tên đơn hàng**`order_code`/`order_name`summary.order\_stock\_entries\_summaryMã/Tên của đơn hàng
**Loại đơn hàng**`order_type_id``summary.order_stock_entries_summary`Nếu `order_type_id` là 3 thì hiển thị ĐHKH, nếu `order_type_id là 1 và `order\_type`là`sa`thì hiển thị ĐHSA,nếu`order\_type\_id là 1 và `order_type` là `normal` thì hiển thị ĐHM
**SL đơn hàng**`order_quantity``summary.order_stock_entries_summary`
**SL Tồn**`inventory_quantity``summary.order_stock_entries_summary`
**SL đã xuất CK**`total_export_quantity``summary.order_stock_entries_summary`
**SL đã nhập CK**total\_import\_quantity`summary.order_stock_entries_summary`
--- ### Ref task: #1456 - Chi # TMS-1428 [U][QA][Thêm kiểm tra cho các trang danh sách: DHM/DHSA/DHDT/DHKH] # **Tài liệu mô tả chức năng: Duyệt hoàn tất, Kiểm tra, tải excel kiểm tra** ## **1. Mô tả tổng quan** - Chức năng Duyệt hoàn tất: cho phép người dùng duyệt hoàn tất đơn hàng - Chức năng Kiểm tra: cho phép người dùng kiểm tra và ghi nhận lại số lượng lỗi theo lô của từng đơn hàng - Chức năng Tải excel kiểm tra: cho phép người dùng xem nội dung đã Kiểm tra của đơn hàng dưới dạng file excel - Cả 3 chức năng trên đều được hiển thị ở các trang Danh sách đơn hàng bán bao gồm: \[Danh sách đơn hàng SA\],\[Danh sách đơn hàng múi\],\[Danh sách đơn hàng dự trữ\],\[Danh sách đơn hàng khách hàng\] --- ## **2. Các chức năng và luồng hoạt động** ### Cấp quyền cho tài khoản sử dụng chức năng: - Tải khoản: Bất kể tài khoản nào đang có quyền Xem, chỉnh sửa cho các trang \[Danh sách đơn hàng SA\],\[Danh sách đơn hàng múi\],\[Danh sách đơn hàng dự tr\],\[Danh sách đơn hàng khách hàng\] - Bộ phận: Marketing, QA - Chức vụ: Nhân viên marketing/ Trưởng phòng Marketing - ### 2.1 Chức năng duyệt hoàn tất: - ##### Phân quyền: Chức năng này sẽ được mở disable khi thỏa các điều kiện sau: - Nếu là bộ phận Marketing : Chỉ mở disable cho đơn hàng do người dùng tạo, có quyền edit trên trang, chưa từng được duyệt hoàn tất, đơn hàng đã được tạo Kiểm tra và Tổng số lượng nhập kho thành phẩm/ Tổng số lượng đơn hàng lớn hơn hoặc bằng 80% - Nếu là bộ phận QA: Mở disable cho tất cả đơn hàng có đủ các điều kiện : có quyền edit trên trang, chưa từng được duyệt hoàn tất, đơn hàng đã được tạo Kiểm tra và Tổng số lượng nhập kho thành phẩm/ Tổng số lượng đơn hàng lớn hơn hoặc bằng 80% - #### Hoạt động của chức năng: - Khi click vào button Duyệt hoàn tất đơn hàng sẽ được tô màu đỏ cam nếu Tổng số lỗi ở chức năng Kiểm tra > 0, còn tổng số lỗi là 0 thì không tô màu - Khi duyệt hoàn tất thành công thì vẫn có thể tiếp tục Cập nhật/ Thêm mới Kiểm tra cho đơn hàng - #### API của chức năng:
Phương thứcRouteMô tả
POST`/change-approval-complete-status-reserve-order`Duyệt hoàn tất trang Danh sách đơn hàng dự trữ
POST`/change-approval-complete-status-customer-order`Duyệt hoàn tất trang Danh sách đơn hàng khách hàng
POST`/change-approval-complete-status`Duyệt hoàn tất trang Danh sách đơn hàng Múi/SA
- #### Cơ sở dữ liệu (DB): - ##### **Bảng `order_detail`**
FieldsÝ nghĩaMô tả
is\_approval\_completeĐánh dấu đơn hàng đã được duyệt hoàn tất hay chưaGiá trị defaul của cột này là false(0), khi được duyệt hoàn tất thì chuyển sang true(1)
- ##### **Bảng `reserve_orders`**
FieldsÝ nghĩaMô tả
is\_approval\_completeĐánh dấu đơn hàng đã được duyệt hoàn tất hay chưaGiá trị defaul của cột này là false(0), khi được duyệt hoàn tất thì chuyển sang true(1)
- ##### **Bảng `customer_orders`**
FieldsÝ nghĩaMô tả
is\_approval\_completeĐánh dấu đơn hàng đã được duyệt hoàn tất hay chưaGiá trị defaul của cột này là false(0), khi được duyệt hoàn tất thì chuyển sang true(1)
- ### 2.2 Chức năng Tạo/Cập nhật Kiểm tra cho đơn hàng: - ##### Phân quyền: Chức năng này sẽ được mở disable khi thỏa các điều kiện sau: - Nếu là bộ phận Marketing : Chỉ mở disable cho đơn hàng do người dùng tạo, có quyền edit trên trang,và Tổng số lượng nhập kho thành phẩm/ Tổng số lượng đơn hàng lớn hơn hoặc bằng 80% - Nếu là bộ phận QA: Mở disable cho tất cả đơn hàng có đủ các điều kiện : có quyền edit trên trang, và Tổng số lượng nhập kho thành phẩm/ Tổng số lượng đơn hàng lớn hơn hoặc bằng 80% - #### Hoạt động của chức năng: - Khi click vào button Kiểm tra sẽ hiển thị component Kiểm tra với các thông tin: Tên/Mã đơn hàng ( độ dài của dữ liệu nào dài hơn thì hiển thị dữ liệu đó), button Thêm lô kiểm tra,button Xóa từng lô trên mỗi dòng dữ liệu ( chỉ hiển thị khi số lô > 1) và button Lưu/Cập nhật và button xóa ( chỉ hiển thị khi ở trạng thái Cập nhật) - Validate: Các input Số lượng kiểm tra của đơn hàng, Số lô, Số lỗi ( nặng,nhẹ,nghiêm trọng) là các input bắt buộc phải nhập khi Tạo mới/Cập nhật dữ liệu.Ngoài ra Số lượng kiểm tra của đơn hàng phải lớn hơn 0, tổng số lỗi nhập vào ( tổng lỗi nặng,nhẹ,nghiêm trọng trên mỗi dòng dữ liệu) phải bé hơn hoặc bằng Số lượng kiểm tra. - Click vào button Lưu/Cập nhật dữ liệu Kiểm tra cho đơn hàng sẽ được lưu mới - Nếu trước đó đã Tạo kiểm tra cho đơn hàng -> Khi click mở lại chức năng Kiểm tra component sẽ fill ra toàn bộ giá trị đã được lưu trước đó để cập nhật . Khi ở trạng thái cập nhật thì có thể chọn xóa phiếu kiểm tra nhanh bằng cách click vào button Xóa ở phần footer của modal để xóa toàn bộ Kiểm tra - #### API của chức năng:
Phương thứcRouteMô tả
GET`/get-order-inspection-summary`Lấy dữ liệu của phiếu kiểm tra nếu đã được tạo trước đó
POST`/save-order-inspection-summary`Lưu/Cập nhật dữ liệu phiếu kiểm tra
POST`/delete-order-inspection-summary`Xóa phiếu Kiểm tra
- #### Cơ sở dữ liệu (DB): - ##### **Bảng `order_inspection_summary`**
FieldsÝ nghĩaMô tảTên cột/bảng dữ liệu tham chiếu
unique\_idPhân biệt các phiếu kiểm traMỗi lần mở modal Kiểm tra và thực hiện thao tác lưu/cập nhật sẽ có 1 unique\_id riêng biệt cho phiếu đó
order\_summary\_idID của đơn hàngID của đơn hàng trong bảng `order_info_summary`Từ `order_summary_id` lấy ra `code` và `name` của đơn hàng để map với field `orderCode` và `orderName` trên giao diện
quantitySố lượng kiểm tra của đơn hàngLưu số lượng kiểm tra của đơn hàng trong từng lô
batchSố lôLưu số lô kiểm tra`lotNumber`
errors\_minorSố lỗi nhẹLưu số lỗi nhẹ của đơn hàng trong từng lô`quantityMinor`
errors\_majorSố lỗi nặngLưu số lỗi nặng của đơn hàng trong từng lô`quantitySerious`
errors\_criticalSố lỗi nghiêm trọngLưu số lỗi nghiêm trọng của đơn hàng trong từng lô`quantityCritical`
noteGhi chúLưu ghi chú trong từng lô kiểm tra`note`
user\_idNgười lưuID của người lưu/ cập nhật phiếu
created\_atNgày tạoNgày tạo phiếu kiểm tra
updated\_atNgày cập nhậtNgày cập nhật phiếu kiểm tra
- ##### **Bảng `order_inspection_history`**
FieldsÝ nghĩaMô tảTên cột/bảng dữ liệu tham chiếu
unique\_idPhân biệt các phiếu kiểm traMỗi lần mở modal Kiểm tra và thực hiện thao tác lưu/cập nhật sẽ có 1 unique\_id riêng biệt cho phiếu đó
order\_inspection\_idID phiếu kiểm traLưu ID của phiếu kiểm tra
order\_summary\_idID của đơn hàngID của đơn hàng trong bảng `order_info_summary`Từ `order_summary_id` lấy ra `code` và `name` của đơn hàng để map với field `orderCode` và `orderName` trên giao diện
quantitySố lượng kiểm tra của đơn hàngLưu số lượng kiểm tra của đơn hàng trong từng lô
batchSố lôLưu số lô kiểm tra`lotNumber`
errors\_minorSố lỗi nhẹLưu số lỗi nhẹ của đơn hàng trong từng lô`quantityMinor`
errors\_majorSố lỗi nặngLưu số lỗi nặng của đơn hàng trong từng lô`quantitySerious`
errors\_criticalSố lỗi nghiêm trọngLưu số lỗi nghiêm trọng của đơn hàng trong từng lô`quantityCritical`
noteGhi chúLưu ghi chú trong từng lô kiểm tra`note`
user\_idNgười lưuID của người lưu/ cập nhật phiếu
created\_atNgày tạoNgày tạo phiếu kiểm tra
updated\_atNgày cập nhậtNgày cập nhật phiếu kiểm tra
deleted\_atNgày xóaNgày xóa phiếu kiểm tra
- ### 2.3 Chức năng Tải file excel kiểm tra: - ##### Phân quyền: Chức năng này sẽ được mở disable khi thỏa các điều kiện sau: - Nếu là bộ phận Marketing : Chỉ mở disable cho đơn hàng do người dùng tạo, có quyền edit trên trang,và Tổng số lượng nhập kho thành phẩm/ Tổng số lượng đơn hàng lớn hơn hoặc bằng 80% - Nếu là bộ phận QA: Mở disable cho tất cả đơn hàng có đủ các điều kiện : có quyền edit trên trang, và Tổng số lượng nhập kho thành phẩm/ Tổng số lượng đơn hàng lớn hơn hoặc bằng 80% - #### Hoạt động của chức năng: - Khi click vào button Tải file excel kiểm tra nếu đơn hàng đã được Tạo/Cập nhật phiếu kiểm tra thì sẽ tải thành công file excel , ngược lại sẽ hiển thị warning "Vui lòng kiểm tra trước khi tải file". - File excel tải về hiển thị các thông tin giống tương tự phiếu Kiểm tra trong chức năng Kiểm tra - #### API của chức năng:
Phương thứcRouteMô tả
POST`/export-order-detail-check-excel`Tải file excel của phiếu kiểm tra trong từng đơn hàng
- #### Cơ sở dữ liệu (DB): - Dữ liệu trong file được lấy ra từ bảng lưu phiếu kiểm tra `order_inspection_summary` - ### 2.4 Tìm kiếm theo trạng thái Đã duyệt hoàn tất và Chưa duyệt hoàn tất trên trang: - Trên các trang \[Danh sách đơn hàng múi\], \[Danh sách đơn hàng SA\], \[Danh sách đơn hàng dự trữ\], \[Danh sách đơn hàng khách hàng\] ở chức năng \[Tìm kiếm\] sẽ có thêm field tìm kiếm theo trạng thái : \[Tất cả\], \[Đã duyệt hoàn tất\], \[Chưa duyệt hoàn tất\] - Khi tìm kiếm theo các trạng thái này thì các chức năng Tải file excel danh sách cũng sẽ tải được theo tiêu chí tìm kiếm này --- ## **3. Mô tả tổng quan về database** - Khi lưu dữ liệu của phiếu kiểm tra thì sẽ lưu vào 2 bảng:`order_inspection_summary` và `order_inspection_history`. - Bảng `order_inspection_summary`: Đây là bảng chính lưu dữ liệu của phiếu và bảng này không dùng soft delete, khi cập nhật dữ liệu sẽ force delete dữ liệu của phiếu cũ để lưu dữ liệu cập nhật mới - Bảng `order_inspection_history`: Đây là bảng theo dõi quá trình tạp và cập nhật dữ liệu của bảng `order_inspection_summary`, đối với những dữ liệu bị force deleted trong bảng `order_inspection_summary` thì bảng `order_inspection_history` sẽ ghi nhận lại dưới dạng soft delete --- - ### Ref task: #1428 - Chi