Slink/dms/models/abstract_dms_mixin.py

58 lines
2.0 KiB
Python
Executable File

# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import api, fields, models
class AbstractDmsMixin(models.AbstractModel):
_name = "abstract.dms.mixin"
_description = "Abstract Dms Mixin"
name = fields.Char(required=True, index="btree")
# Only defined to prevent error in other fields that related it
storage_id = fields.Many2one(
comodel_name="dms.storage", string="Storage", store=True, copy=True
)
is_hidden = fields.Boolean(
string="Storage is Hidden",
related="storage_id.is_hidden",
readonly=True,
store=True,
)
company_id = fields.Many2one(
related="storage_id.company_id",
comodel_name="res.company",
string="Company",
readonly=True,
store=True,
index="btree",
)
storage_id_save_type = fields.Selection(related="storage_id.save_type", store=False)
color = fields.Integer(default=0)
category_id = fields.Many2one(
comodel_name="dms.category",
context={"dms_category_show_path": True},
string="Category",
)
@api.model
def search_panel_select_range(self, field_name, **kwargs):
"""Add context to display short folder name."""
_self = self.with_context(
directory_short_name=True, skip_sanitized_parent_hierarchy=True
)
return super(AbstractDmsMixin, _self).search_panel_select_range(
field_name, **kwargs
)
def _search_panel_sanitized_parent_hierarchy(self, records, parent_name, ids):
if self.env.context.get("skip_sanitized_parent_hierarchy"):
all_ids = [value["id"] for value in records]
# Prevent error if user not access to parent record
for value in records:
if value["parent_id"] and value["parent_id"][0] not in all_ids:
value["parent_id"] = False
return records
return super()._search_panel_sanitized_parent_hierarchy(
records=records, parent_name=parent_name, ids=ids
)