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
 |