Ứng dụng này làm gì
Mô-đun nền tảng cho bộ tính năng Điểm bán hàng của Viindoo. Nó:
- Bổ sung một trang kích hoạt ngay trong Thiết lập Điểm bán hàng để bật/tắt từng
mô-đun tính năng POS của Viindoo (kèm liên kết mua/tìm hiểu khi mô-đun chưa có).
- Tự động tạo, không cần cấu hình, đúng một tài khoản quản trị cho mỗi Điểm bán
hàng (thuộc công ty của chính Điểm bán hàng đó) và ghi 100% tài khoản này lên
mọi dòng bút toán hóa đơn / phiên POS, hợp nhất vào phân bổ quản trị mà khách
hàng đã cấu hình để không làm mất các bút toán thuộc phương án khác.
- Thực thi quy ước an toàn khi mất mạng cho mọi mô-đun POS của Viindoo để quầy
thu ngân vẫn hoạt động khi mất mạng giữa phiên.
- Hiển thị tên ngân hàng / số tài khoản / chủ tài khoản dễ đọc bên cạnh mã QR
trên hộp thoại thanh toán gốc của Điểm bán hàng với phương thức qr_code
(bỏ qua an toàn với mọi phương thức khác).
Ấn bản được Hỗ trợ
- Ấn bản Community
- Ấn bản Enterprise
Điểm bán hàng Viindoo
viin_pos là mô-đun nền tảng của bộ tính năng Điểm bán hàng Viindoo. Nó tự động cài
đặt cùng point_of_sale và cung cấp:
- một trang kích hoạt trong Điểm bán hàng > Thiết lập để bật/tắt từng mô-đun tính
năng POS của Viindoo (kèm liên kết mua/tìm hiểu khi mô-đun chưa có);
- hạch toán quản trị POS luôn bật, không cần cấu hình - một tài khoản quản trị cho mỗi
Điểm bán hàng, thuộc công ty của chính Điểm bán hàng đó, ghi 100% lên mọi dòng bút
toán hóa đơn / phiên POS;
- quy ước an toàn khi mất mạng bên dưới;
- hiển thị tên ngân hàng / số tài khoản / chủ tài khoản dễ đọc bên cạnh mã QR trên hộp
thoại thanh toán gốc với phương thức qr_code (bỏ qua an toàn với phương thức khác).
Quy ước an toàn khi mất mạng (bắt buộc với mọi mô-đun POS Viindoo)
"Mất mạng" ở đây nghĩa là sống sót khi mất mạng giữa phiên (mạng chập chờn khi một
tab POS đang mở), không phải khởi động lạnh khi không có mạng (tải lại cứng khi không có
kết nối không thể khởi động POS - lõi không có bộ nhớ đệm IndexedDB cho dữ liệu danh
mục/cấu hình).
Đưa một trường mới xuống quầy
Một model bổ sung trường mà JavaScript của POS đọc PHẢI đưa nó xuống quầy bằng MỘT trong
hai cách:
- kế thừa pos.load.mixin và ghi đè _load_pos_data_fields(config_id) (gọi
super() rồi thêm tên trường) cho các trường của nó; và nếu thêm một model tải mới
thì ghi đè thêm pos.session._load_pos_data_models(self, config_id) (super()
rồi thêm tên model); HOẶC
- dựa vào ngoại lệ model-mở-rộng bên dưới.
Quy tắc model mở rộng (wide-open)
pos.config và pos.order không có danh sách trường cho phép trong lõi, nên một
trường mới thường trên hai model này tự động xuống quầy mà không cần ghi đè. MỌI model tải
khác (pos.order.line, pos.payment.method, product.product,
delivery.carrier, product.return.reason, ...) ĐỀU cần ghi đè tường minh, và nếu
quên thì lỗi âm thầm (trường đọc ra undefined, không báo lỗi). Khuyến nghị phòng
vệ: thêm _load_pos_data_fields super() + append tường minh ngay cả cho trường của
pos.config / pos.order để phòng khi lõi thêm danh sách cho phép về sau.
Các loader 17 đã chết - bị cấm
Các phương thức sau âm thầm vô hiệu trên Odoo 18 và PHẢI bị xóa, không được mang theo:
_loader_params_*, _get_pos_ui_*, _pos_ui_models_to_load, _load_model,
_pos_data_process, load_pos_data().
Dự phòng ConnectionLostError (thực thi bằng cơ chế, không chỉ tài liệu)
Mọi nhánh catch xử lý ConnectionLostError / ConnectionAbortedError trong POS
static/src PHẢI return một giá trị có hình dạng giống hệt giá trị trả về thành công
của khối try mỗi khi nơi gọi bung (destructure) kết quả - KHÔNG BAO GIỜ return; trơn
(trả undefined khiến nơi gọi bung lỗi). Quy tắc này được thực thi bằng cơ chế (một cổng
lint / CI quét */static/src/**/*.js), vì lớp lỗi từng làm sập quầy khi mất mạng trước
đây chỉ được canh bằng lời văn.
Tính khả dụng khi kích hoạt tính năng - giới hạn phụ thuộc bắc cầu
Nút bật/tắt của mỗi tính năng hiển thị ô chọn khi mô-đun khả dụng và liên kết mua khi
không. Tính khả dụng là kiểm tra sự tồn tại bản ghi ir.module.module của chính mô-đun
đó (bool(env.ref('base.module_<name>', raise_if_not_found=False))); nó không kiểm
tra các phụ thuộc bắc cầu có cài được không. Vì vậy một nút phụ thuộc dây chuyền - POS
BIDV Bank QR (cần payment_bidv_viin + viin_pos_qr) hay POS Online Payment QR
Code (cần pos_online_payment) - có thể hiển thị khả dụng nhưng cài đặt thất bại khi
thiếu một phụ thuộc bắc cầu, làm hiện lỗi phụ thuộc thô khi lưu. Điều này không thể raise
(dùng raise_if_not_found=False); đây là khoảng hở về trung thực UX, không phải lỗi sập.
Hãy cài phụ thuộc trả phí / nền tảng trước.
Phần mềm này và các tệp liên kết ("Phần mềm")
được sử dụng (chạy, tuỳ biến, chạy sau khi được tuỳ biến)
chỉ khi bạn mua được giấy phép có hiệu lực từ tác giả,
điển hình như qua các Ứng dụng Odoo, hoặc trong trường hợp
bạn nhận được thoả thuận bằng văn bản từ tác giả của Phần mềm (chi tiết tại tệp COPYRIGHT).
Bạn có thể phát triển các phân hệ Odoo có sử dụng Phần mềm như một Thư viện (thường là phụ thuộc vào, nhập vào và sử dụng nguồn của nó)
nhưng không sao chéo bất kỳ mã nguồn hay tài liệu nào thuộc Phần mềm. Bạn có thể phân phối những phân hệ này theo giấy phép
mà bạn lựa chọn, miễn sao nội dung giấy phép đó tương tích với điều khoản của Giấy phép Phần mềm Độc quyền Odoo
(ví dụ: LGPL, MIT hay bất kỳ loại giấy phép phần mềm độc quyền nào tương tự vậy).
Nghiêm cấm phát hành, phân phối, cấp phép lại hoặc bán bản sao của Phần mềm hoặc
bản sao
Phần mềm đã được sửa đổi.
Thông báo bản quyền và chấp thuận nêu trên buộc phải được bao gồm trong tất cả các bản sao hoặc các phần quan trọng của Phần mềm.
PHẦN MỀM ĐƯỢC CUNG CẤP "NGUYÊN TRẠNG", KHÔNG BẢO ĐẢM DƯỚI BẤT KỲ HÌNH THỨC NÀO, ĐƯỢC THỂ HIỆN RÕ RÀNG HOẶC NGỤ Ý, KHÔNG GIỚI HẠN
ĐẢM BẢO VỀ CÁC BẢO ĐẢM NGỤ Ý VỀ KHẢ NĂNG THƯƠNG MẠI, PHÙ HỢP VỚI MỤC ĐÍCH CỤ THỂ VÀ KHÔNG VI PHẠM.
TRONG MỌI TRƯỜNG HỢP SẼ KHÔNG CÓ TÁC GIẢ HOẶC CHỦ SỞ HỮU BẢN QUYỀN NÀO CHỊU TRÁCH NHIỆM VỀ BẤT KỲ KHIẾU NẠI,
THIỆT HẠI HOẶC TRÁCH NHIỆM PHÁP LÝ KHÁC NÀO TRONG PHẠM VI HỢP ĐỒNG, CÁC THIỆT HẠI HOẶC CÁCH KHÁC, PHÁT SINH TỪ, NGOÀI HOẶC
CÓ LIÊN KẾT VỚI PHẦN MỀM HOẶC VIỆC SỬ DỤNG HOẶC KINH DOANH KHÁC TẠI PHẦN MỀM.