[IMP] sms: allow to preview a sms template
Add a way for the user to preview sms content from a sms template depending of a record (targeted model) and the installed languages (as for the mail template). Add button to open this preview on the form of the sms template. TASK_ID : 2053631
This commit is contained in:
@@ -16,6 +16,7 @@ The service is provided by the In App Purchase Odoo platform.
|
||||
'data/ir_cron_data.xml',
|
||||
'wizard/sms_cancel_views.xml',
|
||||
'wizard/sms_composer_views.xml',
|
||||
'wizard/sms_template_preview_views.xml',
|
||||
'wizard/sms_resend_views.xml',
|
||||
'views/ir_actions_views.xml',
|
||||
'views/res_config_settings_views.xml',
|
||||
|
||||
@@ -6,6 +6,11 @@
|
||||
<field name="arch" type="xml">
|
||||
<form string="SMS Templates">
|
||||
<sheet>
|
||||
<div class="oe_button_box" name="button_box">
|
||||
<button class="oe_stat_button" name="%(sms_template_preview_action)d" icon="fa-search-plus" string="Preview"
|
||||
type="action" target="new"
|
||||
context="{'template_id':active_id}"/>
|
||||
</div>
|
||||
<div class="oe_title">
|
||||
<label for="name" class="oe_edit_only" string="SMS Template"/>
|
||||
<h1><field name="name" required="1"/></h1>
|
||||
|
||||
@@ -3,3 +3,4 @@
|
||||
from . import sms_cancel
|
||||
from . import sms_composer
|
||||
from . import sms_resend
|
||||
from . import sms_template_preview
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from odoo import api, fields, models
|
||||
|
||||
|
||||
class SMSTemplatePreview(models.TransientModel):
|
||||
_inherit = "sms.template"
|
||||
_name = "sms.template.preview"
|
||||
_description = "SMS Template Preview"
|
||||
|
||||
@api.model
|
||||
def _selection_target_model(self):
|
||||
models = self.env['ir.model'].search([])
|
||||
return [(model.model, model.name) for model in models]
|
||||
|
||||
@api.model
|
||||
def _selection_languages(self):
|
||||
return self.env['res.lang'].get_installed()
|
||||
|
||||
@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)
|
||||
return result
|
||||
|
||||
sms_template_id = fields.Many2one('sms.template')
|
||||
|
||||
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')
|
||||
|
||||
@api.depends('model_id', 'res_id')
|
||||
def _compute_resource_ref(self):
|
||||
for preview in self:
|
||||
if preview.model_id:
|
||||
preview.resource_ref = '%s,%s' % (preview.model_id.model, preview.res_id or 0)
|
||||
|
||||
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
|
||||
template = self.sms_template_id.with_context(lang=self.lang)
|
||||
self.body = template._render_template(template.body, template.model, self.res_id)
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<!-- SMS Template Preview -->
|
||||
<record model="ir.ui.view" id="sms_template_preview_form">
|
||||
<field name="name">sms.template.preview.form</field>
|
||||
<field name="model">sms.template.preview</field>
|
||||
<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>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
<p>Choose a language: <field name="lang" class="oe_inline ml8"/></p>
|
||||
<label for="body" string="SMS content"/>
|
||||
<hr/>
|
||||
<field name="body" readonly="1" nolabel="1" options='{"safe": True}'/>
|
||||
<hr/>
|
||||
<footer>
|
||||
<button string="Discard" class="btn-secondary" special="cancel"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="sms_template_preview_action" model="ir.actions.act_window">
|
||||
<field name="name">Template Preview</field>
|
||||
<field name="res_model">sms.template.preview</field>
|
||||
<field name="binding_model_id" ref="sms.model_sms_template"/>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="sms_template_preview_form"/>
|
||||
<field name="target">new</field>
|
||||
<field name="context">{'default_sms_template_id':active_id}</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user