239 lines
8.1 KiB
Python
239 lines
8.1 KiB
Python
#This file is part of Tryton. The COPYRIGHT file at the top level of
|
|
#this repository contains the full copyright notices and license terms.
|
|
from trytond.model import ModelView, ModelSQL, fields
|
|
from trytond.backend import TableHandler
|
|
from trytond.transaction import Transaction
|
|
|
|
|
|
class UIMenuGroup(ModelSQL):
|
|
"UI Menu - Group"
|
|
_name = 'ir.ui.menu-res.group'
|
|
_description = __doc__
|
|
menu_id = fields.Many2One('ir.ui.menu', 'Menu', ondelete='CASCADE',
|
|
select=1, required=True)
|
|
gid = fields.Many2One('res.group', 'Group', ondelete='CASCADE',
|
|
select=1, required=True)
|
|
|
|
def init(self, module_name):
|
|
cursor = Transaction().cursor
|
|
# Migration from 1.0 table name change
|
|
TableHandler.table_rename(cursor, 'ir_ui_menu_group_rel', self._table)
|
|
TableHandler.sequence_rename(cursor, 'ir_ui_menu_group_rel_id_seq',
|
|
self._table + '_id_seq')
|
|
super(UIMenuGroup, self).init(module_name)
|
|
|
|
def create(self, vals):
|
|
res = super(UIMenuGroup, self).create(vals)
|
|
# Restart the cache on the domain_get method
|
|
self.pool.get('ir.rule').domain_get.reset()
|
|
return res
|
|
|
|
def write(self, ids, vals):
|
|
res = super(UIMenuGroup, self).write(ids, vals)
|
|
# Restart the cache on the domain_get method
|
|
self.pool.get('ir.rule').domain_get.reset()
|
|
return res
|
|
|
|
def delete(self, ids):
|
|
res = super(UIMenuGroup, self).delete(ids)
|
|
# Restart the cache on the domain_get method
|
|
self.pool.get('ir.rule').domain_get.reset()
|
|
return res
|
|
|
|
UIMenuGroup()
|
|
|
|
|
|
class ActionGroup(ModelSQL):
|
|
"Action - Group"
|
|
_name = 'ir.action-res.group'
|
|
_description = __doc__
|
|
action_id = fields.Many2One('ir.action', 'Action', ondelete='CASCADE',
|
|
select=1, required=True)
|
|
gid = fields.Many2One('res.group', 'Group', ondelete='CASCADE',
|
|
select=1, required=True)
|
|
|
|
def init(self, module_name):
|
|
cursor = Transaction().cursor
|
|
# Migration from 1.0 table name change
|
|
TableHandler.table_rename(cursor, 'ir_action_group_rel', self._table)
|
|
TableHandler.sequence_rename(cursor, 'ir_action_group_rel_id_seq',
|
|
self._table + '_id_seq')
|
|
super(ActionGroup, self).init(module_name)
|
|
|
|
def create(self, vals):
|
|
res = super(ActionGroup, self).create(vals)
|
|
# Restart the cache on the domain_get method
|
|
self.pool.get('ir.rule').domain_get.reset()
|
|
return res
|
|
|
|
def write(self, ids, vals):
|
|
res = super(ActionGroup, self).write(ids, vals)
|
|
# Restart the cache on the domain_get method
|
|
self.pool.get('ir.rule').domain_get.reset()
|
|
return res
|
|
|
|
def delete(self, ids):
|
|
res = super(ActionGroup, self).delete(ids)
|
|
# Restart the cache on the domain_get method
|
|
self.pool.get('ir.rule').domain_get.reset()
|
|
return res
|
|
|
|
ActionGroup()
|
|
|
|
|
|
class ModelFieldGroup(ModelSQL):
|
|
"Model Field Group Rel"
|
|
_name = 'ir.model.field-res.group'
|
|
_description = __doc__
|
|
field_id = fields.Many2One('ir.model.field', 'Model Field',
|
|
ondelete='CASCADE', select=1, required=True)
|
|
group_id = fields.Many2One('res.group', 'Group', ondelete='CASCADE',
|
|
select=1, required=True)
|
|
|
|
def init(self, module_name):
|
|
cursor = Transaction().cursor
|
|
# Migration from 1.0 table name change
|
|
TableHandler.table_rename(cursor, 'ir_model_field_group_rel', self._table)
|
|
TableHandler.sequence_rename(cursor, 'ir_model_field_group_rel_id_seq',
|
|
self._table + '_id_seq')
|
|
super(ModelFieldGroup, self).init(module_name)
|
|
|
|
ModelFieldGroup()
|
|
|
|
|
|
class RuleGroupGroup(ModelSQL):
|
|
"Rule Group - Group"
|
|
_name = 'ir.rule.group-res.group'
|
|
_description = __doc__
|
|
rule_group_id = fields.Many2One('ir.rule.group', 'Rule Group',
|
|
ondelete='CASCADE', select=1, required=True)
|
|
group_id = fields.Many2One('res.group', 'Group', ondelete='CASCADE',
|
|
select=1, required=True)
|
|
|
|
def init(self, module_name):
|
|
cursor = Transaction().cursor
|
|
# Migration from 1.0 table name change
|
|
TableHandler.table_rename(cursor, 'group_rule_group_rel', self._table)
|
|
TableHandler.sequence_rename(cursor, 'group_rule_group_rel_id_seq',
|
|
self._table + '_id_seq')
|
|
super(RuleGroupGroup, self).init(module_name)
|
|
|
|
RuleGroupGroup()
|
|
|
|
|
|
class RuleGroupUser(ModelSQL):
|
|
"Rule Group - User"
|
|
_name = 'ir.rule.group-res.user'
|
|
_description = __doc__
|
|
rule_group_id = fields.Many2One('ir.rule.group', 'Rule Group',
|
|
ondelete='CASCADE', select=1, required=True)
|
|
user_id = fields.Many2One('res.user', 'User', ondelete='CASCADE',
|
|
select=1, required=True)
|
|
|
|
def init(self, module_name):
|
|
cursor = Transaction().cursor
|
|
# Migration from 1.0 table name change
|
|
TableHandler.table_rename(cursor, 'user_rule_group_rel', self._table)
|
|
TableHandler.sequence_rename(cursor, 'user_rule_group_rel_id_seq',
|
|
self._table + '_id_seq')
|
|
super(RuleGroupUser, self).init(module_name)
|
|
|
|
RuleGroupUser()
|
|
|
|
|
|
class Lang(ModelSQL, ModelView):
|
|
_name = 'ir.lang'
|
|
|
|
def write(self, ids, vals):
|
|
res = super(Lang, self).write(ids, vals)
|
|
# Restart the cache for get_preferences
|
|
self.pool.get('res.user').get_preferences.reset()
|
|
return res
|
|
|
|
Lang()
|
|
|
|
|
|
class SequenceType(ModelSQL, ModelView):
|
|
_name = 'ir.sequence.type'
|
|
groups = fields.Many2Many('ir.sequence.type-res.group', 'sequence_type',
|
|
'group', 'User Groups',
|
|
help='Groups allowed to edit the sequences of this type')
|
|
|
|
SequenceType()
|
|
|
|
|
|
class SequenceTypeGroup(ModelSQL):
|
|
'Sequence Type - Group'
|
|
_name = 'ir.sequence.type-res.group'
|
|
_description = __doc__
|
|
sequence_type = fields.Many2One('ir.sequence.type', 'Sequence Type',
|
|
ondelete='CASCADE', select=1, required=True)
|
|
group = fields.Many2One('res.group', 'User Groups',
|
|
ondelete='CASCADE', select=1, required=True)
|
|
|
|
def delete(self, ids):
|
|
rule_obj = self.pool.get('ir.rule')
|
|
res = super(SequenceTypeGroup, self).delete(ids)
|
|
# Restart the cache on the domain_get method of ir.rule
|
|
rule_obj.domain_get.reset()
|
|
return res
|
|
|
|
def create(self, vals):
|
|
rule_obj = self.pool.get('ir.rule')
|
|
res = super(SequenceTypeGroup, self).create(vals)
|
|
# Restart the cache on the domain_get method of ir.rule
|
|
rule_obj.domain_get.reset()
|
|
return res
|
|
|
|
def write(self, ids, vals):
|
|
rule_obj = self.pool.get('ir.rule')
|
|
res = super(SequenceTypeGroup, self).write(ids, vals)
|
|
# Restart the cache on the domain_get method
|
|
rule_obj.domain_get.reset()
|
|
return res
|
|
|
|
SequenceTypeGroup()
|
|
|
|
|
|
class Sequence(ModelSQL, ModelView):
|
|
_name = 'ir.sequence'
|
|
groups = fields.Function(fields.Many2Many('res.group', None, None,
|
|
'User Groups'), 'get_groups', searcher='search_groups')
|
|
|
|
def get_groups(self, ids, name):
|
|
sequence_type_obj = self.pool.get('ir.sequence.type')
|
|
sequences= self.browse(ids)
|
|
code2seq = {}
|
|
for sequence in sequences:
|
|
code2seq.setdefault(sequence.code, []).append(sequence.id)
|
|
|
|
sequence_type_ids = sequence_type_obj.search([
|
|
('code', 'in', code2seq.keys()),
|
|
])
|
|
sequence_types = sequence_type_obj.browse(sequence_type_ids)
|
|
|
|
res = {}
|
|
for sequence_type in sequence_types:
|
|
seq_ids = code2seq[sequence_type.code]
|
|
for seq_id in seq_ids:
|
|
res.setdefault(seq_id, []).append(sequence_type.id)
|
|
|
|
return res
|
|
|
|
def search_groups(self, name, clause):
|
|
sequence_type_obj = self.pool.get('ir.sequence.type')
|
|
ids = sequence_type_obj.search([clause], order=[])
|
|
seq_types = sequence_type_obj.browse(ids)
|
|
codes = set(st.code for st in seq_types)
|
|
return [('code', 'in', list(codes))]
|
|
|
|
Sequence()
|
|
|
|
|
|
class SequenceStrict(Sequence):
|
|
# This empty class declaration is needed to inherit the groups
|
|
# field
|
|
_name = 'ir.sequence.strict'
|
|
|
|
SequenceStrict()
|