diff options
| author | Dharmraj Jhala <dja@odoo.com> | 2020-01-28 12:00:48 +0000 |
|---|---|---|
| committer | Thibault Delavallée <tde@odoo.com> | 2020-02-11 14:14:19 +0000 |
| commit | 587a6bd9f6fc1902067b26faa4a731e5c855a38f (patch) | |
| tree | 2f6c199efb9771082408bc38d6a51ba1f19db1aa /addons/sms | |
| parent | c8e79869a37b87101d64e4703401f409358a2099 (diff) | |
[IMP] sms: improve SMS preview without existing record behavior and code
This commit clean-ups the code for model `sms.template.preview` which
mainly includes the following changes :
* remove 'res_id' field and use only the reference field instead;
* remove inheritance from `sms.template` as we only need a body field
computed based on record and template;
* convert onchange of lang / record to compute field for body;
* fix 'No Records' warning which previously appeared even if there were
records to be previewed (by adding compute field 'no_records');
LINKS
TaskID 2180132
Community PR odoo/odoo#44104
Upgrade PR odoo/upgrade#763
Related: odoo/upgrade#763
Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
Diffstat (limited to 'addons/sms')
| -rw-r--r-- | addons/sms/wizard/sms_template_preview.py | 46 | ||||
| -rw-r--r-- | addons/sms/wizard/sms_template_preview_views.xml | 5 |
2 files changed, 23 insertions, 28 deletions
diff --git a/addons/sms/wizard/sms_template_preview.py b/addons/sms/wizard/sms_template_preview.py index ff63e73e308..9d00185ee2e 100644 --- a/addons/sms/wizard/sms_template_preview.py +++ b/addons/sms/wizard/sms_template_preview.py @@ -5,7 +5,6 @@ from odoo import api, fields, models class SMSTemplatePreview(models.TransientModel): - _inherit = "sms.template" _name = "sms.template.preview" _description = "SMS Template Preview" @@ -21,36 +20,31 @@ class SMSTemplatePreview(models.TransientModel): @api.model def default_get(self, fields): result = super(SMSTemplatePreview, self).default_get(fields) - sms_template = self._context.get('default_sms_template_id') and self.env['sms.template'].browse(self._context['default_sms_template_id']) or False - if sms_template and not result.get('res_id'): - result['res_id'] = self.env[sms_template.model].search([], limit=1) + sms_template_id = self.env.context.get('default_sms_template_id') + if not sms_template_id or 'resource_ref' not in fields: + return result + sms_template = self.env['sms.template'].browse(sms_template_id) + res = self.env[sms_template.model_id.model].search([], limit=1) + if res: + result['resource_ref'] = '%s,%s' % (sms_template.model_id.model, res.id) return result sms_template_id = fields.Many2one('sms.template') # NOTE This should probably be required lang = fields.Selection(_selection_languages, string='Template Preview Language') model_id = fields.Many2one('ir.model', related="sms_template_id.model_id") - res_id = fields.Integer(string='Record ID') - resource_ref = fields.Reference(string='Record reference', selection='_selection_target_model', compute='_compute_resource_ref', inverse='_inverse_resource_ref') + body = fields.Char('Body', compute='_compute_sms_template_fields') + resource_ref = fields.Reference(string='Record reference', selection='_selection_target_model') + no_record = fields.Boolean('No Record', compute='_compute_no_record') - @api.depends('model_id', 'res_id') - def _compute_resource_ref(self): + @api.depends('model_id') + def _compute_no_record(self): for preview in self: - if preview.model_id: - preview.resource_ref = '%s,%s' % (preview.model_id.model, preview.res_id or 0) - else: - preview.resource_ref = False - - def _inverse_resource_ref(self): - for preview in self: - if preview.resource_ref: - preview.res_id = preview.resource_ref.id - - @api.onchange('lang', 'resource_ref') - def on_change_resource_ref(self): - # Update res_id and body depending of the resource_ref - if self.resource_ref: - self.res_id = self.resource_ref.id - if self.sms_template_id: - template = self.sms_template_id.with_context(lang=self.lang) - self.body = template._render_template(template.body, template.model, self.res_id or 0) + preview.no_record = (self.env[preview.model_id.model].search_count([]) == 0) if preview.model_id else True + + @api.depends('lang', 'resource_ref') + def _compute_sms_template_fields(self): + for wizard in self: + # Update body depending of the resource_ref + sms_template = wizard.sms_template_id.with_context(lang=wizard.lang) + wizard.body = sms_template._render_template(sms_template.body, sms_template.model, wizard.resource_ref.id) if wizard.resource_ref else sms_template.body diff --git a/addons/sms/wizard/sms_template_preview_views.xml b/addons/sms/wizard/sms_template_preview_views.xml index df7a583b596..c2a3f396283 100644 --- a/addons/sms/wizard/sms_template_preview_views.xml +++ b/addons/sms/wizard/sms_template_preview_views.xml @@ -8,11 +8,12 @@ <field name="arch" type="xml"> <form string="SMS Preview"> <h3>Preview of <field name="sms_template_id" readonly="1" nolabel="1" class="oe_inline"/></h3> + <field name="no_record" invisible="1"/> <div class="o_row"> <span>Choose an example <field name="model_id" readonly="1"/> record:</span> <div> - <field name="resource_ref" class="oe_inline" options="{'hide_model': True, 'no_create': True, 'no_edit': True, 'no_open': True}"/> - <span class="text-warning" attrs="{'invisible':[('resource_ref','!=', False)]}">No records</span> + <field name="resource_ref" class="oe_inline" options="{'hide_model': True, 'no_create': True, 'no_edit': True, 'no_open': True}" attrs="{'invisible': [('no_record', '=', True)]}"/> + <span class="text-warning" attrs="{'invisible': [('no_record', '=', False)]}">No records</span> </div> </div> <p>Choose a language: <field name="lang" class="oe_inline ml8"/></p> |
