Remove _columns dict and put it directly in the object to reflect better the

browserecord
This commit is contained in:
Cédric Krier committed 2008-02-26 12:40:40 +01:00
1 parent 164769c050
commit c6948c3f35
24 files changed
+504 -595

No files matched your search

+52 -66
View File
@@ -8,15 +8,13 @@ class Action(OSV):
"Action"
_name = 'ir.action'
_description = __doc__
_columns = {
'name': fields.char('Name', required=True, size=64, translate=True),
'type': fields.char('Type', required=True, size=32, readonly=True),
'usage': fields.char('Usage', size=32),
'keywords': fields.one2many('ir.action.keyword', 'action',
'Keywords'),
'groups': fields.Many2Many('res.group', 'ir_action_group_rel',
'action_id', 'gid', 'Groups'),
}
name = fields.char('Name', required=True, size=64, translate=True)
type = fields.char('Type', required=True, size=32, readonly=True)
usage = fields.char('Usage', size=32)
keywords = fields.one2many('ir.action.keyword', 'action',
'Keywords')
groups = fields.Many2Many('res.group', 'ir_action_group_rel',
'action_id', 'gid', 'Groups')
_defaults = {
'usage': lambda *a: False,
}
@@ -49,18 +47,16 @@ class ActionKeyword(OSV):
"Action keyword"
_name = 'ir.action.keyword'
_description = __doc__
_columns = {
'keyword': fields.Selection([
keyword = fields.Selection([
('tree_open', 'Open tree'),
('tree_action', 'Action tree'),
('form_print', 'Print form'),
('form_action', 'Action form'),
('form_relate', 'Form relate'),
], string='Keyword', required=True),
'model': fields.Reference('Model', selection='models_get', size=128),
'action': fields.many2one('ir.action', 'Action',
ondelete='CASCADE'),
}
], string='Keyword', required=True)
model = fields.Reference('Model', selection='models_get', size=128)
action = fields.many2one('ir.action', 'Action',
ondelete='CASCADE')
def __init__(self, pool):
super(ActionKeyword, self).__init__(pool)
@@ -170,16 +166,14 @@ class ActionReport(OSV):
_sequence = 'ir_action_id_seq'
_description = __doc__
_inherits = {'ir.action': 'action'}
_columns = {
'model': fields.Char('Model', size=64, required=True),
'report_name': fields.Char('Internal Name', size=64, required=True),
'report': fields.Char('Path', size=128),
'report_content_data': fields.Binary('Content'),
'report_content': fields.Function('report_content',
fnct_inv='report_content_inv', type='binary',
string='Content',),
'action': fields.Many2One('ir.action', 'Action', required=True),
}
model = fields.Char('Model', size=64, required=True)
report_name = fields.Char('Internal Name', size=64, required=True)
report = fields.Char('Path', size=128)
report_content_data = fields.Binary('Content')
report_content = fields.Function('get_report_content',
fnct_inv='report_content_inv', type='binary',
string='Content')
action = fields.Many2One('ir.action', 'Action', required=True)
_defaults = {
'type': lambda *a: 'ir.action.report',
'report_content': lambda *a: False,
@@ -189,7 +183,7 @@ class ActionReport(OSV):
'The internal name must be unique!'),
]
def report_content(self, cursor, user, ids, name, arg, context=None):
def get_report_content(self, cursor, user, ids, name, arg, context=None):
res = {}
for report in self.browse(cursor, user, ids, context=context):
data = report[name + '_data']
@@ -224,24 +218,22 @@ class ActionActWindow(OSV):
_sequence = 'ir_action_id_seq'
_description = __doc__
_inherits = {'ir.action': 'action'}
_columns = {
'domain': fields.Char('Domain Value', size=250),
'context': fields.Char('Context Value', size=250),
'res_model': fields.Char('Model', size=64),
'src_model': fields.Char('Source model', size=64),
'view_type': fields.Selection([('tree','Tree'), ('form','Form')],
string='Type of view'),
'usage': fields.Char('Action Usage', size=32),
'act_window_views': fields.One2Many('ir.action.act_window.view',
'act_window', 'Views'),
'views': fields.Function('views_get_fnc', type='binary',
string='Views'),
'limit': fields.Integer('Limit',
help='Default limit for the list view'),
'auto_refresh': fields.Integer('Auto-Refresh',
help='Add an auto-refresh on the view'),
'action': fields.Many2One('ir.action', 'Action', required=True),
}
domain = fields.Char('Domain Value', size=250)
context = fields.Char('Context Value', size=250)
res_model = fields.Char('Model', size=64)
src_model = fields.Char('Source model', size=64)
view_type = fields.Selection([('tree','Tree'), ('form','Form')],
string='Type of view')
usage = fields.Char('Action Usage', size=32)
act_window_views = fields.One2Many('ir.action.act_window.view',
'act_window', 'Views')
views = fields.Function('views_get_fnc', type='binary',
string='Views')
limit = fields.Integer('Limit',
help='Default limit for the list view')
auto_refresh = fields.Integer('Auto-Refresh',
help='Add an auto-refresh on the view')
action = fields.Many2One('ir.action', 'Action', required=True)
_defaults = {
'type': lambda *a: 'ir.action.act_window',
'view_type': lambda *a: 'form',
@@ -265,15 +257,13 @@ class ActionActWindowView(OSV):
_name = 'ir.action.act_window.view'
_rec_name = 'view'
_description = __doc__
_columns = {
'sequence': fields.Integer('Sequence'),
'view': fields.Many2One('ir.ui.view', 'View', required=True),
'act_window': fields.Many2One('ir.action.act_window', 'Action',
ondelete='CASCADE'),
'multi': fields.Boolean('On multiple doc.',
help="If set to true, the action will not be displayed \n" \
"on the right toolbar of a form views."),
}
sequence = fields.Integer('Sequence')
view = fields.Many2One('ir.ui.view', 'View', required=True)
act_window = fields.Many2One('ir.action.act_window', 'Action',
ondelete='CASCADE')
multi = fields.Boolean('On multiple doc.',
help="If set to true, the action will not be displayed \n" \
"on the right toolbar of a form views.")
_defaults = {
'multi': lambda *a: False,
}
@@ -288,10 +278,8 @@ class ActionWizard(OSV):
_sequence = 'ir_action_id_seq'
_description = __doc__
_inherits = {'ir.action': 'action'}
_columns = {
'wiz_name': fields.char('Wizard name', size=64, required=True),
'action': fields.many2one('ir.action', 'Action', required=True),
}
wiz_name = fields.char('Wizard name', size=64, required=True)
action = fields.many2one('ir.action', 'Action', required=True)
_defaults = {
'type': lambda *a: 'ir.action.wizard',
}
@@ -305,14 +293,12 @@ class ActionURL(OSV):
_sequence = 'ir_action_id_seq'
_description = __doc__
_inherits = {'ir.action': 'action'}
_columns = {
'url': fields.text('Action Url',required=True),
'target': fields.selection([
('new', 'New Window'),
('self', 'This Window'),
], 'Action Target', required=True),
'action': fields.many2one('ir.action', 'Action', required=True),
}
url = fields.text('Action Url',required=True)
target = fields.selection([
('new', 'New Window'),
('self', 'This Window'),
], 'Action Target', required=True)
action = fields.many2one('ir.action', 'Action', required=True)
_defaults = {
'type': lambda *a: 'ir.action.act_url',
'target': lambda *a: 'new',
+13 -15
View File
@@ -9,21 +9,19 @@ class Attachment(OSV):
"Attachment"
_name = 'ir.attachment'
_description = __doc__
_columns = {
'name': fields.Char('Attachment Name',size=64, required=True),
'datas': fields.Function('datas', fnct_inv='datas_inv',
type='binary', string='Datas'),
'description': fields.Text('Description'),
'res_model': fields.Char('Resource Model',size=64,
readonly=True, required=True),
'res_id': fields.Integer('Resource ID', readonly=True,
required=True),
'link': fields.Char('Link', size=256),
'digest': fields.Char('Digest', size=32),
'collision': fields.Integer('Collision'),
'datas_size': fields.Function('datas', type='integer',
string='Datas size'),
}
name = fields.Char('Attachment Name',size=64, required=True)
datas = fields.Function('datas', fnct_inv='datas_inv',
type='binary', string='Datas')
description = fields.Text('Description')
res_model = fields.Char('Resource Model',size=64,
readonly=True, required=True)
res_id = fields.Integer('Resource ID', readonly=True,
required=True)
link = fields.Char('Link', size=256)
digest = fields.Char('Digest', size=32)
collision = fields.Integer('Collision')
datas_size = fields.Function('datas', type='integer',
string='Datas size')
_defaults = {
'collision': lambda *a: 0,
}
+22 -25
View File
@@ -27,31 +27,28 @@ class Cron(OSV, Agent):
"Cron"
_name = "ir.cron"
_description = __doc__
_columns = {
'name': fields.char('Name', size=60, required=True),
'user': fields.many2one('res.user', 'User', required=True),
'active': fields.boolean('Active'),
'interval_number': fields.integer('Interval Number'),
'interval_type': fields.selection( [
('minutes', 'Minutes'),
('hours', 'Hours'),
('days', 'Days'),
('weeks', 'Weeks'),
('months', 'Months'),
], 'Interval Unit'),
'numbercall': fields.integer('Number of calls',
help='Number of time the function is called,\n' \
'a negative number indicates that the function ' \
'will always be called'),
'doall' : fields.boolean('Repeat missed'),
'nextcall' : fields.datetime('Next call date', required=True),
'model': fields.char('Model', size=64),
'function': fields.char('Function', size=64),
'args': fields.text('Arguments'),
'priority': fields.integer('Priority',
help='0=Very Urgent\n10=Not urgent')
}
name = fields.Char('Name', size=60, required=True)
user = fields.Many2One('res.user', 'User', required=True)
active = fields.Boolean('Active')
interval_number = fields.Integer('Interval Number')
interval_type = fields.Selection( [
('minutes', 'Minutes'),
('hours', 'Hours'),
('days', 'Days'),
('weeks', 'Weeks'),
('months', 'Months'),
], 'Interval Unit')
numbercall = fields.Integer('Number of calls',
help='Number of time the function is called,\n' \
'a negative number indicates that the function ' \
'will always be called')
doall = fields.Boolean('Repeat missed')
nextcall = fields.DateTime('Next call date', required=True)
model = fields.Char('Model', size=64)
function = fields.Char('Function', size=64)
args = fields.Text('Arguments')
priority = fields.Integer('Priority',
help='0=Very Urgent\n10=Not urgent')
_defaults = {
'nextcall' : lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
'priority' : lambda *a: 5,
+7 -9
View File
@@ -7,15 +7,13 @@ class Default(OSV):
_name = 'ir.default'
_description = __doc__
_rec_name = 'value'
_columns = {
'model': fields.Many2One('ir.model', 'Model', required=True,
ondelete='cascade'),
'field': fields.Many2One('ir.model.field', 'Field', required=True,
ondelete='cascade'),
'value': fields.Text('Value'),
'clause': fields.Text('Clause'),
'user': fields.Many2One('res.user', 'User', ondelete='cascade'),
}
model = fields.Many2One('ir.model', 'Model', required=True,
ondelete='cascade')
field = fields.Many2One('ir.model.field', 'Field', required=True,
ondelete='cascade')
value = fields.Text('Value')
clause = fields.Text('Clause')
user = fields.Many2One('res.user', 'User', ondelete='cascade')
def get_default(self, cursor, user, model, clause, context=None):
res = {}
+7 -11
View File
@@ -6,12 +6,10 @@ class Export(OSV):
"Export"
_name = "ir.export"
_description = __doc__
_columns = {
'name': fields.char('Export name', size=128),
'resource': fields.char('Resource', size=128),
'export_fields': fields.one2many('ir.export.line', 'export',
'Export Id'),
}
name = fields.char('Export name', size=128)
resource = fields.char('Resource', size=128)
export_fields = fields.one2many('ir.export.line', 'export',
'Export Id')
Export()
@@ -20,10 +18,8 @@ class ExportLine(OSV):
"Export line"
_name = 'ir.export.line'
_description = __doc__
_columns = {
'name': fields.char('Field name', size=64),
'export': fields.many2one('ir.export', 'Exportation',
select=True),
}
name = fields.char('Field name', size=64)
export = fields.many2one('ir.export', 'Exportation',
select=True)
ExportLine()
+8 -10
View File
@@ -7,16 +7,14 @@ class Lang(OSV):
_name = "ir.lang"
_log_access = False
_description = __doc__
_columns = {
'name': fields.Char('Name', size=64, required=True),
'code': fields.Char('Code', size=5, required=True),
'translatable': fields.Boolean('Translatable'),
'active': fields.Boolean('Active'),
'direction': fields.Selection([
('ltr', 'Left-to-right'),
('rtl', 'Right-to-left'),
], 'Direction',required=True),
}
name = fields.Char('Name', size=64, required=True)
code = fields.Char('Code', size=5, required=True)
translatable = fields.Boolean('Translatable')
active = fields.Boolean('Active')
direction = fields.Selection([
('ltr', 'Left-to-right'),
('rtl', 'Right-to-left'),
], 'Direction',required=True)
_defaults = {
'active': lambda *a: 1,
'translatable': lambda *a: 0,
+34 -43
View File
@@ -19,13 +19,11 @@ class Model(OSV):
"Model"
_name = 'ir.model'
_description = __doc__
_columns = {
'name': fields.Char('Model name', size=64, translate=True),
'model': fields.Char('Object name', size=64, required=True),
'info': fields.Text('Information'),
'fields': fields.One2Many('ir.model.field', 'model', 'Fields',
required=True),
}
name = fields.Char('Model name', size=64, translate=True)
model = fields.Char('Object name', size=64, required=True)
info = fields.Text('Information')
fields = fields.One2Many('ir.model.field', 'model', 'Fields',
required=True)
_defaults = {
'name': lambda *a: 'No Name',
}
@@ -36,22 +34,19 @@ class ModelField(OSV):
"Model field"
_name = 'ir.model.field'
_description = __doc__
_columns = {
'name': fields.Char('Name', size=64),
'relation': fields.Char('Model Relation', size=64),
'model': fields.Many2One('ir.model', 'Model', required=True,
select=True, ondelete='cascade'),
'field_description': fields.Char('Field Description', size=256,
translate=True),
'ttype': fields.Char('Field Type', size=64),
'relate': fields.Boolean('Click and Relate'),
'groups': fields.Many2Many('res.group', 'ir_model_field_group_rel',
'field_id', 'group_id', 'Groups'),
'group_name': fields.Char('Group Name', size=128),
'view_load': fields.Boolean('View Auto-Load'),
'help': fields.Text('Help', translate=True),
}
name = fields.Char('Name', size=64)
relation = fields.Char('Model Relation', size=64)
model = fields.Many2One('ir.model', 'Model', required=True,
select=True, ondelete='cascade')
field_description = fields.Char('Field Description', size=256,
translate=True)
ttype = fields.Char('Field Type', size=64)
relate = fields.Boolean('Click and Relate')
groups = fields.Many2Many('res.group', 'ir_model_field_group_rel',
'field_id', 'group_id', 'Groups')
group_name = fields.Char('Group Name', size=128)
view_load = fields.Boolean('View Auto-Load')
help = fields.Text('Help', translate=True)
_defaults = {
'relate': lambda *a: 0,
'view_load': lambda *a: 0,
@@ -68,15 +63,13 @@ class ModelAccess(OSV):
_name = 'ir.model.access'
_description = __doc__
_rec_name = 'model'
_columns = {
'model': fields.Many2One('ir.model', 'Model', required=True),
'group': fields.Many2One('res.group', 'Group'),
'perm_read': fields.Boolean('Read Access'),
'perm_write': fields.Boolean('Write Access'),
'perm_create': fields.Boolean('Create Access'),
'perm_unlink': fields.Boolean('Delete Permission'),
'description': fields.Text('Description'),
}
model = fields.Many2One('ir.model', 'Model', required=True)
group = fields.Many2One('res.group', 'Group')
perm_read = fields.Boolean('Read Access')
perm_write = fields.Boolean('Write Access')
perm_create = fields.Boolean('Create Access')
perm_unlink = fields.Boolean('Delete Permission')
description = fields.Text('Description')
_sql_constraints = [
('model_group_uniq', 'UNIQUE("model", "group")',
'Only on record by model and group is allowed!'),
@@ -160,17 +153,15 @@ class ModelData(OSV):
"Model data"
_name = 'ir.model.data'
_description = __doc__
_columns = {
'fs_id': fields.Char('Identifier on File System', required=True,
size=64, help="The id of the record as known on the file system."),
'model': fields.Char('Model', required=True, size=64),
'module': fields.Char('Module', required=True, size=64),
'db_id': fields.Integer('Resource ID',
help="The id of the record in the database."),
'date_update': fields.DateTime('Update Date'),
'date_init': fields.DateTime('Init Date'),
'values': fields.Text('Values'),
}
fs_id = fields.Char('Identifier on File System', required=True,
size=64, help="The id of the record as known on the file system.")
model = fields.Char('Model', required=True, size=64)
module = fields.Char('Module', required=True, size=64)
db_id = fields.Integer('Resource ID',
help="The id of the record in the database.")
date_update = fields.DateTime('Update Date')
date_init = fields.DateTime('Init Date')
values = fields.Text('Values')
_defaults = {
'date_init': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
}
+5 -7
View File
@@ -6,13 +6,11 @@ class Category(OSV):
"Module Category"
_name = "ir.module.category"
_description = __doc__
_columns = {
'name': fields.Char("Name", size=128, required=True),
'parent': fields.Many2One('ir.module.category',
'Parent Category', select=1),
'childs': fields.One2Many('ir.module.category',
'parent', 'Parent Category'),
}
name = fields.Char("Name", size=128, required=True)
parent = fields.Many2One('ir.module.category',
'Parent Category', select=1)
childs = fields.One2Many('ir.module.category',
'parent', 'Parent Category')
_order = 'name'
Category()
+44 -56
View File
@@ -126,33 +126,31 @@ class Module(OSV):
"Module"
_name = "ir.module.module"
_description = __doc__
_columns = {
'name': fields.Char("Name", size=128, readonly=True, required=True),
'category': fields.Many2One('ir.module.category', 'Category',
readonly=True),
'shortdesc': fields.Char('Short description', size=256, readonly=True),
'description': fields.Text("Description", readonly=True),
'author': fields.Char("Author", size=128, readonly=True),
'website': fields.Char("Website", size=256, readonly=True),
'installed_version': fields.Function('get_installed_version',
string='Installed version', type='char'),
'latest_version': fields.Char('Latest version', size=64, readonly=True),
'url': fields.Char('URL', size=128),
'dependencies': fields.One2Many('ir.module.module.dependency',
'module', 'Dependencies', readonly=True),
'state': fields.Selection([
('uninstallable', 'Not Installable'),
('uninstalled', 'Not Installed'),
('installed', 'Installed'),
('to upgrade', 'To be upgraded'),
('to remove', 'To be removed'),
('to install', 'To be installed'),
], string='State', readonly=True),
'demo': fields.Boolean('Demo data'),
'license': fields.Selection([('GPL-2', 'GPL-2'),
('Other proprietary', 'Other proprietary')], string='License',
readonly=True),
}
name = fields.Char("Name", size=128, readonly=True, required=True)
category = fields.Many2One('ir.module.category', 'Category',
readonly=True)
shortdesc = fields.Char('Short description', size=256, readonly=True)
description = fields.Text("Description", readonly=True)
author = fields.Char("Author", size=128, readonly=True)
website = fields.Char("Website", size=256, readonly=True)
installed_version = fields.Function('get_installed_version',
string='Installed version', type='char')
latest_version = fields.Char('Latest version', size=64, readonly=True)
url = fields.Char('URL', size=128)
dependencies = fields.One2Many('ir.module.module.dependency',
'module', 'Dependencies', readonly=True)
state = fields.Selection([
('uninstallable', 'Not Installable'),
('uninstalled', 'Not Installed'),
('installed', 'Installed'),
('to upgrade', 'To be upgraded'),
('to remove', 'To be removed'),
('to install', 'To be installed'),
], string='State', readonly=True)
demo = fields.Boolean('Demo data')
license = fields.Selection([('GPL-2', 'GPL-2'),
('Other proprietary', 'Other proprietary')], string='License',
readonly=True)
_defaults = {
'state': lambda *a: 'uninstalled',
'demo': lambda *a: False,
@@ -542,23 +540,21 @@ class ModuleDependency(OSV):
"Module dependency"
_name = "ir.module.module.dependency"
_description = __doc__
_columns = {
'name': fields.Char('Name', size=128),
'module': fields.Many2One('ir.module.module', 'Module', select=1,
ondelete='cascade'),
'state': fields.Function('state', type='selection',
selection=[
('uninstallable','Uninstallable'),
('uninstalled','Not Installed'),
('installed','Installed'),
('to upgrade','To be upgraded'),
('to remove','To be removed'),
('to install','To be installed'),
('unknown', 'Unknown'),
], string='State', readonly=True),
}
name = fields.Char('Name', size=128)
module = fields.Many2One('ir.module.module', 'Module', select=1,
ondelete='cascade')
state = fields.Function('get_state', type='selection',
selection=[
('uninstallable','Uninstallable'),
('uninstalled','Not Installed'),
('installed','Installed'),
('to upgrade','To be upgraded'),
('to remove','To be removed'),
('to install','To be installed'),
('unknown', 'Unknown'),
], string='State', readonly=True)
def state(self, cursor, user, ids, name, args, context=None):
def get_state(self, cursor, user, ids, name, args, context=None):
result = {}
module_obj = self.pool.get('ir.module.module')
for dependency in self.browse(cursor, user, ids):
@@ -577,19 +573,15 @@ ModuleDependency()
class ModuleUpdateListInit(WizardOSV):
_name = 'ir.module.module.update_list.init'
_columns = {
'repositories': fields.Text('Repositories', readonly=True),
}
repositories = fields.Text('Repositories', readonly=True)
ModuleUpdateListInit()
class ModuleUpdateListUpdate(WizardOSV):
_name = 'ir.module.module.update_list.update'
_columns = {
'update': fields.Integer('Number of modules updated', readonly=True),
'add': fields.Integer('Number of modules added', readonly=True),
}
update = fields.Integer('Number of modules updated', readonly=True)
add = fields.Integer('Number of modules added', readonly=True)
ModuleUpdateListUpdate()
@@ -660,18 +652,14 @@ ModuleUpdateList()
class ModuleInstallUpgradeInit(WizardOSV):
_name = 'ir.module.module.install_upgrade.init'
_columns = {
'module_info': fields.Text('Modules to update', readonly=True),
'module_download': fields.Text('Modules to download', readonly=True),
}
module_info = fields.Text('Modules to update', readonly=True)
module_download = fields.Text('Modules to download', readonly=True)
ModuleInstallUpgradeInit()
class ModuleInstallUpgradeStart(WizardOSV):
_name = 'ir.module.module.install_upgrade.start'
_columns = {
}
ModuleInstallUpgradeStart()
+9 -11
View File
@@ -6,17 +6,15 @@ class Repository(OSV):
"Module repository"
_name = "ir.module.repository"
_description = __doc__
_columns = {
'name': fields.Char('Name', size=128),
'url': fields.Char('Url', size=256, required=True),
'sequence': fields.Integer('Sequence', required=True),
'filter': fields.Char('Filter', size=128, required=True,
help='Regexp to search module on the repository webpage:\n'
'- The first parenthesis must match the name of the module.\n'
'- The second parenthesis must match all the version number.\n'
'- The last parenthesis must match the extension of the module.'),
'active': fields.boolean('Active'),
}
name = fields.Char('Name', size=128)
url = fields.Char('Url', size=256, required=True)
sequence = fields.Integer('Sequence', required=True)
filter = fields.Char('Filter', size=128, required=True,
help='Regexp to search module on the repository webpage:\n'
'- The first parenthesis must match the name of the module.\n'
'- The second parenthesis must match all the version number.\n'
'- The last parenthesis must match the extension of the module.')
active = fields.boolean('Active')
_defaults = {
'sequence': lambda *a: 5,
'filter': lambda *a: 'href="([a-zA-Z0-9_]+)-' \
+5 -7
View File
@@ -6,13 +6,11 @@ class Property(OSV):
"Property"
_name = 'ir.property'
_description = __doc__
_columns = {
'name': fields.Char('Name', size=128),
'value': fields.Reference('Value', selection='models_get2', size=128),
'res': fields.Reference('Resource', selection='models_get', size=128),
'field': fields.Many2One('ir.model.field', 'Field',
ondelete='cascade', required=True)
}
name = fields.Char('Name', size=128)
value = fields.Reference('Value', selection='models_get2', size=128)
res = fields.Reference('Resource', selection='models_get', size=128)
field = fields.Many2One('ir.model.field', 'Field',
ondelete='cascade', required=True)
def __init__(self, pool):
super(Property, self).__init__(pool)
+31 -35
View File
@@ -8,23 +8,21 @@ class RuleGroup(OSV):
"Rule group"
_name = 'ir.rule.group'
_description = __doc__
_columns = {
'name': fields.Char('Name', size=128, select=1),
'model': fields.Many2One('ir.model', 'Model', select=1,
required=True),
'global': fields.Boolean('Global', select=1,
help="Make the rule global \n" \
"or it needs to be put on a group or user"),
'rules': fields.One2Many('ir.rule', 'rule_group', 'Tests',
help="The rule is satisfied if at least one test is True"),
'groups': fields.Many2Many('res.group', 'group_rule_group_rel',
'rule_group_id', 'group_id', 'Groups'),
'users': fields.Many2Many('res.user', 'user_rule_group_rel',
'rule_group_id', 'user_id', 'Users'),
}
_order = 'model, global DESC'
name = fields.Char('Name', size=128, select=1)
model = fields.Many2One('ir.model', 'Model', select=1,
required=True)
global_p = fields.Boolean('Global', select=1,
help="Make the rule global \n" \
"or it needs to be put on a group or user")
rules = fields.One2Many('ir.rule', 'rule_group', 'Tests',
help="The rule is satisfied if at least one test is True")
groups = fields.Many2Many('res.group', 'group_rule_group_rel',
'rule_group_id', 'group_id', 'Groups')
users = fields.Many2Many('res.user', 'user_rule_group_rel',
'rule_group_id', 'user_id', 'Users')
_order = 'model, global_p DESC'
_defaults = {
'global': lambda *a: True,
'global_p': lambda *a: True,
}
def unlink(self, cursor, user, ids, context=None):
@@ -56,22 +54,20 @@ class Rule(OSV):
_name = 'ir.rule'
_rec_name = 'field'
_description = __doc__
_columns = {
'field': fields.Many2One('ir.model.field', 'Field',
domain="[('model', '=', parent.model)]", select=1,
required=True),
'operator':fields.Selection([
('=', '='),
('<>', '<>'),
('<=', '<='),
('>=', '>='),
('in', 'in'),
('child_of', 'child_of'),
], 'Operator', required=True),
'operand':fields.Selection('operand','Operand', size=64, required=True),
'rule_group': fields.Many2One('ir.rule.group', 'Group', select=2,
required=True, ondelete="cascade")
}
field = fields.Many2One('ir.model.field', 'Field',
domain="[('model', '=', parent.model)]", select=1,
required=True)
operator = fields.Selection([
('=', '='),
('<>', '<>'),
('<=', '<='),
('>=', '>='),
('in', 'in'),
('child_of', 'child_of'),
], 'Operator', required=True)
operand = fields.Selection('get_operand','Operand', size=64, required=True)
rule_group = fields.Many2One('ir.rule.group', 'Group', select=2,
required=True, ondelete="cascade")
def __init__(self, pool):
super(Rule, self).__init__(pool)
@@ -120,7 +116,7 @@ class Rule(OSV):
return res
def operand(self, cursor, user, context):
def get_operand(self, cursor, user, context):
res = []
operands = self._operand_get(cursor, user, 'res.user', level=1,
recur=['many2one'], root_tech='user', root='User')
@@ -146,7 +142,7 @@ class Rule(OSV):
"JOIN res_group_user_rel u_rel " \
"ON (g_rel.group_id = u_rel.gid) " \
"WHERE u_rel.uid = %d) "
"OR g.global)", (model_name, user, user))
"OR g.global_p)", (model_name, user, user))
ids = [x[0] for x in cursor.fetchall()]
if not ids:
return '', []
@@ -170,7 +166,7 @@ class Rule(OSV):
{'user': self.pool.get('res.user').browse(cursor, 0,
user), 'time': time})
if rule.rule_group['global']:
if rule.rule_group['global_p']:
clause_global.setdefault(rule.rule_group.id, [])
clause_global[rule.rule_group.id].append(
obj._where_calc(cursor, user, dom, active_test=False))
+3 -3
View File
@@ -9,8 +9,8 @@
<form string="Record rules">
<label name="model"/>
<field name="model"/>
<label name="global"/>
<field name="global"/>
<label name="global_p"/>
<field name="global_p"/>
<label name="name"/>
<field name="name" colspan="3"/>
<field name="rules" colspan="4"/>
@@ -30,7 +30,7 @@
<tree string="Record rules">
<field name="model"/>
<field name="name"/>
<field name="global"/>
<field name="global_p"/>
</tree>
]]>
</field>
+11 -15
View File
@@ -6,10 +6,8 @@ class SequenceType(OSV):
"Sequence type"
_name = 'ir.sequence.type'
_description = __doc__
_columns = {
'name': fields.Char('Sequence Name',size=64, required=True),
'code': fields.Char('Sequence Code',size=32, required=True),
}
name = fields.Char('Sequence Name',size=64, required=True)
code = fields.Char('Sequence Code',size=32, required=True)
SequenceType()
@@ -18,17 +16,15 @@ class Sequence(OSV):
"Sequence"
_name = 'ir.sequence'
_description = __doc__
_columns = {
'name': fields.Char('Sequence Name',size=64, required=True),
'code': fields.Selection('code_get', 'Sequence Code',size=64,
required=True),
'active': fields.Boolean('Active'),
'prefix': fields.Char('Prefix',size=64),
'suffix': fields.Char('Suffix',size=64),
'number_next': fields.Integer('Next Number', required=True),
'number_increment': fields.Integer('Increment Number', required=True),
'padding' : fields.Integer('Number padding', required=True),
}
name = fields.Char('Sequence Name',size=64, required=True)
code = fields.Selection('code_get', 'Sequence Code',size=64,
required=True)
active = fields.Boolean('Active')
prefix = fields.Char('Prefix',size=64)
suffix = fields.Char('Suffix',size=64)
number_next = fields.Integer('Next Number', required=True)
number_increment = fields.Integer('Increment Number', required=True)
padding = fields.Integer('Number padding', required=True)
_defaults = {
'active': lambda *a: True,
'number_increment': lambda *a: 1,
+19 -27
View File
@@ -29,19 +29,17 @@ class Translation(OSV, Cacheable):
"Translation"
_name = "ir.translation"
_description = __doc__
_columns = {
'name': fields.Char('Field Name', size=128, required=True),
'res_id': fields.Integer('Resource ID'),
'lang': fields.Selection('get_language', string='Language', size=5),
'type': fields.Selection(TRANSLATION_TYPE, string='Type', size=16,
required=True),
'src': fields.Text('Source'),
'value': fields.Text('Translation Value'),
'module': fields.Char('Module', size=128, readonly=True),
'fuzzy': fields.Boolean('Fuzzy'),
'model': fields.Function('model', fnct_search='model_search',
type='char', string='Model'),
}
name = fields.Char('Field Name', size=128, required=True)
res_id = fields.Integer('Resource ID')
lang = fields.Selection('get_language', string='Language', size=5),
type = fields.Selection(TRANSLATION_TYPE, string='Type', size=16,
required=True)
src = fields.Text('Source')
value = fields.Text('Translation Value')
module = fields.Char('Module', size=128, readonly=True)
fuzzy = fields.Boolean('Fuzzy')
model = fields.Function('get_model', fnct_search='model_search',
type='char', string='Model')
_defaults = {
'fuzzy': lambda *a: 0,
}
@@ -61,7 +59,7 @@ class Translation(OSV, Cacheable):
'get_language',
]
def model(self, cursor, user, ids, name, arg, context=None):
def get_model(self, cursor, user, ids, name, arg, context=None):
res = {}
for translation in self.browse(cursor, user, ids, context=context):
res[translation.id] = translation.name.split(',')[0]
@@ -370,10 +368,8 @@ class TranslationUpdateInit(WizardOSV):
"Update translation - language"
_name = 'ir.translation.update.init'
_description = __doc__
_columns = {
'lang': fields.Selection('get_language', string='Language', size=5,
required=True),
}
lang = fields.Selection('get_language', string='Language', size=5,
required=True)
def __init__(self, pool):
super(TranslationUpdateInit, self).__init__(pool)
@@ -501,12 +497,10 @@ class TranslationExportInit(WizardOSV):
"Export translation - language and module"
_name = 'ir.translation.export.init'
_description = __doc__
_columns = {
'lang': fields.Selection('get_language', string='Language', size=5,
required=True),
'module': fields.Selection('get_module', string='Module', size=128,
required=True),
}
lang = fields.Selection('get_language', string='Language', size=5,
required=True)
module = fields.Selection('get_module', string='Module', size=128,
required=True)
def __init__(self, pool):
super(TranslationExportInit, self).__init__(pool)
@@ -538,9 +532,7 @@ class TranslationExportStart(WizardOSV):
"Export translation - file"
_description = __doc__
_name = 'ir.translation.export.start'
_columns = {
'file': fields.Binary('File', readonly=True),
}
file = fields.Binary('File', readonly=True)
TranslationExportStart()
+18 -20
View File
@@ -125,25 +125,23 @@ class UIMenu(OSV):
"UI menu"
_name = 'ir.ui.menu'
_description = __doc__
_columns = {
'name': fields.Char('Menu', size=64, required=True, translate=True),
'sequence': fields.Integer('Sequence'),
'childs' : fields.One2Many('ir.ui.menu', 'parent','Childs'),
'parent': fields.Many2One('ir.ui.menu', 'Parent Menu', select=1),
'groups': Many2ManyUniq('res.group', 'ir_ui_menu_group_rel',
'menu_id', 'gid', 'Groups'),
'complete_name': fields.Function('get_full_name',
string='Complete Name', type='char', size=128),
'icon': fields.selection(ICONS, 'Icon', size=64),
'action': fields.Function('action', fnct_inv='action_inv',
type='reference', string='Action',
selection=[
('ir.action.report', 'ir.action.report'),
('ir.action.act_window', 'ir.action.act_window'),
('ir.action.wizard', 'ir.action.wizard'),
('ir.action.url', 'ir.action.url'),
]),
}
name = fields.Char('Menu', size=64, required=True, translate=True)
sequence = fields.Integer('Sequence')
childs = fields.One2Many('ir.ui.menu', 'parent','Childs')
parent = fields.Many2One('ir.ui.menu', 'Parent Menu', select=1)
groups = Many2ManyUniq('res.group', 'ir_ui_menu_group_rel',
'menu_id', 'gid', 'Groups')
complete_name = fields.Function('get_full_name',
string='Complete Name', type='char', size=128)
icon = fields.selection(ICONS, 'Icon', size=64)
action = fields.Function('get_action', fnct_inv='action_inv',
type='reference', string='Action',
selection=[
('ir.action.report', 'ir.action.report'),
('ir.action.act_window', 'ir.action.act_window'),
('ir.action.wizard', 'ir.action.wizard'),
('ir.action.url', 'ir.action.url'),
])
_defaults = {
'icon' : lambda *a: 'STOCK_OPEN',
'sequence' : lambda *a: 10,
@@ -165,7 +163,7 @@ class UIMenu(OSV):
parent_path = ''
return parent_path + menu.name
def action(self, cursor, user, ids, name, arg, context=None):
def get_action(self, cursor, user, ids, name, arg, context=None):
res = {}
for menu_id in ids:
res[menu_id] = False
+17 -21
View File
@@ -9,19 +9,17 @@ class View(OSV):
_name = 'ir.ui.view'
_description = __doc__
_rec_name = 'model'
_columns = {
'model': fields.Char('Model', size=64, required=True),
'priority': fields.Integer('Priority', required=True),
'type': fields.Selection((
('tree','Tree'),
('form','Form'),
('graph', 'Graph'),
('calendar', 'Calendar')), 'View Type', required=True),
'arch': fields.Text('View Architecture', required=True),
'inherit': fields.Many2One('ir.ui.view', 'Inherited View'),
'field_childs': fields.Char('Childs Field',size=64),
'module': fields.Char('Module', size=128, readonly=True),
}
model = fields.Char('Model', size=64, required=True)
priority = fields.Integer('Priority', required=True)
type = fields.Selection((
('tree','Tree'),
('form','Form'),
('graph', 'Graph'),
('calendar', 'Calendar')), 'View Type', required=True)
arch = fields.Text('View Architecture', required=True)
inherit = fields.Many2One('ir.ui.view', 'Inherited View')
field_childs = fields.Char('Childs Field',size=64)
module = fields.Char('Module', size=128, readonly=True)
_defaults = {
'arch': lambda *a: '<?xml version="1.0"?>\n' \
'<tree title="Unknwown">\n\t<field name="name"/>\n</tree>',
@@ -171,14 +169,12 @@ class ViewShortcut(OSV):
"View shortcut"
_name = 'ir.ui.view_sc'
_description = __doc__
_columns = {
'name': fields.char('Shortcut Name', size=64, required=True),
'res_id': fields.integer('Resource Ref.', required=True),
'sequence': fields.integer('Sequence'),
'user_id': fields.many2one('res.user', 'User Ref.', required=True,
ondelete='cascade'),
'resource': fields.char('Resource Name', size=64, required=True)
}
name = fields.Char('Shortcut Name', size=64, required=True)
res_id = fields.Integer('Resource Ref.', required=True)
sequence = fields.Integer('Sequence')
user_id = fields.Many2One('res.user', 'User Ref.', required=True,
ondelete='cascade')
resource = fields.Char('Resource Name', size=64, required=True)
def __init__(self, pool):
super(ViewShortcut, self).__init__(pool)
+27 -27
View File
@@ -33,7 +33,7 @@ def _symbol_set(symb):
return symb.encode('utf-8')
return str(symb)
class _column(object):
class Column(object):
_classic_read = True
_classic_write = True
_properties = False
@@ -75,7 +75,7 @@ class _column(object):
raise Exception, 'undefined get method !'
class Boolean(_column):
class Boolean(Column):
_type = 'boolean'
_symbol_c = '%s'
_symbol_f = lambda x: x and 'True' or 'False'
@@ -84,7 +84,7 @@ class Boolean(_column):
boolean = Boolean
class Integer(_column):
class Integer(Column):
_type = 'integer'
_symbol_c = '%d'
_symbol_f = lambda x: int(x or 0)
@@ -93,21 +93,21 @@ class Integer(_column):
integer = Integer
class Reference(_column):
class Reference(Column):
_type = 'reference'
def __init__(self, string, selection, size, **args):
_column.__init__(self, string=string, size=size, selection=selection,
Column.__init__(self, string=string, size=size, selection=selection,
**args)
reference = Reference
class Char(_column):
class Char(Column):
_type = 'char'
def __init__(self, string, size, **args):
_column.__init__(self, string=string, size=size, **args)
Column.__init__(self, string=string, size=size, **args)
self._symbol_set = (self._symbol_c, self._symbol_set_char)
def _symbol_set_char(self, symb):
@@ -134,44 +134,44 @@ class Char(_column):
char = Char
class Text(_column):
class Text(Column):
_type = 'text'
text = Text
class Float(_column):
class Float(Column):
_type = 'float'
_symbol_c = '%f'
_symbol_f = lambda x: __builtin__.float(x or 0.0)
_symbol_set = (_symbol_c, _symbol_f)
def __init__(self, string='unknown', digits=None, **args):
_column.__init__(self, string=string, **args)
Column.__init__(self, string=string, **args)
self.digits = digits
float = Float
class Date(_column):
class Date(Column):
_type = 'date'
date = Date
class DateTime(_column):
class DateTime(Column):
_type = 'datetime'
datetime = DateTime
class Time(_column):
class Time(Column):
_type = 'time'
time = Time
class Binary(_column):
class Binary(Column):
_type = 'binary'
_symbol_c = '%s'
_symbol_f = lambda symb: symb and psycopg2.Binary(symb) or None
@@ -180,7 +180,7 @@ class Binary(_column):
binary = Binary
class Selection(_column):
class Selection(Column):
_type = 'selection'
def __init__(self, selections, string='unknown', **args):
@@ -188,13 +188,13 @@ class Selection(_column):
selections is a list of (key, string)
or the name of the object function that return the list
"""
_column.__init__(self, string=string, **args)
Column.__init__(self, string=string, **args)
self.selection = selections
selection = Selection
class One2One(_column):
class One2One(Column):
_classic_read = False
_classic_write = True
_type = 'one2one'
@@ -202,7 +202,7 @@ class One2One(_column):
def __init__(self, obj, string='unknown', **args):
warnings.warn("The one2one field doesn't work anymore",
DeprecationWarning)
_column.__init__(self, string=string, **args)
Column.__init__(self, string=string, **args)
self._obj = obj
def set(self, cursor, obj_src, src_id, field, act, user=None, context=None):
@@ -224,13 +224,13 @@ class One2One(_column):
one2one = One2One
class Many2One(_column):
class Many2One(Column):
_classic_read = False
_classic_write = True
_type = 'many2one'
def __init__(self, obj, string='unknown', **args):
_column.__init__(self, string=string, **args)
Column.__init__(self, string=string, **args)
self._obj = obj
# TODO: speed improvement
@@ -299,13 +299,13 @@ class Many2One(_column):
many2one = Many2One
class One2Many(_column):
class One2Many(Column):
_classic_read = False
_classic_write = False
_type = 'one2many'
def __init__(self, obj, fields_id, string='unknown', limit=None, **args):
_column.__init__(self, string=string, **args)
Column.__init__(self, string=string, **args)
self._obj = obj
self._fields_id = fields_id
self._limit = limit
@@ -377,14 +377,14 @@ class One2Many(_column):
one2many = One2Many
class Many2Many(_column):
class Many2Many(Column):
_classic_read = False
_classic_write = False
_type = 'many2many'
def __init__(self, obj, rel, id1, id2, string='unknown', limit=None,
**args):
_column.__init__(self, string=string, **args)
Column.__init__(self, string=string, **args)
self._obj = obj
self._rel = rel
self._id1 = id1
@@ -475,7 +475,7 @@ class Many2Many(_column):
many2many = Many2Many
class Function(_column):
class Function(Column):
_classic_read = False
_classic_write = False
_type = 'function'
@@ -483,7 +483,7 @@ class Function(_column):
def __init__(self, fnct, arg=None, fnct_inv='', fnct_inv_arg=None,
type='float', fnct_search='', obj=None, **args):
_column.__init__(self, **args)
Column.__init__(self, **args)
self._obj = obj
self._fnct = fnct
self._fnct_inv = fnct_inv
@@ -519,7 +519,7 @@ class Function(_column):
function = Function
class Serialized(_column):
class Serialized(Column):
def __init__(self, string='unknown', serialize_func=repr,
deserialize_func=eval, type='text', **args):
self._serialize_func = serialize_func
+21 -7
View File
@@ -241,7 +241,6 @@ class ORM(object):
- relations (one2many, many2one, many2many)
- functions
"""
_columns = {}
_sql_constraints = []
_constraints = []
_defaults = {}
@@ -275,6 +274,21 @@ class ORM(object):
_sql = ''
_inherit_fields = []
pool = None
__columns = None
def _getcolumns(self):
if self.__columns:
return self.__columns
res = {}
for attr in dir(self):
if attr == '_columns':
continue
if isinstance(getattr(self, attr), fields.Column):
res[attr] = getattr(self, attr)
self.__columns = res
return res
_columns = property(fget=_getcolumns)
def _field_create(self, cursor, module_name):
cursor.execute("SELECT id FROM ir_model WHERE model = %s",
@@ -759,6 +773,8 @@ class ORM(object):
cursor.commit()
def __init__(self):
# reinit the cachel on _columns
self.__columns = None
if not self._table:
self._table = self._name.replace('.', '_')
if not self._description:
@@ -771,15 +787,13 @@ class ORM(object):
self._sequence = self._table+'_id_seq'
if self._log_access:
if not self._columns:
self._columns = {}
self._columns['create_uid'] = fields.Many2One('res.user',
self.create_uid = fields.Many2One('res.user',
'Creation user', required=True, readonly=True)
self._columns['create_date'] = fields.DateTime('Creation date',
self.create_date = fields.DateTime('Creation date',
required=True, readonly=True)
self._columns['write_uid'] = fields.Many2One('res.user',
self.write_uid = fields.Many2One('res.user',
'Last modification by', readonly=True)
self._columns['write_date'] = fields.DateTime(
self.write_date = fields.DateTime(
'Last modification date', readonly=True)
if not self._defaults:
self._defaults = {}
+2 -2
View File
@@ -378,7 +378,7 @@
</record>
<record model="ir.rule.group" id="rule_group_menu">
<field name="model" search="[('model', '=', 'ir.ui.menu')]"/>
<field name="global" eval="True"/>
<field name="global_p" eval="True"/>
</record>
<record model="ir.rule" id="rule_menu1">
<field name="field" search="[('name', '=', 'groups'),('model.model', '=', 'ir.ui.menu')]"/>
@@ -394,7 +394,7 @@
</record>
<record model="ir.rule.group" id="rule_group_action">
<field name="model" search="[('model', '=', 'ir.action')]"/>
<field name="global" eval="True"/>
<field name="global_p" eval="True"/>
</record>
<record model="ir.rule" id="rule_action1">
<field name="field" search="[('name', '=', 'groups'),('model.model', '=', 'ir.action')]"/>
+59 -65
View File
@@ -7,56 +7,54 @@ class Request(OSV):
_name = 'res.request'
_table = 'res_request'
_description = __doc__
_columns = {
'create_date': fields.DateTime('Created date', readonly=True),
'name': fields.Char('Subject', states={
'readonly': "state in ('waiting', 'active', 'closed')",
}, required=True, size=128),
'active': fields.Boolean('Active'),
'priority': fields.Selection([
('0', 'Low'),
('1', 'Normal'),
('2', 'High'),
], 'Priority', states={
'readonly': "state in ('waiting', 'closed')",
}, required=True),
'act_from': fields.Many2One('res.user', 'From', required=True,
readonly=True, states={
'readonly': "state == 'closed'",
}),
'act_to': fields.Many2One('res.user', 'To', required=True,
states={
'readonly': "state in ('waiting', 'closed')",
}),
'body': fields.Text('Request', states={
'readonly': "state in ('waiting', 'closed')",
}),
'date_sent': fields.DateTime('Date', readonly=True),
'trigger_date': fields.DateTime('Trigger Date', states={
'readonly': "state in ('waiting', 'closed')",
}),
# 'ref_partner_id': fields.Many2One('res.partner', 'Partner Ref.',
# states={
# 'closed': [('readonly', True)],
# }),
#TODO: use one2many instead limit number of reference
'ref_doc1': fields.Reference('Document Ref 1', selection='links_get',
size=128, states={
'readonly': "state == 'closed'",
}),
'ref_doc2': fields.Reference('Document Ref 2', selection='links_get',
size=128, states={
'readonly': "state == 'closed'",
}),
'state': fields.Selection([
('draft', 'draft'),
('waiting', 'waiting'),
('active', 'active'),
('closed', 'closed'),
], 'State', required=True, readonly=True),
'history': fields.One2Many('res.request.history', 'request',
'History', readonly=True),
}
create_date = fields.DateTime('Created date', readonly=True)
name = fields.Char('Subject', states={
'readonly': "state in ('waiting', 'active', 'closed')",
}, required=True, size=128)
active = fields.Boolean('Active')
priority = fields.Selection([
('0', 'Low'),
('1', 'Normal'),
('2', 'High'),
], 'Priority', states={
'readonly': "state in ('waiting', 'closed')",
}, required=True)
act_from = fields.Many2One('res.user', 'From', required=True,
readonly=True, states={
'readonly': "state == 'closed'",
})
act_to = fields.Many2One('res.user', 'To', required=True,
states={
'readonly': "state in ('waiting', 'closed')",
})
body = fields.Text('Request', states={
'readonly': "state in ('waiting', 'closed')",
})
date_sent = fields.DateTime('Date', readonly=True)
trigger_date = fields.DateTime('Trigger Date', states={
'readonly': "state in ('waiting', 'closed')",
})
# 'ref_partner_id': fields.Many2One('res.partner', 'Partner Ref.',
# states={
# 'closed': [('readonly', True)],
# })
# TODO: use one2many instead limit number of reference
ref_doc1 = fields.Reference('Document Ref 1', selection='links_get',
size=128, states={
'readonly': "state == 'closed'",
})
ref_doc2 = fields.Reference('Document Ref 2', selection='links_get',
size=128, states={
'readonly': "state == 'closed'",
})
state = fields.Selection([
('draft', 'draft'),
('waiting', 'waiting'),
('active', 'active'),
('closed', 'closed'),
], 'State', required=True, readonly=True)
history = fields.One2Many('res.request.history', 'request',
'History', readonly=True)
_defaults = {
'act_from': lambda obj, cursor, user, context: user,
'state': lambda *a: 'draft',
@@ -139,11 +137,9 @@ class RequestLink(OSV):
"Request link"
_name = 'res.request.link'
_description = __doc__
_columns = {
'name': fields.Char('Name', size=64, required=True, translate=True),
'object': fields.Char('Object', size=64, required=True),
'priority': fields.Integer('Priority'),
}
name = fields.Char('Name', size=64, required=True, translate=True)
object = fields.Char('Object', size=64, required=True)
priority = fields.Integer('Priority')
_defaults = {
'priority': lambda *a: 5,
}
@@ -156,16 +152,14 @@ class RequestHistory(OSV):
"Request history"
_name = 'res.request.history'
_description = __doc__
_columns = {
'name': fields.Char('Summary', size=128, required=True),
'request': fields.Many2One('res.request', 'Request', required=True,
ondelete='cascade', select=True),
'act_from': fields.Many2One('res.user', 'From', required=True,
readonly=True),
'act_to': fields.Many2One('res.user', 'To', required=True),
'body': fields.Text('Body'),
'date_sent': fields.DateTime('Date sent', required=True)
}
name = fields.Char('Summary', size=128, required=True)
request = fields.Many2One('res.request', 'Request', required=True,
ondelete='cascade', select=True)
act_from = fields.Many2One('res.user', 'From', required=True,
readonly=True)
act_to = fields.Many2One('res.user', 'To', required=True)
body = fields.Text('Body')
date_sent = fields.DateTime('Date sent', required=True)
_defaults = {
'name': lambda *a: 'NoName',
'act_from': lambda obj, cursor, user, context: user,
+25 -34
View File
@@ -11,16 +11,14 @@ class Group(OSV):
"Group"
_name = "res.group"
_description = __doc__
_columns = {
'name': fields.Char('Group Name', size=64, required=True),
'model_access': fields.One2Many('ir.model.access', 'group',
'Access Controls'),
'rule_groups': fields.Many2Many('ir.rule.group', 'group_rule_group_rel',
'group_id', 'rule_group_id', 'Rules',
domain="[('global', '<>', True)]"),
'menu_access': fields.Many2Many('ir.ui.menu', 'ir_ui_menu_group_rel',
'gid', 'menu_id', 'Access Menu'),
}
name = fields.Char('Group Name', size=64, required=True)
model_access = fields.One2Many('ir.model.access', 'group',
'Access Controls')
rule_groups = fields.Many2Many('ir.rule.group', 'group_rule_group_rel',
'group_id', 'rule_group_id', 'Rules',
domain="[('global', '<>', True)]")
menu_access = fields.Many2Many('ir.ui.menu', 'ir_ui_menu_group_rel',
'gid', 'menu_id', 'Access Menu')
_sql_constraints = [
('name_uniq', 'unique (name)', 'The name of the group must be unique!')
]
@@ -39,23 +37,21 @@ class User(OSV):
"User"
_name = "res.user"
_description = __doc__
_columns = {
'name': fields.Char('Name', size=64, required=True, select=1),
'login': fields.Char('Login', size=64, required=True),
'password': fields.Char('Password', size=64),
'signature': fields.Text('Signature', size=64),
#'address_id': fields.Many2One('res.partner.address', 'Address'),
'active': fields.Boolean('Active'),
'action': fields.Many2One('ir.action', 'Home Action'),
'menu': fields.Many2One('ir.action', 'Menu Action'),
'groups': fields.Many2Many('res.group', 'res_group_user_rel',
'uid', 'gid', 'Groups'),
'rule_groups': fields.Many2Many('ir.rule.group', 'user_rule_group_rel',
'user_id', 'rule_group_id', 'Rules',
domain="[('global', '<>', True)]"),
'language': fields.Selection('languages', 'Language'),
'timezone': fields.Selection('timezones', 'Timezone'),
}
name = fields.Char('Name', size=64, required=True, select=1)
login = fields.Char('Login', size=64, required=True)
password = fields.Char('Password', size=64)
signature = fields.Text('Signature', size=64)
#address_id = fields.Many2One('res.partner.address', 'Address')
active = fields.Boolean('Active')
action = fields.Many2One('ir.action', 'Home Action')
menu = fields.Many2One('ir.action', 'Menu Action')
groups = fields.Many2Many('res.group', 'res_group_user_rel',
'uid', 'gid', 'Groups')
rule_groups = fields.Many2Many('ir.rule.group', 'user_rule_group_rel',
'user_id', 'rule_group_id', 'Rules',
domain="[('global', '<>', True)]")
language = fields.Selection('languages', 'Language')
timezone = fields.Selection('timezones', 'Timezone')
_sql_constraints = [
('login_key', 'UNIQUE (login)',
'You can not have two users with the same login!')
@@ -209,12 +205,7 @@ User()
class Group2(Group):
def __init__(self, pool):
super(Group2, self).__init__(pool)
if pool:
self._columns = copy.copy(self._columns)
self._columns['users'] = fields.many2many(
'res.user', 'res_group_user_rel', 'gid', 'uid', 'Users')
users = fields.many2many(
'res.user', 'res_group_user_rel', 'gid', 'uid', 'Users')
Group2()
+6 -8
View File
@@ -10,14 +10,12 @@ class Directory(OSV):
"Directory"
_name = "webdav.directory"
_description = __doc__
_columns = {
'name': fields.Char('Name', size=128, required=True, select=1),
'parent': fields.Many2One('webdav.directory', 'Parent',
ondelete='restrict'),
'childs': fields.One2Many('webdav.directory', 'parent', 'Childs'),
'model': fields.Many2One('ir.model', 'Model'),
'domain': fields.Char('Domain', size=250),
}
name = fields.Char('Name', size=128, required=True, select=1)
parent = fields.Many2One('webdav.directory', 'Parent',
ondelete='restrict')
childs = fields.One2Many('webdav.directory', 'parent', 'Childs')
model = fields.Many2One('ir.model', 'Model')
domain = fields.Char('Domain', size=250)
_defaults = {
'domain': lambda *a: '[]',
}
+59 -71
View File
@@ -12,13 +12,11 @@ class Workflow(OSV):
_table = "wkf"
_log_access = False
_description = __doc__
_columns = {
'name': fields.Char('Name', size=64, required=True),
'osv': fields.Char('Resource Model', size=64, required=True),
'on_create': fields.Boolean('On Create'),
'activities': fields.One2Many('workflow.activity', 'workflow',
'Activities'),
}
name = fields.Char('Name', size=64, required=True)
osv = fields.Char('Resource Model', size=64, required=True)
on_create = fields.Boolean('On Create')
activities = fields.One2Many('workflow.activity', 'workflow',
'Activities')
_defaults = {
'on_create': lambda *a: True
}
@@ -44,35 +42,33 @@ class WorkflowActivity(OSV):
_table = "wkf_activity"
_log_access = False
_description = __doc__
_columns = {
'name': fields.Char('Name', size=64, required=True),
'workflow': fields.Many2One('workflow', 'Workflow', required=True,
select=1, ondelete='cascade'),
'split_mode': fields.Selection([
('XOR', 'Xor'),
('OR', 'Or'),
('AND', 'And'),
], 'Split Mode', size=3, required=True),
'join_mode': fields.Selection([
('XOR', 'Xor'),
('AND', 'And'),
], 'Join Mode', size=3, required=True),
'kind': fields.Selection([
('dummy', 'Dummy'),
('function', 'Function'),
('subflow', 'Subflow'),
('stopall', 'Stop All'),
], 'Kind', size=64, required=True),
'action': fields.Char('Action', size=64),
'flow_start': fields.Boolean('Flow Start'),
'flow_stop': fields.Boolean('Flow Stop'),
'subflow': fields.Many2One('workflow', 'Subflow'),
'signal_send': fields.Char('Signal (subflow.*)', size=32),
'out_transitions': fields.One2Many('workflow.transition', 'act_from',
'Outgoing transitions'),
'in_transitions': fields.One2Many('workflow.transition', 'act_to',
'Incoming transitions'),
}
name = fields.Char('Name', size=64, required=True)
workflow = fields.Many2One('workflow', 'Workflow', required=True,
select=1, ondelete='cascade')
split_mode = fields.Selection([
('XOR', 'Xor'),
('OR', 'Or'),
('AND', 'And'),
], 'Split Mode', size=3, required=True)
join_mode = fields.Selection([
('XOR', 'Xor'),
('AND', 'And'),
], 'Join Mode', size=3, required=True)
kind = fields.Selection([
('dummy', 'Dummy'),
('function', 'Function'),
('subflow', 'Subflow'),
('stopall', 'Stop All'),
], 'Kind', size=64, required=True)
action = fields.Char('Action', size=64)
flow_start = fields.Boolean('Flow Start')
flow_stop = fields.Boolean('Flow Stop')
subflow = fields.Many2One('workflow', 'Subflow')
signal_send = fields.Char('Signal (subflow.*)', size=32)
out_transitions = fields.One2Many('workflow.transition', 'act_from',
'Outgoing transitions')
in_transitions = fields.One2Many('workflow.transition', 'act_to',
'Incoming transitions')
_defaults = {
'kind': lambda *a: 'dummy',
'join_mode': lambda *a: 'XOR',
@@ -89,17 +85,15 @@ class WorkflowTransition(OSV):
_log_access = False
_rec_name = 'signal'
_description = __doc__
_columns = {
'trigger_model': fields.Char('Trigger Type', size=128),
'trigger_expr_id': fields.Char('Trigger Expr ID', size=128),
'signal': fields.Char('Signal (button Name)', size=64),
'group': fields.Many2One('res.group', 'Group Required'),
'condition': fields.Char('Condition', required=True, size=128),
'act_from': fields.Many2One('workflow.activity', 'Source Activity',
required=True, select=1, ondelete='cascade'),
'act_to': fields.Many2One('workflow.activity', 'Destination Activity',
required=True, select=1, ondelete='cascade'),
}
trigger_model = fields.Char('Trigger Type', size=128)
trigger_expr_id = fields.Char('Trigger Expr ID', size=128)
signal = fields.Char('Signal (button Name)', size=64)
group = fields.Many2One('res.group', 'Group Required')
condition = fields.Char('Condition', required=True, size=128)
act_from = fields.Many2One('workflow.activity', 'Source Activity',
required=True, select=1, ondelete='cascade')
act_to = fields.Many2One('workflow.activity', 'Destination Activity',
required=True, select=1, ondelete='cascade')
_defaults = {
'condition': lambda *a: 'True',
}
@@ -114,13 +108,11 @@ class WorkflowInstance(OSV):
_rec_name = 'res_type'
_log_access = False
_description = __doc__
_columns = {
'workflow': fields.Many2One('workflow', 'Workflow', ondelete="restrict"),
'uid': fields.Integer('User ID'),
'res_id': fields.Integer('Resource ID'),
'res_type': fields.Char('Resource Model', size=64),
'state': fields.Char('State', size=32),
}
workflow = fields.Many2One('workflow', 'Workflow', ondelete="restrict")
uid = fields.Integer('User ID')
res_id = fields.Integer('Resource ID')
res_type = fields.Char('Resource Model', size=64)
state = fields.Char('State', size=32)
def _auto_init(self, cursor, module_name):
super(WorkflowInstance, self)._auto_init(cursor, module_name)
@@ -143,15 +135,13 @@ class WorkflowWorkitem(OSV):
_log_access = False
_rec_name = 'state'
_description = __doc__
_columns = {
'activity': fields.Many2One('workflow.activity', 'Activity',
required=True, ondelete="cascade"),
'subflow': fields.Many2One('workflow.instance', 'Subflow',
ondelete="cascade"),
'instance': fields.Many2One('workflow.instance', 'Instance',
required=True, ondelete="cascade", select=1),
'state': fields.Char('State', size=64),
}
activity = fields.Many2One('workflow.activity', 'Activity',
required=True, ondelete="cascade")
subflow = fields.Many2One('workflow.instance', 'Subflow',
ondelete="cascade")
instance = fields.Many2One('workflow.instance', 'Instance',
required=True, ondelete="cascade", select=1)
state = fields.Char('State', size=64)
WorkflowWorkitem()
@@ -162,14 +152,12 @@ class WorkflowTrigger(OSV):
_name = "workflow.trigger"
_log_access = False
_description = __doc__
_columns = {
'res_id': fields.Integer('Resource ID', size=128),
'model': fields.Char('Model', size=128),
'instance': fields.Many2One('workflow.instance',
'Destination Instance', ondelete="cascade"),
'workitem': fields.Many2One('workflow.workitem', 'Workitem',
required=True, ondelete="cascade"),
}
res_id = fields.Integer('Resource ID', size=128)
model = fields.Char('Model', size=128)
instance = fields.Many2One('workflow.instance',
'Destination Instance', ondelete="cascade")
workitem = fields.Many2One('workflow.workitem', 'Workitem',
required=True, ondelete="cascade")
def _auto_init(self, cursor, module_name):
super(WorkflowTrigger, self)._auto_init(cursor, module_name)