19.0 vanilla

This commit is contained in:
Ernad Husremovic 2026-03-09 09:30:27 +01:00
parent d1963a3c3a
commit 2d3ee4855a
7430 changed files with 2687981 additions and 2965473 deletions

View file

@ -2,14 +2,21 @@
<odoo>
<data noupdate="1">
<record model="mail.channel" id="channel_all_employees">
<record model="discuss.channel" id="mail.channel_all_employees">
<field name="name">general</field>
<field name="description">General announcements for all employees.</field>
</record>
<record model="discuss.channel" id="mail.channel_admin">
<field name="name">Administrators</field>
<field name="description">General channel for administrators.</field>
<field name="group_public_id" ref="base.group_system"/>
<field name="group_ids" eval="[Command.link(ref('base.group_system'))]"/>
</record>
<!-- notify all employees of module installation -->
<record model="mail.message" id="module_install_notification">
<field name="model">mail.channel</field>
<record model="mail.message" id="mail.module_install_notification">
<field name="model">discuss.channel</field>
<field name="res_id" ref="mail.channel_all_employees"/>
<field name="message_type">email</field>
<field name="subtype_id" ref="mail.mt_comment"/>
@ -18,14 +25,14 @@
<p>This channel is accessible to all users to <b>easily share company information</b>.</p>]]></field>
</record>
<record model="mail.channel.member" id="channel_member_general_channel_for_admin">
<record model="discuss.channel.member" id="channel_member_general_channel_for_admin">
<field name="partner_id" ref="base.partner_admin"/>
<field name="channel_id" ref="mail.channel_all_employees"/>
<field name="fetched_message_id" ref="mail.module_install_notification"/>
<field name="seen_message_id" ref="mail.module_install_notification"/>
</record>
<record model="mail.channel" id="mail.channel_all_employees">
<record model="discuss.channel" id="mail.channel_all_employees">
<field name="group_ids" eval="[Command.link(ref('base.group_user'))]"/>
</record>
</data>

View file

@ -0,0 +1,17 @@
<?xml version="1.0"?>
<odoo>
<data>
<record id="mail.discuss_notification_settings_action" model="ir.actions.client">
<field name="name">Notifications</field>
<field name="tag">mail.discuss_notification_settings_action</field>
<field name="target">new</field>
<field name="context">{"dialog_size": "medium", "footer": false}</field>
</record>
<record id="mail.discuss_call_settings_action" model="ir.actions.client">
<field name="name">Voice &amp; Video Settings</field>
<field name="tag">mail.discuss_call_settings_action</field>
<field name="target">new</field>
<field name="context">{'dialog_size': 'medium', 'footer': false}</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<record id="gc_delete_overdue_activities_year_threshold" model="ir.config_parameter">
<field name="key">mail.activity.gc.delete_overdue_years</field>
<field name="value">3</field>
</record>
<record id="restrict_template_rendering" model="ir.config_parameter">
<field name="key">mail.restrict.template.rendering</field>
<field name="value">1</field>
</record>
</data>
</odoo>

View file

@ -5,12 +5,11 @@
<field name="name">Mail: Email Queue Manager</field>
<field name="model_id" ref="model_mail_mail"/>
<field name="state">code</field>
<field name="code">model.process_email_queue()</field>
<field name="code">model.process_email_queue(batch_size=1000)</field>
<field name="user_id" ref="base.user_root"/>
<field name="interval_number">1</field>
<field name="interval_type">hours</field>
<field name="numbercall">-1</field>
<field eval="False" name="doall"/>
<field name="priority">6</field>
</record>
<record id="ir_cron_module_update_notification" model="ir.cron">
@ -21,9 +20,7 @@
<field name="user_id" ref="base.user_root" />
<field name="interval_number">1</field>
<field name="interval_type">weeks</field>
<field name="numbercall">-1</field>
<field name="nextcall" eval="(DateTime.now() + timedelta(days=7)).strftime('%Y-%m-%d %H:%M:%S')" />
<field eval="False" name="doall" />
<field name="priority">1000</field>
</record>
@ -32,11 +29,9 @@
</record>
<record id="ir_cron_delete_notification" model="ir.cron">
<field name="name">Notification: Delete Notifications older than 6 Month</field>
<field name="name">Notification: Delete Notifications older than 6 Months</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
<field name="interval_type">months</field>
<field name="model_id" ref="model_mail_notification"/>
<field name="code">model._gc_notifications(max_age_days=180)</field>
<field name="state">code</field>
@ -49,21 +44,45 @@
<field name="code">model._fetch_mails()</field>
<field name="interval_number">5</field>
<field name="interval_type">minutes</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
<!-- Active flag is set on fetchmail_server.create/write -->
<field name="active" eval="False"/>
</record>
<record id="ir_cron_post_scheduled_message" model="ir.cron">
<field name="name">Mail: Post scheduled messages</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="model_id" ref="model_mail_scheduled_message"/>
<field name="code">model._post_messages_cron()</field>
<field name="state">code</field>
</record>
<record id="ir_cron_send_scheduled_message" model="ir.cron">
<field name="name">Notification: Send scheduled message notifications</field>
<field name="name">Notification: Notify scheduled messages</field>
<field name="interval_number">1</field>
<field name="interval_type">hours</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
<field name="model_id" ref="model_mail_message_schedule"/>
<field name="code">model._send_notifications_cron()</field>
<field name="state">code</field>
</record>
<record id="ir_cron_web_push_notification" model="ir.cron">
<field name="name">Mail: send web push notification</field>
<field name="model_id" ref="model_mail_push"/>
<field name="state">code</field>
<field name="code">model._push_notification_to_endpoint()</field>
<field name="active" eval="True"/>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
</record>
<record id="ir_cron_discuss_channel_member_unmute" model="ir.cron">
<field name="name">Discuss: channel member unmute</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="model_id" ref="model_discuss_channel_member"/>
<field name="code">model._cleanup_expired_mutes()</field>
<field name="state">code</field>
</record>
</data>
</odoo>

View file

@ -3,11 +3,13 @@
<data noupdate="1">
<record id="mail_activity_data_email" model="mail.activity.type">
<field name="name">Email</field>
<field name="summary">Email</field>
<field name="icon">fa-envelope</field>
<field name="sequence">3</field>
</record>
<record id="mail_activity_data_call" model="mail.activity.type">
<field name="name">Call</field>
<field name="summary">Call</field>
<field name="icon">fa-phone</field>
<field name="category">phonecall</field>
<field name="delay_count">2</field>
@ -15,17 +17,20 @@
</record>
<record id="mail_activity_data_meeting" model="mail.activity.type">
<field name="name">Meeting</field>
<field name="summary">Meeting</field>
<field name="icon">fa-users</field>
<field name="sequence">9</field>
</record>
<record id="mail_activity_data_todo" model="mail.activity.type">
<field name="name">To Do</field>
<field name="icon">fa-tasks</field>
<field name="name">To-Do</field>
<field name="summary">To-Do</field>
<field name="icon">fa-check</field>
<field name="delay_count">5</field>
<field name="sequence">12</field>
<field name="sequence">2</field>
</record>
<record id="mail_activity_data_upload_document" model="mail.activity.type">
<field name="name">Upload Document</field>
<field name="name">Document</field>
<field name="summary">Document</field>
<field name="icon">fa-upload</field>
<field name="delay_count">5</field>
<field name="sequence">25</field>

View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<record id="mail_canned_response_data_hello" model="mail.canned.response">
<field name="source">hello</field>
<field name="substitution">Hello, how may I help you?</field>
<field name="group_ids" eval="[(6, 0, [ref('base.group_user')])]"/>
</record>
</data>
</odoo>

View file

@ -1,159 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<!-- Discussion groups, done in 2 steps to remove creator from followers -->
<record model="mail.channel" id="channel_1">
<field name="name">sales</field>
<field name="description">Discussion about best sales practices and deals.</field>
</record>
<record model="mail.channel" id="channel_2">
<field name="name">board-meetings</field>
<field name="description">Board meetings, budgets, strategic plans</field>
</record>
<record model="mail.channel" id="channel_3">
<field name="name">rd</field>
<field name="description">Research and development discussion group</field>
</record>
<!-- Best sales practices messages -->
<record id="mail_message_channel_1_1" model="mail.message">
<field name="model">mail.channel</field>
<field name="res_id" ref="mail.channel_1"/>
<field name="body"><![CDATA[<p>Selling a training session and selling the products after the training session is more efficient than directly selling a pack with the training session and the products.</p>]]></field>
<field name="message_type">comment</field>
<field name="subtype_id" ref="mt_comment"/>
<field name="author_id" ref="base.partner_demo"/>
<field name="date" eval="(DateTime.today() - timedelta(days=5)).strftime('%Y-%m-%d %H:%M')"/>
</record>
<record id="mail_message_channel_1_2" model="mail.message">
<field name="model">mail.channel</field>
<field name="res_id" ref="mail.channel_1"/>
<field name="body"><![CDATA[<p>I noted I can not manage efficiently my pipeline when I have more than 50 opportunities in the qualification stage.</p><p>Any advice on this? How do you organize your activities with more than 50 opportunities?</p>]]></field>
<field name="message_type">comment</field>
<field name="subtype_id" ref="mt_comment"/>
<field name="author_id" ref="base.partner_root"/>
<field name="date" eval="(DateTime.today() - timedelta(days=4)).strftime('%Y-%m-%d %H:%M')"/>
</record>
<record id="mail_message_channel_1_2_1" model="mail.message">
<field name="model">mail.channel</field>
<field name="res_id" ref="mail.channel_1"/>
<field name="body"><![CDATA[<p>When I have too much opportunities in the pipe, I start communicating with prospects more by email than phonecalls.</p><p>I send an email to create a sense of emergency, like <i>"can I call you this week about our quote?"</i> and I call only those that answer this email.</p><p>You can use the email template feature of Odoo to automate email composition.</p>]]></field>
<field name="message_type">comment</field>
<field name="parent_id" ref="mail_message_channel_1_2"/>
<field name="subtype_id" ref="mt_comment"/>
<field name="author_id" ref="base.partner_demo"/>
<field name="date" eval="(DateTime.today() - timedelta(days=3)).strftime('%Y-%m-%d %H:%M')"/>
</record>
<!-- Pushed to all employees -->
<record id="mail_message_channel_whole_1" model="mail.message">
<field name="model">mail.channel</field>
<field name="res_id" ref="mail.channel_all_employees"/>
<field name="body"><![CDATA[
<p>
Great news!<br/>
Our company has received the Deloitte Fast 50 award. We are the fastest
growing company of the country, with a growth of 1549% over the past 5
years. You can get more information <a href="http://www.openerp.com/node/1244/2012/10">on our blog</a>.
</p>
]]></field>
<field name="message_type">comment</field>
<field name="author_id" ref="base.partner_demo"/>
<field name="date" eval="(DateTime.today() - timedelta(minutes=22)).strftime('%Y-%m-%d %H:%M')"/>
<field name="subtype_id" ref="mail.mt_comment"/>
</record>
<record id="mail_message_channel_whole_2" model="mail.message">
<field name="model">mail.channel</field>
<field name="res_id" ref="mail.channel_all_employees"/>
<field name="body"><![CDATA[<p>Your monthly meal vouchers arrived. You can get them at the HR's office.</p>
<p>This month you also get 250 EUR of eco-vouchers if you have been in the company for more than a year.</p>]]></field>
<field name="message_type">comment</field>
<field name="author_id" ref="base.partner_demo"/>
<field name="date" eval="(DateTime.today() - timedelta(hours=1)).strftime('%Y-%m-%d %H:%M')"/>
<field name="subtype_id" ref="mail.mt_comment"/>
</record>
<record id="mail_message_channel_whole_2_1" model="mail.message">
<field name="model">mail.channel</field>
<field name="res_id" ref="channel_all_employees"/>
<field name="body"><![CDATA[<p>Thanks! Could you please remind me where is Christine's office, if I may ask? I'm new here!</p>]]></field>
<field name="parent_id" ref="mail_message_channel_whole_2"/>
<field name="message_type">comment</field>
<field name="author_id" ref="base.partner_root"/>
<field name="date" eval="(DateTime.today() - timedelta(minutes=34)).strftime('%Y-%m-%d %H:%M')"/>
<field name="subtype_id" ref="mail.mt_comment"/>
</record>
<record id="mail_message_channel_whole_2_2" model="mail.message">
<field name="model">mail.channel</field>
<field name="res_id" ref="channel_all_employees"/>
<field name="body"><![CDATA[<p>Building B3, second floor to the right :-).</p>]]></field>
<field name="parent_id" ref="mail_message_channel_whole_2_1"/>
<field name="message_type">comment</field>
<field name="author_id" ref="base.partner_demo"/>
<field name="date" eval="(DateTime.today() - timedelta(minutes=22)).strftime('%Y-%m-%d %H:%M')"/>
<field name="subtype_id" ref="mail.mt_comment"/>
</record>
<!-- Board messages -->
<record id="mail_message_channel_2_1" model="mail.message">
<field name="model">mail.channel</field>
<field name="res_id" ref="mail.channel_2"/>
<field name="body"><![CDATA[
<p>
Dear Board Members,
</p>
<p>
The main events of the month of October are:
</p>
<p>
<b>Sales:</b>
</p>
<ul>
<li>Invoicing is respectively of 442k€ for our European company (66% of the budget) and $404k for the U.S. office (75% of the budget). Despite these numbers that are far below our initial expectations, the growth of the month of October is 51% compared to last year.</li>
<li>The month of September having been better than our initial forecasts, the consolidated yearly revenue is only of $20k below our forecast made during the board of September.</li>
<li>The consolidated forecast for the end of the year is $6.749k, which is a growth of 76% compared to last year and an achievement of 87% of the budget.</li>
<li>The recruitment of new resellers has been very good, especially in Europe, where we signed 30 new resellers this month.</li>
</ul>
<p>
<b>Finance :</b>
</p>
<ul>
<li>The profit and loss has been negatively impacted this month by revenues that are far beyond the budget and charges that are 15% above the budget. The main extra we had in our charges this month is due to the provisioning of the salaries for the holidays period, $50k.</li>
<li>We also got the payment of our long awaited subsidies, the cash level has increased of 300K€ which gives a current balance of 963 K€ without including the straight loan of 350 K€.</li>
<li>The aged customer balance has been similar to the one of the last month with a small decrease of the DSO. We have recruited a new accountant assistant for the credit collection. She is mostly doing phone calls for all invoices that are due since 30 days, so we should get improvements of the DSO in November. The sum of the invoicing on which we have a risk in the aged customer balance is 100K€.</li>
</ul>
<p>
<b>Resellers and Customers:</b>
</p>
<ul>
<li>The total number of resellers is 429, across 87 countries.</li>
<li>The total number of installations of our software increased to 37K, against 33K for the month of September but we still did not reached the highest level we reached during this year (44K in march and may)</li>
<li>We have passed the 10000th customer in production with 10271 customers at the end of October. The paying customer ratio is 6,6%.</li>
</ul>
<p>
<b>Launch of the new release:</b>
</p>
<p>
We are working actively on the new release which is scheduled for the end of November.
</p>
<ul>
<li>We will publish the release note this week</li>
<li>The whole Sales Team will be trained on the new version this Friday</li>
<li>We will do a public announce to our resellers the 21th of November. We plan to show them: a description of the new features, the new distribution strategy, the new pricing and the communication plan.</li>
</ul>
<br/>
<p>
Nicolas, can you book a meeting room for our meeting of Friday 2pm?
</p>
<p>
Regards.
</p>
]]></field>
<field name="message_type">comment</field>
<field name="subtype_id" ref="mt_comment"/>
<field name="author_id" ref="base.partner_demo"/>
<field name="date" eval="(DateTime.today() - timedelta(days=3)).strftime('%Y-%m-%d %H:%M')"/>
</record>
</data>
</odoo>

View file

@ -1,18 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<record model="res.groups.privilege" id="res_groups_privilege_canned_response">
<field name="name">Canned Responses</field>
<field name="sequence">100</field>
<field name="category_id" ref="base.module_category_marketing"/>
</record>
<record id="group_mail_canned_response_admin" model="res.groups">
<field name="name">Canned Response Administrator</field>
<field name="privilege_id" ref="res_groups_privilege_canned_response"/>
</record>
<record id="group_mail_template_editor" model="res.groups">
<field name="name">Mail Template Editor</field>
<field name="category_id" ref="base.module_category_hidden"/>
</record>
<record id="base.group_system" model="res.groups">
<field name="implied_ids" eval="[(4, ref('mail.group_mail_template_editor'))]"/>
<field name="implied_ids" eval="[(4, ref('mail.group_mail_template_editor')), (4, ref('mail.group_mail_canned_response_admin'))]"/>
</record>
<!-- By default, allow all users to edit mail templates -->
<record id="base.group_user" model="res.groups">
<field name="implied_ids" eval="[(4, ref('mail.group_mail_template_editor'))]"/>
<!-- Group used for the notification_type field of res.users -->
<record id="group_mail_notification_type_inbox" model="res.groups">
<field name="name">Receive notifications in Odoo</field>
</record>
</data>
</odoo>

View file

@ -16,16 +16,17 @@
<t t-if="display_assignee"> (originally assigned to <span t-field="activity.user_id.name"/>)</t>
<span t-if="activity.summary">: </span><span t-if="activity.summary" t-field="activity.summary"/>
</p>
<t t-if="activity.note and activity.note != '&lt;p&gt;&lt;br&gt;&lt;/p&gt;'"><!-- <p></br></p> -->
<div class="o_mail_note_title fw-bold">Original note:</div>
<div t-field="activity.note"/>
</t>
<div t-if="feedback">
<div class="fw-bold">Feedback:</div>
<t t-foreach="feedback.split('\n')" t-as="feedback_line">
<t t-esc="feedback_line"/>
<br t-if="not feedback_line_last"/>
</t>
</div>
<t t-if="activity.note and activity.note != '&lt;p&gt;&lt;br&gt;&lt;/p&gt;'"><!-- <p></br></p> -->
<div class="o_mail_note_title"><strong>Original note:</strong></div>
<div t-field="activity.note"/>
</t>
</div>
</template>
@ -55,5 +56,22 @@
</t>
</p>
</template>
<template id="discuss_channel_invitation_template">
<div style="padding: 16px; background-color: #F1F1F1; font-family: Verdana, Arial, sans-serif; color: #454748; width: 100%; display: flex; justify-content: center;">
<div style="max-width: 590px; width: 100%; background-color: #ffffff; border-radius: 8px; padding: 20px; display: flex; flex-direction: column; align-items: center;">
<div style="width: 100%; font-size: 14px; line-height: 1.5; text-align: left;">
<t t-esc="mail_body"/>
<p style="text-align: center; margin: 24px 0;">
<a t-attf-href="{{base_url}}{{channel.invitation_url}}?email_token={{email_token}}"
t-attf-style="background-color: {{user.company_id.email_secondary_color or '#875A7B'}}; color: {{user.company_id.email_primary_color or '#FFFFFF'}}; text-decoration: none; padding: 8px 12px; border-radius: 4px; display: inline-block; font-weight: bold;"
>
Join Channel
</a>
</p>
</div>
</div>
</div>
</template>
</data>
</odoo>

View file

@ -8,42 +8,35 @@
</head>
<body style="font-family:Verdana, Arial,sans-serif; color: #454748;">
<t t-set="subtype_internal" t-value="subtype and subtype.internal"/>
<t t-set="show_header" t-value="email_notification_force_header or (
email_notification_allow_header and has_button_access)"/>
<t t-set="show_footer" t-value="email_notification_force_footer or (
email_notification_allow_footer and show_header and author_user and author_user._is_internal())"/>
<!-- HEADER -->
<t t-call="mail.notification_preview"/>
<div style="max-width: 900px; width: 100%;">
<div t-if="has_button_access" itemscope="itemscope" itemtype="http://schema.org/EmailMessage">
<div t-if="show_header and has_button_access" itemscope="itemscope" itemtype="http://schema.org/EmailMessage">
<div itemprop="potentialAction" itemscope="itemscope" itemtype="http://schema.org/ViewAction">
<link itemprop="target" t-att-href="button_access['url']"/>
<link itemprop="url" t-att-href="button_access['url']"/>
<meta itemprop="name" t-att-content="button_access['title']"/>
</div>
</div>
<div t-if="subtitles or has_button_access or actions or not is_discussion"
<div t-if="show_header and (subtitles or has_button_access or not is_discussion)"
summary="o_mail_notification" style="padding: 0px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" style="width: 100%; margin-top: 5px;">
<tbody>
<tr>
<td valign="center">
<img t-att-src="'/logo.png?company=%s' % (company.id or 0)" style="padding: 0px; margin: 0px; height: auto; max-width: 200px; max-height: 36px;" t-att-alt="'%s' % company.name"/>
</td>
</tr>
<tr>
<td valign="center">
<hr width="100%" style="background-color:rgb(204,204,204);border:medium none;clear:both;display:block;font-size:0px;min-height:1px;line-height:0; margin: 10px 0px;"/>
</td>
</tr>
<tr>
<td valign="center" style="white-space:nowrap;">
<table cellspacing="0" cellpadding="0" border="0">
<tbody>
<tr>
<td t-if="has_button_access" t-att-style="'border-radius: 3px; text-align: center; background: ' + (company.secondary_color if company.secondary_color else '#875A7B')">
<a t-att-href="button_access['url']" style="font-size: 12px; color: #FFFFFF; display: block; padding: 8px 12px 11px; text-decoration: none !important; font-weight: 400;">
<td t-if="has_button_access" t-att-style="'border-radius: 3px; text-align: center; background: ' + (company.email_secondary_color or '#875A7B') + ';'">
<a t-att-href="button_access['url']" t-att-style="'font-size: 12px; color: ' + (company.email_primary_color or '#FFFFFF') + '; display: block; padding: 8px 12px 11px; text-decoration: none !important; font-weight: bold;'">
<t t-out="button_access['title']"/>
</a>
</td>
<td t-if="has_button_access">&amp;nbsp;&amp;nbsp;</td>
<td t-if="subtitles" style="font-size: 12px;">
<t t-foreach="subtitles" t-as="subtitle">
<span t-attf-style="{{ 'font-weight:bold;' if subtitle_first else '' }}"
@ -51,17 +44,8 @@
<br t-if="not subtitle_last"/>
</t>
</td>
<td t-else=""><span style="font-weight:bold;" t-out="record_name"/><br/></td>
<td>&amp;nbsp;&amp;nbsp;</td>
<td t-else=""><span style="font-weight:bold;" t-out="record_name or (message.record_name and message.record_name.replace('/','-')) or ''"/><br/></td>
<td t-if="actions">
<t t-foreach="actions" t-as="action">
|
<a t-att-href="action['url']" style="font-size: 12px; color: #875A7B; text-decoration:none !important;">
<t t-out="action['title']"/>
</a>
</t>
</td>
</tr>
</tbody>
</table>
@ -71,9 +55,6 @@
<td valign="center">
<hr width="100%"
style="background-color:rgb(204,204,204);border:medium none;clear:both;display:block;font-size:0px;min-height:1px;line-height:0;margin: 10px 0px;"/>
<p t-if="subtype_internal" style="background-color: #f2dede; padding: 5px; margin-bottom: 16px; font-size: 13px;">
<strong>Internal communication</strong>: Replying will post an internal note. Followers won't receive any email notification.
</p>
</td>
</tr>
</tbody>
@ -83,14 +64,14 @@
<div t-out="message.body" style="font-size: 13px;"/>
<ul t-if="tracking_values">
<t t-foreach="tracking_values" t-as="tracking">
<li><t t-out="tracking[0]"/>: <t t-out="tracking[1]"/> &#8594; <t t-out="tracking[2]"/></li>
<li><t t-out="tracking[0]"/>: <t t-if="tracking[1]" t-out="tracking[1]"/><em t-else="">None</em> &#8594; <t t-if="tracking[2]" t-out="tracking[2]"/><em t-else="">None</em></li>
</t>
</ul>
<t class="o_signature">
<div t-if="email_add_signature and not is_html_empty(signature)" t-out="signature" style="font-size: 13px;"/>
<div t-if="email_add_signature and not is_html_empty(signature)" t-out="signature" class="o_signature" style="font-size: 13px;"/>
</t>
<!-- FOOTER -->
<div style="margin-top:32px;">
<div t-if="show_footer" style="margin-top:16px;">
<hr width="100%" style="background-color:rgb(204,204,204);border:medium none;clear:both;display:block;font-size:0px;min-height:1px;line-height:0; margin: 16px 0px 4px 0px;"/>
<b t-out="company.name" style="font-size:11px;"/><br/>
<p style="color: #999999; margin-top:2px; font-size:11px;">
@ -101,9 +82,13 @@
<a t-if="company.website" t-att-href="'%s' % company.website" style="text-decoration:none; color: #999999;" t-out="company.website"/>
</p>
</div>
<p style="color: #555555; font-size:11px;">
Powered by <a target="_blank" href="https://www.odoo.com?utm_source=db&amp;utm_medium=email" style="color: #875A7B;">Odoo</a>
</p>
<div t-if="show_footer" style="color: #555555; font-size:11px;">
Powered by <a target="_blank" href="https://www.odoo.com?utm_source=db&amp;utm_medium=email"
t-att-style="'color: ' + (company.email_secondary_color or '#875A7B') + ';'">Odoo</a>
<span t-if="show_unfollow" id="mail_unfollow">
| <a href="/mail/unfollow" style="text-decoration:none; color:#555555;">Unfollow</a>
</span>
</div>
</div>
</body></html>
</template>
@ -129,17 +114,17 @@
<t t-if="has_button_access">
<a t-att-href="button_access['url']">
<span style="font-size: 20px; font-weight: bold;">
<t t-out="message.record_name and message.record_name.replace('/','-') or ''"/>
<t t-out="(record_name or message.record_name or '').replace('/','-')"/>
</span>
</a>
</t>
<t t-else="">
<span style="font-size: 20px; font-weight: bold;">
<t t-out="message.record_name and message.record_name.replace('/','-') or ''"/>
<t t-out="(record_name or message.record_name or '').replace('/','-')"/>
</span>
</t>
</td><td valign="middle" align="right">
<img t-att-src="'/logo.png?company=%s' % (company.id or 0)" style="padding: 0px; margin: 0px; height: 48px;" t-att-alt="'%s' % company.name"/>
</td><td valign="middle" align="right" t-if="company and not company.uses_default_logo">
<img t-att-src="'/logo.png?company=%s' % company.id" style="padding: 0px; margin: 0px; height: 48px;" t-att-alt="'%s' % company.name"/>
</td></tr>
<tr><td colspan="2" style="text-align:center;">
<hr width="100%" style="background-color:rgb(204,204,204);border:medium none;clear:both;display:block;font-size:0px;min-height:1px;line-height:0; margin:4px 0px 32px 0px;"/>
@ -172,7 +157,11 @@
</td></tr>
<!-- POWERED BY -->
<tr><td align="center" style="min-width: 590px;">
Powered by <a target="_blank" href="https://www.odoo.com?utm_source=db&amp;utm_medium=email" style="color: #875A7B;">Odoo</a>
Powered by <a target="_blank" href="https://www.odoo.com?utm_source=db&amp;utm_medium=email"
t-att-style="'color: ' + (company.email_secondary_color or '#875A7B') + ';'">Odoo</a>
<span t-if="show_unfollow" id="mail_unfollow">
| <a href="/mail/unfollow" style="text-decoration:none; color:#555555;">Unfollow</a>
</span>
</td></tr>
</table>
</body>
@ -197,8 +186,8 @@
inherit_id="mail.mail_notification_layout" primary="True">
<xpath expr="//t[hasclass('o_signature')]" position="replace">
<t class="o_signature">
<div t-if="email_add_signature and 'user_id' in record and record.user_id and not record.env.user._is_superuser() and not is_html_empty(record.user_id.sudo().signature)"
t-out="record.user_id.sudo().signature" style="font-size: 13px;"/>
<div t-if="email_add_signature and record and 'user_id' in record and record.user_id and not record.env.user._is_superuser() and not is_html_empty(record.user_id.sudo().signature)"
t-out="record.user_id.sudo().signature" class="o_signature" style="font-size: 13px;"/>
</t>
</xpath>
</template>

View file

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<template id="mail_notification_invite" inherit_id="mail.mail_notification_layout" primary="True">
<xpath expr="//td[@t-if='subtitles']" position="before">
<t t-if="not has_button_access">
<t t-set="subtitles" t-value="False" />
</t>
</xpath>
<xpath expr="//div[@t-out='message.body']" position="replace">
<div style="font-size:13px;">
<div class="o-mail-invite-openingMessage">
<t t-out='message.author_id.name'/> (<t t-out='message.author_id.email'/>) added you as a follower of this <t t-out="model_description"/>.
</div>
<br t-if="len(message.body) > 0"/>
<div style="color:grey;">
<t t-out="message.body"/>
</div>
</div>
</xpath>
<xpath expr="//span[@id='mail_unfollow']" position="replace"/>
<xpath expr="//div[@style='margin-top:16px;']/hr" position="before">
<span t-if="show_unfollow" id="mail_unfollow" style="font-size: 13px;">
Not interested by this? <a href="/mail/unfollow" style="text-decoration:none; color:#555555;">Unfollow</a>
</span>
</xpath>
</template>
<template id="mail_notification_multi_invite" inherit_id="mail.mail_notification_invite" primary="True">
<xpath expr="//div[hasclass('o-mail-invite-openingMessage')]" position="replace">
<div>
<t t-out='message.author_id.name'/> (<t t-out='message.author_id.email'/>) added you as a follower of <t t-out="model_description"/> listed below:
</div>
</xpath>
</template>
</data>
</odoo>

View file

@ -12,6 +12,16 @@
<p>Kind Regards</p>
</template>
<!-- Out-Of-Office content layout -->
<template id="message_notification_out_of_office">
<div t-out="out_of_office_message"/>
<div class="o_mail_reply_container">
<div class="o_mail_reply_content">
<blockquote t-out="replied_body"/>
</div>
</div>
</template>
<template id="mail_bounce_catchall">
<div>
<p>Hello <t t-esc="message['email_from']"/>,</p>
@ -29,5 +39,17 @@
<div><t t-out="body"/></div>
<blockquote><t t-out="message['body']"/></blockquote>
</template>
<template id="mail_attachment_links" name="Attachment links">
<div style="max-width: 900px; width: 100%;">
<hr style="background-color:rgb(204,204,204);border:medium none;clear:both;display:block;font-size:0px;min-height:1px;line-height:0; margin: 16px 0px 10px 0px;"/>
<div t-foreach="attachments" t-as="attachment">
<a t-attf-href="{{attachment.get_base_url()}}/web/content/{{attachment.id}}?download=1&amp;access_token={{attachment.access_token}}"
style="font-size: 12px; color: #875A7B; text-decoration:none !important; text-decoration:none; font-weight: 400;">
&amp;#128229; <t t-out="attachment.name"/>
</a>
</div>
</div>
</template>
</data>
</odoo>

View file

@ -4,3 +4,12 @@ UPDATE mail_template
-- deactivate fetchmail server
UPDATE fetchmail_server
SET active = false;
-- reset WEB Push Notification:
-- * delete VAPID/JWT keys
DELETE FROM ir_config_parameter
WHERE key IN ('mail.web_push_vapid_private_key', 'mail.web_push_vapid_public_key', 'mail.sfu_server_key');
-- * delete delayed messages (CRON)
TRUNCATE mail_push;
-- * delete Devices for each partners
DELETE FROM mail_push_device;

View file

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- Template for security update notification (password/login/mail changed, ...) -->
<template id="account_security_alert" name="Alert Security Update">
<div>
Dear <t t-out="user.name or ''">Marc Demo</t>,<br/><br/>
<t t-out="content"/> <br/><br/>
Here are some details about the connection:<br/>
<ul>
<li><span style="font-weight: bold">
Date:</span> <t t-out="format_datetime(event_datetime, dt_format='long')">day, month dd, yyyy - hh:mm:ss (GMT)</t></li>
<li t-if="location_address"><span style="font-weight: bold">
Location:</span> <t t-out="location_address">City, Region, Country</t></li>
<li t-if="useros"><span style="font-weight: bold">
Platform:</span> <t t-out="useros">OS</t></li>
<li t-if="browser"><span style="font-weight: bold">
Browser:</span> <t t-out="browser">Browser</t></li>
<li><span style="font-weight: bold">
IP Address:</span> <t t-out="ip_address">111.222.333.444</t></li>
</ul>
<div t-if="suggest_password_reset" class="o_mail_account_security_suggestions">
If you don't recognize it, you should change your password immediately via this link:<br/>
<div style="margin: 16px 0px 16px 0px">
<a t-attf-href="{{ user.get_base_url() }}/web/reset_password"
style="background-color: #875A7B; padding: 8px 16px 8px 16px; text-decoration: none; color: #fff; border-radius: 5px; font-size:13px">
Reset Password
</a>
</div>
Otherwise, you can safely ignore this email.
</div>
</div>
</template>
</data>
</odoo>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="discuss_channel_tour" model="web_tour.tour">
<field name="name">discuss_channel_tour</field>
<field name="sequence">2000</field>
<field name="url">/odoo</field>
</record>
</odoo>