Remove support of Many2Many field in record XML

issue1994
review35005
This commit is contained in:
Cédric Krier
2011-07-03 18:01:47 +02:00
parent 550aae8351
commit 7a7e89bb10
18 changed files with 296 additions and 188 deletions
+1
View File
@@ -1,3 +1,4 @@
* Remove support of Many2Many field in record XML
* Change Pool into a Singleton
* Remove support of zipped modules
+4 -4
View File
@@ -84,10 +84,10 @@ CREATE TABLE res_group (
) ENGINE=InnoDB;
CREATE TABLE `res_user-res_group` (
uid BIGINT NOT NULL,
gid BIGINT NOT NULL,
CONSTRAINT `res_user-res_group_uid_fkey` FOREIGN KEY (uid) REFERENCES res_user (id) ON DELETE CASCADE,
CONSTRAINT `res_user-res_group_gid_fkey` FOREIGN KEY (gid) REFERENCES res_group (id) ON DELETE CASCADE
`user` BIGINT NOT NULL,
`group` BIGINT NOT NULL,
CONSTRAINT `res_user-res_group_user_fkey` FOREIGN KEY (`user`) REFERENCES res_user (id) ON DELETE CASCADE,
CONSTRAINT `res_user-res_group_group_fkey` FOREIGN KEY (`group`) REFERENCES res_group (id) ON DELETE CASCADE
) ENGINE=InnoDB;
CREATE TABLE wkf (
+4 -4
View File
@@ -102,10 +102,10 @@ CREATE SEQUENCE "res_user-res_group_id_seq";
CREATE TABLE "res_user-res_group" (
id INTEGER DEFAULT NEXTVAL('res_user-res_group_id_seq') NOT NULL,
uid INTEGER NOT NULL,
gid INTEGER NOT NULL,
FOREIGN KEY (uid) REFERENCES res_user (id) ON DELETE CASCADE,
FOREIGN KEY (gid) REFERENCES res_group (id) ON DELETE CASCADE,
"user" INTEGER NOT NULL,
"group" INTEGER NOT NULL,
FOREIGN KEY ("user") REFERENCES res_user (id) ON DELETE CASCADE,
FOREIGN KEY ("group") REFERENCES res_group (id) ON DELETE CASCADE,
PRIMARY KEY(id)
);
+2 -2
View File
@@ -73,8 +73,8 @@ CREATE TABLE res_group (
CREATE TABLE "res_user-res_group" (
id INTEGER PRIMARY KEY AUTOINCREMENT,
uid INTEGER,
gid INTEGER
"user" INTEGER,
"group" INTEGER
);
CREATE TABLE wkf (
+7 -39
View File
@@ -110,16 +110,7 @@ class MenuitemTagHandler:
values['icon'] = 'tryton-new'
if values.get('groups'):
g_names = values['groups'].split(',')
groups_value = []
for group in g_names:
if group.startswith('-'):
group_id = self.mh.get_id(group[1:])
groups_value.append(('remove', group_id))
else:
group_id = self.mh.get_id(group)
groups_value.append(('add', group_id))
values['groups'] = groups_value
raise Exception("Please use separate records for groups")
if not values.get('name'):
if not action_name:
@@ -205,17 +196,8 @@ class RecordTagHandler:
search_model = self.model._columns[field_name].model_name
f_obj = self.mh.pool.get(search_model)
with Transaction().set_context(active_test=False):
answer = f_obj.browse(f_obj.search(safe_eval(search_attr)))
if not answer: return
if self.model._columns[field_name]._type == 'many2many':
self.values[field_name] = [
('set', [x['id'] for x in answer]),
]
elif self.model._columns[field_name]._type == 'many2one':
self.values[field_name] = answer[0]['id']
self.values[field_name], = \
f_obj.search(safe_eval(search_attr))
elif ref_attr:
self.values[field_name] = self.mh.get_id(ref_attr)
@@ -527,7 +509,7 @@ class TrytondXmlHandler(sax.handler.ContentHandler):
ref_id = ref_id[0]
return ref_mode + ',' + str(ref_id)
elif field_type in ['one2many', 'many2many']:
raise Unhandled_field()
raise Unhandled_field("Unhandled field %s" % key)
else:
return browse_record[key]
@@ -695,13 +677,7 @@ class TrytondXmlHandler(sax.handler.ContentHandler):
to_update = {}
for key in values:
try:
db_field = self._clean_value(key, db_val, object_ref)
except Unhandled_field:
logging.getLogger("convert").info(
'Field %s on %s : integrity not tested.'%(key, model))
to_update[key] = values[key]
continue
db_field = self._clean_value(key, db_val, object_ref)
# if the fs value is the same has in the db, whe ignore it
val = values[key]
@@ -813,11 +789,7 @@ class TrytondXmlHandler(sax.handler.ContentHandler):
if not db_val:
db_val = object_ref.browse(db_id)
for key in to_update:
try:
values[key] = self._clean_value(
key, db_val, object_ref)
except Unhandled_field:
continue
values[key] = self._clean_value( key, db_val, object_ref)
if module != self.module:
temp_values = old_values.copy()
@@ -904,11 +876,7 @@ class TrytondXmlHandler(sax.handler.ContentHandler):
# in the model_data table:
db_val = object_ref.browse(db_id)
for key in values:
try:
values[key] = self._clean_value(key, db_val,
object_ref)
except Unhandled_field:
continue
values[key] = self._clean_value(key, db_val, object_ref)
for table in inherit_db_ids.keys():
self.modeldata_obj.create({
+1 -1
View File
@@ -21,7 +21,7 @@ class Action(ModelSQL, ModelView):
usage = fields.Char('Usage')
keywords = fields.One2Many('ir.action.keyword', 'action',
'Keywords')
groups = fields.Many2Many('ir.action-res.group', 'action_id', 'gid',
groups = fields.Many2Many('ir.action-res.group', 'action', 'group',
'Groups')
icon = fields.Many2One('ir.ui.icon', 'Icon')
active = fields.Boolean('Active', select=2)
+4 -4
View File
@@ -264,8 +264,8 @@ class ModelAccess(ModelSQL, ModelView):
'JOIN "%s" AS m '
'ON (a.model = m.id) '
'LEFT JOIN "%s" AS gu '
'ON (gu.gid = a."group") '
'WHERE m.model = %%s AND (gu.uid = %%s OR a."group" IS NULL)'
'ON (gu."group" = a."group") '
'WHERE m.model = %%s AND (gu."user" = %%s OR a."group" IS NULL)'
% (mode, self._table, ir_model_obj._table,
user_group_obj._table),
(model_name, Transaction().user))
@@ -383,8 +383,8 @@ class ModelFieldAccess(ModelSQL, ModelView):
'JOIN "%s" AS m '
'ON (f.model = m.id) '
'LEFT JOIN "%s" AS gu '
'ON (gu.gid = a."group") '
'WHERE m.model = %%s AND (gu.uid = %%s OR a."group" IS NULL) '
'ON (gu."group" = a."group") '
'WHERE m.model = %%s AND (gu."user" = %%s OR a."group" IS NULL) '
'GROUP BY f.name'
% (mode, self._table, ir_model_field_obj._table,
ir_model_obj._table, user_group_obj._table),
+12 -12
View File
@@ -27,9 +27,9 @@ class RuleGroup(ModelSQL, ModelView):
rules = fields.One2Many('ir.rule', 'rule_group', 'Tests',
help="The rule is satisfied if at least one test is True")
groups = fields.Many2Many('ir.rule.group-res.group',
'rule_group_id', 'group_id', 'Groups')
'rule_group', 'group', 'Groups')
users = fields.Many2Many('ir.rule.group-res.user',
'rule_group_id', 'user_id', 'Users')
'rule_group', 'user', 'Users')
perm_read = fields.Boolean('Read Access')
perm_write = fields.Boolean('Write Access')
perm_create = fields.Boolean('Create Access')
@@ -175,14 +175,14 @@ class Rule(ModelSQL, ModelView):
"WHERE m.model = %s "
"AND g.perm_" + mode + " "
"AND (g.id IN (" \
'SELECT rule_group_id ' \
'SELECT rule_group ' \
'FROM "' + rule_group_user_obj._table + '" ' \
"WHERE user_id = %s " \
"UNION SELECT rule_group_id " \
'WHERE "user" = %s ' \
"UNION SELECT rule_group " \
'FROM "' + rule_group_group_obj._table + '" g_rel ' \
'JOIN "' + user_group_obj._table + '" u_rel ' \
"ON (g_rel.group_id = u_rel.gid) " \
"WHERE u_rel.uid = %s) " \
'ON (g_rel."group" = u_rel."group") ' \
'WHERE u_rel."user" = %s) ' \
"OR default_p " \
"OR g.global_p)",
(model_name, Transaction().user, Transaction().user))
@@ -224,14 +224,14 @@ class Rule(ModelSQL, ModelView):
'WHERE m.model = %s ' \
'AND (g.id NOT IN (SELECT rule_group ' \
'FROM "' + self._table + '")) ' \
'AND (g.id IN (SELECT rule_group_id ' \
'AND (g.id IN (SELECT rule_group ' \
'FROM "' + rule_group_user_obj._table + '" ' \
'WHERE user_id = %s ' \
'UNION SELECT rule_group_id ' \
'WHERE "user" = %s ' \
'UNION SELECT rule_group ' \
'FROM "' + rule_group_group_obj._table + '" g_rel ' \
'JOIN "' + user_group_obj._table + '" u_rel ' \
'ON g_rel.group_id = u_rel.gid ' \
'WHERE u_rel.uid = %s))',
'ON g_rel."group" = u_rel."group" ' \
'WHERE u_rel."user" = %s))',
(model_name, user_id, user_id))
fetchone = cursor.fetchone()
if fetchone:
+1 -1
View File
@@ -72,7 +72,7 @@ class UIMenu(ModelSQL, ModelView):
parent = fields.Many2One('ir.ui.menu', 'Parent Menu', select=1,
ondelete='CASCADE')
groups = fields.Many2Many('ir.ui.menu-res.group',
'menu_id', 'gid', 'Groups')
'menu', 'group', 'Groups')
complete_name = fields.Function(fields.Char('Complete Name',
order_field='name'), 'get_rec_name', searcher='search_rec_name')
icon = fields.Selection('list_icons', 'Icon')
+2 -2
View File
@@ -37,10 +37,10 @@ class Group(ModelSQL, ModelView):
field_access = fields.One2Many('ir.model.field.access', 'group',
'Access Field')
rule_groups = fields.Many2Many('ir.rule.group-res.group',
'group_id', 'rule_group_id', 'Rules',
'group', 'rule_group', 'Rules',
domain=[('global_p', '!=', True), ('default_p', '!=', True)])
menu_access = MenuMany2Many('ir.ui.menu-res.group',
'gid', 'menu_id', 'Access Menu')
'group', 'menu', 'Access Menu')
def __init__(self):
super(Group, self).__init__()
+6 -1
View File
@@ -57,8 +57,13 @@ this repository contains the full copyright notices and license terms. -->
<field name="view" ref="group_view_form"/>
<field name="act_window" ref="act_group_form"/>
</record>
<menuitem parent="res.menu_res" groups="group_admin"
<menuitem parent="res.menu_res"
action="act_group_form" id="menu_group_form"/>
<record model="ir.ui.menu-res.group" id="menu_group_form_admin">
<field name="menu" ref="menu_group_form"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.model.access" id="access_group">
<field name="model" search="[('model', '=', 'res.group')]"/>
<field name="perm_read" eval="True"/>
+34 -8
View File
@@ -10,9 +10,9 @@ class UIMenuGroup(ModelSQL):
"UI Menu - Group"
_name = 'ir.ui.menu-res.group'
_description = __doc__
menu_id = fields.Many2One('ir.ui.menu', 'Menu', ondelete='CASCADE',
menu = fields.Many2One('ir.ui.menu', 'Menu', ondelete='CASCADE',
select=1, required=True)
gid = fields.Many2One('res.group', 'Group', ondelete='CASCADE',
group = fields.Many2One('res.group', 'Group', ondelete='CASCADE',
select=1, required=True)
def init(self, module_name):
@@ -21,6 +21,10 @@ class UIMenuGroup(ModelSQL):
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')
# Migration from 2.0 menu_id and gid renamed into menu group
table = TableHandler(cursor, self, module_name)
table.column_rename('menu_id', 'menu')
table.column_rename('gid', 'group')
super(UIMenuGroup, self).init(module_name)
def create(self, vals):
@@ -48,9 +52,9 @@ class ActionGroup(ModelSQL):
"Action - Group"
_name = 'ir.action-res.group'
_description = __doc__
action_id = fields.Many2One('ir.action', 'Action', ondelete='CASCADE',
action = fields.Many2One('ir.action', 'Action', ondelete='CASCADE',
select=1, required=True)
gid = fields.Many2One('res.group', 'Group', ondelete='CASCADE',
group = fields.Many2One('res.group', 'Group', ondelete='CASCADE',
select=1, required=True)
def init(self, module_name):
@@ -59,15 +63,27 @@ class ActionGroup(ModelSQL):
TableHandler.table_rename(cursor, 'ir_action_group_rel', self._table)
TableHandler.sequence_rename(cursor, 'ir_action_group_rel_id_seq',
self._table + '_id_seq')
# Migration from 2.0 action_id and gid renamed into action and group
table = TableHandler(cursor, self, module_name)
table.column_rename('action_id', 'action')
table.column_rename('gid', 'group')
super(ActionGroup, self).init(module_name)
def create(self, vals):
action_obj = Pool().get('ir.action')
if vals.get('action'):
vals = vals.copy()
vals['action'] = action_obj.get_action_id(vals['action'])
res = super(ActionGroup, self).create(vals)
# Restart the cache on the domain_get method
Pool().get('ir.rule').domain_get.reset()
return res
def write(self, ids, vals):
action_obj = Pool().get('ir.action')
if vals.get('action'):
vals = vals.copy()
vals['action'] = action_obj.get_action_id(vals['action'])
res = super(ActionGroup, self).write(ids, vals)
# Restart the cache on the domain_get method
Pool().get('ir.rule').domain_get.reset()
@@ -106,9 +122,9 @@ class RuleGroupGroup(ModelSQL):
"Rule Group - Group"
_name = 'ir.rule.group-res.group'
_description = __doc__
rule_group_id = fields.Many2One('ir.rule.group', 'Rule Group',
rule_group = fields.Many2One('ir.rule.group', 'Rule Group',
ondelete='CASCADE', select=1, required=True)
group_id = fields.Many2One('res.group', 'Group', ondelete='CASCADE',
group = fields.Many2One('res.group', 'Group', ondelete='CASCADE',
select=1, required=True)
def init(self, module_name):
@@ -117,6 +133,11 @@ class RuleGroupGroup(ModelSQL):
TableHandler.table_rename(cursor, 'group_rule_group_rel', self._table)
TableHandler.sequence_rename(cursor, 'group_rule_group_rel_id_seq',
self._table + '_id_seq')
# Migration from 2.0 rule_group_id and group_id renamed into rule_group
# and group
table = TableHandler(cursor, self, module_name)
table.column_rename('rule_group_id', 'rule_group')
table.column_rename('group_id', 'group')
super(RuleGroupGroup, self).init(module_name)
RuleGroupGroup()
@@ -126,9 +147,9 @@ class RuleGroupUser(ModelSQL):
"Rule Group - User"
_name = 'ir.rule.group-res.user'
_description = __doc__
rule_group_id = fields.Many2One('ir.rule.group', 'Rule Group',
rule_group = fields.Many2One('ir.rule.group', 'Rule Group',
ondelete='CASCADE', select=1, required=True)
user_id = fields.Many2One('res.user', 'User', ondelete='CASCADE',
user = fields.Many2One('res.user', 'User', ondelete='CASCADE',
select=1, required=True)
def init(self, module_name):
@@ -137,6 +158,11 @@ class RuleGroupUser(ModelSQL):
TableHandler.table_rename(cursor, 'user_rule_group_rel', self._table)
TableHandler.sequence_rename(cursor, 'user_rule_group_rel_id_seq',
self._table + '_id_seq')
# Migration from 2.0 rule_group_id and user_id renamed into rule_group
# and user
table = TableHandler(cursor, self, module_name)
table.column_rename('rule_group_id', 'rule_group')
table.column_rename('user_id', 'user')
super(RuleGroupUser, self).init(module_name)
RuleGroupUser()
+139 -91
View File
@@ -425,141 +425,186 @@ this repository contains the full copyright notices and license terms. -->
<field name="operand">False</field>
<field name="rule_group" ref="rule_group_action"/>
</record>
<record model="ir.action.wizard" id="ir.act_module_install_upgrade">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.action-res.group" id="act_module_install_upgrade_group_admin">
<field name="action" ref="ir.act_module_install_upgrade"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.action.wizard" id="ir.act_translation_update">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.action-res.group" id="act_translation_update_group_admin">
<field name="action" ref="ir.act_translation_update"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.action.wizard" id="ir.act_translation_export">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.action-res.group" id="act_translation_export_group_admin">
<field name="action" ref="ir.act_translation_export"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_administration">
<field name="groups" eval="[('add', ref('group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_administration_group_admin">
<field name="menu" ref="ir.menu_administration"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_ui">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_ui_group_admin">
<field name="menu" ref="ir.menu_ui"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_icon_form">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_icon_form_group_admin">
<field name="menu" ref="ir.menu_icon_form"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_menu_list">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_menu_tree_group_admin">
<field name="menu" ref="ir.menu_menu_list"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_view">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_view_group_admin">
<field name="menu" ref="ir.menu_view"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_view_sc">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_view_sc_group_admin">
<field name="menu" ref="ir.menu_view_sc"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_view_tree_width">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_view_tree_width_group_admin">
<field name="menu" ref="ir.menu_view_tree_width"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_action">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_action_group_admin">
<field name="menu" ref="ir.menu_action"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_act_action">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_act_action_group_admin">
<field name="menu" ref="ir.menu_act_action"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_action_report_form">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_action_report_form_group_admin">
<field name="menu" ref="ir.menu_action_report_form"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_action_act_window">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_action_act_window_group_admin">
<field name="menu" ref="ir.menu_action_act_window"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_action_wizard">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_action_wizard_group_admin">
<field name="menu" ref="ir.menu_action_wizard"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_action_wizard_size">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_action_wizard_size_group_admin">
<field name="menu" ref="ir.menu_action_wizard_size"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_action_url">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_action_url_group_admin">
<field name="menu" ref="ir.menu_action_url"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_models">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_models_group_admin">
<field name="menu" ref="ir.menu_models"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_model_form">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_model_form_group_admin">
<field name="menu" ref="ir.menu_model_form"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.model_model_fields_form">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="model_model_fields_form_group_admin">
<field name="menu" ref="ir.model_model_fields_form"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_model_access_form">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_model_access_form_group_admin">
<field name="menu" ref="ir.menu_model_access_form"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_model_field_access_form">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_model_field_access_form_group_admin">
<field name="menu" ref="ir.menu_model_field_access_form"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_sequences">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_sequences_group_admin">
<field name="menu" ref="ir.menu_sequences"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_sequence_form">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_sequence_form_group_admin">
<field name="menu" ref="ir.menu_sequence_form"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_sequence_strict_form">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_sequence_strict_form_group_admin">
<field name="menu" ref="ir.menu_sequence_strict_form"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_ir_sequence_type">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_ir_sequence_type_group_admin">
<field name="menu" ref="ir.menu_ir_sequence_type"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_attachment_form">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_attachment_form_group_admin">
<field name="menu" ref="ir.menu_attachment_form"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_scheduler">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_scheduler_group_admin">
<field name="menu" ref="ir.menu_scheduler"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_cron_form">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_cron_form_group_admin">
<field name="menu" ref="ir.menu_cron_form"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_localization">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_localization_group_admin">
<field name="menu" ref="ir.menu_localization"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_lang_form">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_lang_form_group_admin">
<field name="menu" ref="ir.menu_lang_form"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_translation_form">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_translation_form_group_admin">
<field name="menu" ref="ir.menu_translation_form"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_translation_set_report">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_translation_set_report_group_admin">
<field name="menu" ref="ir.menu_translation_set_report"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_translation_clean">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_translation_clean_group_admin">
<field name="menu" ref="ir.menu_translation_clean"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_translation_update">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_translation_update_group_admin">
<field name="menu" ref="ir.menu_translation_update"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_translation_export">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_translation_export_group_admin">
<field name="menu" ref="ir.menu_translation_export"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_export_form">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_export_form_group_admin">
<field name="menu" ref="ir.menu_export_form"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_rule_group_form">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_rule_group_form_group_admin">
<field name="menu" ref="ir.menu_rule_group_form"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_property_form_default">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_property_form_default_group_admin">
<field name="menu" ref="ir.menu_property_form_default"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_property_form">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_property_form_group_admin">
<field name="menu" ref="ir.menu_property_form"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_modules">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_modules_group_admin">
<field name="menu" ref="ir.menu_modules"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_module_form">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_module_form_group_admin">
<field name="menu" ref="ir.menu_module_form"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_config_wizard_item_form">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_config_wizard_item_form_group_admin">
<field name="menu" ref="ir.menu_config_wizard_item_form"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_module_install_upgrade">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_module_install_upgrade_group_admin">
<field name="menu" ref="ir.menu_module_install_upgrade"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.menu" id="ir.menu_trigger_form">
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
<record model="ir.ui.menu-res.group" id="menu_trigger_form_group_admin">
<field name="menu" ref="ir.menu_trigger_form"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.view" id="module_view_form">
<field name="model">ir.module.module</field>
@@ -661,9 +706,12 @@ this repository contains the full copyright notices and license terms. -->
<record model="res.user" id="user_trigger">
<field name="login">user_cron_trigger</field>
<field name="name">Cron Trigger</field>
<field name="groups" eval="[('add', ref('group_admin'))]"/>
<field name="active" eval="False"/>
</record>
<record model="res.user-res.group" id="user_trigger_group_admin">
<field name="user" ref="user_trigger"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.cron" id="cron_trigger_time">
<field name="name">Run On Time Triggers</field>
+11 -2
View File
@@ -90,8 +90,13 @@ this repository contains the full copyright notices and license terms. -->
<field name="view" ref="request_view_form"/>
<field name="act_window" ref="act_request_form"/>
</record>
<menuitem parent="res.menu_res" groups="group_admin"
<menuitem parent="res.menu_res"
action="act_request_form" id="menu_request_form"/>
<record model="ir.ui.menu-res.group" id="menu_request_form_group_admin">
<field name="menu" ref="menu_request_form"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.view" id="request_link_view_form">
<field name="model">res.request.link</field>
<field name="type">form</field>
@@ -136,8 +141,12 @@ this repository contains the full copyright notices and license terms. -->
<field name="view" ref="request_link_view_form"/>
<field name="act_window" ref="act_request_link_form"/>
</record>
<menuitem parent="res.menu_res" groups="group_admin"
<menuitem parent="res.menu_res"
action="act_request_link_form" id="menu_request_link_form"/>
<record model="ir.ui.menu-res.group" id="menu_request_link_form_group_admin">
<field name="menu" ref="menu_request_link_form"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.view" id="request_history_view_tree">
<field name="model">res.request.history</field>
+9 -5
View File
@@ -37,9 +37,9 @@ class User(ModelSQL, ModelView):
menu = fields.Many2One('ir.action', 'Menu Action',
domain=[('usage','=','menu')], required=True)
groups = fields.Many2Many('res.user-res.group',
'uid', 'gid', 'Groups')
'user', 'group', 'Groups')
rule_groups = fields.Many2Many('ir.rule.group-res.user',
'user_id', 'rule_group_id', 'Rules',
'user', 'rule_group', 'Rules',
domain=[('global_p', '!=', True), ('default_p', '!=', True)])
language = fields.Many2One('ir.lang', 'Language',
domain=['OR', ('translatable', '=', True), ('code', '=', 'en_US')])
@@ -403,9 +403,9 @@ class UserGroup(ModelSQL):
'User - Group'
_name = 'res.user-res.group'
_description = __doc__
uid = fields.Many2One('res.user', 'User', ondelete='CASCADE', select=1,
user = fields.Many2One('res.user', 'User', ondelete='CASCADE', select=1,
required=True)
gid = fields.Many2One('res.group', 'Group', ondelete='CASCADE', select=1,
group = fields.Many2One('res.group', 'Group', ondelete='CASCADE', select=1,
required=True)
def init(self, module_name):
@@ -414,6 +414,10 @@ class UserGroup(ModelSQL):
TableHandler.table_rename(cursor, 'res_group_user_rel', self._table)
TableHandler.sequence_rename(cursor, 'res_group_user_rel_id_seq',
self._table + '_id_seq')
# Migration from 2.0 uid and gid rename into user and group
table = TableHandler(cursor, self, module_name)
table.column_rename('uid', 'user')
table.column_rename('gid', 'group')
super(UserGroup, self).init(module_name)
UserGroup()
@@ -422,7 +426,7 @@ UserGroup()
class Group(ModelSQL, ModelView):
"Group"
_name = "res.group"
users = fields.Many2Many('res.user-res.group', 'gid', 'uid', 'Users')
users = fields.Many2Many('res.user-res.group', 'group', 'user', 'Users')
Group()
+9 -2
View File
@@ -9,7 +9,10 @@ this repository contains the full copyright notices and license terms. -->
<field name="signature">Administrator</field>
<field name="action" ref="ir.act_module_config_wizard"/>
<field name="menu" ref="ir.act_menu_tree"/>
<field name="groups" eval="[('add', ref('group_admin'))]"/>
</record>
<record model="res.user-res.group" id="user_admin_group_admin">
<field name="user" ref="user_admin"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.ui.view" id="user_view_form">
<field name="model">res.user</field>
@@ -119,8 +122,12 @@ this repository contains the full copyright notices and license terms. -->
<field name="view" ref="user_view_form"/>
<field name="act_window" ref="act_user_form"/>
</record>
<menuitem parent="res.menu_res" groups="group_admin"
<menuitem parent="res.menu_res"
action="act_user_form" id="menu_user_form"/>
<record model="ir.ui.menu-res.group" id="menu_user_form_group_admin">
<field name="menu" ref="menu_user_form"/>
<field name="group" ref="group_admin"/>
</record>
<record model="ir.model.access" id="access_user">
<field name="model" search="[('model', '=', 'res.user')]"/>
+16 -4
View File
@@ -3,8 +3,13 @@
this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<menuitem name="WebDAV" id="menu_webdav" groups="res.group_admin"
<menuitem name="WebDAV" id="menu_webdav"
parent="ir.menu_administration"/>
<record model="ir.ui.menu-res.group" id="menu_webdav_group_admin">
<field name="menu" ref="menu_webdav"/>
<field name="group" ref="res.group_admin"/>
</record>
<record model="ir.ui.view" id="collection_view_tree">
<field name="model">webdav.collection</field>
<field name="type">tree</field>
@@ -57,8 +62,12 @@ this repository contains the full copyright notices and license terms. -->
<field name="view" ref="collection_view_form"/>
<field name="act_window" ref="act_collection_tree"/>
</record>
<menuitem parent="menu_webdav" groups="res.group_admin"
<menuitem parent="menu_webdav"
action="act_collection_tree" id="menu_collection_tree"/>
<record model="ir.ui.menu-res.group" id="menu_collection_tree_group_admin">
<field name="menu" ref="menu_collection_tree"/>
<field name="group" ref="res.group_admin"/>
</record>
<record model="ir.action.act_window" id="act_collection_form">
<field name="name">Collections</field>
@@ -77,7 +86,10 @@ this repository contains the full copyright notices and license terms. -->
<field name="act_window" ref="act_collection_form"/>
</record>
<menuitem name="New Collection" parent="menu_collection_tree"
action="act_collection_form" id="menu_collection_form"
groups="res.group_admin"/>
action="act_collection_form" id="menu_collection_form"/>
<record model="ir.ui.menu-res.group" id="menu_collection_form_group_admin">
<field name="menu" ref="menu_collection_form"/>
<field name="group" ref="res.group_admin"/>
</record>
</data>
</tryton>
+34 -6
View File
@@ -4,7 +4,12 @@ this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<menuitem name="Workflow" id="menu_workflow"
parent="ir.menu_administration" groups="res.group_admin"/>
parent="ir.menu_administration"/>
<record model="ir.ui.menu-res.group" id="menu_workflow_group_admin">
<field name="menu" ref="menu_workflow"/>
<field name="group" ref="res.group_admin"/>
</record>
<record model="ir.ui.view" id="workflow_view_form">
<field name="model">workflow</field>
<field name="type">form</field>
@@ -51,8 +56,13 @@ this repository contains the full copyright notices and license terms. -->
<field name="view" ref="workflow_view_form"/>
<field name="act_window" ref="act_workflow_form"/>
</record>
<menuitem parent="menu_workflow" groups="res.group_admin"
<menuitem parent="menu_workflow"
action="act_workflow_form" id="menu_workflow_form"/>
<record model="ir.ui.menu-res.group" id="menu_workflow_form_group_admin">
<field name="menu" ref="menu_workflow"/>
<field name="group" ref="res.group_admin"/>
</record>
<record model="ir.model.access" id="access_workflow">
<field name="model" search="[('model', '=', 'workflow')]"/>
<field name="perm_read" eval="True"/>
@@ -180,8 +190,13 @@ this repository contains the full copyright notices and license terms. -->
<field name="view" ref="activity_view_form"/>
<field name="act_window" ref="act_activity_form"/>
</record>
<menuitem parent="menu_workflow" groups="res.group_admin"
<menuitem parent="menu_workflow"
action="act_activity_form" id="menu_activity_form"/>
<record model="ir.ui.menu-res.group" id="menu_activity_form_group_admin">
<field name="menu" ref="menu_activity_form"/>
<field name="group" ref="res.group_admin"/>
</record>
<record model="ir.model.access" id="access_workflow_activity">
<field name="model" search="[('model', '=', 'workflow.activity')]"/>
<field name="perm_read" eval="True"/>
@@ -254,8 +269,13 @@ this repository contains the full copyright notices and license terms. -->
<field name="view" ref="transition_view_form"/>
<field name="act_window" ref="act_transition_form"/>
</record>
<menuitem parent="menu_workflow" groups="res.group_admin"
<menuitem parent="menu_workflow"
action="act_transition_form" id="menu_transition_form"/>
<record model="ir.ui.menu-res.group" id="menu_transition_form_group_admin">
<field name="menu" ref="menu_transition_form"/>
<field name="group" ref="res.group_admin"/>
</record>
<record model="ir.model.access" id="access_workflow_transition">
<field name="model" search="[('model', '=', 'workflow.transition')]"/>
<field name="perm_read" eval="True"/>
@@ -322,8 +342,12 @@ this repository contains the full copyright notices and license terms. -->
<field name="view" ref="instance_view_form"/>
<field name="act_window" ref="act_instance_form"/>
</record>
<menuitem parent="menu_workflow" groups="res.group_admin"
<menuitem parent="menu_workflow"
action="act_instance_form" id="menu_instance_form"/>
<record model="ir.ui.menu-res.group" id="menu_instance_form_group_admin">
<field name="menu" ref="menu_instance_form"/>
<field name="group" ref="res.group_admin"/>
</record>
<record model="ir.ui.view" id="workitem_view_form">
<field name="model">workflow.workitem</field>
@@ -373,7 +397,11 @@ this repository contains the full copyright notices and license terms. -->
<field name="view" ref="workitem_view_form"/>
<field name="act_window" ref="act_workitem_form"/>
</record>
<menuitem parent="menu_workflow" groups="res.group_admin"
<menuitem parent="menu_workflow"
action="act_workitem_form" id="menu_workitem_form"/>
<record model="ir.ui.menu-res.group" id="menu_workitem_form_group_admin">
<field name="menu" ref="menu_workitem_form"/>
<field name="group" ref="res.group_admin"/>
</record>
</data>
</tryton>