Add mail_layout_preview

pull/1144/head
Simone Orsi 2019-12-02 12:40:58 +01:00 committed by sonhd91
parent b2f8c22df2
commit cbc4e8c51c
17 changed files with 862 additions and 0 deletions

View File

@ -0,0 +1,92 @@
============
Mail Preview
============
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fsocial-lightgray.png?logo=github
:target: https://github.com/OCA/social/tree/13.0/mail_layout_preview
:alt: OCA/social
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/social-13-0/social-13-0-mail_layout_preview
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/205/13.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
The purpose of this module is to help development of email templates
allowing to render the full layout preview of each of them.
Odoo already allows you do preview emails but they are wrapped into Odoo backend theme.
NOTE: to make work properly your emails it's strongly recommended to use `mail_inline_css` to include all styles in the body of the email.
**Table of contents**
.. contents::
:local:
Usage
=====
* Go to a template and click on the preview button
* Select desired params and click on "Full layout preview" link
* You'll get to the preview
As a developer, you can see a list of all templates for a model by going to:
/email-preview/$model.name
You'll get a list of all the templates.
Follow the instructions there on how to use the links.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/social/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
`feedback <https://github.com/OCA/social/issues/new?body=module:%20mail_layout_preview%0Aversion:%2013.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
~~~~~~~
* Camptocamp SA
Contributors
~~~~~~~~~~~~
* Simone Orsi <simahawk@gmail.com>
Maintainers
~~~~~~~~~~~
This module is maintained by the OCA.
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
This module is part of the `OCA/social <https://github.com/OCA/social/tree/13.0/mail_layout_preview>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View File

@ -0,0 +1,2 @@
from . import controllers
from . import wizard

View File

@ -0,0 +1,15 @@
# Copyright 2020 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "Mail Preview",
"summary": """
Preview email templates in the browser""",
"version": "13.0.1.0.0",
"license": "AGPL-3",
"author": "Camptocamp SA,Odoo Community Association (OCA)",
"website": "https://github.com/OCA/social",
"depends": ["mail"],
"data": ["templates/email_preview.xml", "wizard/email_template_preview.xml"],
"development_status": "Beta",
}

View File

@ -0,0 +1 @@
from . import layout_preview

View File

@ -0,0 +1,47 @@
# Copyright 2020 Simone Orsi - Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
from odoo import http
from odoo.http import request
class Preview(http.Controller):
_list_template = "mail_layout_preview.email_templates_list"
@http.route(
["/email-preview/<string:model>"], type="http", auth="user", website=True
)
def template_list(self, model, **kw):
env = request.env
templates = env["mail.template"].search([("model_id.model", "=", model)])
xids = templates.get_external_id()
return request.render(
self._list_template, {"model": model, "templates": templates, "xids": xids}
)
@http.route(
["/email-preview/<string:model>/<string:templ_id>/<int:rec_id>"],
type="http",
auth="user",
website=True,
)
def preview(self, model, templ_id, rec_id, **kw):
"""Render an email template to verify look and feel.
Provide model, record id and an email template to render.
Example for event registration email:
/email-preview/event.registration/event.event_subscription/5
"""
env = request.env
record = env[model].browse(rec_id)
if templ_id.isdigit():
# got an ID
template = env["mail.template"].browse(int(templ_id))
else:
# got a XID
template = env.ref(templ_id.strip())
result = template.generate_email(record.id)
return request.make_response(result["body_html"])

View File

@ -0,0 +1,86 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mail_layout_preview
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: mail_layout_preview
#: model_terms:ir.ui.view,arch_db:mail_layout_preview.email_templates_list
msgid "<strong>Link:</strong>"
msgstr ""
#. module: mail_layout_preview
#: model_terms:ir.ui.view,arch_db:mail_layout_preview.email_templates_list
msgid "<strong>Name:</strong>"
msgstr ""
#. module: mail_layout_preview
#: model_terms:ir.ui.view,arch_db:mail_layout_preview.email_templates_list
msgid "<strong>XMLID:</strong>"
msgstr ""
#. module: mail_layout_preview
#: model_terms:ir.ui.view,arch_db:mail_layout_preview.email_templates_list
msgid "Copy the link"
msgstr ""
#. module: mail_layout_preview
#: model:ir.model,name:mail_layout_preview.model_email_template_preview
msgid "Email Template Preview"
msgstr ""
#. module: mail_layout_preview
#: model_terms:ir.ui.view,arch_db:mail_layout_preview.email_templates_list
msgid "Email templates for:"
msgstr ""
#. module: mail_layout_preview
#: model_terms:ir.ui.view,arch_db:mail_layout_preview.email_templates_list
msgid "Find your template"
msgstr ""
#. module: mail_layout_preview
#: model:ir.model.fields,field_description:mail_layout_preview.field_email_template_preview__layout_preview_url
msgid "Full layout preview"
msgstr ""
#. module: mail_layout_preview
#: model_terms:ir.ui.view,arch_db:mail_layout_preview.email_templates_list
msgid "Here you find all the template for the given model."
msgstr ""
#. module: mail_layout_preview
#: model_terms:ir.ui.view,arch_db:mail_layout_preview.email_templates_list
msgid "Load it"
msgstr ""
#. module: mail_layout_preview
#: model_terms:ir.ui.view,arch_db:mail_layout_preview.email_templates_list
msgid "No template found."
msgstr ""
#. module: mail_layout_preview
#: model_terms:ir.ui.view,arch_db:mail_layout_preview.email_templates_list
msgid ""
"Paste into the address bar and change the record ID (the last value in the URL).\n"
" <br/>If you don't know the ID of the record, just browse to the record via odoo interface and check its ID in the address bar `#id=XXX`."
msgstr ""
#. module: mail_layout_preview
#: model_terms:ir.ui.view,arch_db:mail_layout_preview.email_templates_list
msgid "Preview"
msgstr ""
#. module: mail_layout_preview
#: model_terms:ir.ui.view,arch_db:mail_layout_preview.email_templates_list
msgid "View in backend"
msgstr ""

View File

@ -0,0 +1 @@
* Simone Orsi <simahawk@gmail.com>

View File

@ -0,0 +1,6 @@
The purpose of this module is to help development of email templates
allowing to render the full layout preview of each of them.
Odoo already allows you do preview emails but they are wrapped into Odoo backend theme.
NOTE: to make work properly your emails it's strongly recommended to use `mail_inline_css` to include all styles in the body of the email.

View File

@ -0,0 +1,10 @@
* Go to a template and click on the preview button
* Select desired params and click on "Full layout preview" link
* You'll get to the preview
As a developer, you can see a list of all templates for a model by going to:
/email-preview/$model.name
You'll get a list of all the templates.
Follow the instructions there on how to use the links.

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View File

@ -0,0 +1,436 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.15.1: http://docutils.sourceforge.net/" />
<title>Mail Preview</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: grey; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="mail-preview">
<h1 class="title">Mail Preview</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/social/tree/13.0/mail_layout_preview"><img alt="OCA/social" src="https://img.shields.io/badge/github-OCA%2Fsocial-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/social-13-0/social-13-0-mail_layout_preview"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/205/13.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
<p>The purpose of this module is to help development of email templates
allowing to render the full layout preview of each of them.</p>
<p>Odoo already allows you do preview emails but they are wrapped into Odoo backend theme.</p>
<p>NOTE: to make work properly your emails its strongly recommended to use <cite>mail_inline_css</cite> to include all styles in the body of the email.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#usage" id="id1">Usage</a></li>
<li><a class="reference internal" href="#bug-tracker" id="id2">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="id3">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="id4">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="id5">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="id6">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#id1">Usage</a></h1>
<ul class="simple">
<li>Go to a template and click on the preview button</li>
<li>Select desired params and click on “Full layout preview” link</li>
<li>Youll get to the preview</li>
</ul>
<p>As a developer, you can see a list of all templates for a model by going to:</p>
<blockquote>
/email-preview/$model.name</blockquote>
<p>Youll get a list of all the templates.
Follow the instructions there on how to use the links.</p>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#id2">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/social/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/social/issues/new?body=module:%20mail_layout_preview%0Aversion:%2013.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#id3">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#id4">Authors</a></h2>
<ul class="simple">
<li>Camptocamp SA</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#id5">Contributors</a></h2>
<ul class="simple">
<li>Simone Orsi &lt;<a class="reference external" href="mailto:simahawk&#64;gmail.com">simahawk&#64;gmail.com</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#id6">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/social/tree/13.0/mail_layout_preview">OCA/social</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<template id="email_templates_list">
<t t-call="web.layout">
<h1>
Email templates for: <span t-esc="model" />
</h1>
<t t-if="not templates">
<p>No template found.</p>
</t>
<t t-if="templates">
<div class="instructions">
<p>Here you find all the template for the given model.</p>
<ol>
<li>Find your template</li>
<li>Copy the link</li>
<li>
Paste into the address bar and change the record ID (the last value in the URL).
<br />If you don't know the ID of the record, just browse to the record via odoo interface and check its ID in the address bar `#id=XXX`.
</li>
<li>Load it</li>
</ol>
</div>
<ol class="email-template-list">
<t t-foreach="templates" t-as="tmpl">
<t t-set="xid" t-value="xids.get(tmpl.id)" />
<li class="email-template-item" style="padding:0.5em">
<strong>Name:</strong> <span class="name" t-field="tmpl.name" /><br />
<t t-if="xid">
<strong>XMLID:</strong> <span class="xid" t-esc="xid" /><br />
</t>
<strong>Link:</strong>
<a class="preview" t-attf-href="/email-preview/#{model}/#{xid or tmpl.id}/1">
Preview
</a><br />
<a class="preview" t-attf-href="/web#id=#{tmpl.id}&amp;view_type=form&amp;model=mail.template">
View in backend
</a>
</li>
</t>
</ol>
</t>
</t>
</template>
</odoo>

View File

@ -0,0 +1 @@
from . import test_layout_preview

View File

@ -0,0 +1,77 @@
# Copyright 2020 Camptocamp SA (http://www.camptocamp.com)
# Simone Orsi <simahawk@gmail.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from lxml import etree
from odoo import tools
from odoo.tests.common import HttpCase, SavepointCase, tagged
class TestLayoutMixin(object):
@staticmethod
def _create_template(env, model, **kw):
vals = {
"name": "Test Preview Template",
"subject": "Preview ${object.name}",
"body_html": "<p>Hello ${object.name}</p>",
"model_id": env["ir.model"]._get(model).id,
"user_signature": False,
}
vals.update(kw)
return env["mail.template"].create(vals)
@tagged("-at_install", "post_install")
class TestLayoutPreview(SavepointCase, TestLayoutMixin):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True))
cls.wiz_model = cls.env["email_template.preview"]
cls.partner = cls.env.ref("base.res_partner_4")
cls.tmpl = cls._create_template(cls.env, cls.partner._name)
def test_wizard_preview_url(self):
wiz = self.wiz_model.with_context(
template_id=self.tmpl.id, default_res_id=self.partner.id
).create({})
self.assertEqual(
wiz.layout_preview_url,
"/email-preview/res.partner/{}/{}/".format(self.tmpl.id, self.partner.id),
)
@tagged("-at_install", "post_install")
class TestController(HttpCase, TestLayoutMixin):
@classmethod
def setUpClass(cls):
super().setUpClass()
host = "127.0.0.1"
port = tools.config["http_port"]
cls.base_url = "http://%s:%d/email-preview/" % (host, port)
def test_controller1(self):
self.authenticate("admin", "admin")
model = "res.partner"
response = self.url_open(self.base_url + model)
content = response.content
tree = etree.fromstring(content)
list_items = tree.xpath("//ol[@class='email-template-list']/li/a")
templates = self.env["mail.template"].search([("model_id.model", "=", model)])
url_pattern = "/email-preview/res.partner/mail.email_template_partner/{}"
for el, tmpl in zip(list_items, templates):
self.assertEqual(
el.attrib, {"class": "preview", "href": url_pattern.format(tmpl.id)}
)
def test_controller2(self):
self.authenticate("admin", "admin")
partner = self.env.ref("base.res_partner_4")
model = partner._name
tmpl = self._create_template(self.env, model)
response = self.url_open(
self.base_url + "{}/{}/{}/".format(model, tmpl.id, partner.id)
)
content = response.content.decode()
self.assertIn("<p>Hello {}</p>".format(partner.name), content)

View File

@ -0,0 +1 @@
from . import email_template_preview

View File

@ -0,0 +1,26 @@
# Copyright 2020 Simone Orsi - Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
from odoo import api, fields, models
class TemplatePreview(models.TransientModel):
_inherit = "email_template.preview"
_url_pattern = "/email-preview/{model}/{templ_id}/{rec_id}/"
layout_preview_url = fields.Char(
string="Full layout preview", compute="_compute_layout_preview_url"
)
@api.depends("res_id")
def _compute_layout_preview_url(self):
for rec in self:
if self.env.context.get("template_id"):
rec.layout_preview_url = self._url_pattern.format(
model=rec.model_id.model,
templ_id=self.env.context["template_id"],
rec_id=rec.res_id,
)
else:
rec.layout_preview_url = ""

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record model="ir.ui.view" id="email_template_preview_form">
<field name="model">email_template.preview</field>
<field name="inherit_id" ref="mail.email_template_preview_form" />
<field name="arch" type="xml">
<footer position="before">
<hr />
<label for="layout_preview_url"/>
<field name="layout_preview_url" widget="url" />
</footer>
</field>
</record>
</odoo>