mirror of
https://github.com/OCA/manufacture.git
synced 2025-01-28 16:37:15 +02:00
[IMP] mrp_tag: add parent tags
This commit is contained in:
@@ -4,19 +4,54 @@
|
|||||||
|
|
||||||
from random import randint
|
from random import randint
|
||||||
|
|
||||||
from odoo import fields, models
|
from odoo import _, api, fields, models
|
||||||
|
from odoo.exceptions import ValidationError
|
||||||
|
|
||||||
|
|
||||||
class MrpTag(models.Model):
|
class MrpTag(models.Model):
|
||||||
_name = "mrp.tag"
|
_name = "mrp.tag"
|
||||||
_description = "MRP Tag"
|
_description = "MRP Tag"
|
||||||
|
_parent_store = True
|
||||||
|
|
||||||
def _get_default_color(self):
|
def _get_default_color(self):
|
||||||
return randint(1, 11)
|
return randint(1, 11)
|
||||||
|
|
||||||
name = fields.Char("Tag Name", required=True, translate=True)
|
name = fields.Char("Tag Name", required=True, translate=True)
|
||||||
color = fields.Integer("Tag Color", default=_get_default_color)
|
color = fields.Integer(default=lambda self: self._get_default_color())
|
||||||
|
parent_id = fields.Many2one("purchase.tag", index=True, ondelete="cascade")
|
||||||
|
child_ids = fields.One2many("purchase.tag", "parent_id")
|
||||||
|
parent_path = fields.Char(index=True)
|
||||||
|
|
||||||
_sql_constraints = [
|
_sql_constraints = [
|
||||||
("tag_name_uniq", "unique (name)", "Tag name already exists !"),
|
("tag_name_uniq", "unique (name)", "Tag name already exists !"),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
def name_get(self):
|
||||||
|
res = []
|
||||||
|
for tag in self:
|
||||||
|
names = []
|
||||||
|
current = tag
|
||||||
|
while current:
|
||||||
|
names.append(current.name)
|
||||||
|
current = current.parent_id
|
||||||
|
res.append((tag.id, " / ".join(reversed(names))))
|
||||||
|
return res
|
||||||
|
|
||||||
|
@api.model
|
||||||
|
def _name_search(
|
||||||
|
self, name="", args=None, operator="ilike", limit=100, name_get_uid=None
|
||||||
|
):
|
||||||
|
if name:
|
||||||
|
args = [("name", operator, name.split(" / ")[-1])] + list(args or [])
|
||||||
|
return super()._name_search(
|
||||||
|
name=name,
|
||||||
|
args=args,
|
||||||
|
operator=operator,
|
||||||
|
limit=limit,
|
||||||
|
name_get_uid=name_get_uid,
|
||||||
|
)
|
||||||
|
|
||||||
|
@api.constrains("parent_id")
|
||||||
|
def _check_parent_recursion(self):
|
||||||
|
if not self._check_recursion("parent_id"):
|
||||||
|
raise ValidationError(_("Tags cannot be recursive."))
|
||||||
|
|||||||
@@ -19,7 +19,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<group>
|
<group>
|
||||||
<group>
|
<group>
|
||||||
<field name="color" required="True" />
|
<field name="color" required="True" widget="color_picker" />
|
||||||
|
<field name="parent_id" />
|
||||||
</group>
|
</group>
|
||||||
</group>
|
</group>
|
||||||
</sheet>
|
</sheet>
|
||||||
@@ -31,8 +32,9 @@
|
|||||||
<field name="name">mrp.tag.view.tree</field>
|
<field name="name">mrp.tag.view.tree</field>
|
||||||
<field name="model">mrp.tag</field>
|
<field name="model">mrp.tag</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree name="Tags" editable="bottom">
|
<tree name="Tags">
|
||||||
<field name="name" />
|
<field name="name" />
|
||||||
|
<field name="parent_id" optional="hide" />
|
||||||
<field name="color" widget="color_picker" />
|
<field name="color" widget="color_picker" />
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
|
|||||||
Reference in New Issue
Block a user