summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorryv-odoo <ryv@odoo.com>2019-09-05 14:58:23 +0000
committerryv-odoo <ryv@odoo.com>2019-09-12 14:53:44 +0000
commit076e71cb5b73ab23ca3abcc0764cc9e46a59b38f (patch)
tree9b36cb857625bb58706c20165469c2b5177a0f2e
parent8ef1543908b482820186f60a976bc44808b0c600 (diff)
[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
-rw-r--r--addons/sms/__manifest__.py1
-rw-r--r--addons/sms/views/sms_template_views.xml5
-rw-r--r--addons/sms/wizard/__init__.py1
-rw-r--r--addons/sms/wizard/sms_template_preview.py53
-rw-r--r--addons/sms/wizard/sms_template_preview_views.xml42
5 files changed, 102 insertions, 0 deletions
diff --git a/addons/sms/__manifest__.py b/addons/sms/__manifest__.py
index 2b15020a219..90462b4c8fb 100644
--- a/addons/sms/__manifest__.py
+++ b/addons/sms/__manifest__.py
@@ -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',
diff --git a/addons/sms/views/sms_template_views.xml b/addons/sms/views/sms_template_views.xml
index 1f339e4d944..24acfcac134 100644
--- a/addons/sms/views/sms_template_views.xml
+++ b/addons/sms/views/sms_template_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>
diff --git a/addons/sms/wizard/__init__.py b/addons/sms/wizard/__init__.py
index e6669ba5997..bd0a5c11647 100644
--- a/addons/sms/wizard/__init__.py
+++ b/addons/sms/wizard/__init__.py
@@ -3,3 +3,4 @@
from . import sms_cancel
from . import sms_composer
from . import sms_resend
+from . import sms_template_preview
diff --git a/addons/sms/wizard/sms_template_preview.py b/addons/sms/wizard/sms_template_preview.py
new file mode 100644
index 00000000000..65060f4848a
--- /dev/null
+++ b/addons/sms/wizard/sms_template_preview.py
@@ -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)
diff --git a/addons/sms/wizard/sms_template_preview_views.xml b/addons/sms/wizard/sms_template_preview_views.xml
new file mode 100644
index 00000000000..ab9d3f90127
--- /dev/null
+++ b/addons/sms/wizard/sms_template_preview_views.xml
@@ -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>