summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--openerp/addons/base/res/res_lang.py4
-rw-r--r--openerp/osv/orm.py2
-rw-r--r--openerp/workflow/instance.py7
3 files changed, 11 insertions, 2 deletions
diff --git a/openerp/addons/base/res/res_lang.py b/openerp/addons/base/res/res_lang.py
index 3fb58e901f6..3dfc6a5d954 100644
--- a/openerp/addons/base/res/res_lang.py
+++ b/openerp/addons/base/res/res_lang.py
@@ -185,6 +185,10 @@ class lang(osv.osv):
return grouping, thousands_sep, decimal_point
def write(self, cr, uid, ids, vals, context=None):
+ if 'code' in vals:
+ for rec in self.browse(cr, uid, ids, context):
+ if rec.code != vals['code']:
+ raise osv.except_osv(_('User Error'), _("Language code cannot be modified."))
for lang_id in ids :
self._lang_data_get.clear_cache(self)
return super(lang, self).write(cr, uid, ids, vals, context)
diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py
index 36e1150c521..71b1103c328 100644
--- a/openerp/osv/orm.py
+++ b/openerp/osv/orm.py
@@ -2527,7 +2527,7 @@ class BaseModel(object):
# if val is a many2one, just write the ID
if type(val) == tuple:
val = val[0]
- if val is not False:
+ if f._type == 'boolean' or val is not False:
cr.execute(update_query, (ss[1](val), key))
def _check_selection_field_value(self, cr, uid, field, value, context=None):
diff --git a/openerp/workflow/instance.py b/openerp/workflow/instance.py
index fd15eee6243..61ad8765124 100644
--- a/openerp/workflow/instance.py
+++ b/openerp/workflow/instance.py
@@ -70,7 +70,12 @@ class WorkflowInstance(object):
cr = self.session.cr
cr.execute("select * from wkf_workitem where inst_id=%s", (self.instance['id'],))
stack = []
- for work_item_values in cr.dictfetchall():
+ for i, work_item_values in enumerate(cr.dictfetchall()):
+ if i > 0:
+ # test if previous workitem has already processed this one
+ cr.execute("select id from wkf_workitem where id=%s", (work_item_values['id'],))
+ if not cr.fetchone():
+ continue
wi = WorkflowItem(self.session, self.record, work_item_values)
wi.process(signal=signal, force_running=force_running, stack=stack)
# An action is returned