summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Trigaux <mat@openerp.com>2014-09-02 15:08:07 +0200
committerDavid Monjoie <dmo@odoo.com>2015-11-25 14:15:25 +0100
commit1660daf2fb19c5a99bb4e8df05c5bf7721e45cf8 (patch)
tree59336845a9fd0922f927280b67d4a116bcc46811
parentd117d6645e454d824562664b92eef19cbdb7c9a6 (diff)
[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.
-rw-r--r--addons/crm/base_partner_merge.py8
1 files changed, 7 insertions, 1 deletions
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)