gooderp18绿色标准版
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

126 行
5.0KB

  1. # -*- coding: utf-8 -*-
  2. from odoo import models, fields, api
  3. from odoo.exceptions import UserError
  4. class Goods(models.Model):
  5. _inherit = 'goods'
  6. specification = fields.Char('规格型号', help='规格型号,如果商品有产品图纸,此处填写产品图号')
  7. display_name = fields.Char(compute='_compute_display_name', store=True)
  8. # 产品显示品牌、名称、内部编号、规格型号。
  9. def _reset_display_name(self):
  10. goods_all = self.env['goods'].search([()])
  11. for goods in goods_all :
  12. if goods.name:
  13. name_display = goods.name
  14. else:
  15. name_display = ""
  16. if goods.code:
  17. code_display = "[" + goods.code + "]"
  18. else:
  19. code_display = ""
  20. if goods.specification:
  21. specification_display = "[" + goods.specification + "]"
  22. else:
  23. specification_display = ""
  24. goods.display_name = code_display + name_display + specification_display
  25. # 产品显示品牌、名称、内部编号、规格型号。
  26. @api.depends('name','code','specification')
  27. def _compute_display_name(self):
  28. for goods in self:
  29. if goods.name:
  30. name_display = goods.name
  31. else:
  32. name_display = ""
  33. if goods.code:
  34. code_display = "[" + goods.code + "]"
  35. else:
  36. code_display = ""
  37. if goods.specification:
  38. specification_display = "[" + goods.specification + "]"
  39. else:
  40. specification_display = ""
  41. goods.display_name = code_display + name_display + specification_display
  42. def name_get(self):
  43. '''在many2one字段里显示 编号_名称'''
  44. res = []
  45. for goods in self:
  46. if goods.name:
  47. name_display = goods.name
  48. else:
  49. name_display = ""
  50. if goods.code:
  51. code_display = "[" + goods.code + "]"
  52. else:
  53. code_display = ""
  54. if goods.specification:
  55. specification_display = "[" + goods.specification + "]"
  56. else:
  57. specification_display = ""
  58. display_name = code_display + name_display + specification_display
  59. res.append((goods.id,display_name))
  60. return res
  61. @api.model
  62. def name_search(self, name='', args=None, operator='ilike', limit=100):
  63. """在many2one字段中支持按编号、图号、规格型号、品牌搜索"""
  64. args = args or []
  65. code_search_goods = []
  66. # brand_id_search_goods = []
  67. specification_search_goods = []
  68. if name:
  69. goods_id = self.search([('code', '=', name)])
  70. if goods_id:
  71. return goods_id.name_get()
  72. args.append(('code', 'ilike', name))
  73. goods_ids = self.search(args)
  74. if goods_ids:
  75. code_search_goods = goods_ids.name_get()
  76. args.remove(('code', 'ilike', name))
  77. """在many2one字段中支持按规格型号搜索"""
  78. args.append(('specification', 'ilike', name))
  79. my_goods_ids = self.search(args)
  80. if my_goods_ids:
  81. specification_search_goods = my_goods_ids.name_get()
  82. args.remove(('specification', 'ilike', name))
  83. # """在many2one字段中支持按品牌搜索"""
  84. # args.append(('brand_id', 'ilike', name))
  85. # my_goods_ids = self.search(args)
  86. # if my_goods_ids:
  87. # brand_id_search_goods = my_goods_ids.name_get()
  88. # args.remove(('brand_id', 'ilike', name))
  89. # """在many2one字段中支持按型号搜索"""
  90. # args.append(('specification', 'ilike', name))
  91. # my_goods_ids = self.search(args)
  92. # if my_goods_ids:
  93. # specification_search_goods = my_goods_ids.name_get()
  94. # args.remove(('specification', 'ilike', name))
  95. search_goods = super(Goods, self).name_search(
  96. name=name, args=args,
  97. operator=operator, limit=limit
  98. )
  99. for good_tup in code_search_goods: # 去除重复产品
  100. if good_tup not in search_goods:
  101. search_goods.append(good_tup)
  102. # for good_tup in brand_id_search_goods: # 去除重复产品
  103. # if good_tup not in search_goods:
  104. # search_goods.append(good_tup)
  105. for good_tup in specification_search_goods: # 去除重复产品
  106. if good_tup not in search_goods:
  107. search_goods.append(good_tup)
  108. return search_goods
  109. @api.model_create_multi
  110. def create(self, values):
  111. for line in values:
  112. if line.get('code', False) and self.search(
  113. [('code', '=', line.get('code', False)), ('active', 'in', [True, False])]):
  114. raise UserError(f'当前编码 {line.get("code")} 已存在,请检查后重新确认。')
  115. return super(Goods, self).create(values)
上海开阖软件有限公司 沪ICP备12045867号-1