Purpose ======= Pictures from the digest emails are currently stored on the database itself, meaning that if the database expires (e.g. after trial expires) all pictures from previously sent emails won't be visible. This is an issue since digest tips are meant as a marketing tool to bring people to Odoo after trying a database. Digest pictures are now taken from Odoo's server (https://download.odoocdn.com/digests) so that the pictures will still be visible after the database has expired. From this commit onwards, it should not be allowed to change a digest picture with the same name (to display a gif of a newer version), since all databases with previous versions would receive pictures of a version that does not correspond to theirs. This also means that everyone client's Odoo server will contain pictures that are never used. This could be fixed if Odoo stored them somewhere else and didn't make them dependent from the git repository. Task-2372195 closes odoo/odoo#87343 X-original-commit: 35157677a2a63a2559a72aff21e62e23a3c671a2 Related: odoo/enterprise#25654 Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
472 lines
16 KiB
XML
472 lines
16 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<odoo><data noupdate="1">
|
|
|
|
<!-- Email layout: encapsulation when sending (not used in backend display) -->
|
|
<template id="digest_mail_layout">
|
|
<!DOCTYPE html>
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
|
<meta name="format-detection" content="telephone=no"/>
|
|
<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=no;"/>
|
|
<meta http-equiv="X-UA-Compatible" content="IE=9; IE=8; IE=7; IE=EDGE" />
|
|
|
|
<style type="text/css">
|
|
body {
|
|
margin: 0;
|
|
padding: 0;
|
|
font-family: Arial, Helvetica, Verdana, sans-serif;
|
|
}
|
|
#header_background {
|
|
background-color: #875a7b;
|
|
}
|
|
.global_layout {
|
|
max-width: 588px;
|
|
margin: 0 auto;
|
|
border: 1px solid #eeeeee;
|
|
border-top: 0;
|
|
background-color: #ffffff;
|
|
}
|
|
.company_name {
|
|
display: inline;
|
|
vertical-align: middle;
|
|
font-weight: bold;
|
|
color: #8f8f8f;
|
|
}
|
|
.title_subtitle {
|
|
font-weight: bold;
|
|
color: #282f33;
|
|
word-break: break-all;
|
|
}
|
|
.button {
|
|
float: right;
|
|
background-color: #875a7b;
|
|
color: #ffffff;
|
|
border-radius: 5px;
|
|
}
|
|
#button_connect {
|
|
text-align: center;
|
|
}
|
|
.date {
|
|
color: #8f8f8f;
|
|
}
|
|
.tip_title {
|
|
margin-top: 0;
|
|
font-weight: bold;
|
|
}
|
|
.tip_content {
|
|
margin: 0 auto;
|
|
color:#333333;
|
|
text-align: justify;
|
|
text-justify: inter-word;
|
|
}
|
|
.tip_button {
|
|
background-color: #875a7b;
|
|
border-radius: 5px;
|
|
margin: 14px 16px 14px 0px;
|
|
padding: 10px;
|
|
text-decoration: none;
|
|
}
|
|
.tip_button_text {
|
|
color: #ffffff;
|
|
}
|
|
.illustration_border {
|
|
width: 100%;
|
|
border: 1px solid grey;
|
|
}
|
|
.kpi_row_footer {
|
|
padding-bottom: 20px;
|
|
}
|
|
.kpi_header {
|
|
overflow: auto;
|
|
padding-bottom: 10px;
|
|
border-bottom: 1px solid #eeeeee;
|
|
font-size: 15px;
|
|
font-weight: bold;
|
|
color: #282f33;
|
|
}
|
|
#button_open_report {
|
|
padding: 5px 10px;
|
|
font-size: 12px;
|
|
font-weight: normal;
|
|
}
|
|
.kpi_cell {
|
|
float: left;
|
|
width: 33%;
|
|
text-align: center;
|
|
padding-top: 2px;
|
|
}
|
|
.kpi_cell_center {
|
|
border-top: 2px solid #875A7B;
|
|
}
|
|
.kpi_cell_border {
|
|
border-top: 2px solid #00A09D;
|
|
}
|
|
.kpi_value {
|
|
color: #282f33;
|
|
font-weight: bold;
|
|
text-decoration: none;
|
|
}
|
|
.kpi_center_col {
|
|
color: #875A7B;
|
|
}
|
|
.kpi_border_col {
|
|
color: #00A09D;
|
|
}
|
|
.kpi_value_label {
|
|
display: inline-block;
|
|
margin-bottom: 10px;
|
|
color: #888888;
|
|
font-size: 12px;
|
|
text-transform: uppercase;
|
|
}
|
|
.kpi_margin {
|
|
width: 75px;
|
|
padding: 5px 10px;
|
|
text-decoration: none;
|
|
border-radius: 5px;
|
|
}
|
|
.positive_kpi_margin {
|
|
border: 1px solid #c4ecd7;
|
|
background-color: #d5f1e2;
|
|
color: #17613a;
|
|
}
|
|
.negative_kpi_margin {
|
|
border: 1px solid #f4cfce;
|
|
background-color: #f7dddc;
|
|
color: #712b29;
|
|
}
|
|
.kpi_trick {
|
|
clear: both;
|
|
}
|
|
.download_app {
|
|
height: 40px;
|
|
margin-bottom: 5px;
|
|
display: inline-block;
|
|
}
|
|
.preference_div {
|
|
clear: both;
|
|
background-color: #eeeeee;
|
|
text-align: center;
|
|
}
|
|
.preference {
|
|
margin-bottom: 15px;
|
|
color: #6b6d70;
|
|
}
|
|
.preference a {
|
|
text-decoration: none;
|
|
}
|
|
.by_odoo {
|
|
color: #8f8f8f;
|
|
}
|
|
.odoo_link {
|
|
text-decoration: none;
|
|
}
|
|
.odoo_link_text {
|
|
font-weight: bold;
|
|
color: #875a7b;
|
|
}
|
|
.run_business {
|
|
color: #2d2a26;
|
|
}
|
|
#footer {
|
|
background-color: #eeeeee;
|
|
color: #8f8f8f;
|
|
text-align: center;
|
|
}
|
|
|
|
@media only screen and (max-width: 650px) {
|
|
.d-block {
|
|
display: block !important;
|
|
}
|
|
#header_background {
|
|
padding-top: 0px;
|
|
}
|
|
#header {
|
|
padding: 15px 20px;
|
|
border: 1px solid #eeeeee;
|
|
}
|
|
.global_layout {
|
|
padding: 20px;
|
|
}
|
|
.company_name {
|
|
font-size: 15px;
|
|
}
|
|
.title_subtitle {
|
|
margin: 5px auto;
|
|
}
|
|
#button_connect {
|
|
padding: 4px 10px;
|
|
font-size: 12px;
|
|
}
|
|
.date {
|
|
margin-top: 10px;
|
|
font-size: 10px;
|
|
}
|
|
.tip_title {
|
|
font-size: 14px;
|
|
}
|
|
.tip_content {
|
|
margin: 10px auto 0 auto;
|
|
font-size: 12px;
|
|
line-height: 20px;
|
|
}
|
|
.illustration_border {
|
|
margin-top: 15px;
|
|
}
|
|
.kpi_value {
|
|
font-size: 20px;
|
|
}
|
|
.kpi_margin {
|
|
font-size: 10px;
|
|
}
|
|
.kpi_margin_margin {
|
|
margin-bottom: 5px;
|
|
}
|
|
.preference_div {
|
|
padding: 15px;
|
|
}
|
|
.preference {
|
|
font-size: 12px;
|
|
}
|
|
.by_odoo {
|
|
font-size: 10px;
|
|
}
|
|
.run_business {
|
|
margin: 20px auto;
|
|
font-size: 12px;
|
|
}
|
|
#footer {
|
|
font-size: 15px;
|
|
}
|
|
#powered {
|
|
margin-top: 15px;
|
|
}
|
|
.tip_twocol {
|
|
overflow: auto;
|
|
margin-top: 15px;
|
|
}
|
|
.tip_twocol_left {
|
|
text-align: left;
|
|
}
|
|
.tip_twocol_img {
|
|
width: 90%;
|
|
}
|
|
}
|
|
|
|
@media only screen and (min-width: 651px) {
|
|
#header_background {
|
|
padding-top: 70px;
|
|
}
|
|
#header {
|
|
padding: 20px 30px 25px 30px;
|
|
border-left: 1px solid #875a7b;
|
|
border-right: 1px solid #875a7b;
|
|
}
|
|
.global_layout {
|
|
padding: 25px 30px 30px 30px;
|
|
}
|
|
.company_name {
|
|
font-size: 25px;
|
|
}
|
|
.title_subtitle {
|
|
margin: 10px auto;
|
|
}
|
|
.button {
|
|
padding: 5px 10px;
|
|
}
|
|
#button_connect {
|
|
padding: 6px 10px;
|
|
font-size: 15px;
|
|
}
|
|
.date {
|
|
margin-top: 15px;
|
|
font-size: 12px;
|
|
}
|
|
.tip_title {
|
|
font-size: 20px;
|
|
}
|
|
.tip_content {
|
|
margin: 15px auto 0 auto;
|
|
font-size: 15px;
|
|
line-height: 25px;
|
|
}
|
|
.illustration_border {
|
|
margin-top: 20px;
|
|
}
|
|
.kpi_value {
|
|
font-size: 30px;
|
|
}
|
|
.kpi_margin {
|
|
font-size: 12px;
|
|
}
|
|
.kpi_margin_margin {
|
|
margin-bottom: 10px;
|
|
}
|
|
.preference_div {
|
|
padding: 20px;
|
|
}
|
|
.preference {
|
|
font-size: 15px;
|
|
}
|
|
.by_odoo {
|
|
font-size: 12px;
|
|
}
|
|
.run_business {
|
|
margin: 15px auto;
|
|
font-size: 18px;
|
|
}
|
|
#footer {
|
|
font-size: 20px;
|
|
}
|
|
#stock_tip {
|
|
overflow: auto;
|
|
margin-top: 20px;
|
|
}
|
|
#stock_div_img {
|
|
text-align: center;
|
|
}
|
|
#stock_img {
|
|
width: 70%;
|
|
}
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<t t-out="body"/>
|
|
</body>
|
|
</html>
|
|
</template>
|
|
|
|
<!-- DIGEST MAIN TEMPLATE -->
|
|
<template id="digest_mail_main">
|
|
<div id="header_background">
|
|
<div class="global_layout" id="header">
|
|
<div style="overflow: auto;">
|
|
<p t-field="company.name" class="company_name" />
|
|
<a t-att-href="top_button_url" target="_blank"><span t-esc="top_button_label" class="button" id="button_connect" /></a>
|
|
</div>
|
|
<div class="title_subtitle">
|
|
<p t-esc="title" />
|
|
<p t-if="sub_title" t-esc="sub_title" />
|
|
</div>
|
|
<div t-esc="formatted_date" class="date" />
|
|
</div>
|
|
</div>
|
|
|
|
<div style="background-color: #eeeeee;">
|
|
<div t-foreach="tips" t-as="tip" t-out="tip" class="global_layout" />
|
|
|
|
<div t-if="kpi_data" class="global_layout" style="padding-bottom: 0;">
|
|
<t t-set="kpi_color" t-value="'kpi_border_col'"/>
|
|
<div t-foreach="kpi_data" t-as="kpi_info" class="kpi_row_footer">
|
|
<div t-if="kpi_info.get('kpi_col1') or kpi_info.get('kpi_col2') or kpi_info.get('kpi_col3')" t-att-data-field="kpi_info['kpi_name']">
|
|
<div class="kpi_header">
|
|
<span t-esc="kpi_info['kpi_fullname']" style="vertical-align: middle;" />
|
|
<a t-if="kpi_info['kpi_action']" t-att-href="'/web#action=%s' % kpi_info['kpi_action']"><span class="button" id="button_open_report">Open Report</span></a>
|
|
</div>
|
|
<div t-if="kpi_info.get('kpi_col1')" class="kpi_cell kpi_cell_border">
|
|
<div t-call="digest.digest_tool_kpi" >
|
|
<t t-set="kpi_value" t-value="kpi_info['kpi_col1']['value']"/>
|
|
<t t-set="kpi_margin" t-value="kpi_info['kpi_col1'].get('margin')"/>
|
|
<t t-set="kpi_subtitle" t-value="kpi_info['kpi_col1']['col_subtitle']"/>
|
|
</div>
|
|
</div>
|
|
<div t-if="kpi_info.get('kpi_col2')" class="kpi_cell kpi_cell_center">
|
|
<div t-call="digest.digest_tool_kpi">
|
|
<t t-set="kpi_value" t-value="kpi_info['kpi_col2']['value']"/>
|
|
<t t-set="kpi_margin" t-value="kpi_info['kpi_col2'].get('margin')"/>
|
|
<t t-set="kpi_subtitle" t-value="kpi_info['kpi_col2']['col_subtitle']"/>
|
|
</div>
|
|
</div>
|
|
<div t-if="kpi_info.get('kpi_col3')" class="kpi_cell kpi_cell_border">
|
|
<div t-call="digest.digest_tool_kpi">
|
|
<t t-set="kpi_value" t-value="kpi_info['kpi_col3']['value']"/>
|
|
<t t-set="kpi_margin" t-value="kpi_info['kpi_col3'].get('margin')"/>
|
|
<t t-set="kpi_subtitle" t-value="kpi_info['kpi_col3']['col_subtitle']"/>
|
|
</div>
|
|
</div>
|
|
<div class="kpi_trick" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<t t-if="body" t-out="body"/>
|
|
|
|
<div>
|
|
<div class="global_layout">
|
|
<div class="preference_div">
|
|
<div t-if="preferences" t-foreach="preferences" t-as="preference"
|
|
class="preference">
|
|
<t t-out="preference"/>
|
|
</div>
|
|
<div class="by_odoo">
|
|
Sent by <a href="https://www.odoo.com" target="_blank" class="odoo_link"><span class="odoo_link_text">Odoo</span></a>
|
|
<t t-if="unsubscribe_token">
|
|
–
|
|
<a t-attf-href="/digest/#{object.id}/unsubscribe?token=#{unsubscribe_token}&user_id=#{user.id}"
|
|
target="_blank" style="text-decoration: none;">
|
|
<span style="color: #8f8f8f;">Unsubscribe</span>
|
|
</a>
|
|
</t>
|
|
<t t-elif="object and object._name == 'digest.digest'">
|
|
–
|
|
<a t-att-href="'/web#view_type=form&model=digest.digest&id=%s' % object.id"
|
|
target="_blank" style="text-decoration: none;">
|
|
<span style="color: #8f8f8f;">Unsubscribe</span>
|
|
</a>
|
|
</t>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div t-if="display_mobile_banner" t-call="digest.digest_section_mobile" />
|
|
|
|
<div class="global_layout" id="footer">
|
|
<p style="font-weight: bold;" t-esc="company.name"/>
|
|
<p class="by_odoo" id="powered">
|
|
Powered by <a href="https://www.odoo.com" target="_blank" class="odoo_link"><span class="odoo_link_text">Odoo</span></a>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
|
|
<!-- DIGEST PARTS -->
|
|
|
|
<!-- MOBILE BANNER -->
|
|
<template id="digest_section_mobile">
|
|
<div class="global_layout" style="overflow: auto;">
|
|
<div style="width: 50%; float: left; text-align: right;">
|
|
<img src="https://www.odoo.com/web/image/24717933/odoo-mobile.png" alt="Odoo Mobile" />
|
|
</div>
|
|
<div style="width: 50%; float: left;">
|
|
<p class="run_business">Run your business from anywhere with <b>Odoo Mobile</b>.</p>
|
|
<div>
|
|
<a href="https://play.google.com/store/apps/details?id=com.odoo.mobile" target="_blank"><img class="download_app" src="https://download.odoocdn.com/digests/digest/static/src/img/google_play.png" /></a>
|
|
</div>
|
|
<div>
|
|
<a href="https://itunes.apple.com/us/app/odoo/id1272543640" target="_blank"><img class="download_app" src="https://download.odoocdn.com/digests/digest/static/src/img/app_store.png" /></a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
|
|
<!-- DIGEST TOOLS -->
|
|
|
|
<!-- KPI DISPLAY -->
|
|
<template id="digest_tool_kpi">
|
|
<span t-esc="kpi_value" t-att-class="'kpi_value %s' % kpi_color " />
|
|
<br/>
|
|
<span t-esc="kpi_subtitle" class="kpi_value_label" />
|
|
<div t-if="kpi_margin" class="kpi_margin_margin">
|
|
<span t-if="kpi_margin > 0.0" class="kpi_margin positive_kpi_margin">▲ <t t-esc="'%.2f' % kpi_margin"/> %</span>
|
|
<span t-elif="kpi_margin < 0.0" class="kpi_margin negative_kpi_margin">▼ <t t-esc="'%.2f' % kpi_margin"/> %</span>
|
|
</div>
|
|
</template>
|
|
|
|
</data>
|
|
</odoo>
|