Remove _columns dict and put it directly in the object to reflect better the
browserecord
This commit is contained in:
1 parent
164769c050
commit
c6948c3f35
24 files changed
+504
-595
No files matched your search
+52
-66
@@ -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
@@ -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
@@ -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,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
@@ -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
@@ -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
@@ -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'),
|
||||
}
|
||||
|
||||
@@ -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
@@ -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()
|
||||
|
||||
|
||||
@@ -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_]+)-' \
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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()
|
||||
@@ -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: '[]',
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in new issue
Block a user