Files
odoo-usability/base_dynamic_list/models/dynamic_list.py
2021-11-26 18:57:02 +03:00

102 lines
3.3 KiB
Python

# Copyright 2020-2021 Akretion France (http://www.akretion.com)
# @author Alexis de Lattre <alexis.delattre@akretion.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import api, fields, models
class DynamicList(models.Model):
_name = "dynamic.list"
_description = "Dynamic List (non translatable)"
_order = "sequence, id"
name = fields.Char(required=True)
sequence = fields.Integer(default=10)
active = fields.Boolean(default=True)
domain = fields.Selection([], string="Domain", required=True, index=True)
_sql_constraint = [
("domain_name_uniq", "unique(domain, name)", "This entry already exists!")
]
class DynamicListTranslate(models.Model):
_name = "dynamic.list.translate"
_description = "Translatable Dynamic List"
_order = "sequence, id"
name = fields.Char(translate=True, required=True)
sequence = fields.Integer(default=10)
active = fields.Boolean(default=True)
domain = fields.Selection([], string="Domain", required=True, index=True)
_sql_constraint = [
("domain_name_uniq", "unique(domain, name)", "This entry already exists!")
]
class DynamicListCode(models.Model):
_name = "dynamic.list.code"
_description = "Dynamic list with code"
_order = "sequence, id"
code = fields.Char(required=True)
name = fields.Char(translate=True, required=True)
sequence = fields.Integer(default=10)
active = fields.Boolean(default=True)
domain = fields.Selection([], string="Domain", required=True, index=True)
_sql_constraint = [
("domain_code_uniq", "unique(domain, code)", "This code already exists!")
]
@api.depends("code", "name")
def name_get(self):
res = []
for rec in self:
res.append((rec.id, "[%s] %s" % (rec.code, rec.name)))
return res
@api.model
def name_search(self, name="", args=None, operator="ilike", limit=80):
if args is None:
args = []
if name and operator == "ilike":
recs = self.search([("code", "=", name)] + args, limit=limit)
if recs:
return recs.name_get()
return super().name_search(name=name, args=args, operator=operator, limit=limit)
class DynamicListCodeTranslate(models.Model):
_name = "dynamic.list.code.translate"
_description = "Translatable dynamic list with code"
_order = "sequence, id"
code = fields.Char(required=True)
name = fields.Char(translate=True, required=True)
sequence = fields.Integer(default=10)
active = fields.Boolean(default=True)
domain = fields.Selection([], string="Domain", required=True, index=True)
_sql_constraint = [
("domain_code_uniq", "unique(domain, code)", "This code already exists!")
]
@api.depends("code", "name")
def name_get(self):
res = []
for rec in self:
res.append((rec.id, "[%s] %s" % (rec.code, rec.name)))
return res
@api.model
def name_search(self, name="", args=None, operator="ilike", limit=80):
if args is None:
args = []
if name and operator == "ilike":
recs = self.search([("code", "=", name)] + args, limit=limit)
if recs:
return recs.name_get()
return super().name_search(name=name, args=args, operator=operator, limit=limit)