odoo/ext/custom-addons/mailchimp/wizard/partner_export_update_wizar...

56 lines
2.7 KiB
Python

# -*- coding: utf-8 -*-
from odoo import models, fields, api
class ParterExportMailchimp(models.TransientModel):
_name = 'partner.export.mailchimp'
odoo_list_ids = fields.Many2many('mailchimp.lists', string='MailChimp Lists', domain=[('odoo_list_id', '!=', False)])
@api.multi
def get_mailing_contact_id(self, partner_id, force_create=False):
mailing_contact_obj = self.env['mail.mass_mailing.contact']
if not partner_id.email:
return False
query = """
SELECT id
FROM mail_mass_mailing_contact
WHERE LOWER(substring(email, '([^ ,;<@]+@[^> ,;]+)')) = LOWER(substring('{}', '([^ ,;<@]+@[^> ,;]+)'))""".format(
partner_id.email)
self._cr.execute(query)
contact_id = self._cr.fetchone()
contact_id = contact_id[0] if contact_id else False
prepared_vals = {'name': partner_id.name, 'email': partner_id.email, 'tag_ids': [(6, 0, partner_id.category_id.ids)], 'country_id': partner_id.country_id.id}
if contact_id:
contact_id = mailing_contact_obj.browse(contact_id)
contact_id.write(prepared_vals)
if not contact_id and force_create:
contact_id = mailing_contact_obj.create(prepared_vals)
return contact_id.id
@api.multi
def action_export_partner_mailchimp(self):
mailing_contact_obj = self.env['mail.mass_mailing.contact']
partner_ids = self.env['res.partner'].search([('id', 'in', self._context.get('active_ids', []))])
for partner_id in partner_ids:
for odoo_list_id in self.odoo_list_ids:
contact_id = self.get_mailing_contact_id(partner_id, force_create=True)
if contact_id:
contact_id = mailing_contact_obj.browse(contact_id)
if odoo_list_id.id not in contact_id.subscription_list_ids.mapped('list_id').mapped('mailchimp_list_id').ids:
vals = {'list_id': odoo_list_id.odoo_list_id.id, 'contact_id': contact_id.id}
contact_id.subscription_list_ids.create(vals)
contact_id.action_export_to_mailchimp()
return True
@api.multi
def action_update_partner_mailchimp(self):
mailing_contact_obj = self.env['mail.mass_mailing.contact']
partner_ids = self.env['res.partner'].search([('id', 'in', self._context.get('active_ids', []))])
for partner_id in partner_ids:
contact_id = self.get_mailing_contact_id(partner_id)
if contact_id:
contact_id = mailing_contact_obj.browse(contact_id)
contact_id.action_update_to_mailchimp()
return True