gooderp18绿色标准版
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

129 lines
5.1KB

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