56 lines
2.7 KiB
Python
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
|