Browse Source

publish muk_utils - 12.0

pull/9/head
MuK IT GmbH 6 years ago
parent
commit
6914202cb0
  1. 2
      muk_utils/__manifest__.py
  2. 3
      muk_utils/models/__init__.py
  3. 94
      muk_utils/models/mixins_hierarchy.py

2
muk_utils/__manifest__.py

@ -19,7 +19,7 @@
{ {
"name": "MuK Utils", "name": "MuK Utils",
"summary": """Utility Features""", "summary": """Utility Features""",
"version": '12.0.1.1.16',
"version": '12.0.1.1.17',
"category": 'Extra Tools', "category": 'Extra Tools',
"license": "AGPL-3", "license": "AGPL-3",
"author": "MuK IT", "author": "MuK IT",

3
muk_utils/models/__init__.py

@ -19,8 +19,9 @@
from . import base from . import base
from . import mixins_groups from . import mixins_groups
from . import ir_attachment
from . import mixins_hierarchy
from . import scss_editor from . import scss_editor
from . import ir_attachment
from . import ir_config_parameter from . import ir_config_parameter
from . import res_config_settings from . import res_config_settings

94
muk_utils/models/mixins_hierarchy.py

@ -0,0 +1,94 @@
###################################################################################
#
# Copyright (C) 2017 MuK IT GmbH
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
###################################################################################
import json
import operator
import functools
import collections
from odoo import models, fields, api
class Hierarchy(models.AbstractModel):
_name = 'muk_utils.mixins.hierarchy'
_description = 'Hierarchy Mixin'
_parent_store = True
_parent_path_sudo = False
#----------------------------------------------------------
# Database
#----------------------------------------------------------
parent_path = fields.Char(
string="Parent Path",
index=True)
@api.model
def _add_magic_fields(self):
super(Hierarchy, self)._add_magic_fields()
def add(name, field):
if name not in self._fields:
self._add_field(name, field)
add('parent_path_names', fields.Char(
_module=self._module,
compute='_compute_parent_path',
compute_sudo=self._parent_path_sudo,
string="Path Names",
readonly=True,
store=True,
automatic=True))
add('parent_path_json', fields.Char(
_module=self._module,
compute='_compute_parent_path',
compute_sudo=self._parent_path_sudo,
string="Path Json",
readonly=True,
store=True,
automatic=True))
#----------------------------------------------------------
# Read, View
#----------------------------------------------------------
@api.depends('parent_path')
def _compute_parent_path(self):
paths = [list(map(int, rec.parent_path.split('/')[:-1])) for rec in self]
ids = set(functools.reduce(operator.concat, paths))
recs = self.with_context(prefetch_fields=False).browse(ids)
data = {rec.id: (rec._name, rec.name) for rec in recs}
for record in self:
path_names = []
path_json = []
for id in reversed(list(map(int, record.parent_path.split('/')[:-1]))):
if id not in data:
break
path_names.append(data[id][1])
path_json.append({
'model': data[id][0],
'name': data[id][1],
'id': id,
})
path_names.reverse()
path_json.reverse()
record.update({
'parent_path_names': '/'.join(path_names),
'parent_path_json': json.dumps(path_json),
})
Loading…
Cancel
Save