PURPOSE
Clean and improve IAP tools integration in Odoo. Introduce bridge modules
to extract common features, notably for CRM and Partner.
SPECIFICATIONS
In this commit we reorganize IAP module to better understand its content
and ease future cleaning
* have models separated from tools;
* rename some tools to find their grep. An iap_ prefix is added to ensure
we don't clash with other global functions or methods;
* perform some linting;
To provide backward compatibility support we keep some import in init file of
IAP addon. Standard code is about to be updated but we want to avoid too
much issues when migrating code to 13.5 . Compatibility layer will be removed
after v14 final freeze.
LINKS
Task ID-2248367
Community PR odoo/odoo#53214
Enterprise PR odoo/enterprise#11258
Upgrade PR odoo/upgrade#1363
IAP PR odoo/iap-apps#191
59 lines
1.9 KiB
Python
59 lines
1.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import api, models
|
|
from odoo.addons.iap.tools import iap_tools
|
|
|
|
DEFAULT_ENDPOINT = 'https://iap-sms.odoo.com'
|
|
|
|
|
|
class SmsApi(models.AbstractModel):
|
|
_name = 'sms.api'
|
|
_description = 'SMS API'
|
|
|
|
@api.model
|
|
def _contact_iap(self, local_endpoint, params):
|
|
account = self.env['iap.account'].get('sms')
|
|
params['account_token'] = account.account_token
|
|
endpoint = self.env['ir.config_parameter'].sudo().get_param('sms.endpoint', DEFAULT_ENDPOINT)
|
|
# TODO PRO, the default timeout is 15, do we have to increase it ?
|
|
return iap_tools.iap_jsonrpc(endpoint + local_endpoint, params=params)
|
|
|
|
@api.model
|
|
def _send_sms(self, numbers, message):
|
|
""" Send a single message to several numbers
|
|
|
|
:param numbers: list of E164 formatted phone numbers
|
|
:param message: content to send
|
|
|
|
:raises ? TDE FIXME
|
|
"""
|
|
params = {
|
|
'numbers': numbers,
|
|
'message': message,
|
|
}
|
|
return self._contact_iap('/iap/message_send', params)
|
|
|
|
@api.model
|
|
def _send_sms_batch(self, messages):
|
|
""" Send SMS using IAP in batch mode
|
|
|
|
:param messages: list of SMS to send, structured as dict [{
|
|
'res_id': integer: ID of sms.sms,
|
|
'number': string: E164 formatted phone number,
|
|
'content': string: content to send
|
|
}]
|
|
|
|
:return: return of /iap/sms/1/send controller which is a list of dict [{
|
|
'res_id': integer: ID of sms.sms,
|
|
'state': string: 'insufficient_credit' or 'wrong_number_format' or 'success',
|
|
'credit': integer: number of credits spent to send this SMS,
|
|
}]
|
|
|
|
:raises: normally none
|
|
"""
|
|
params = {
|
|
'messages': messages
|
|
}
|
|
return self._contact_iap('/iap/sms/2/send', params)
|