diff --git a/base_partner_merge/models/__init__.py b/base_partner_merge/models/__init__.py new file mode 100644 index 000000000..479ee606c --- /dev/null +++ b/base_partner_merge/models/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- + +from . import res_partner +from . import base_partner_merge_automatic_wizard diff --git a/base_partner_merge/models/base_partner_merge_automatic_wizard.py b/base_partner_merge/models/base_partner_merge_automatic_wizard.py new file mode 100644 index 000000000..a211f02c4 --- /dev/null +++ b/base_partner_merge/models/base_partner_merge_automatic_wizard.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# © 2017 Sunflower IT +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import fields, models, api +from ast import literal_eval + + +class MergePartnerAutomatic(models.TransientModel): + _inherit = 'base.partner.merge.automatic.wizard' + + # Enable deduplicating by reference + group_by_ref = fields.Boolean('Reference') + + @api.multi + def _process_query(self, query): + ret = super(MergePartnerAutomatic, self)._process_query(query) + + # If 'extra_domain', deduplicate only the records matching the domain + extra_domain = self.env.context.get('extra_domain', []) + if extra_domain: + for line in self.line_ids: + aggr_ids = literal_eval(line.aggr_ids) + domain = [('id', 'in', aggr_ids)] + domain.extend(extra_domain) + records = self.env['res.partner'].search(domain) + if len(records) < len(aggr_ids): + line.unlink() + return ret diff --git a/base_partner_merge/models/res_partner.py b/base_partner_merge/models/res_partner.py new file mode 100644 index 000000000..cca006ab4 --- /dev/null +++ b/base_partner_merge/models/res_partner.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# © 2017 Sunflower IT +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import models, api + + +class ResPartner(models.Model): + _inherit = 'res.partner' + + @api.model + def deduplicate_on_field(self, field, domain=[]): + """ Merge contacts""" + self.merge_wizard = \ + self.env['base.partner.merge.automatic.wizard'] + wizard_id = self.merge_wizard.with_context( + extra_domain=domain).create({ + 'group_by_%s' % (field,): True, + 'state': 'option' + }) + wizard_id.automatic_process_cb()