diff --git a/addons/crm_claim/crm_claim.py b/addons/crm_claim/crm_claim.py index 50cbe4a6c44..e170f234242 100644 --- a/addons/crm_claim/crm_claim.py +++ b/addons/crm_claim/crm_claim.py @@ -164,6 +164,13 @@ class crm_claim(osv.osv): # context: no_log, because subtype already handle this return super(crm_claim, self).create(cr, uid, vals, context=context) + def copy(self, cr, uid, id, default=None, context=None): + claim = self.browse(cr, uid, id, context=context) + default = dict(default or {}, + stage_id = self._get_default_stage_id(cr, uid, context=context), + name = _('%s (copy)') % claim.name) + return super(crm_claim, self).copy(cr, uid, id, default, context=context) + # ------------------------------------------------------- # Mail gateway # ------------------------------------------------------- diff --git a/openerp/osv/expression.py b/openerp/osv/expression.py index d3231c54462..58999e751fd 100644 --- a/openerp/osv/expression.py +++ b/openerp/osv/expression.py @@ -1036,34 +1036,30 @@ class expression(object): unaccent = self._unaccent if sql_operator.endswith('like') else lambda x: x - trans_left = unaccent('value') - quote_left = unaccent(_quote(left)) instr = unaccent('%s') if sql_operator == 'in': # params will be flatten by to_sql() => expand the placeholders instr = '(%s)' % ', '.join(['%s'] * len(right)) - subselect = """(SELECT res_id - FROM ir_translation - WHERE name = %s - AND lang = %s - AND type = %s - AND {trans_left} {operator} {right} - ) UNION ( - SELECT id - FROM "{table}" - WHERE {left} {operator} {right} - ) - """.format(trans_left=trans_left, operator=sql_operator, - right=instr, table=working_model._table, left=quote_left) + subselect = """WITH temp_irt_current (id, name) as ( + SELECT ct.id, coalesce(it.value,ct.{quote_left}) + FROM {current_table} ct + LEFT JOIN ir_translation it ON (it.name = %s and + it.lang = %s and + it.type = %s and + it.res_id = ct.id and + it.value != '') + ) + SELECT id FROM temp_irt_current WHERE {name} {operator} {right} order by name + """.format(current_table=working_model._table, quote_left=_quote(left), name=unaccent('name'), + operator=sql_operator, right=instr) params = ( working_model._name + ',' + left, context.get('lang') or 'en_US', 'model', right, - right, ) push(create_substitution_leaf(leaf, ('id', inselect_operator, (subselect, params)), working_model)) diff --git a/openerp/osv/fields.py b/openerp/osv/fields.py index c7a4b4cbd8b..aad59fd2916 100644 --- a/openerp/osv/fields.py +++ b/openerp/osv/fields.py @@ -1505,7 +1505,8 @@ class property(function): default_val = self._get_default(obj, cr, uid, prop_name, context) property_create = False - if isinstance(default_val, openerp.osv.orm.browse_record): + if isinstance(default_val, (openerp.osv.orm.browse_record, + openerp.osv.orm.browse_null)): if default_val.id != id_val: property_create = True elif default_val != id_val: