from __future__ import print_function from odoo import models, fields, api,_ from odoo.exceptions import UserError, ValidationError,Warning from psycopg2 import sql, DatabaseError from pytz import timezone from werkzeug import utils import os.path from datetime import datetime, timedelta import json import time import sib_api_v3_sdk from sib_api_v3_sdk.rest import ApiException from pprint import pprint import logging _logger = logging.getLogger(__name__) SENDINBLUE_ACCOUNT_FILE = '/usr/lib/python3/dist-packages/odoo/kalachakra_module/kalachakra/static/sendinblue.json' class MailingList(models.Model): _inherit = "mailing.list" _description = 'mailing list' id_sendinblue_list=fields.Integer('sendinblue list') #pas utilisée : def create_sendinblue_list(self): configuration = sib_api_v3_sdk.Configuration() f = open(SENDINBLUE_ACCOUNT_FILE) data = json.load(f) configuration.api_key['api-key'] = data['api_key'] limit = 10 offset = 0 api_instance = sib_api_v3_sdk.ContactsApi(sib_api_v3_sdk.ApiClient(configuration)) create_list = sib_api_v3_sdk.CreateList(name= 'Odoo '+self.name, folder_id=25) try: #api_response = api_instance.get_folders(limit, offset) #raise Warning(api_response) api_response = api_instance.create_list(create_list) #raise Warning(api_response) pprint(api_response) self.id_sendinblue_list=int(api_response.id) except ApiException as e: raise Warning("Exception when calling ContactsApi->create_list: %s\n" % e) class MailingContact(models.Model): _inherit = "mailing.contact" _description = 'mailing contact' @api.model def create(self, values): res = super(MailingContact, self).create(values) #ajout du contact à la liste de diffusion de sendinblue res.create_sendinblue_contact() return res def write(self, values): res = super(MailingContact, self).write(values) #ajout du contact à la liste de diffusion self.create_sendinblue_contact() return res def get_info_sendinblue_contact(self): #https://developers.sendinblue.com/reference/getfolders-1 _logger.info('get_info_sendinblue_contact') f = open(SENDINBLUE_ACCOUNT_FILE) data = json.load(f) configuration = sib_api_v3_sdk.Configuration() configuration.api_key['api-key'] = data['api_key'] api_instance = sib_api_v3_sdk.ContactsApi(sib_api_v3_sdk.ApiClient(configuration)) email = self.email try: _logger.info('get_info_sendinblue_contact -1') api_response = api_instance.get_contact_info(email) return (api_response) except ApiException as e: _logger.info('get_info_sendinblue_contact -2') #print("Exception when calling ContactsApi->get_contact_info: %s\n" % e) return False def create_sendinblue_contact(self): _logger.info('create_sendinblue_contact') if self.email and self.list_ids: _logger.info('create_sendinblue_contact -1') configuration = sib_api_v3_sdk.Configuration() #https://developers.sendinblue.com/reference/getfolders-1 f = open(SENDINBLUE_ACCOUNT_FILE) data = json.load(f) configuration.api_key['api-key'] = data['api_key'] limit = 10 offset = 0 api_instance = sib_api_v3_sdk.ContactsApi(sib_api_v3_sdk.ApiClient(configuration)) list_ids=[] res=self.get_info_sendinblue_contact() #si le contact existe dans sendinblue, on lui rajoute la nouvelle # liste de diffusion if res: _logger.info('create_sendinblue_contact -2') for id in self.list_ids: if id.id_sendinblue_list: if not id.id_sendinblue_list in res.list_ids: contact_emails = sib_api_v3_sdk.AddContactToList() contact_emails.emails = [self.email] try: api_response = api_instance.add_contact_to_list(id.id_sendinblue_list, contact_emails) pprint(api_response) except ApiException as e: continue return True #si le contact n'existe pas dans sendinblue, on le créé else: _logger.info('create_sendinblue_contact -3') for id in self.list_ids: list_ids.append(int(id.id_sendinblue_list)) if list_ids!=[]: create_contact = sib_api_v3_sdk.CreateContact(email=self.email, list_ids=list_ids) try: _logger.info('create_sendinblue_contact -4') api_response = api_instance.create_contact(create_contact) #raise Warning(api_response) _logger.info(api_response) pprint(api_response) return True except ApiException as e: _logger.info('create_sendinblue_contact -5') _logger.info(str(e)) #raise Warning("Exception when calling ContactsApi->create_list: %s\n" % e) return False