38 lines
1.4 KiB
Python
38 lines
1.4 KiB
Python
import re
|
||
|
||
from odoo import fields, models, api
|
||
|
||
|
||
class ResMrpWorkOrder(models.Model):
|
||
_inherit = 'mrp.workorder'
|
||
|
||
mixed_search_field = fields.Char(string='坯料产品名称/RFID')
|
||
|
||
@api.model
|
||
def web_read_group(self, domain, fields, groupby, limit=None, offset=0, orderby=False,
|
||
lazy=True, expand=False, expand_limit=None, expand_orderby=False):
|
||
domain = domain or []
|
||
for index, item in enumerate(domain):
|
||
if isinstance(item, list):
|
||
if item[0] == 'mixed_search_field':
|
||
if self._is_rfid_code(item[2]):
|
||
domain[index] = ['rfid_code', item[1], item[2]]
|
||
else:
|
||
domain[index] = ['product_tmpl_name', item[1], item[2]]
|
||
|
||
return super(ResMrpWorkOrder, self).web_read_group(domain, fields, groupby, limit=limit, offset=offset, orderby=orderby,
|
||
lazy=lazy, expand=expand, expand_limit=expand_limit, expand_orderby=expand_orderby)
|
||
|
||
def _is_rfid_code(self, tag):
|
||
"""
|
||
判断是否是rfid_code
|
||
"""
|
||
# 基于长度判断(假设RFID标签长度为10到16个字符)
|
||
if not 10 <= len(tag) <= 16:
|
||
return False
|
||
|
||
# 基于字符集判断(仅包含数字和字母)
|
||
if not re.match("^[0-9]*$", tag):
|
||
return False
|
||
|
||
return True |