From 1660daf2fb19c5a99bb4e8df05c5bf7721e45cf8 Mon Sep 17 00:00:00 2001 From: Martin Trigaux Date: Tue, 2 Sep 2014 15:08:07 +0200 Subject: [PATCH] [FIX] crm: avoid constraint errors when merging partners As for the _update_foreign_keys, the _update_reference_fields method may raise an unique constraint when merging two partners. In such case, the new record is not relevant and can be removed. Backport of 8d23a3a86c3fc09e0b9f6275641639106657b2e7. OPW 657338, closes #9705. --- addons/crm/base_partner_merge.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/addons/crm/base_partner_merge.py b/addons/crm/base_partner_merge.py index 72a9e12435a..a96b61e3ecd 100644 --- a/addons/crm/base_partner_merge.py +++ b/addons/crm/base_partner_merge.py @@ -220,7 +220,13 @@ class MergePartnerAutomatic(osv.TransientModel): return domain = [(field_model, '=', 'res.partner'), (field_id, '=', src.id)] ids = proxy.search(cr, openerp.SUPERUSER_ID, domain, context=context) - return proxy.write(cr, openerp.SUPERUSER_ID, ids, {field_id: dst_partner.id}, context=context) + try: + with mute_logger('openerp.sql_db'), cr.savepoint(): + return proxy.write(cr, openerp.SUPERUSER_ID, ids, {field_id: dst_partner.id}, context=context) + except psycopg2.Error: + # updating fails, most likely due to a violated unique constraint + # keeping record with nonexistent partner_id is useless, better delete it + return proxy.unlink(cr, openerp.SUPERUSER_ID, ids, context=context) update_records = functools.partial(update_records, context=context)