[FW][MERGE] digest, various: add or improve digest tips and digest layout

PURPOSE

Review the tips and digest layout design to make sure they have a WOW effect
and increase trial conversion/retention.

SPECIFICATIONS: LAYOUT

Besides changing the tips, a cleaning of digest layout was performed. Emails
were reported to look not neat in Outlook and somewhat random in mail.com or
gmail.com.

Most recent HTML CSS cannot be used to make HTML emails because each email
provider renders emails its own way. This means a given email may renders
differently in gmail.com and outlook.

The layout of the email was composed of several levels of embedded tables
which means huge maintenance effort. So it was totally rewritten with divs
and CSS, but some properties are not taken into account.

A lot of page component improvements were done. It consisted in replacing most
of the style attribute in tags with CSS classes and ids. This step is
especially useful for tip formatting because before, if a style modification
was needed, it had to be performed on each tip individually.

SPECIFICATIONS: TIPS

Add / Improve tips in cmr, purchase, hr_recruitment, website, hr_expense, project,
digest, sale_management, im_livechat, stock, mrp, account.

LINKS

COM PR: odoo/odoo#53580
ENT PR: odoo/enterprise#11394

closes odoo/odoo#55807

Forward-port-of: odoo/odoo#53580
Related: odoo/enterprise#12372
Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
This commit is contained in:
Odoo's Mergebot
2020-08-12 16:12:33 +02:00
committed by GitHub
55 changed files with 677 additions and 344 deletions
+15
View File
@@ -5,4 +5,19 @@
<field name="kpi_account_total_revenue">True</field>
</record>
</data>
<data>
<record id="digest_tip_account_0" model="digest.tip">
<field name="name">Tip: No need to print, put in an envelop and post your invoices</field>
<field name="sequence">700</field>
<field name="group_id" ref="account.group_account_invoice" />
<field name="tip_description" type="html">
<div>
<p class="tip_title">Tip: No need to print, put in an envelop and post your invoices</p>
<p class="tip_content">Use the “<i>Send by Post</i>” option to post invoices automatically. For the cost of a local stamp, we do all the manual work: your invoice will be printed in the right country, put in an envelop and sent by snail mail. Use this feature from the list view to post hundreds of invoices in bulk.</p>
<img src="/account/static/src/img/invoice-stamps.png" class="illustration_border" />
</div>
</field>
</record>
</data>
</odoo>
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

+55 -25
View File
@@ -9,49 +9,79 @@
<data>
<record id="digest_tip_crm_0" model="digest.tip">
<field name="name">CRM: Create opportunities from incoming emails</field>
<field name="sequence">5</field>
<field name="name">Tip: Convert incoming emails into opportunities</field>
<field name="sequence">200</field>
<field name="group_id" ref="sales_team.group_sale_salesman_all_leads"/>
<field name="tip_description" type="html">
<div>
% set email = object.env['crm.team'].search([('alias_name','!=', False)],limit=1).alias_id.display_name
% if email
<b class="font-16" style="font-size: 20px;line-height: 30px;">Create opportunities from incoming emails</b>
<p class="font-12" style="color:#888888;font-size: 15px; line-height: 25px; margin-top: 0;">Emails sent to <strong>${email}</strong> generate opportunities in your pipeline.</p>
<img src="/crm/static/src/img/tips-crm-pipeline.jpg" style="max-width: 580px" width="100%" />
<div style="text-align:center;margin-top:10px;">
<a href="mailto:${email}" target="_blank" style="display:inline-block;background-color:#875a7b;line-height:40px;text-decoration: none;color: #ffffff;border-radius: 3px;font-size:13px;font-weight:bold;text-align:center; padding:0 10px;">Try it now</a>
</div>
% set record = object.env['crm.team'].search([('alias_name', '!=', 'False')], limit=1)
<p class="tip_title">Tip: Convert incoming emails into opportunities</p>
% if record and record.alias_domain
<p class="tip_content">Did you know emails sent to ${record.alias_id.display_name} generate opportunities in your pipeline?<br/>
<a href="mailto:${record.alias_id.display_name}" target="_blank">Try sending an email</a> to your CRM. This email address is configurable by sales team members.</p>
% else
<p class="tip_content">Did you know emails sent to a Sales Team alias generate opportunities in your pipeline?</p>
% endif
</div>
</field>
</record>
<record id="digest_tip_crm_1" model="digest.tip">
<field name="name">CRM: Enrich your contacts</field>
<field name="sequence">50</field>
<field name="name">Tip: Did you know Odoo has built-in lead mining?</field>
<field name="sequence">1500</field>
<field name="group_id" ref="sales_team.group_sale_salesman_all_leads"/>
<field name="tip_description" type="html">
<div>
<b class="font-16" style="font-size: 20px;line-height: 30px;">Enrich your contacts</b>
<p class="font-12" style="color:#888888;font-size: 15px; line-height: 25px; margin-top: 0;">Activate the "Partner Autocomplete" feature to fill in your Partner's details faster.</p>
<img src="/crm/static/src/img/tips-crm-autocomplete.jpg" style="max-width: 580px" width="100%" />
<div style="text-align:center;margin-top:10px;">
<a href="/web#action=base_setup.action_general_configuration" target="_blank" style="display:inline-block;background-color:#875a7b;line-height:40px;text-decoration: none;color: #ffffff;border-radius: 3px;font-size:13px;font-weight:bold;text-align:center; padding:0 10px;">Try it now</a>
</div>
<p class="tip_title">Tip: Did you know Odoo has built-in lead mining?</p>
<p class="tip_content">For a sales team, there is nothing worse than being dry on leads. Fortunately, in just a few clicks, you can generate leads specifically targeted to your needs: company size, industry, etc. To help you test the feature, we offer you 200 credits for free.</p>
<img src="/crm/static/src/img/generate-leads.gif" class="illustration_border" />
</div>
</field>
</record>
<record id="digest_tip_crm_2" model="digest.tip">
<field name="name">CRM: Get more leads</field>
<field name="sequence">2</field>
<field name="name">Tip: Opportunity win rate is predicted with AI</field>
<field name="sequence">1700</field>
<field name="group_id" ref="sales_team.group_sale_salesman_all_leads"/>
<field name="tip_description" type="html">
<div>
<b class="font-16" style="font-size: 20px;line-height: 30px;">Get more leads</b>
<p class="font-12" style="color:#888888;font-size: 15px; line-height: 25px; margin-top: 0;">Activate the lead mining feature from your CRM settings and start generating more leads.</p>
<div style="text-align:center;margin-top:10px;">
<a href="https://www.odoo.com/documentation/user/13.0/crm/acquire_leads/lead_mining.html" target="_blank" style="display:inline-block;background-color:#875a7b;line-height:40px;text-decoration: none;color: #ffffff;border-radius: 3px;font-size:13px;font-weight:bold;text-align:center; padding:0 10px;">Find out more</a>
</div>
<p class="tip_title">Tip: Opportunity win rate is predicted with AI</p>
<p class="tip_content">Odoo's artificial intelligence engine predicts the success rate of each opportunity based on your history. You can always update the success rate manually, but if you let Odoo do the job the score is updated while the opportunity moves forward in your sales cycle.</p>
<img src="/crm/static/src/img/probability-rate.gif" class="illustration_border" />
</div>
</field>
</record>
<record id="digest_tip_crm_3" model="digest.tip">
<field name="name">Tip: Manage your pipeline</field>
<field name="sequence">2600</field>
<field name="group_id" ref="sales_team.group_sale_salesman_all_leads"/>
<field name="tip_description" type="html">
<div>
<p class="tip_title">Tip: Manage your pipeline</p>
<p class="tip_content">A great tip to boost sales efficiency is to always define a next step on each opportunity. To manage ongoing activities, click on any status of the progress bar to filter opportunities based on their next activities' status. Click on the grey area of the progress bar to see all opportunities that have no next activity.</p>
<img src="/crm/static/src/img/pipeline-progress.gif" class="illustration_border" />
</div>
</field>
</record>
<record id="digest_tip_crm_4" model="digest.tip">
<field name="name">Tip: Do not waste time recording customers' data</field>
<field name="sequence">2800</field>
<field name="group_id" ref="sales_team.group_sale_salesman_all_leads"/>
<field name="tip_description" type="html">
<div>
<p class="tip_title">Tip: Do not waste time recording customers' data</p>
<p class="tip_content">Did you know you can search a company by name or VAT number to instantly fill in all its data? Odoo autocompletes everything for you: logo, address, company size, business information, social media accounts, etc.</p>
<img src="/crm/static/src/img/autofill.gif" class="illustration_border" />
</div>
</field>
</record>
<record id="digest_tip_crm_5" model="digest.tip">
<field name="name">Tip: Turn a selection of opportunities into a map</field>
<field name="sequence">3000</field>
<field name="group_id" ref="sales_team.group_sale_salesman_all_leads"/>
<field name="tip_description" type="html">
<div>
<p class="tip_title">Tip: Turn a selection of opportunities into a map</p>
<p class="tip_content">Did you know you can turn a list of opportunities into a map view, using the top-right map icon? A lot of screens in Odoo can be turned into a map: tasks, contacts, delivery orders, etc.</p>
<img src="/crm/static/src/img/mapview-toggle.gif" class="illustration_border" />
</div>
</field>
</record>
Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 KiB

+377 -194
View File
@@ -15,35 +15,297 @@
body {
margin: 0;
padding: 0;
font-family: Arial, Helvetica, Verdana, sans-serif;
}
@media only screen and (max-width:650px) {
.d-block{
#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;
}
.illustration_border {
width: 100%;
border: 1px solid grey;
}
.kpi_row_footer {
padding-bottom: 20px;
}
.kpi_header {
overflow: auto;
margin-bottom: 10px;
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;
}
.kpi_value {
color: #282f33;
font-weight: bold;
text-decoration: none;
}
.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;
}
.mobile-hide{
display: none !important;
#header_background {
padding-top: 0px;
}
.mobile-w-75{
width: 75% !important;
#header {
padding: 15px 20px;
border: 1px solid #eeeeee;
}
.mobile-w-33{
width: 33% !important;
.global_layout {
padding: 20px;
}
.font-25{
font-size: 25px !important;
line-height: 25px !important;
.company_name {
font-size: 15px;
}
.font-18{
font-size: 18px !important;
line-height: 25px !important;
.title_subtitle {
margin: 5px auto;
}
.font-16{
font-size: 16px !important;
line-height: 25px !important;
#button_connect {
padding: 4px 10px;
font-size: 12px;
}
.font-12{
font-size: 12px !important;
line-height: 20px !important;
.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>
@@ -56,147 +318,78 @@
<!-- DIGEST MAIN TEMPLATE -->
<template id="digest_mail_main">
<div style="margin:0; padding:0">
<table cellspacing="0" cellpadding="0" align="center" border="0" bgcolor="#eeeeee" style="width:100%; font-family: Arial,Helvetica,Verdana,sans-serif;">
<tr class="mobile-hide" bgcolor="#875a7b"><td height="70"> </td></tr>
<tr bgcolor="#875a7b">
<td align="center" valign="top">
<table bgcolor="#ffffff" cellspacing="0" cellpadding="0" width="650" align="center" border="0" style="border: 1px solid #eeeeee;width: 100%; max-width: 650px; padding: 30px 30px">
<tr>
<td>
<table cellspacing="0" cellpadding="0" border="0" width="580" align="center" style="width:100%; max-width:580px;">
<tr>
<td class="mobile-w-75" style="text-align: left;">
<span class="font-16" style="color:#8F8F8F;font-weight:bold;font-size: 20px; line-height: 30px;" t-field="company.name"/>
<br/>
<div class="font-18" style="color:#282f33;font-weight:bold;font-size: 25px; line-height: 35px; margin-right: 5px; display: inline-block; max-width: 500px;word-break: break-all;" t-esc="title"/>
<div t-if="sub_title" class="font-18" style="color:#282f33;font-weight:bold;font-size: 25px; line-height: 35px; margin-right: 5px; display: inline-block; max-width: 500px;word-break: break-all;" t-esc="sub_title"/>
<div class="font-12" style="color:#8F8F8F;font-size: 15px;display: inline-block;"><t t-esc="formatted_date"/></div>
</td>
<td valign="top" style="text-align:right;">
<a t-att-href="top_button_url" target="_blank" style="text-align: center; color: #fff; background-color: #9a5b82; border-radius: 8px; font-size: 15px; padding: 5px 10px; display: inline-block; text-decoration: none; min-width: 65px;">
<span t-esc="top_button_label"/>
</a>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
<table t-if="tips" cellspacing="0" cellpadding="0" align="center" border="0" bgcolor="#eeeeee" style="width:100%; font-family: Arial,Helvetica,Verdana,sans-serif;">
<tr>
<td align="center" valign="top">
<table bgcolor="#ffffff" cellspacing="0" cellpadding="0" width="650" align="center" border="0" style="border: 1px solid #eeeeee; border-bottom: none;width: 100%; max-width: 650px; padding:30px 30px">
<tr>
<td>
<table t-foreach="tips" t-as="tip" cellspacing="0" cellpadding="0" border="0" width="580" align="center" style="width:100%; max-width:580px;">
<tr>
<td valign="top">
<t t-raw="tip"/>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
<table t-if="kpi_data" cellspacing="0" cellpadding="0" align="center" border="0" bgcolor="#eeeeee" style="width:100%; font-family: Arial,Helvetica,Verdana,sans-serif;">
<tr>
<td align="center" valign="top">
<table bgcolor="#ffffff" cellspacing="0" cellpadding="0" width="650" align="center" border="0" style="border: 1px solid #eeeeee; border-bottom: none;width: 100%; max-width: 650px; padding:30px 30px">
<tr t-foreach="kpi_data" t-as="kpi_info">
<td t-if="kpi_info.get('kpi_col1') or kpi_info.get('kpi_col2') or kpi_info.get('kpi_col3')">
<table cellspacing="0" cellpadding="0" border="0" width="580" align="center" style="width:100%; max-width:580px;">
<tr>
<td align="left" style="border-bottom: 1px solid #eeeeee;">
<span style="color:#282f33;font-size: 15px; font-weight: bold; line-height: 30px" t-esc="kpi_info['kpi_fullname']"/>
<a t-if="kpi_info['kpi_action']" t-att-href="'/web#action=%s' % kpi_info['kpi_action']"
style="float:right; background-color:#875A7B;margin-left: 5px; padding: 5px 12px 5px 12px; text-decoration: none; color: #ffffff; border-radius: 3px; font-size:13px; font-weight:bold; margin-bottom: 5px;">
View
</a>
</td>
</tr>
<tr>
<td>
<table cellspacing="0" cellpadding="0" align="center" border="0" style="width:100%; padding: 20px 0;">
<tr valign="top">
<td t-if="kpi_info.get('kpi_col1')" class="mobile-w-33" width="196" style=" text-align: center;">
<t 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']"/>
</t>
</td>
<td t-if="kpi_info.get('kpi_col2')" class="mobile-w-33" width="196" style=" text-align: center;">
<t 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']"/>
</t>
</td>
<td t-if="kpi_info.get('kpi_col3')" class="mobile-w-33" width="196" style=" text-align: center;">
<t 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']"/>
</t>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
<table t-if="preferences" bgcolor="#ffffff" cellspacing="0" cellpadding="0" width="650" align="center" border="0" style="border-left: 1px solid #eeeeee; border-right: 1px solid #eeeeee; width: 100%; max-width: 650px; padding:30px 30px">
<tr>
<td bgcolor="#fafafa" width="100%" style="padding-top: 20px; padding-bottom: 20px;" align="center">
<p t-foreach="preferences" t-as="preference" class="font-12" style="font-size: 15px; color: #6b6d70">
<t t-raw="preference"/>
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
<t t-if="body" t-raw="body"/>
<table t-if="display_mobile_banner" cellspacing="0" cellpadding="0" align="center" border="0" bgcolor="#eeeeee" style="width:100%; font-family: Arial,Helvetica,Verdana,sans-serif;">
<tr>
<td align="center" valign="top">
<table bgcolor="#ffffff" cellspacing="0" cellpadding="0" width="650" align="center" border="0" style="border: 1px solid #eeeeee; width: 100%; max-width: 650px; padding:30px 30px">
<tr valign="top">
<td>
<t t-call="digest.digest_section_mobile"/>
</td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing="0" cellpadding="0" align="center" border="0" bgcolor="#eeeeee" style="width:100%; font-family: Arial,Helvetica,Verdana,sans-serif;">
<tr>
<td align="center" valign="top">
<table bgcolor="#eeeeee" cellspacing="0" cellpadding="0" width="650" align="center" border="0" style="margin-top:30px;font-size: 15px; text-align:center; width: 100%; max-width: 650px;">
<tr>
<td style="color:#8F8F8F;font-weight:bold;font-size: 20px; line-height: 30px;" t-esc="company.name"/>
</tr>
<tr>
<td style="color:#8F8F8F;font-size: 12px; line-height: 30px;">Powered by <a href="https://www.odoo.com" target="_blank" style="color:#875A7B">Odoo</a>.</td>
</tr>
<tr>
<td height="30"> </td>
</tr>
</table>
</td>
</tr>
</table>
<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-raw="tip" class="global_layout" />
<div t-if="kpi_data" class="global_layout" style="padding-bottom: 0;">
<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')">
<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">
<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">
<div t-call="digest.digest_tool_kpi">
<div t-set="kpi_value" t-value="kpi_info['kpi_col2']['value']"/>
<div t-set="kpi_margin" t-value="kpi_info['kpi_col2'].get('margin')"/>
<div 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">
<div t-call="digest.digest_tool_kpi">
<div t-set="kpi_value" t-value="kpi_info['kpi_col3']['value']"/>
<div t-set="kpi_margin" t-value="kpi_info['kpi_col3'].get('margin')"/>
<div t-set="kpi_subtitle" t-value="kpi_info['kpi_col3']['col_subtitle']"/>
</div>
</div>
<div class="kpi_trick" />
</div>
</div>
</div>
<div t-if="preferences">
<div class="global_layout">
<div class="preference_div">
<div t-foreach="preferences" t-as="preference" class="preference">
<t t-raw="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> – <a href="/web#view_type=form&amp;model=digest.digest&amp;id=${object.id}" target="_blank" style="text-decoration: none;"><span style="color: #8f8f8f;">Unsubscribe</span></a>
</div>
</div>
</div>
</div>
<t t-if="body" t-raw="body"/>
<div t-if="display_mobile_banner" t-call="digest.digest_section_mobile" />
<div class="global_layout" id="footer">
<p style="font-weight: bold;">My Company (San Francisco)</p>
<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>
@@ -205,20 +398,20 @@
<!-- MOBILE BANNER -->
<template id="digest_section_mobile">
<table cellspacing="0" cellpadding="0" border="0" width="580" align="center" style="width:100%; max-width:580px;">
<tr>
<td valign="top" width="168">
<img src="https://www.odoo.com/web/image/24717933/odoo-mobile.png" alt="Odoo Mobile" width="168"/>
</td>
<td valign="top">
<p class="font-16" style="color:#2d2a26;font-size: 18px;line-height: 23px; margin-top: 20px">Run your business from anywhere with <br class="mobile-hide" /><b>Odoo Mobile</b>.</p>
<a href="https://play.google.com/store/apps/details?id=com.odoo.mobile" target="_blank"><img src="https://www.odoo.com/digest/static/src/img/google_play.png" style="display:inline-block;height: 40px; margin-bottom: 5px"/></a>
<span class="mobile-hide"> </span>
<a href="https://itunes.apple.com/us/app/odoo/id1272543640" target="_blank"><img src="https://www.odoo.com/digest/static/src/img/app_store.png" style="display:inline-block;height: 40px; margin-bottom: 5px"/></a>
</td>
</tr>
</table>
<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://www.odoo.com/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://www.odoo.com/digest/static/src/img/app_store.png" /></a>
</div>
</div>
</div>
</template>
@@ -226,24 +419,14 @@
<!-- KPI DISPLAY -->
<template id="digest_tool_kpi">
<span class="font-25" style="color:#282f33;font-size: 35px; font-weight: bold; text-decoration: none; line-height: 36px;">
<t t-esc="kpi_value"/>
</span><br/>
<span style="color:#888888;display: inline-block; font-size: 12px; line-height: 18px; text-transform: uppercase;">
<t t-esc="kpi_subtitle"/>
</span>
<t t-if="kpi_margin">
<t t-if="kpi_margin &gt; 0.0">
<div style="background-color:#d5f1e2; border: 1px solid #c4ecd7; margin: 10px auto;width: 67px; line-height:27px; text-decoration: none; color: #17613a; border-radius: 5px; font-size:13px;">
▲ <t t-esc="'%.2f' % kpi_margin"/>
</div>
</t>
<t t-elif="kpi_margin &lt; 0.0">
<div style="background-color:#f7dddc; border: 1px solid #f4cfce; margin: 10px auto;width: 67px; line-height:27px; text-decoration: none; color: #712b29; border-radius: 5px; font-size:13px;">
▼ <t t-esc="'%.2f' % kpi_margin"/>
</div>
</t>
</t>
<span t-esc="kpi_value" class="kpi_value" />
<br/>
<span t-esc="kpi_subtitle" class="kpi_value_label" />
<div t-if="kpi_margin" class="kpi_margin_margin">
<span t-if="kpi_margin &gt; 0.0" class="kpi_margin positive_kpi_margin">▲ <t t-esc="'%.2f' % kpi_margin"/> %</span>
<span t-elif="kpi_margin &lt; 0.0" class="kpi_margin negative_kpi_margin">▼ <t t-esc="'%.2f' % kpi_margin"/> %</span>
</div>
</template>
</data></odoo>
</data>
</odoo>
+33 -67
View File
@@ -2,106 +2,72 @@
<odoo>
<data noupdate="1">
<record id="digest_digest_default" model="digest.digest">
<field name="name">Your Odoo Periodic Report</field>
<field name="name">Your Odoo Periodic Digest</field>
<field name="periodicity">daily</field>
<field name="user_ids" eval="[(4, ref('base.user_admin'))]"/>
<field name="next_run_date" eval="(DateTime.now() + timedelta(days=1)).strftime('%Y-%m-%d')"/>
<field name="kpi_res_users_connected">True</field>
<field name="kpi_mail_message_total">True</field>
</record>
</data>
<data>
<record id="digest_tip_digest_0" model="digest.tip">
<field name="name">Invite Team Members</field>
<field name="sequence">1</field>
<field name="group_id" ref="base.group_erp_manager"/>
<field name="name">Tip: Speed up your workflow with shortcuts</field>
<field name="sequence">800</field>
<field name="group_id" ref="base.group_user" />
<field name="tip_description" type="html">
<div>
<b class="font-16" style="font-size: 20px;line-height: 30px">Invite Team Members</b>
<p class="font-12" style="color:#888888;font-size: 15px; line-height: 25px; margin-top:0;">Go to your general settings to invite new users to your database.</p>
<img src="/digest/static/src/img/tips-digest-invite-team.jpg" style="max-width: 580px" width="100%"/>
<p class="tip_title">Tip: Speed up your workflow with shortcuts</p>
<p class="tip_content">Press ALT in any screen to highlight shortcuts for every button in the screen. It is useful to process multiple documents in batch.</p>
<img src="/digest/static/src/img/alt-shortcuts.gif" class="illustration_border" />
</div>
</field>
</record>
<record id="digest_tip_digest_1" model="digest.tip">
<field name="name"> Want to learn more about Odoo?</field>
<field name="sequence">2</field>
<field name="group_id" ref="base.group_user"/>
<field name="name">Tip: Click on an avatar to chat with a user</field>
<field name="sequence">2100</field>
<field name="group_id" ref="base.group_user" />
<field name="tip_description" type="html">
<div>
<b class="font-16" style="font-size: 20px;line-height: 30px"> Want to learn more about Odoo?</b>
<p class="font-12" style="color:#888888;font-size: 15px; line-height: 25px; margin-top:0;">Visit our <a href="https://www.odoo.com/slides">eLearning Platform</a></p>
<p class="tip_title">Tip: Click on an avatar to chat with a user</p>
<p class="tip_content">Have a question about a document? Click on the responsible user's picture to start a conversation. If his avatar has a green dot, he is online.</p>
<img src="/digest/static/src/img/avatar.gif" class="illustration_border" />
</div>
</field>
</record>
<record id="digest_tip_digest_2" model="digest.tip">
<field name="name">Odoo Push Notifications</field>
<field name="sequence">3</field>
<field name="group_id" ref="base.group_erp_manager"/>
<field name="name">Tip: A calculator in Odoo</field>
<field name="sequence">2300</field>
<field name="group_id" ref="base.group_user" />
<field name="tip_description" type="html">
<div>
<b class="font-16" style="font-size: 20px;line-height: 30px">Odoo Push Notifications</b>
<p class="font-12" style="color:#888888;font-size: 15px; line-height: 25px; margin-top:0;">Change your browser settings to "Allow Push Notifications" and never miss a thing.</p>
<img src="/digest/static/src/img/tips-digest-browser-notifications.jpg" style="max-width: 580px" width="100%"/>
<p class="tip_title">Tip: A calculator in Odoo</p>
<p class="tip_content">When editing a number, you can use formulae by typing the `=` character. This is useful when computing a margin or a discount on a quotation, sale order or invoice.</p>
<img src="/digest/static/src/img/calculator.gif" class="illustration_border" />
</div>
</field>
</record>
<record id="digest_tip_digest_3" model="digest.tip">
<field name="name">Reach your full potential with Odoo</field>
<field name="sequence">4</field>
<field name="group_id" ref="base.group_erp_manager"/>
<field name="name">Tip: How to ping users in internal notes?</field>
<field name="sequence">2400</field>
<field name="group_id" ref="base.group_user" />
<field name="tip_description" type="html">
<div>
<b class="font-16" style="font-size: 20px;line-height: 30px">Reach your full potential with Odoo</b>
<p class="font-12" style="color:#888888;font-size: 15px; line-height: 25px; margin-top:0;">Take a look at our <a href="https://www.odoo.com/page/tour">App videos</a> and discover the next tool that will allow you to work better and faster.</p>
<p class="tip_title">Tip: How to ping users in internal notes?</p>
<p class="tip_content">Type "@" to notify someone in a message, or "#" to link to a channel. Try to notify @OdooBot to test the feature.</p>
<img src="/digest/static/src/img/notifications.gif" class="illustration_border" />
</div>
</field>
</record>
<record id="digest_tip_mail_0" model="digest.tip">
<field name="name">Did you know?</field>
<field name="sequence">10</field>
<field name="group_id" ref="base.group_user"/>
<record id="digest_tip_digest_4" model="digest.tip">
<field name="name">Tip: Knowledge is power</field>
<field name="sequence">2500</field>
<field name="group_id" ref="base.group_user" />
<field name="tip_description" type="html">
<div>
% set users = object.env['res.users'].search([('share', '=' , False)], limit=10, order='id desc')
% set channel_id = object.env.ref('mail.channel_all_employees').id
<b class="font-16" style="font-size: 20px;line-height: 30px">Did you know?</b>
<p class="font-12" style="color:#888888;font-size: 15px; line-height: 25px; margin-top:0;">You can ping your colleagues by tagging them in your messages using “@” followed by their name. They will be instantly notified.</p>
<img src="/digest/static/src/img/tips-mail-notifications.jpg" style="max-width: 580px" width="100%"/>
<div style="margin-top: 20px; background-color: #f8f9fa">
<p class="font-12" style="text-align:center; color:#888888;font-size: 13px; line-height: 25px; margin:0;"><b>${', '.join(users.mapped('name'))}</b> just signed up. <a href="/web#action=mail.action_discuss&amp;active_id=${channel_id}" style="color: #875a7b; font-weight: bold">Say hello in the company's discussion channel.</a>
</p>
</div>
</div>
</field>
</record>
<record id="digest_tip_mail_1" model="digest.tip">
<field name="name">Get things done with activities</field>
<field name="sequence">11</field>
<field name="group_id" ref="base.group_user"/>
<field name="tip_description" type="html">
<div>
<b class="font-16" style="font-size: 20px;line-height: 30px">Get things done with activities</b>
<p class="font-12" style="color:#888888;font-size: 15px; line-height: 25px; margin-top:0;">Use activities on any business document to schedule meetings, calls and todos.</p>
<img src="/digest/static/src/img/tips-mail-activities.jpg" style="max-width: 580px" width="100%" />
</div>
</field>
</record>
<record id="digest_tip_mail_2" model="digest.tip">
<field name="name">Follow what you want</field>
<field name="sequence">12</field>
<field name="group_id" ref="base.group_user"/>
<field name="tip_description" type="html">
<div>
<b class="font-16" style="font-size: 20px;line-height: 30px">Follow what you want</b>
<p class="font-12" style="color:#888888;font-size: 15px; line-height: 25px; margin-top:0;">Keep track of any object in Odoo (opportunity, sales order, etc.) and choose exactly what you want to follow (discussion, status, status change, etc.).</p>
<img src="/digest/static/src/img/tips-mail-following.jpg" style="max-width: 580px" width="100%" />
<p class="tip_title">Tip: Knowledge is power</p>
<p class="tip_content">When following documents, use the pencil icon to fine-tune the information you want to receive.
Follow a project / sales team to keep track of this project's tasks / this team's opportunities.</p>
<img src="/digest/static/src/img/following.png" class="illustration_border" />
</div>
</field>
</record>
+7 -6
View File
@@ -112,7 +112,7 @@ class Digest(models.Model):
digest.write({'periodicity': 'weekly'})
digest.next_run_date = digest._get_next_run_date()
def _action_send_to_user(self, user, tips_count=1):
def _action_send_to_user(self, user, tips_count=1, consum_tips=True):
web_base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
rendered_body = self.env['mail.render.mixin']._render_template(
@@ -130,7 +130,7 @@ class Digest(models.Model):
'formatted_date': datetime.today().strftime('%B %d, %Y'),
'display_mobile_banner': True,
'kpi_data': self.compute_kpis(user.company_id, user),
'tips': self.compute_tips(user.company_id, user, tips_count=tips_count),
'tips': self.compute_tips(user.company_id, user, tips_count=tips_count, consumed=consum_tips),
'preferences': self.compute_preferences(user.company_id, user),
},
post_process=True
@@ -228,7 +228,7 @@ class Digest(models.Model):
# filter failed KPIs
return [kpi for kpi in kpis if kpi['kpi_name'] not in invalid_fields]
def compute_tips(self, company, user, tips_count=1):
def compute_tips(self, company, user, tips_count=1, consumed=True):
tips = self.env['digest.tip'].search([
('user_ids', '!=', user.id),
'|', ('group_id', 'in', user.groups_id.ids), ('group_id', '=', False)
@@ -237,7 +237,8 @@ class Digest(models.Model):
self.env['mail.render.mixin']._render_template(tools.html_sanitize(tip.tip_description), 'digest.tip', tip.ids, post_process=True)[tip.id]
for tip in tips
]
tips.user_ids += user
if consumed:
tips.user_ids += user
return tip_descriptions
def _compute_kpis_actions(self, company, user):
@@ -257,13 +258,13 @@ class Digest(models.Model):
if self._context.get('digest_slowdown'):
preferences.append(_("We have noticed you did not connect these last few days so we've automatically switched your preference to weekly Digests."))
elif self.periodicity == 'daily' and user.has_group('base.group_erp_manager'):
preferences.append('%s <a href="/digest/%s/set_periodicity?periodicity=weekly" target="_blank" style="color:#875A7B; font-weight: bold;">%s</a>' % (
preferences.append('%s <p><a href="/digest/%s/set_periodicity?periodicity=weekly" target="_blank" style="color:#875A7B; font-weight: bold;">%s</a></p>' % (
_('Prefer a broader overview ?'),
self.id,
_('Switch to weekly Digests')
))
if user.has_group('base.group_erp_manager'):
preferences.append('%s <a href="/web#view_type=form&amp;model=%s&amp;id=%s" target="_blank" style="color:#875A7B; font-weight: bold;">%s</a>' % (
preferences.append('%s <p><a href="/web#view_type=form&amp;model=%s&amp;id=%s" target="_blank" style="color:#875A7B; font-weight: bold;">%s</a></p>' % (
_('Want to customize this email?'),
self._name,
self.id,
Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 KiB

+1
View File
@@ -30,6 +30,7 @@ This module also uses analytic accounting and is compatible with the invoice on
'data': [
'security/hr_expense_security.xml',
'security/ir.model.access.csv',
'data/digest_data.xml',
'data/mail_data.xml',
'data/hr_expense_sequence.xml',
'data/hr_expense_data.xml',
+17
View File
@@ -0,0 +1,17 @@
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<data>
<record id="digest_tip_hr_expense_0" model="digest.tip">
<field name="name">Tip: Snap pictures of your receipts with the remote app</field>
<field name="sequence">1100</field>
<field name="group_id" ref="base.group_user" />
<field name="tip_description" type="html">
<div>
<p class="tip_title">Tip: Snap pictures of your receipts with the remote app</p>
<p class="tip_content">Do not keep your expense tickets in your pockets any longer. Just snap a picture of your receipt and let Odoo digitalizes it for you. The OCR and Artificial Intelligence will fill the data automatically.</p>
<img src="/hr_expense/static/src/img/expense.png" class="illustration_border" />
</div>
</field>
</record>
</data>
</odoo>
Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

+11 -8
View File
@@ -8,16 +8,19 @@
<data>
<record id="digest_tip_hr_recruitment_0" model="digest.tip">
<field name="name">Recruitment: Create new applicants from incoming emails</field>
<field name="sequence">4</field>
<field name="group_id" ref="hr_recruitment.group_hr_recruitment_user"/>
<field name="name">Tip: Let candidates apply by email</field>
<field name="sequence">1300</field>
<field name="group_id" ref="hr_recruitment.group_hr_recruitment_manager" />
<field name="tip_description" type="html">
<div>
<b class="font-16" style="font-size: 20px;line-height: 30px">Create new applicants from incoming emails</b>
<p class="font-12" style="color:#888888;font-size: 15px; line-height: 25px; margin-top: 0">You just need to set email aliases in your job positions' settings.</p>
<div style="text-align:center;margin-top:5px;margin-bottom:10px;">
<a href="/web#action=hr_recruitment.action_hr_job_config" target="_blank" style="display:inline-block;background-color:#875a7b;line-height:40px;text-decoration: none;color: #ffffff;border-radius: 3px;font-size:13px;font-weight:bold;text-align:center; padding:0 10px;">Set Email Aliases</a>
</div>
<p class="tip_title">Tip: Let candidates apply by email</p>
<p class="tip_content">
By setting an alias to a job position, emails sent to this address create applications automatically. You can even use multiple trackers to get statistics according to the source of the application: LinkedIn, Monster, Indeed, etc.
% set record = object.env['hr.job'].search([('alias_name', '!=', False)], limit=1)
% if record and record.alias_domain
<a href="mailto:${record.alias_id.display_name}" target="_blank" style="color: #875a7b; text-decoration: none;">Try sending an email</a>
% endif
</p>
</div>
</field>
</record>
+2 -2
View File
@@ -19,12 +19,12 @@ Help your customers with this chat, and analyse their feedback.
""",
'data': [
"security/im_livechat_channel_security.xml",
"security/ir.model.access.csv",
"data/mail_shortcode_data.xml",
"data/mail_data.xml",
"data/im_livechat_channel_data.xml",
'data/digest_data.xml',
"security/im_livechat_channel_security.xml",
"security/ir.model.access.csv",
"views/rating_views.xml",
"views/mail_channel_views.xml",
"views/im_livechat_channel_views.xml",
+23 -6
View File
@@ -1,8 +1,25 @@
<?xml version='1.0' encoding='utf-8'?>
<odoo noupdate="1">
<record id="digest.digest_digest_default" model="digest.digest">
<field name="kpi_livechat_rating">True</field>
<field name="kpi_livechat_conversations">True</field>
<field name="kpi_livechat_response">True</field>
</record>
<odoo>
<data noupdate="1">
<record id="digest.digest_digest_default" model="digest.digest">
<field name="kpi_livechat_rating">True</field>
<field name="kpi_livechat_conversations">True</field>
<field name="kpi_livechat_response">True</field>
</record>
</data>
<data>
<record id="digest_tip_im_livechat_0" model="digest.tip">
<field name="name">Tip: Use canned responses to chat faster</field>
<field name="sequence">2900</field>
<field name="group_id" ref="im_livechat.im_livechat_group_manager" />
<field name="tip_description" type="html">
<div>
<p class="tip_title">Tip: Use canned responses to chat faster</p>
<p class="tip_content">Use canned responses to define templates of messages in the livechat app. To load a canned response, start your sentence with ':' and select the template.</p>
<img src="/im_livechat/static/src/img/canned-responses.gif" class="illustration_border" />
</div>
</field>
</record>
</data>
</odoo>
Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

+1
View File
@@ -14,6 +14,7 @@
'data': [
'security/mrp_security.xml',
'security/ir.model.access.csv',
'data/digest_data.xml',
'data/mrp_data.xml',
'wizard/change_production_qty_views.xml',
'wizard/mrp_workcenter_block_view.xml',
+17
View File
@@ -0,0 +1,17 @@
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<data>
<record id="digest_tip_mrp_0" model="digest.tip">
<field name="name">Tip: Use tablets in the shop to control manufacturing</field>
<field name="sequence">600</field>
<field name="group_id" ref="mrp.group_mrp_user" />
<field name="tip_description" type="html">
<div>
<p class="tip_title">Tip: Use tablets in the shop to control manufacturing</p>
<p class="tip_content">With the Odoo work center control panel, your worker can start work orders in the shop and follow instructions of the worksheet. Quality tests are perfectly integrated into the process. Workers can trigger feedback loops, maintenance alerts, scrap products, etc.</p>
<img src="/mrp/static/src/img/mrp-tablet.png" style="margin-top: 20px; max-width: 580px" width="100%" />
</div>
</field>
</record>
</data>
</odoo>
Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

+1
View File
@@ -23,6 +23,7 @@
'data': [
'security/project_security.xml',
'security/ir.model.access.csv',
'data/digest_data.xml',
'report/project_report_views.xml',
'views/analytic_views.xml',
'views/digest_views.xml',
+5 -8
View File
@@ -8,17 +8,14 @@
<data>
<record id="digest_tip_project_0" model="digest.tip">
<field name="name">Project: Create tasks from incoming emails</field>
<field name="sequence">5</field>
<field name="name">Tip: Customize tasks and stages according to the project</field>
<field name="sequence">1200</field>
<field name="group_id" ref="project.group_project_manager"/>
<field name="tip_description" type="html">
<div>
<b class="font-16" style="font-size: 20px;line-height: 30px">Create tasks from incoming emails</b>
<p class="font-12" style="color:#888888;font-size: 15px; line-height: 25px; margin: 0">You just need to set email aliases to your projects.</p>
<div style="text-align:center;margin-top:5px;margin-bottom:10px;">
<a href="/web#action=project.open_view_project_all_config" target="_blank" style="display:inline-block;background-color:#875a7b;line-height:40px;text-decoration: none;color: #ffffff;border-radius: 3px;font-size:13px;font-weight:bold;text-align:center; padding:0 10px;">Try it now
</a>
</div>
<p class="tip_title">Tip: Customize tasks and stages according to the project</p>
<p class="tip_content">Customize how tasks are named according to the project and create tailor made status messages for each step of the workflow. It helps to document your workflow: what should be done at which step.</p>
<img src="/project/static/src/img/project-custom-tasks.gif" class="illustration_border" />
</div>
</field>
</record>
Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

+1
View File
@@ -13,6 +13,7 @@
'data': [
'security/purchase_security.xml',
'security/ir.model.access.csv',
'data/digest_data.xml',
'views/assets.xml',
'views/account_move_views.xml',
'data/purchase_data.xml',
+28
View File
@@ -0,0 +1,28 @@
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<data>
<record id="digest_tip_purchase_0" model="digest.tip">
<field name="name">Tip: How to keep late receipts under control?</field>
<field name="sequence">100</field>
<field name="group_id" ref="purchase.group_purchase_user" />
<field name="tip_description" type="html">
<div>
<p class="tip_title">Tip: How to keep late receipts under control?</p>
<p class="tip_content">When creating a purchase order, have a look at the vendor's <i>On Time Delivery</i> rate: the percentage of products shipped on time. If it is too low, activate the <i>automated reminders</i>. A few days before the due shipment, Odoo will send the vendor an email to ask confirmation of shipment dates and keep you informed in case of any delays. To get the vendor's performance statistics, click on the OTD rate.</p>
<img src="/purchase/static/src/img/OTDPurchase.gif" class="illustration_border" />
</div>
</field>
</record>
<record id="digest_tip_purchase_1" model="digest.tip">
<field name="name">Tip: Never miss a purchase order</field>
<field name="sequence">2000</field>
<field name="group_id" ref="purchase.group_purchase_user" />
<field name="tip_description" type="html">
<div>
<p class="tip_title">Tip: Never miss a purchase order</p>
<p class="tip_content">When sending a purchase order by email, Odoo asks the vendor to acknowledge the reception of the order. When the vendor acknowledges the order by clicking on a button in the email, the information is added on the purchase order. Use filters to track orders that have not been acknowledged.</p>
</div>
</field>
</record>
</data>
</odoo>
Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

-1
View File
@@ -15,7 +15,6 @@ This module allow to reinvoice employee expense, by setting the SO directly on t
""",
'depends': ['sale_management', 'hr_expense'],
'data': [
'data/digest_data.xml',
'views/assets.xml',
'views/product_view.xml',
'views/hr_expense_views.xml',
-20
View File
@@ -1,20 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<record id="digest_tip_sale_expense_0" model="digest.tip">
<field name="name">Expense: Submit expenses by email</field>
<field name="sequence">5</field>
<field name="group_id" ref="base.group_user"/>
<field name="tip_description" type="html">
<div>
<b class="font-16" style="font-size: 20px;line-height: 30px">Submit expenses by email</b>
<p class="font-12" style="color:#888888;font-size: 15px; line-height: 25px; margin-top: 0">Take a snapshot of your expenses and submit your expenses by email.</p>
<div style="text-align:center;margin-top:5px;margin-bottom:10px;">
<a href="/web#action=hr_expense.action_hr_expense_configuration" target="_blank"
style="display:inline-block;background-color:#875a7b;line-height:40px;text-decoration: none;color: #ffffff;border-radius: 3px;font-size:13px;font-weight:bold;text-align:center;padding:0 10px;">
Activate Expense Emails
</a>
</div>
</div>
</field>
</record>
</odoo>
+1
View File
@@ -39,6 +39,7 @@ The Dashboard for the Sales Manager will include
'depends': ['sale', 'digest'],
'data': [
'security/sale_management_security.xml',
'data/digest_data.xml',
'views/sale_portal_templates.xml',
'views/sale_order_template_views.xml',
'security/ir.model.access.csv',
@@ -4,5 +4,30 @@
<record id="digest.digest_digest_default" model="digest.digest">
<field name="kpi_all_sale_total">True</field>
</record>
<record id="digest_tip_sale1_management_0" model="digest.tip">
<field name="name">Tip: Odoo supports configurable products</field>
<field name="sequence">2200</field>
<field name="group_id" ref="sales_team.group_sale_manager" />
<field name="tip_description" type="html">
<div>
<p class="tip_title">Tip: Odoo supports configurable products</p>
<p class="tip_content">Struggling with a complex product catalog? Try out the Product Configurator to help sales configure a product with different options: colors, size, capacity, etc. Make sale orders encoding easier and error-proof.</p>
<img src="/sale_management/static/src/img/Sales-configure-products.gif" class="illustration_border" />
</div>
</field>
</record>
<record id="digest_tip_sale_management_1" model="digest.tip">
<field name="name">Tip: Sell or buy products in bulk with matrixes</field>
<field name="sequence">2700</field>
<field name="group_id" ref="sales_team.group_sale_manager" />
<field name="tip_description" type="html">
<div>
<p class="tip_title">Tip: Sell or buy products in bulk with matrixes</p>
<p class="tip_content">Selling the same product in different sizes or colors? Try the product grid and populate your orders with multiple quantities of each variant. This feature also exists in the Purchase application.</p>
<img src="/sale_management/static/src/img/t-shirts.png" class="illustration_border" />
</div>
</field>
</record>
</data>
</odoo>
Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

+2 -1
View File
@@ -7,7 +7,7 @@
'summary': 'Manage your stock and logistics activities',
'description': "",
'website': 'https://www.odoo.com/page/warehouse',
'depends': ['product', 'barcodes'],
'depends': ['product', 'barcodes', 'digest'],
'category': 'Inventory/Inventory',
'sequence': 13,
'demo': [
@@ -22,6 +22,7 @@
'data': [
'security/stock_security.xml',
'security/ir.model.access.csv',
'data/digest_data.xml',
'views/stock_menu_views.xml',
'data/stock_traceability_report_data.xml',
'data/procurement_data.xml',
+24
View File
@@ -0,0 +1,24 @@
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<data>
<record id="digest_tip_stock_0" model="digest.tip">
<field name="name">Tip: Speed up inventory operations with barcodes</field>
<field name="sequence">1000</field>
<field name="group_id" ref="stock.group_stock_user" />
<field name="tip_description" type="html">
<div>
<p class="tip_title">Tip: Speed up inventory operations with barcodes</p>
<div class="tip_twocol">
<div class="tip_twocol_left" style="float: left; width: 45%;">
<img src="/stock/static/src/img/barcode.gif" class="tip_twocol_img" />
</div>
<div style="float: left; width: 55%;">
<p class="tip_content" style="margin: 0;">Enjoy a quick-paced experience with the Odoo barcode app. It is blazing fast and works even without a stable internet connection. It supports all flows: inventory adjustments, batch picking, moving lots or pallets, low inventory checks, etc. Go to the "Apps" menu to activate the barcode interface.</p>
</div>
</div>
<div style="clear: both;" />
</div>
</field>
</record>
</data>
</odoo>
Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

+1
View File
@@ -23,6 +23,7 @@
'data/website_visitor_cron.xml',
'security/website_security.xml',
'security/ir.model.access.csv',
'data/digest_data.xml',
'views/assets.xml',
'views/website_templates.xml',
'views/website_navbar_templates.xml',
+30 -6
View File
@@ -2,14 +2,38 @@
<odoo>
<data>
<record id="digest_tip_website_0" model="digest.tip">
<field name="name">Website: Use SEO to get more visitors</field>
<field name="sequence">100</field>
<field name="group_id" ref="website.group_website_designer"/>
<field name="name">Tip: Engage with visitors to convert them into leads</field>
<field name="sequence">400</field>
<field name="group_id" ref="website.group_website_publisher" />
<field name="tip_description" type="html">
<div>
<b class="font-16" style="font-size: 20px;line-height: 30px">Use SEO to get more visitors on your website</b>
<p class="font-12" style="color:#888888;font-size: 15px; line-height: 25px; margin-top: 0">Odoo helps you to optimize your website and get a better ranking in search engines like Google.</p>
<img src="/digest/static/src/img/tips-website-seo.jpg" style="max-width: 580px" width="100%"/>
<p class="tip_title">Tip: Engage with visitors to convert them into leads</p>
<p class="tip_content">Monitor your visitors while they are browsing your website with the Odoo Social app. Engage with them in just a click using a live chat request or a push notification. If they have completed one of your forms, you can send them an SMS, or call them right away while they are browsing your website.</p>
<img src="/website/static/src/img/website-visitors.gif" class="illustration_border" />
</div>
</field>
</record>
<record id="digest_tip_website_1" model="digest.tip">
<field name="name">Tip: Use royalty-free photos</field>
<field name="sequence">1400</field>
<field name="group_id" ref="website.group_website_publisher" />
<field name="tip_description" type="html">
<div>
<p class="tip_title">Tip: Use royalty-free photos</p>
<p class="tip_content">When you need photos to illustrate your website, search in the media dialog. Odoo's integration with Unsplash, millions of royalty free and high quality photos, will help you get the perfect picture in just a few clicks.</p>
<img src="/website/static/src/img/image-search.gif" class="illustration_border" />
</div>
</field>
</record>
<record id="digest_tip_website_2" model="digest.tip">
<field name="name">Tip: Search Engine Optimization (SEO)</field>
<field name="sequence">1600</field>
<field name="group_id" ref="website.group_website_publisher" />
<field name="tip_description" type="html">
<div>
<p class="tip_title">Tip: Search Engine Optimization (SEO)</p>
<p class="tip_content">To get more visitors, you should target keywords that are often searched in Google. With the built-in SEO tool, once you define a few keywords, Odoo will recommend you the best keywords to target. Then adapt your title and description accordingly to boost your traffic.</p>
<img src="/website/static/src/img/SEO-keywords.gif" class="illustration_border" />
</div>
</field>
</record>
Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB