v TÓM TẮT Đề tài "XÂY DỰNG WEBSITE THƯƠNG MẠI ĐIỆN TỬ VÀ HỆ THỐNG BÁN HÀNG POS" tập trung vào nghiên cứu để tích hợp hệ thống POS vào một trang web bán hàng trực tuyến với mục tiêu cung
TỔNG QUAN
GIỚI THIỆU
Thương mại điện tử đang phát triển mạnh mẽ trong nền kinh tế toàn cầu, giúp doanh nghiệp tiếp cận thị trường trực tuyến và tăng trưởng doanh số bán hàng Các website hiện nay cho phép tiếp cận lượng lớn khách hàng mà không bị giới hạn về địa lý, mở rộng quy mô thị trường Nhiều trang web được xây dựng phục vụ mục đích riêng, như "Xây dựng website bán cây cảnh" sử dụng PostgreSQL mà không có xác thực và phân quyền, hay "Xây dựng website quản lý số điện thoại cho công ty viễn thông" áp dụng xác thực cơ bản và NoSQL Dù cả hai đề tài áp dụng kỹ thuật cơ sở dữ liệu, vẫn còn thiếu sót trong bảo mật thông tin người dùng, như không mã hóa mật khẩu và chưa áp dụng công nghệ bảo mật mới như xác thực bằng token và phân quyền người dùng.
Nhóm chúng tôi đã quyết định chọn đề tài này dựa trên các lý do liên quan đến việc áp dụng kỹ thuật bảo mật và các phương pháp hiện đại trong thao tác dữ liệu.
Xây dựng website thương mại điện tử kết hợp với hệ thống bán hàng POS nhằm nghiên cứu và thực hiện, kế thừa các ưu điểm nổi bật của hai hệ thống này Đồng thời, đề tài cũng khắc phục những hạn chế hiện có bằng cách áp dụng thuật toán mã hóa mật khẩu người dùng và sử dụng kỹ thuật JWT để thực hiện xác thực và phân quyền.
MỤC TIÊU ĐỀ TÀI
Mục tiêu của đề tài là xây dựng một trang web bán hàng kết hợp với hệ thống POS, cung cấp đầy đủ các chức năng và tính năng cần thiết.
- Đăng nhập và đăng ký tài khoản mới
- Xem chi tiết các sản phẩm
- Mua hàng trực tuyến trên web
- Xem chi tiết giỏ hàng và các đơn hàng đã mua
- Các tính năng liên quan đến cập nhật và xem chi tiết thông tin người dùng
- Hệ thống POS cho người quản lý cửa hàng: xem chi tiết các đơn hàng, cập nhật, xóa,…
CÔNG NGHỆ SỬ DỤNG
Đề tài chủ yếu sử dụng ExpressJS một framework được xây dựng dựa trên NodeJS để lập trình Backend và sử dụng thư viện ReactJS để lập trình Frontend
Cơ sở dữ liệu được sử dụng là MongoDB Ngoài ra còn sử dụng NodeMailer, Cloudinary và mô hình MVC để thực hiện đề tài.
GIỚI HẠN ĐỀ TÀI
Sản phẩm hiện tại chỉ tương thích với màn hình laptop và iPhone, nhưng chưa hỗ trợ các kích thước màn hình khác.
Chỉ có thể thực hiện các biện pháp bảo mật cơ bản như xác thực và phân quyền người dùng, trong khi chưa áp dụng được các kỹ thuật bảo mật nâng cao mà framework hỗ trợ.
PHƯƠNG PHÁP NGHIÊN CỨU
Phương pháp tổng hợp tài liệu lý thuyết
Phương pháp thử nghiệm thực tế.
BỐ CỤC QUYỂN BÁO CÁO
Tình hình nghiên cứu, mục tiêu, công nghệ áp dụng cho đề tài, những giới hạn và phương pháp nghiên cứu mà nhóm tác giả sử dụng
CƠ SỞ LÝ THUYẾT
PHẦN MỀM SỬ DỤNG
Nhóm tác giả sử dụng ba phần mềm chính để hỗ trợ cho việc xây dựng và hoàn thiện đề tài:
Phần mềm IntelliJ IDEA của JetBrains là một sản phẩm nổi bật với nhiều giải thưởng danh giá, được thiết kế nhằm nâng cao hiệu suất làm việc cho các nhà phát triển Nó cung cấp trình soạn thảo thông minh, bộ phân tích mã mạnh mẽ và tích hợp nhiều tính năng mới với các khung làm việc và công nghệ khác nhau, trở thành sự lựa chọn hàng đầu cho các lập trình viên.
Phần mềm VS Code là một công cụ phổ biến giúp lập trình viên soạn thảo mã code nhanh chóng và hiệu quả Nó hoạt động mượt mà trên nhiều nền tảng và thiết bị với cấu hình đa dạng.
MongoDB Compass mang đến tính năng đồ họa mạnh mẽ, cho phép người dùng tương tác với cơ sở dữ liệu mà không cần sử dụng ngôn ngữ truy vấn Phần mềm này giúp hiển thị cấu trúc và phân tích các bản ghi một cách nhanh chóng và hiệu quả Là một hệ quản trị cơ sở dữ liệu NoSQL, MongoDB cho phép lưu trữ nhiều loại cấu trúc dữ liệu khác nhau mà không yêu cầu ràng buộc giữa các bảng.
LÝ THUYẾT BACKEND
Mô hình MVC (Model-View-Controller) là một phương pháp thiết kế phổ biến cho các chức năng Backend, bao gồm ba thành phần chính: Model, View và Controller Mỗi thành phần đảm nhận những nhiệm vụ riêng biệt, hoạt động độc lập nhưng vẫn có sự kết nối chặt chẽ giữa chúng, tạo nên một hệ thống hiệu quả và dễ bảo trì.
- Khối model: khối này thực hiện các công việc liên quan đến database
- Khối view: khối này có chức năng hiển thị dữ liệu và cho phép người dùng có thể thao tác trên UI để gởi đi các yêu cầu
- Khối controller: khối này thực hiện chức năng điều phối các yêu cầu nhận được từ phía máy khách và tương tác với khối model để lấy dữ liệu.[6]
Luồng hoạt động trong của kiến trúc MVC: [7]
Hình 2.2: Luồng hoạt động của kiến trúc MVC.[7]
Khi máy khách gửi yêu cầu đến Server, khối điều phối sẽ chặn yêu cầu đó để xác định xem nó là một sự kiện hay một URL request.
Tiếp đến khối điều phối sẽ tiếp nhận đầu vào của user rồi giao tiếp với khối model để lấy dữ liệu
Khối model tháo tác vưới database để lấy dữu liệu và trả lại cho khối điều phối để trả lại dữ liệu mà máy khách yêu cầu
Hashing là kỹ thuật băm mật khẩu, biến đổi mật khẩu thành chuỗi không thể giải mã Hệ thống mã hóa thông tin người dùng và so sánh với dữ liệu lưu trữ trong database để xác thực.
Việc chỉ sử dụng hashing để băm mật khẩu có thể không đủ độ bảo mật, vì vẫn có thể bị tấn công bởi các phương pháp như tấn công rainbow table và brute force Để nâng cao độ bảo mật thông tin, ngoài kỹ thuật hashing, cần áp dụng thêm salting và stretching.
Salting là một kỹ thuật bảo mật trong đó mật khẩu được kết hợp với một chuỗi dữ liệu trước khi băm, giúp tăng độ dài và độ phức tạp của mật khẩu Kỹ thuật này không chỉ bảo vệ mật khẩu của người dùng mà còn ngăn chặn hiệu quả các cuộc tấn công bằng bảng rainbow.
Để tăng cường bảo mật, mỗi dữ liệu đầu vào sẽ được thêm một dãy salting ngẫu nhiên và không trùng nhau, giúp đảm bảo rằng hai người dùng có cùng một mật khẩu vẫn sẽ tạo ra kết quả băm khác nhau Để chống lại các cuộc tấn công brute force, kỹ thuật stretching được áp dụng, nâng cao độ phức tạp của thuật toán bằng cách lặp lại quá trình băm hàng nghìn lần.
Bcrypt được đề xuất bởi Niels Provos và David Mazières Thuật toán Bcrypt là sự kết hợp của hashing, stretching và salting
Thuật toán Bcrypt được thiết kế với tốc độ chậm hơn so với các thuật toán băm thông thường, giúp tăng cường khả năng chống lại các cuộc tấn công brute-force và rainbow table Bcrypt cung cấp tính linh hoạt trong việc cấu hình hash, nhưng do quá trình băm chậm, nó yêu cầu nhiều tài nguyên hơn, điều này có thể ảnh hưởng đến hiệu suất của hệ thống trong những môi trường có nhu cầu xử lý lớn.
JWT (JSON Web Token), một token JWT gồm ba phần: header, payload và signature, các thành phần này được phân chia thông qua dấu “.” [9]
Hình 2.3: Ba phần chính của JWT.[9]
Header gồm 2 thành phần chính: thuật toán và kiểu token [10]
Header của JWT sẽ có dạng như sau.[11]
} Đoạn mã sẽ được encode để làm thành phần đầu tiên của mã JWT
Payload trong JWT chứa các claims, chỉ định quyền truy cập của các tác nhân đến tài nguyên hệ thống Mỗi claim có dạng Key – Value Sau đó, payload được mã hóa bằng Base64Url, tạo thành phần thứ hai của JSON Web Token.
Chữ ký trong JWT là phần quan trọng để xác thực danh tính người dùng Để tạo chữ ký, cần mã hóa phần header và payload cùng với một khóa bí mật.
Hình 2.4: Cách thực hoạt động của JWT [11]
Cách thức mà JWT xác thực và cấp quyền để truy cập:
- Ứng dụng sẽ gửi yêu cầu xác thực và phân quyền đến server
- Khi việc xác thực thành công thì máy chủ sẽ trả lại access token cho phía máy khách
- Máy khách sẽ sử dụng access token để truy cập vào tài nguyên của hệ thống chẳng hạn như API
JWT thường được sử dụng để xác thực và phân quyền người dùng, đảm bảo rằng họ có quyền truy cập vào các tài nguyên nhất định Việc gửi kèm mã xác thực giúp backend kiểm tra quyền truy cập đến các URL, dịch vụ và tài nguyên mà người dùng có thể sử dụng.
Sử dụng thuật toán Bcrypt để băm mật khẩu trước khi lưu trữ, kết hợp với JWT, giúp tăng cường bảo mật cho trang web và giảm thiểu nguy cơ tấn công vào cookie hoặc session, từ đó bảo vệ thông tin người dùng hiệu quả hơn.
NoSQL, viết tắt của Non-Relational SQL, là một hệ cơ sở dữ liệu phát triển dựa trên ngôn ngữ JavaScript, cung cấp nhiều cấu trúc lưu trữ khác nhau Hiện nay, định dạng lưu trữ phổ biến nhất trong NoSQL là JSON.
NoSQL được coi là giải pháp hiệu quả cho hệ cơ sở dữ liệu quan hệ nhờ vào tốc độ truy vấn dữ liệu vượt trội Với tính năng động cao và khả năng bỏ qua các ràng buộc phức tạp, NoSQL đã trở thành lựa chọn phổ biến của nhiều tập đoàn công nghệ lớn như Google và Facebook.
MongoDB là một hệ cơ sở dữ liệu NoSQL nổi bật, được thiết kế với nhiều Collection để hỗ trợ lưu trữ dữ liệu hiệu quả Nhờ vào sự linh hoạt trong cấu trúc lưu trữ, MongoDB cho phép người dùng lưu trữ dữ liệu dưới dạng JSON, đây là định dạng phổ biến nhất hiện nay.
Nhóm thực hiện đề tài thiết kế sẽ tuân thủ ba nguyên tắc cơ bản trong việc xây dựng cơ sở dữ liệu: tối ưu hóa cấu trúc bảng, sử dụng chỉ mục và tích hợp các cơ sở dữ liệu Tối ưu hóa cấu trúc bảng giúp việc lấy và lưu trữ dữ liệu trở nên dễ dàng hơn, trong khi việc sử dụng chỉ mục cải thiện tốc độ truy xuất và tăng hiệu suất tải trang web Hơn nữa, tích hợp các cơ sở dữ liệu khác nhau giảm thiểu số lần truy cập, giúp trang web tải thông tin một cách mượt mà và nhanh chóng hơn.
THIẾT KẾ VÀ THỰC HIỆN
THIẾT KẾ HỆ THỐNG
Để tối ưu hóa hoạt động của một trang web, cần tuân thủ sơ đồ khối hệ thống như trong hình 3.1, bao gồm bốn thành phần chính.
- Khối Frontend: khối này thực hiện các nhiệm vụ liên quan đến UI, gửi đi các yêu cầu và hiển thị các thông tin cần thiết lên UI
Khối Middleware đóng vai trò quan trọng trong việc xác thực và phân quyền cho hệ thống Tất cả các yêu cầu từ phía Frontend đều phải trải qua quá trình xác thực tại khối Middleware; chỉ khi xác thực thành công, yêu cầu mới được chuyển tiếp đến khối Backend Nếu không, yêu cầu sẽ bị từ chối.
Khối Backend chịu trách nhiệm tiếp nhận yêu cầu từ khối Middleware sau khi đã xác thực, thực hiện các xử lý logic và tương tác trực tiếp với khối Database để xử lý dữ liệu Cuối cùng, khối này sẽ trả dữ liệu về cho khối Frontend.
- Khối Database: khối này đảm nhận việc lưu dữ liệu và trả lại dữ liệu khi khối Backend cần
Hình 3.2: Lưu đồ giải thuật của toàn hệ thống
Khi người dùng nhập thông tin đăng nhập đúng, hệ thống sẽ cấp phát một Token chứa thông tin xác thực và phân quyền Sau khi Token được xác thực, người dùng sẽ được phân quyền tương ứng; nếu là user, họ chỉ có quyền truy cập vào tài nguyên dành cho user, trong khi admin có thể truy cập tất cả tài nguyên của hệ thống Khi người dùng nhấn nút đăng xuất, Token sẽ bị xóa khỏi máy khách, ngăn không cho truy cập vào các tài nguyên của hệ thống.
DATABASE
Nhóm đã xây dựng cơ sở dữ liệu cho website với các bảng lưu trữ dữ liệu, được thiết kế với các trường và kiểu dữ liệu cụ thể như mô tả trong các bảng dưới đây.
Bảng 3.1: Lưu thông tin sản phẩm
STT Tên cột Kiểu dữ liệu Null Chú thích
1 id string No Mã thể loại
2 title string No Tiêu đề
3 description string No Mô tả sản phẩm
4 productImgId string No Mã thông tin ảnh của sản phẩm
5 createdAt date No Ngày tạo
6 price number No Giá sản phẩm
7 quantity number No Số lượng
8 categoryId string No Mã loại hàng
Bảng 3.2: Lưu tài khoản của khách hàng
STT Tên cột Kiểu dữ liệu Null Chú thích
1 id string No Mã định danh khách hàng
2 name string No Họ và tên
3 email string No Địa chỉ email
4 password string No Mật khẩu
5 role string No Quyền để truy cập
6 createdAt date No Ngày tạo
Bảng 3.3: Thông tin đơn hàng
STT Tên cột Kiểu dữ liệu Null Chú thích
1 id string No Mã đơn hàng
2 userId string No Mã khách hàng
3 orderDetailId string No Mã chi tiết đơn hàng
4 totalPrice int No Tổng giá của đơn hàng
5 createdAt date No Ngày tạo
Bảng 3.4: Thông tin loại hàng hoá
STT Tên cột Kiểu dữ liệu Null Chú thích
1 id string No Mã thể loại
2 name string No Tên thể loại
3 createdAt date No Ngày tạo
Bảng 3.5: Thông tin ảnh của sản phẩm
STT Tên cột Kiểu dữ liệu Null Chú thích
1 id string No Mã thể loại
2 productId string No Mã sản phẩm
3 thumnail string No Ảnh thumnail của sản phẩm
4 banner string No Ảnh banner của sản phẩm
5 photos string No Ảnh của phần mô tả
6 createdAt date No Ngày tạo
Bảng 3.6: Thông chi tiết đơn hàng
STT Tên cột Kiểu dữ liệu Null Chú thích
1 id string No Mã thể loại
2 productId string No Mã sản phẩm
3 orderId string No Mã đơn hàng
4 quantity int No Số lượng sản phẩm của đơn hàng
5 createdAt date No Ngày tạo
Hình 3.3: Sơ đồ mối quan hệ thực thể
FRONTEND
Thiết kế Frontend đóng vai trò quan trọng trong quá trình phát triển trang web, bao gồm việc tạo ra các giao diện đa dạng nhằm đáp ứng nhu cầu của người dùng và hệ thống POS Các giao diện chính trong dự án này sẽ được phát triển để tối ưu hóa trải nghiệm người dùng.
Giao diện đăng nhập: cung các hộp thoại để cho phép nhập các thông tin cần thiết để truy cập vào hệ thống cửa hàng
Giao diện đăng ký tài khoản mới: trang này sẽ chứa một biểu mẫu đăng ký để đăng ký thành viên mới
Trang chủ là nơi người dùng có thể tìm thấy thông tin quan trọng như sản phẩm mới và các liên kết nhanh đến các phần khác của website.
Trang giỏ hàng cung cấp cho người dùng thông tin về các sản phẩm đã được thêm vào, cho phép điều chỉnh số lượng hoặc xóa sản phẩm Ngoài ra, tổng giá và nút thanh toán cũng được hiển thị rõ ràng trên giao diện này.
Trang xem chi tiết sản phẩm: hiển thị những thông tin như là hình ảnh, giá cả,… và các tùy chọn mà người dùng có thể chọn
Giao diện hệ thống POS: dành cho người quản trị, giao diện này sẽ cung cấp quyền truy cập, tìm kiếm, … và các tính năng quản trị khác
Trang xem thông tin cá nhân: hiển thị thông tin cá nhân của khách hàng và nhiều tùy chọn khác
Trang xem chi tiết đơn hàng cho phép người dùng đăng nhập và theo dõi các giao dịch đã thực hiện trên cửa hàng Giao diện này hiển thị danh sách các đơn hàng đã đặt, kèm theo thông tin chi tiết về từng đơn hàng như sản phẩm và đơn giá.
Mỗi giao diện sẽ được thiết kế dễ sử dụng và phù hợp với nhu cầu của khách hàng, nhằm tạo ra trải nghiệm tuyệt vời cho người dùng và quản trị viên hệ thống.
KẾT QUẢ THỰC HIỆN
DATABASE
Hình 4.1: Diagram của đề tài
Các bảng trong cơ sở dữ liệu lưu trữ thông tin quan trọng như đơn hàng và khách hàng, với các mối quan hệ ràng buộc qua khóa ngoại và khóa chính Điều này đảm bảo rằng dữ liệu được tổ chức một cách hợp lý, an toàn và logic.
Nhóm sử dụng NoSQL với khả năng hỗ trợ đa dạng cấu trúc lưu trữ giúp giảm thiểu việc tạo nhiều bảng, đồng thời vẫn đảm bảo tính nhất quán của dữ liệu.
KẾT QUẢ THỰC HIỆN PHẦN FRONTEND
Hình 4.2 là giao diện đăng nhập bao gồm hai hộp thoại và một nút nhấn
Người dùng có thể đăng nhập bằng cách nhập địa chỉ email vào hộp thoại đầu tiên và mật khẩu vào hộp thoại thứ hai, sau đó nhấn nút "Sign in".
Nếu khách hàng chưa có tài khoản ở cửa hàng thì nhấn vào đường dẫn đăng ký và sẽ hiện ra giao diện như ảnh 4.3
Hình 4.3: Trang đăng ký thành viên mới
Trong hình 4.3, có ba ô nhập liệu cho khách hàng để điền thông tin đăng nhập Sau khi hoàn tất việc nhập thông tin, người dùng chỉ cần nhấn nút "Register" để đăng ký làm thành viên mới.
Trang chủ của cửa hàng có giao diện như hình 4.4 Ở giao diện này sẽ có các chức năng như: đăng xuất, xem đơn hàng đã mua,…
Khi người dùng chọn tùy chọn xem sản phẩm theo từng loại, giao diện sẽ hiển thị các sản phẩm thuộc loại laptop như hình 4.5.
Hình 4.5 Trang sản phẩm với loại hàng là Laptop
Hình 4.6 là giao diện toàn bộ các sản phẩm với loại sản phẩm là tablet
Hình 4.6: Trang sản phẩm với loại hàng là Tablet
Hình 4.6 là giao diện toàn bộ các sản phẩm với loại sản phẩm là smartphone
Hình 4.7: Trang sản phẩm với loại hàng là Smartphone
Trong giao diện sản phẩm, thông tin đầy đủ bao gồm tên, giá, hình ảnh và nút thêm sản phẩm được hiển thị rõ ràng Để hỗ trợ khách hàng trong việc liên hệ khi có thắc mắc hoặc khiếu nại về chất lượng sản phẩm, trang chủ cung cấp phần thông tin liên hệ, bao gồm email và số điện thoại của cửa hàng.
Để thuận tiện cho khách hàng trong việc quản lý sản phẩm trong giỏ hàng, bao gồm thông tin và số lượng, giao diện hình 4.9 đã được thiết kế để đáp ứng đầy đủ các tiện ích cần thiết.
Hình 4.9: Thông báo khi nhấn nút thêm sản phẩm
Khi người dùng nhấn vào biểu tượng ‘+’ để tăng số lượng sản phẩm, một thông báo sẽ hiển thị, giúp họ nắm rõ thông tin về các sản phẩm trong giỏ hàng của mình.
Một giao diện quản lý giỏ hàng giúp cho khách hàng có thể giám sát được các sản phẩm của đơn hàng như hình 4.10
Giao diện hiển thị thông tin sản phẩm đã chọn, bao gồm giá cả và cột số lượng để người dùng điều chỉnh theo nhu cầu Ngoài ra, có các hộp thoại để nhập thông tin vận chuyển như tên người nhận, số điện thoại và địa chỉ Khách hàng có thể nhấn nút "Buy" để hoàn tất giao dịch hoặc chọn "Delete all items" để xóa toàn bộ sản phẩm đã chọn.
Xem chi tiết sản phẩm cung cấp cho khách hàng cái nhìn tổng quát và thông tin chi tiết về sản phẩm mà họ dự định mua Giao diện hình 4.11 hiển thị trang xem chi tiết sản phẩm, nơi người dùng sẽ nhận được thông báo với các thông tin cụ thể khi chọn bất kỳ sản phẩm nào.
Hình 4.11: Chi tiết về sản phẩm
Để xem thông tin chi tiết về sản phẩm, người dùng chỉ cần nhấn nút "xem chi tiết", sau đó giao diện hiển thị thông tin sản phẩm sẽ xuất hiện như hình 4.12.
Hình 4.12 cung cấp thông tin chi tiết về một thiết bị được bán tại cửa hàng, bao gồm giá sản phẩm, số lượng tồn kho và mô tả Để cải thiện trải nghiệm quản lý tài khoản cho khách hàng, một giao diện mới như hình 4.13 đã được thiết kế nhằm đáp ứng nhu cầu này.
Hình 4.13:Thông tin tài khoản
Giao diện chi tiết tài khoản cung cấp đầy đủ thông tin liên quan đến tài khoản người dùng, kèm theo nút "Save" giúp người dùng lưu lại các thay đổi trong các hộp thoại.
Giao diện xem chi tiết đơn hàng là một phần quan trọng trong website thương mại điện tử Nó cho phép người dùng theo dõi và quản lý các đơn hàng đã mua, giúp nâng cao trải nghiệm mua sắm trực tuyến.
Hình 4.14: Đơn hàng đã mua
Trong giao diện hình 4.15 người dùng có thể nhìn thấy toàn bộ chi tiết đơn hàng mà mình đã mua trong cửa hàng
Hệ thống POS giúp doanh nghiệp quản lý cửa hàng một cách thuận tiện và nhanh chóng, từ đó cải thiện hiệu quả trong việc theo dõi thông tin đơn hàng.
Hình 4.16: Thống kê sản phẩm của hệ thống POS
Thống kê về số lượng và tên của các mặt hàng mà cửa hàng đang bán được mô tả như ảnh 4.16
Giao diện quản lý mặt hàng của cửa hàng cho phép người quản lý thực hiện các thao tác quan trọng như thêm sản phẩm, cập nhật thông tin sản phẩm và xóa sản phẩm một cách dễ dàng.
Hình 4.18: Trang thêm mới mặt hàng kinh doanh
Khi thông tin và hình ảnh sản phẩm được tải lên đầy đủ và nhấn nút Lưu, tất cả dữ liệu sẽ được lưu trữ trong cơ sở dữ liệu của cửa hàng và hiển thị trên trang sản phẩm Để thêm một loại sản phẩm mới mà cửa hàng dự định kinh doanh, người quản lý có thể thực hiện theo hướng dẫn trong hình 4.19.
Hình 4.19: Trang thêm loại hàng
Người quản lý có quyền thêm loại hàng hoá sẽ bán,… và nhiều thao tác khác liên quan đến loại hàng hoá sẽ bán như hình 4.22
Hình 4.20: Trang thống kê đơn hàng