PURPOSE Send SMS from server/automated actions. Indeed we can already send emails from server actions. The goal is to have the same thing for the sms. SPECIFICATION Purpose of this commit is to add support of sending batch SMS through server actions. This means sending SMS will be available also for automated (base automation) and scheduled actions (cron). A new type of server action is added: sms. User choose an sms.template to use to send SMS in batch. An option allow to choose to keep archive on selected records. If no archive is kept, a batch of sms is created. With archive a _message_sms is performed with note subtype, allowing to have a discuss messages with only sms customer being notified. Linked to task 1935280 Part of PR #34864
48 lines
1.7 KiB
Python
48 lines
1.7 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import _, api, fields, models
|
|
from odoo.exceptions import ValidationError
|
|
|
|
|
|
class ServerActions(models.Model):
|
|
""" Add SMS option in server actions. """
|
|
_name = 'ir.actions.server'
|
|
_inherit = ['ir.actions.server']
|
|
|
|
state = fields.Selection(selection_add=[
|
|
('sms', 'Send SMS Text Message'),
|
|
])
|
|
# SMS
|
|
sms_template_id = fields.Many2one(
|
|
'sms.template', 'SMS Template', ondelete='set null',
|
|
domain="[('model_id', '=', model_id)]",
|
|
)
|
|
sms_mass_keep_log = fields.Boolean('Log a note', default=True)
|
|
|
|
@api.constrains('state', 'model_id')
|
|
def _check_sms_capability(self):
|
|
for action in self:
|
|
if action.state == 'sms' and not action.model_id.is_mail_thread:
|
|
raise ValidationError(_("Sending SMS can only be done on a mail.thread model"))
|
|
|
|
@api.model
|
|
def run_action_sms_multi(self, action, eval_context=None):
|
|
# TDE CLEANME: when going to new api with server action, remove action
|
|
if not action.sms_template_id or self._is_recompute(action):
|
|
return False
|
|
|
|
records = eval_context.get('records') or eval_context.get('record')
|
|
if not records:
|
|
return False
|
|
|
|
composer = self.env['sms.composer'].with_context(
|
|
default_res_model=records._name,
|
|
default_res_ids=records.ids,
|
|
default_composition_mode='mass',
|
|
default_template_id=action.sms_template_id.id,
|
|
default_mass_keep_log=action.sms_mass_keep_log,
|
|
).create({})
|
|
composer.action_send_sms()
|
|
return False
|