Files
odoo_source/addons/sms/models/mail_thread.py
T
Thibault Delavallée 416569c74f [FIX] sms: correctly compute numbers based on partners
message_post_with_sms method allow to give either numbers, either partners
or to fall back on default computation. Giving explicit partners does not
work because of wrong indentation in code not fetching their numbers.

Related to task 1922163
Linked to PR #33567
2019-05-22 12:29:35 +00:00

60 lines
2.5 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import logging
from odoo import models, _
from odoo.addons.iap.models.iap import InsufficientCreditError
_logger = logging.getLogger(__name__)
class MailThread(models.AbstractModel):
_inherit = 'mail.thread'
def _get_default_sms_recipients(self):
""" This method will likely need to be overriden by inherited models.
:returns partners: recordset of res.partner
"""
partners = self.env['res.partner']
if hasattr(self, 'partner_id'):
partners |= self.mapped('partner_id')
if hasattr(self, 'partner_ids'):
partners |= self.mapped('partner_ids')
return partners
def message_post_send_sms(self, sms_message, numbers=None, partners=None, note_msg=None, log_error=False):
""" Send an SMS text message and post an internal note in the chatter if successfull
:param sms_message: plaintext message to send by sms
:param partners: the numbers to send to, if none are given it will take those
from partners or _get_default_sms_recipients
:param partners: the recipients partners, if none are given it will take those
from _get_default_sms_recipients, this argument
is ignored if numbers is defined
:param note_msg: message to log in the chatter, if none is given a default one
containing the sms_message is logged
"""
if not numbers:
if not partners:
partners = self._get_default_sms_recipients()
# Collect numbers, we will consider the message to be sent if at least one number can be found
numbers = list(set([i.mobile for i in partners if i.mobile]))
if numbers:
try:
self.env['sms.api']._send_sms(numbers, sms_message)
mail_message = note_msg or _('SMS message sent: %s') % sms_message
except InsufficientCreditError as e:
if not log_error:
raise e
mail_message = _('Insufficient credit, unable to send SMS message: %s') % sms_message
else:
mail_message = _('No mobile number defined, unable to send SMS message: %s') % sms_message
for thread in self:
thread.message_post(body=mail_message)
return False