diff options
Diffstat (limited to 'addons/sms/wizard')
| -rw-r--r-- | addons/sms/wizard/sms_composer.py | 74 |
1 files changed, 44 insertions, 30 deletions
diff --git a/addons/sms/wizard/sms_composer.py b/addons/sms/wizard/sms_composer.py index 7d5cbc9bfd2..0d3d822ed4b 100644 --- a/addons/sms/wizard/sms_composer.py +++ b/addons/sms/wizard/sms_composer.py @@ -18,41 +18,24 @@ class SendSMS(models.TransientModel): result = super(SendSMS, self).default_get(fields) result['res_model'] = result.get('res_model') or self.env.context.get('active_model') - result['composition_mode'] = result.get('composition_mode') - - # guess the composition mode, if multiples ids => mass composition else comment - if self.env.context.get('default_composition_mode') and self.env.context.get('default_composition_mode') == "guess": - if self.env.context.get('active_ids') and len(self.env.context.get('active_ids')) > 1: - result['composition_mode'] = 'mass' - result['res_id'] = False - else: - result['composition_mode'] = 'comment' - result['res_ids'] = False if not result.get('active_domain'): result['active_domain'] = repr(self.env.context.get('active_domain', [])) + if not result.get('res_ids'): + if not result.get('res_id') and self.env.context.get('active_ids') and len(self.env.context.get('active_ids')) > 1: + result['res_ids'] = repr(self.env.context.get('active_ids')) if not result.get('res_id'): if not result.get('res_ids') and self.env.context.get('active_id'): result['res_id'] = self.env.context.get('active_id') - if not result.get('res_ids'): - if not result.get('res_id') and self.env.context.get('active_ids'): - result['res_ids'] = repr(self.env.context.get('active_ids')) - if result['res_model']: - result.update( - self._get_composer_values( - result['composition_mode'], result['res_model'], result.get('res_id'), - result.get('body'), result.get('template_id') - ) - ) return result # documents composition_mode = fields.Selection([ ('numbers', 'Send to numbers'), ('comment', 'Post on a document'), - ('mass', 'Send SMS in batch')], - string='Composition Mode', default='comment', required=True) + ('mass', 'Send SMS in batch')], string='Composition Mode', + compute='_compute_composition_mode', readonly=False, required=True, store=True) res_model = fields.Char('Document Model Name') res_id = fields.Integer('Document ID') res_ids = fields.Char('Document IDs') @@ -86,7 +69,19 @@ class SendSMS(models.TransientModel): sanitized_numbers = fields.Char('Sanitized Number', compute='_compute_sanitized_numbers', compute_sudo=False) # content template_id = fields.Many2one('sms.template', string='Use Template', domain="[('model', '=', res_model)]") - body = fields.Text('Message', required=True) + body = fields.Text( + 'Message', compute='_compute_body', + readonly=False, store=True, required=True) + + @api.depends('res_ids_count', 'active_domain_count') + @api.depends_context('default_composition_mode') + def _compute_composition_mode(self): + for composer in self: + if self.env.context.get('default_composition_mode') == 'guess' or not composer.composition_mode: + if composer.res_ids_count > 1 or (composer.use_active_domain and composer.active_domain_count > 1): + composer.composition_mode = 'mass' + else: + composer.composition_mode = 'comment' @api.depends('res_model', 'res_id', 'res_ids', 'active_domain') def _compute_recipients_count(self): @@ -165,12 +160,29 @@ class SendSMS(models.TransientModel): else: composer.sanitized_numbers = False - @api.onchange('composition_mode', 'res_model', 'res_id', 'template_id') - def _onchange_template_id(self): - if self.template_id and self.composition_mode == 'comment' and self.res_id: - self.body = self.template_id._render_field('body', [self.res_id], compute_lang=True)[self.res_id] - elif self.template_id: - self.body = self.template_id.body + @api.depends('composition_mode', 'res_model', 'res_id', 'template_id') + def _compute_body(self): + for record in self: + if record.template_id and record.composition_mode == 'comment' and record.res_id: + record.body = record.template_id._render_field('body', [record.res_id], compute_lang=True)[record.res_id] + elif record.template_id: + record.body = record.template_id.body + + # ------------------------------------------------------------ + # CRUD + # ------------------------------------------------------------ + + @api.model + def create(self, values): + # TDE FIXME: currently have to compute manually to avoid required issue, waiting VFE branch + if not values.get('body') or not values.get('composition_mode'): + values_wdef = self._add_missing_default_values(values) + cache_composer = self.new(values_wdef) + cache_composer._compute_body() + cache_composer._compute_composition_mode() + values['body'] = values.get('body') or cache_composer.body + values['composition_mode'] = values.get('composition_mode') or cache_composer.composition_mode + return super(SendSMS, self).create(values) # ------------------------------------------------------------ # Actions @@ -357,10 +369,12 @@ class SendSMS(models.TransientModel): if self.use_active_domain: active_domain = literal_eval(self.active_domain or '[]') records = self.env[self.res_model].search(active_domain) + elif self.res_ids: + records = self.env[self.res_model].browse(literal_eval(self.res_ids)) elif self.res_id: records = self.env[self.res_model].browse(self.res_id) else: - records = self.env[self.res_model].browse(literal_eval(self.res_ids or '[]')) + records = self.env[self.res_model] records = records.with_context(mail_notify_author=True) return records |
