odex25_standard/odex25_dms/dms/models/dms_settings.py

161 lines
5.9 KiB
Python

import logging
from odoo import _
from odoo import models, api, fields
_logger = logging.getLogger(__name__)
class Settings(models.Model):
_name = 'dms.settings'
_description = "MuK Documents Settings"
# _inherit = 'dms.model'
# ----------------------------------------------------------
# Database
# ----------------------------------------------------------
name = fields.Char(
string="Name",
required=True)
save_type = fields.Selection(
selection=[("database", _('Database'))],
string="Save Type",
default="database",
required=True,
help="The save type is used to determine how a file is saved to the system.")
system_locks = fields.Boolean(
string="System Locks",
default=True,
help="Indicates if files and directories should be automatically locked while system operations take place.")
show_tree = fields.Boolean(
string="Show Structure",
default=True,
help="Indicates if directories inside of this settings object are visible on document views.")
settings_directories = fields.One2many(
comodel_name='dms.directory',
inverse_name='settings',
string="Directories",
copy=False,
readonly=True)
settings_files = fields.One2many(
comodel_name='dms.file',
inverse_name='settings',
string="Files",
copy=False,
readonly=True)
count_settings_directories = fields.Integer(
# compute='_compute_count_settings_directories',
string="Directories")
count_settings_files = fields.Integer(
compute='_compute_count_settings_files',
string="Files")
root_directories = fields.One2many(
comodel_name='dms.directory',
inverse_name='settings',
string="Root Directories",
domain=[['is_root_directory', '=', True]])
top_directories = fields.One2many(
comodel_name='dms.directory',
inverse_name='settings',
# compute='_compute_top_directories',
search='_search_top_directories',
string="Top Directories",
help="Directories which have no parent or the user has no access right to those parents.")
top_files = fields.One2many(
comodel_name='dms.file',
string="Top Files",
compute='_compute_top_files',
search='_search_top_files',
help="Files which parent aren't readable by the user.")
# ----------------------------------------------------------
# Functions
# ----------------------------------------------------------
def notify_change(self, values, *largs, **kwargs):
super(Settings, self).notify_change(values, *largs, **kwargs)
for record in self:
directories = record.root_directories
operation = directories.generate_operation_key()
if record.system_locks:
directories.lock_tree(operation=operation, refresh=True)
for directory in directories:
directory.with_context(operation=operation).notify_change(values)
if record.system_locks:
directories.unlock_operation(operation=operation, refresh=True)
# ----------------------------------------------------------
# Search
# ----------------------------------------------------------
@api.model
def _search_top_directories(self, operator, operand):
directories = self.env['dms.directory'].search([('name', operator, operand)])
directories = directories.filtered(
lambda d: d.is_root_directory or
not d.parent_directory.check_access('read'))
return [('id', 'in', directories.mapped('settings.id'))]
@api.model
def _search_top_files(self, operator, operand):
files = self.env['dms.file'].search([('name', operator, operand)])
files = files.filtered(lambda f: not f.directory.check_access('read'))
return [('id', 'in', files.mapped('settings.id'))]
# ----------------------------------------------------------
# Read, View
# ----------------------------------------------------------
# @api.depends('settings_directories')
# def _compute_count_settings_directories(self):
# for record in self:
# record.count_settings_directories = len(record.settings_directories)
#
@api.depends('settings_files')
def _compute_count_settings_files(self):
for record in self:
record.count_settings_files = len(record.settings_files)
# @api.depends('settings_directories')
# def _compute_top_directories(self):
# for record in self:
# # access_ids = self.env['dms.directory']._get_complete_access_ids("read")
# access_ids = self.env['dms.directory']
# record.top_directories = record.settings_directories.filtered(
# lambda d: d.is_root_directory or not d.parent_directory.id in access_ids)
@api.depends('settings_files')
def _compute_top_files(self):
for record in self:
# access_ids = self.env['dms.directory']._get_complete_access_ids("read")
access_ids = self.env['dms.directory']
record.top_files = record.settings_files.filtered(lambda f: not f.directory.id in access_ids)
# ----------------------------------------------------------
# Create, Update, Delete
# ----------------------------------------------------------
@api.onchange('save_type')
def _onchange_save_type(self):
if self._origin.id:
warning = {
'title': (_('Information')),
'message': (_('Changing the save settings can cause a heavy migration process.'))
}
return {'warning': warning}
def _check_notification(self, vals, *largs, **kwargs):
if 'save_type' in vals:
self.suspend_security().notify_change({'save_type': vals['save_type']})