diff --git a/bin/addons/base/ir/ir.xml b/bin/addons/base/ir/ir.xml
index 53c9fb7e580..55792706bcf 100644
--- a/bin/addons/base/ir/ir.xml
+++ b/bin/addons/base/ir/ir.xml
@@ -1155,6 +1155,12 @@
+
+
+
+
+
+
diff --git a/bin/addons/base/ir/ir_actions.py b/bin/addons/base/ir/ir_actions.py
index c270557f6c5..3aa83ffbe26 100644
--- a/bin/addons/base/ir/ir_actions.py
+++ b/bin/addons/base/ir/ir_actions.py
@@ -390,6 +390,7 @@ class actions_server(osv.osv):
'state': fields.selection([
('client_action','Client Action'),
('dummy','Dummy'),
+ ('code','Python Code'),
('trigger','Trigger'),
('email','Email'),
('sms','SMS'),
@@ -397,6 +398,7 @@ class actions_server(osv.osv):
('object_write','Write Object'),
('other','Multi Actions'),
], 'Action State', required=True, size=32),
+ 'code':fields.text('Python Code'),
'sequence': fields.integer('Sequence'),
'model_id': fields.many2one('ir.model', 'Object', required=True),
'action_id': fields.many2one('ir.actions.actions', 'Client Action'),
@@ -418,6 +420,15 @@ class actions_server(osv.osv):
'state': lambda *a: 'dummy',
'type': lambda *a: 'ir.actions.server',
'sequence': lambda *a: 5,
+ 'code': lambda *a: """# You can use the following variables
+# - object
+# - object2
+# - time
+# - cr
+# - uid
+# - ids
+# If you plan to return an action, assign: action = {...}
+""",
}
diff --git a/bin/addons/base/ir/ir_model.py b/bin/addons/base/ir/ir_model.py
index 66cbd98e52d..471d4d2f6d9 100644
--- a/bin/addons/base/ir/ir_model.py
+++ b/bin/addons/base/ir/ir_model.py
@@ -1,7 +1,7 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
-# OpenERP, Open Source Management Solution
+# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2008 Tiny SPRL (). All Rights Reserved
# $Id$
#
@@ -233,7 +233,7 @@ class ir_model_fields(osv.osv):
# MAY BE ADD A ALTER TABLE DROP ?
#
return super(ir_model_fields, self).unlink(cr, user, ids, context)
-
+
def write(self, cr, uid, ids, vals, context=None):
res = False
if 'relation_id' in vals:
@@ -242,29 +242,29 @@ class ir_model_fields(osv.osv):
if 'relation_field_id' in vals:
field_data = self.pool.get('ir.model.fields').browse(cr, uid, vals['relation_field_id'])
vals['relation'] = field_data.name
-
+
res = super(ir_model_fields, self).write(cr, uid, ids, vals, context)
return res
-
+
def create(self, cr, user, vals, context=None):
if 'relation_id' in vals:
- model_data = self.pool.get('ir.model').browse(cr,user,vals['relation_id'])
+ model_data = self.pool.get('ir.model').browse(cr, user, vals['relation_id'])
vals['relation']=model_data.model
if 'relation_field_id' in vals:
- field_data = self.pool.get('ir.model.fields').browse(cr, uid, vals['relation_field_id'])
+ field_data = self.pool.get('ir.model.fields').browse(cr, user, vals['relation_field_id'])
vals['relation_field'] = field_data.name
if 'model_id' in vals:
- model_data=self.pool.get('ir.model').browse(cr,user,vals['model_id'])
- vals['model']=model_data.model
+ model_data = self.pool.get('ir.model').browse(cr, user, vals['model_id'])
+ vals['model'] = model_data.model
if context and context.get('manual',False):
- vals['state']='manual'
+ vals['state'] = 'manual'
res = super(ir_model_fields,self).create(cr, user, vals, context)
- if vals.get('state','base')=='manual':
+ if vals.get('state','base') == 'manual':
if not vals['name'].startswith('x_'):
raise except_orm(_('Error'), _("Custom fields must have a name that starts with 'x_' !"))
if self.pool.get(vals['model']):
self.pool.get(vals['model']).__init__(self.pool, cr)
- self.pool.get(vals['model'])._auto_init(cr,{})
+ self.pool.get(vals['model'])._auto_init(cr, {})
return res
ir_model_fields()
@@ -298,7 +298,7 @@ class ir_model_access(osv.osv):
model_name = model.name
else:
model_name = model
-
+
if isinstance(group_ids, (int, long)):
group_ids = [group_ids]
for group_id in group_ids:
@@ -324,7 +324,7 @@ class ir_model_access(osv.osv):
def check(self, cr, uid, model, mode='read', raise_exception=True):
if uid==1:
- # User root have all accesses
+ # User root have all accesses
# TODO: exclude xml-rpc requests
return True
@@ -335,7 +335,7 @@ class ir_model_access(osv.osv):
model_name = model.name
else:
model_name = model
-
+
# We check if a specific rule exists
cr.execute('SELECT MAX(CASE WHEN perm_' + mode + ' THEN 1 ELSE 0 END) '
' FROM ir_model_access a '
@@ -394,7 +394,7 @@ class ir_model_access(osv.osv):
res = super(ir_model_access, self).write(cr, uid, *args, **argv)
self.check() # clear the cache of check function
return res
-
+
def create(self, cr, uid, *args, **argv):
res = super(ir_model_access, self).create(cr, uid, *args, **argv)
self.check()
diff --git a/bin/addons/base/res/partner/partner.py b/bin/addons/base/res/partner/partner.py
index d17c696677f..56c01015287 100644
--- a/bin/addons/base/res/partner/partner.py
+++ b/bin/addons/base/res/partner/partner.py
@@ -255,7 +255,7 @@ class res_partner(osv.osv):
ref = res and res[0]['ref'] or '0'
try:
nextref = int(ref)+1
- except e:
+ except:
raise osv.except_osv(_('Warning'), _("Couldn't generate the next id because some partners have an alphabetic id !"))
# update the current partner
diff --git a/bin/osv/orm.py b/bin/osv/orm.py
index 1375794aaf3..a81a8011d52 100644
--- a/bin/osv/orm.py
+++ b/bin/osv/orm.py
@@ -133,7 +133,6 @@ class browse_record(object):
self._data[id] = {'id': id}
self._cache = cache
- pass
def __getitem__(self, name):
if name == 'id':
@@ -2059,7 +2058,8 @@ class orm(orm_template):
'where id in ('+str_d+')', sub_ids)
for order, object, ids, fields in result_store:
- self.pool.get(object)._store_set_values(cr, uid, ids, fields, context)
+ if object<>self._name:
+ self.pool.get(object)._store_set_values(cr, uid, ids, fields, context)
return True
#