Multi-company

company_dependent

Khi một trường (field) được khai báo thuộc tính company_dependent = True thì giá trị hiển thị sẽ khác nhau đối với từng công ty.

Trường phụ thuộc vào công ty này sẽ không lưu giá trị tại bảng của model mà sẽ được lưu tại bảng ir.property. Khi hệ thống đọc ra giá trị của loại trường này thì nó sẽ truy cập vào bảng ir.property để tìm kiếm và trả về giá trị liên kết với bảng ghi và công ty hiện tại người dùng đang truy cập.

Khi thay đổi giá trị của trường này, nếu chưa tồn tại bản ghi ir.property thì nó sẽ tự động tạo ra bản ghi ir.property mới, nếu không thì sẽ sửa lại bản ghi đã có sẵn.

Note: trường one2many và many2many không có thuộc tính company_dependent mà sẽ sử dụng global security rule để lọc giá trị theo công ty

ir.property

 

Quy tắc lấy giá trị của trường company_dependent

Độ ưu tiên Quy tắc
1 fields_id.name (Trường) = name (technical name) của trường đang đọc giá trị AND company_id (Công ty) = self.env.company (công ty hiện tại người dùng đang truy cập) AND res_id (Nguồn lực) = "model_name,id" của bản ghi yêu cầu lấy giá trị
2 fields_id.name (Trường) = name (technical name) của trường đang đọc giá trị AND company_id (Công ty) = NULL AND res_id (Nguồn lực) = "model_name,id" của bản ghi yêu cầu lấy giá trị
3 fields_id.name (Trường) = name (technical name) của trường đang đọc giá trị AND company_id (Công ty) = self.env.company (công ty hiện tại người dùng đang truy cập) AND res_id (Nguồn lực) = NULL (trống)
4 fields_id.name (Trường) = name (technical name) của trường đang đọc giá trị AND company_id (Công ty) = NULL (trống) AND res_id (Nguồn lực) = NULL (trống)

Nếu một độ ưu tiên mà tìm được nhiều hơn 1 bản ghi thì sẽ lấy bản ghi có id nhỏ nhất

Một bản ghi tại model có trường company_depedent được coi là có bản ghi ir.property khi nó tìm được bản ghi ở độ ưu tiên 1.

Với cái field type khác nhau sẽ được lưu giá trị tại các field khác nhau của ir.property

Field Type Field
char value_text
float value_float
boolean value_integer với (= 0 là False và != 0 là True)
integer value_integer
text value_text
binary value_binary
many2one value_reference (giá trị lưu với quy tắc "comodel_name,id")
date value_datetime
datetime value_datetime
selection value_text

force_company

Được sử dụng trong code py để làm thay đổi self.env.company (current company). 

Cú pháp:

Odoo 13 : record.with_context(force_company=COMPANY.id)

Odoo 14 : record.with_company(COMPANY)

check_company

Để chặn trường hợp bản ghi của công ty A liên kết đến 1 bản ghi của công ty B. Odoo cung cấp 2 thuộc tính, 1 cho model và 1 cho field như một dạng constrains chặn trường hợp này

Đôi với model, Odoo có thuộc tính _check_company_auto = True

Đối với field, Odoo có thuộc tính check_company = True

Khi model được khai báo thuộc tính _check_company_auto = True thì tại thời điểm create và write, hệ thống sẽ tự động gọi hàm _check_company thực hiện kiểm tra company_id của record hiện tại với company_id của tất cả các field nối (many2one, many2many, one2many) có trường company_id với domain relation_field.company_id = record.company_id hoặc relation_field.company_id = False

Khi field được khai báo thuộc tính check_company = True, hệ thống sẽ tự động thêm domain lọc bản ghi relation_field.company_id = record.company_id hoặc relation_field.company_id = False cho field tại view và thực hiện gọi hàm _check_company tịa thời điểm tạo và sửa đối với field này.

trong Du lịch
Đăng nhập để viết bình luận
[Quản trị server P.1] SSH và sử dụng command line trên môi trường Linux