Initial commit: Core packages

This commit is contained in:
Ernad Husremovic 2025-08-29 15:20:45 +02:00
commit 12c29a983b
9512 changed files with 8379910 additions and 0 deletions

View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="mail.discuss_public_layout">&lt;!DOCTYPE html&gt;
<html class="h-100">
<head>
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
<title t-esc="title or 'Odoo'"/>
<link type="image/x-icon" rel="shortcut icon" t-att-href="x_icon or '/web/static/img/favicon.ico'"/>
<script>
window.odoo = {
__session_info__: <t t-out="json.dumps(session_info)"/>,
csrf_token: "<t t-out="request.csrf_token(None)"/>",
debug: "<t t-out="debug"/>",
};
{
const { user_context, cache_hashes } = odoo.__session_info__;
fetch(`/web/webclient/translations/${cache_hashes.translations}?lang=${user_context.lang}`);
}
</script>
<t t-call-assets="mail.assets_common_discuss_public"/>
<t t-call-assets="mail.assets_discuss_public"/>
<t t-call-assets="mail.assets_discuss_public_test_tours" t-if="'tests' in debug or test_mode_enabled"/>
<t t-out="head or ''"/>
</head>
<body class="d-flex flex-column h-100">
<t t-out="body or ''"/>
</body>
</html>
</template>
<template id="mail.discuss_public_channel_template" name="Discuss Public Channel Template">
<t t-call="mail.discuss_public_layout">
<t t-set="head">
<style>
body {
direction: <t t-out="env['res.lang']._lang_get(lang or env.user.lang).direction or 'ltr'" />;
}
</style>
<script>
odoo.define('mail.discuss_public_channel_template', function() {
return {
data: <t t-out="json.dumps(data)"/>,
};
});
</script>
</t>
</t>
</template>
</odoo>

View file

@ -0,0 +1,113 @@
<?xml version="1.0"?>
<odoo>
<record id="view_email_server_tree" model="ir.ui.view">
<field name="name">fetchmail.server.list</field>
<field name="model">fetchmail.server</field>
<field name="arch" type="xml">
<tree string="POP/IMAP Servers">
<field name="name"/>
<field name="server_type"/>
<field name="user"/>
<field name="date"/>
<field name="state" widget="badge"
decoration-info="state == 'draft'"
decoration-success="state == 'done'"/>
</tree>
</field>
</record>
<record id="view_email_server_form" model="ir.ui.view">
<field name="name">fetchmail.server.form</field>
<field name="model">fetchmail.server</field>
<field name="arch" type="xml">
<form string="Incoming Mail Server">
<header attrs="{'invisible' : [('server_type', '=', 'local')]}">
<button string="Test &amp; Confirm" type="object" name="button_confirm_login" states="draft"/>
<button string="Fetch Now" type="object" name="fetch_mail" states="done"/>
<button string="Reset Confirmation" type="object" name="set_draft" states="done"/>
<field name="state" widget="statusbar"/>
</header>
<sheet>
<field name="active" invisible="1"/>
<widget name="web_ribbon" title="Archived" bg_color="bg-danger"
attrs="{'invisible': [('active', '=', True)]}"/>
<group>
<group>
<field name="name"/>
<field name="server_type" widget="radio" attrs="{'readonly': [('state', '=', 'done')]}"/>
</group>
<group>
<field name="date" attrs="{'invisible': [('date', '=', False)]}"/>
<div class="text-muted fst-italic" colspan="8" role="alert"
attrs="{'invisible': [('server_type_info', '=', False)]}">
<field name="server_type_info"/>
</div>
</group>
</group>
<notebook>
<page string="Server &amp; Login" name="server_login_details">
<group>
<group attrs="{'invisible' : [('server_type', '=', 'local')]}" string="Server Information">
<field name="server" attrs="{'required' : [('server_type', '!=', 'local')]}" />
<field name="port"
required="1"
attrs="{'required' : [('server_type', '!=', 'local')]}"
options="{'format': false}" />
<field name="is_ssl"/>
</group>
<group attrs="{'invisible' : [('server_type', '=', 'local')]}" string="Login Information">
<field name="user" attrs="{'required' : [('server_type', '!=', 'local')]}"/>
<field name="password" password="True"
attrs="{'required' : [('server_type', 'in', ('imap', 'pop'))], 'invisible' : [('server_type', 'not in', ('imap', 'pop'))]}"/>
</group>
<group string="Actions to Perform on Incoming Mails">
<field name="object_id"/>
</group>
<group attrs="{'invisible' : [('server_type', '!=', 'local')]}" string="Configuration">
<field name="configuration"/>
<field name="script" widget="url"/>
</group>
</group>
</page>
<page string="Advanced" name="advanced_options" groups="base.group_no_one">
<group>
<group string="Advanced Options">
<field name="priority"/>
<field name="attach"/>
<field name="original"/>
</group>
</group>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="view_email_server_search" model="ir.ui.view">
<field name="name">fetchmail.server.search</field>
<field name="model">fetchmail.server</field>
<field name="arch" type="xml">
<search string="Search Incoming Mail Servers">
<field name="name" string="Incoming Mail Server"/>
<field name="user"/>
<filter string="IMAP" name="imap" domain="[('server_type', '=', 'imap')]" help="Server type IMAP."/>
<filter string="POP" name="pop" domain="[('server_type', '=', 'pop')]" help="Server type POP."/>
<separator/>
<filter string="SSL" name="ssl" domain="[('is_ssl', '=', True)]" help="If SSL required."/>
<separator/>
<filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
</search>
</field>
</record>
<record id="action_email_server_tree" model="ir.actions.act_window">
<field name="name">Incoming Mail Servers</field>
<field name="res_model">fetchmail.server</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="view_email_server_tree"/>
<field name="search_view_id" ref="view_email_server_search"/>
</record>
</odoo>

View file

@ -0,0 +1,59 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record model="ir.ui.view" id="view_server_action_form_template">
<field name="name">ir.actions.server.form</field>
<field name="model">ir.actions.server</field>
<field name="inherit_id" ref="base.view_server_action_form"/>
<field name="arch" type="xml">
<xpath expr="//page[@name='page_object']" position="after">
<page string="Activity" name="next_activity" autofocus="autofocus" attrs="{'invisible': [('state', '!=', 'next_activity')]}">
<group>
<group>
<field name="activity_type_id" options="{'no_create': True, 'no_open': True}"
attrs="{'required': [('state', '=', 'next_activity')]}"/>
<field name="activity_summary" placeholder="e.g. Discuss proposal"/>
</group>
<group>
<label for="activity_date_deadline_range"/>
<div class="o_row">
<field name="activity_date_deadline_range"/>
<field name="activity_date_deadline_range_type" attrs="{
'required': [('state', '=', 'next_activity'), ('activity_date_deadline_range', '>', 0)]
}"/>
</div>
<field name="activity_user_type" attrs="{
'required': [('state', '=', 'next_activity')]
}"/>
<field name="activity_user_field_name" attrs="{
'invisible': [('activity_user_type', '=', 'specific')],
'required': [('state', '=', 'next_activity'), ('activity_user_type', '=', 'generic')]
}"/>
<field name="activity_user_id" attrs="{
'invisible': [('activity_user_type', '=', 'generic')],
'required': [('state', '=', 'next_activity'), ('activity_user_type', '=', 'specific')]
}"/>
</group>
</group>
<field name="activity_note" class="oe-bordered-editor" placeholder="Log a note..."/>
</page>
</xpath>
<xpath expr="//field[@name='link_field_id']" position="after">
<field name="partner_ids" widget="many2many_tags"
attrs="{'invisible': [('state', '!=', 'followers')]}"/>
<field name="template_id"
attrs="{'invisible': [('state', '!=', 'mail_post')],
'required': [('state', '=', 'mail_post')]}"
context="{'default_model': model_name,
'default_use_default_to': True}"/>
<field name="mail_post_method"
attrs="{'invisible': [('state', '!=', 'mail_post')],
'required': [('state', '=', 'mail_post')]}"/>
<field name="mail_post_autofollow" invisible="1"/>
</xpath>
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="model_form_view" model="ir.ui.view">
<field name="model">ir.model</field>
<field name="inherit_id" ref="base.view_model_form"/>
<field name="arch" type="xml">
<field name="transient" position="after">
<field name="is_mail_thread" attrs="{'readonly': [('state','!=', 'manual')]}" groups="base.group_no_one"/>
<field name="is_mail_activity" attrs="{'readonly': [('state','!=', 'manual')]}" groups="base.group_no_one"/>
<field name="is_mail_blacklist" attrs="{'readonly': [('state','!=', 'manual')]}" groups="base.group_no_one"/>
</field>
<xpath expr="//field[@name='field_id']//field[@name='copied']" position="after">
<field name="state" invisible="1"/>
<field name="tracking" attrs="{'readonly': [('state','!=', 'manual')]}"/>
</xpath>
</field>
</record>
<record id="model_search_view" model="ir.ui.view">
<field name="model">ir.model</field>
<field name="inherit_id" ref="base.view_model_search"/>
<field name="arch" type="xml">
<field name="model" position="after">
<filter string="Mail Thread" name="is_mail_thread" domain="[('is_mail_thread', '=', True)]"/>
<filter string="Mail Activity" name="is_mail_activity" domain="[('is_mail_activity', '=', True)]"/>
<filter string="Mail Blacklist" name="is_mail_blacklist" domain="[('is_mail_blacklist', '=', True)]"/>
</field>
</field>
</record>
<record id="field_form_view" model="ir.ui.view">
<field name="model">ir.model.fields</field>
<field name="inherit_id" ref="base.view_model_fields_form"/>
<field name="arch" type="xml">
<field name="copied" position="after">
<field name="state" invisible="1"/>
<field name="tracking" attrs="{'invisible': [('ttype', '=', 'binary')], 'readonly': [('state','!=', 'manual')]}"/>
</field>
</field>
</record>
</odoo>

View file

@ -0,0 +1,238 @@
<?xml version="1.0"?>
<odoo>
<record id="mail_activity_type_view_form" model="ir.ui.view">
<field name="name">mail.activity.type.view.form</field>
<field name="model">mail.activity.type</field>
<field name="arch" type="xml">
<form string="Activities">
<sheet>
<widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
<div class="oe_title">
<label for="name" class="oe_edit_only"/>
<h1><field name="name" placeholder="e.g. Schedule a meeting"/></h1>
</div>
<group>
<group name="activity_details" string="Activity Settings">
<field name="active" invisible="1"/>
<field name="category"/>
<field name="default_user_id" options="{'no_create': True}" domain="[('share', '=', False)]"/>
<field name="res_model" groups="base.group_no_one"/>
<field name="res_model" invisible="1"/>
<field name="res_model_change" invisible="1"/>
<field name="initial_res_model" invisible="1"/>
<field name="summary" placeholder="e.g. &quot;Discuss proposal&quot;"/>
<field name="icon" groups="base.group_no_one"/>
<field name="decoration_type" groups="base.group_no_one"/>
</group>
<group name="activity_planning" string="Next Activity">
<field name="chaining_type" attrs="{'invisible': [('category', '=', 'upload_file')]}"/>
<field name="triggered_next_type_id" options="{'no_open': True}" context="{'default_res_model': res_model}"
attrs="{'required': ['&amp;', ('chaining_type', '=', 'trigger'), ('category', '!=', 'upload_file')],
'invisible': ['&amp;', ('chaining_type', '=', 'suggest'), ('category', '!=', 'upload_file')]}"/>
<field name="suggested_next_type_ids" widget="many2many_tags" context="{'default_res_model': res_model}"
attrs="{'invisible': ['|', ('chaining_type', '=', 'trigger'), ('category', '=', 'upload_file')]}"/>
<field name="mail_template_ids" widget="many2many_tags"
domain="[('model_id.model', '=', res_model)]"
attrs="{'invisible': [('res_model', '=', False)]}"
context="{'default_model': res_model}"/>
<label for="delay_count"/>
<div>
<field class="oe_inline pe-1 o_input_3ch" name="delay_count"/>
<field class="oe_inline ps-1 pe-2" name="delay_unit"/>
<field class="oe_inline" name="delay_from"/>
</div>
</group>
</group>
<label for="default_note" class="fw-bold"/>
<field nolabel="1" name="default_note" placeholder="e.g. &quot;Go over the offer and discuss details&quot;" class="oe-bordered-editor"/>
<p class="alert alert-info" role="alert" attrs="{'invisible': [('res_model_change', '=', False)]}">Modifying the model can have an impact on existing activities using this activity type, be careful.</p>
</sheet>
</form>
</field>
</record>
<record id="mail_activity_type_view_search" model="ir.ui.view">
<field name="name">mail.activity.type.search</field>
<field name="model">mail.activity.type</field>
<field name="arch" type="xml">
<search string="Activities">
<field name="name"/>
<filter string="Archived" domain="[('active', '=', False)]" name="archived"/>
</search>
</field>
</record>
<record id="mail_activity_type_view_tree" model="ir.ui.view">
<field name="name">mail.activity.type.view.tree</field>
<field name="model">mail.activity.type</field>
<field name="arch" type="xml">
<tree string="Activities" sample="1">
<field name="sequence" widget="handle"/>
<field name="name"/>
<field name="summary"/>
<field name="delay_label" string="Planned in" class="text-end"/>
<field name="delay_from" string="Type"/>
<field name="res_model" groups="base.group_no_one"/>
<field name="icon" groups="base.group_no_one"/>
</tree>
</field>
</record>
<record id="mail_activity_type_action" model="ir.actions.act_window">
<field name="name">Activity Types</field>
<field name="res_model">mail.activity.type</field>
<field name="view_mode">tree,form</field>
</record>
<record id="mail_activity_action" model="ir.actions.act_window">
<field name="name">Activities</field>
<field name="res_model">mail.activity</field>
<field name="view_mode">tree,form</field>
</record>
<record id="mail_activity_view_form_popup" model="ir.ui.view">
<field name="name">mail.activity.view.form.popup</field>
<field name="model">mail.activity</field>
<field name="priority">20</field>
<field name="arch" type="xml">
<form string="Log an Activity" create="false">
<sheet string="Activity">
<div class="oe_button_box" name="button_box" invisible="1">
<button name="action_open_document" string="Open Document"
type="object" class="oe_link" icon="fa-file-text-o"
attrs="{'invisible': ['|', ('res_model', '=', False), ('res_id', '=', 0)]}"/>
</div>
<group invisible="1">
<field name="activity_category" invisible="1" />
<field name="res_model" invisible="1"/>
<field name="res_model_id" invisible="1"/>
<field name="res_id" invisible="1"/>
<field name="chaining_type" invisible="1"/>
<field name="previous_activity_type_id"/>
<field name="has_recommended_activities"/>
</group>
<group attrs="{'invisible': [('has_recommended_activities','=',False)]}">
<field name="recommended_activity_type_id" widget="selection_badge"
domain="[('previous_type_ids', '=', previous_activity_type_id)]"
string="Recommended Activities"/>
</group>
<group>
<group>
<field name="activity_type_id" required="1" options="{'no_create': True, 'no_open': True}"/>
<field name="summary" placeholder="e.g. Discuss proposal"/>
</group>
<group>
<field name="date_deadline"/>
<field name="user_id"/>
</group>
</group>
<field name="note" class="oe-bordered-editor" placeholder="Log a note..."/>
<footer>
<field name="id" invisible="1"/>
<button id="mail_activity_schedule" string="Schedule" name="action_close_dialog" type="object" class="btn-primary"
attrs="{'invisible': [('id', '!=', False)]}" data-hotkey="q"/>
<button id="mail_activity_save" string="Save" name="action_close_dialog" type="object" class="btn-primary"
attrs="{'invisible': [('id', '=', False)]}" data-hotkey="q"/>
<button attrs="{'invisible': [('chaining_type', '=', 'trigger')]}" string="Mark as Done" name="action_done"
type="object" class="btn-secondary" data-hotkey="w"
context="{'mail_activity_quick_update': True}"/>
<button attrs="{'invisible': [('chaining_type', '=', 'trigger')]}" string="Done &amp; Schedule Next" name="action_done_schedule_next"
type="object" class="btn-secondary" data-hotkey="x"
context="{'mail_activity_quick_update': True}"/>
<button attrs="{'invisible': [('chaining_type', '=', 'suggest')]}" string="Done &amp; Launch Next" name="action_done_schedule_next"
type="object" class="btn-secondary" data-hotkey="x"
context="{'mail_activity_quick_update': True}"/>
<button string="Discard" class="btn-secondary" special="cancel" data-hotkey="z" />
</footer>
</sheet>
</form>
</field>
</record>
<record id="mail_activity_view_form" model="ir.ui.view">
<field name="name">mail.activity.view.form</field>
<field name="model">mail.activity</field>
<field name="priority">21</field>
<field name="mode">primary</field>
<field name="inherit_id" ref="mail.mail_activity_view_form_popup"/>
<field name="arch" type="xml">
<field name="activity_type_id" position="before">
<field name="res_name" readonly="1" string="Document"/>
</field>
<footer position="replace"/>
<xpath expr="//div[hasclass('oe_button_box')]" position="attributes">
<attribute name="invisible">0</attribute>
</xpath>
</field>
</record>
<record id="mail_activity_view_search" model="ir.ui.view">
<field name="name">mail.activity.view.search</field>
<field name="model">mail.activity</field>
<field name="arch" type="xml">
<search string="Activity">
<field name="res_model"/>
<field name="summary"/>
<field name="activity_type_id"/>
<filter invisible="1" string="Late Activities" name="activities_overdue"
domain="[('date_deadline', '&lt;', context_today().strftime('%Y-%m-%d'))]"
help="Show all records which has next action date is before today"/>
<filter invisible="1" string="Today Activities" name="activities_today"
domain="[('date_deadline', '=', context_today().strftime('%Y-%m-%d'))]"/>
<filter invisible="1" string="Future Activities" name="activities_upcoming_all"
domain="[('date_deadline', '&gt;', context_today().strftime('%Y-%m-%d'))
]"/>
<group expand="0" string="Group By">
<filter string="Deadline" name="date_deadline" context="{'group_by': 'date_deadline'}"/>
<filter string="Created By" name="createdby" context="{'group_by': 'create_uid'}"/>
<filter string="Activity Type" name="activittype" context="{'group_by': 'activity_type_id'}"/>
</group>
</search>
</field>
</record>
<record id="mail_activity_view_tree" model="ir.ui.view">
<field name="name">mail.activity.view.tree</field>
<field name="model">mail.activity</field>
<field name="arch" type="xml">
<tree string="Next Activities"
decoration-danger="date_deadline &lt; current_date"
decoration-success="date_deadline == current_date"
default_order="date_deadline" create="false">
<field name="res_name"/>
<field name="activity_type_id"/>
<field name="summary"/>
<field name="date_deadline"/>
</tree>
</field>
</record>
<record id="mail_activity_action_view_tree" model="ir.actions.act_window.view">
<field name="sequence" eval="1"/>
<field name="view_mode">tree</field>
<field name="act_window_id" ref="mail.mail_activity_action"/>
</record>
<record id="mail_activity_action_view_form" model="ir.actions.act_window.view">
<field name="sequence" eval="2"/>
<field name="view_mode">form</field>
<field name="view_id" ref="mail.mail_activity_view_form"/>
<field name="act_window_id" ref="mail.mail_activity_action"/>
</record>
<record id="mail_activity_view_calendar" model="ir.ui.view">
<field name="name">mail.activity.view.calendar</field>
<field name="model">mail.activity</field>
<field name="priority" eval="2"/>
<field name="arch" type="xml">
<calendar string="Activity" date_start="date_deadline" color="activity_type_id">
<field name="user_id" avatar_field="avatar_128"/>
<field name="res_name"/>
<field name="date_deadline"/>
<field name="summary"/>
<field name="activity_type_id" filters="1" invisible="1"/>
</calendar>
</field>
</record>
</odoo>

View file

@ -0,0 +1,83 @@
<?xml version="1.0"?>
<odoo>
<data>
<!-- Alias Form View -->
<record model="ir.ui.view" id="view_mail_alias_form">
<field name="name">mail.alias.form</field>
<field name="model">mail.alias</field>
<field name="arch" type="xml">
<form string="Alias">
<sheet>
<div class="oe_button_box" name="button_box">
<button name="open_document" string="Open Document"
type="object" class="oe_link"
attrs="{'invisible': ['|', ('alias_model_id', '=', False), ('alias_force_thread_id', '=', 0)]}"/>
<button name="open_parent_document" string="Open Parent Document"
type="object" class="oe_link" icon="fa-sitemap"
attrs="{'invisible': ['|', ('alias_parent_model_id', '=', False), ('alias_parent_thread_id', '=', 0)]}"/>
</div>
<h2 dir="ltr"><field name="alias_name" class="oe_inline"/>@<field name="alias_domain" class="oe_inline"/></h2>
<group>
<field name="alias_model_id"/>
<field name="alias_force_thread_id"/>
<field name="alias_defaults"/>
<field name="alias_contact"/>
<field name="alias_user_id"/>
<field name="alias_parent_model_id"/>
<field name="alias_parent_thread_id"/>
</group>
<label for="alias_bounced_content" attrs="{'invisible':[('alias_contact', '=', 'everyone')]}"/>
<field name="alias_bounced_content" attrs="{'invisible':[('alias_contact', '=', 'everyone')]}"/>
</sheet>
</form>
</field>
</record>
<!-- Alias List View -->
<record model="ir.ui.view" id="view_mail_alias_tree">
<field name="name">mail.alias.tree</field>
<field name="model">mail.alias</field>
<field name="arch" type="xml">
<tree string="Alias">
<field name="alias_name"/>
<field name="alias_model_id"/>
<field name="alias_user_id"/>
<field name="alias_defaults"/>
<field name="alias_contact"/>
</tree>
</field>
</record>
<!-- Alias Search View -->
<record model="ir.ui.view" id="view_mail_alias_search">
<field name="name">mail.alias.search</field>
<field name="model">mail.alias</field>
<field name="arch" type="xml">
<search string="Search Alias">
<field name="alias_name"/>
<field name="alias_model_id"/>
<field name="alias_force_thread_id"/>
<field name="alias_parent_model_id"/>
<field name="alias_parent_thread_id"/>
<separator/>
<filter string="Active" name="active" domain="[('alias_name', '!=', False)]"/>
<group expand="0" string="Group By">
<filter string="User" name="User" context="{'group_by':'alias_user_id'}"/>
<filter string="Model" name="Model" context="{'group_by':'alias_model_id'}"/>
</group>
</search>
</field>
</record>
<record id="action_view_mail_alias" model="ir.actions.act_window">
<field name="name">Aliases</field>
<field name="res_model">mail.alias</field>
<field name="context">{
'search_default_active': True,
}
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,70 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<record id="mail_blacklist_view_tree" model="ir.ui.view">
<field name="name">mail.blacklist.view.tree</field>
<field name="model">mail.blacklist</field>
<field name="arch" type="xml">
<tree string="Email Blacklist">
<field name="create_date" string="Blacklist Date"/>
<field name="email"/>
</tree>
</field>
</record>
<record id="mail_blacklist_view_form" model="ir.ui.view">
<field name="name">mail.blacklist.view.form</field>
<field name="model">mail.blacklist</field>
<field name="arch" type="xml">
<form string="Add Email Blacklist" duplicate="false">
<header>
<button name="mail_action_blacklist_remove" string="Unblacklist"
type="object" class="oe_highlight" context="{'default_email': email}"
attrs="{'invisible': ['|', ('active', '=', False), ('email', '=', False)]}"/>
<button name="action_add" string="Blacklist"
type="object" class="oe_highlight"
attrs="{'invisible': ['|', ('active', '=', True), ('email', '=', False)]}"/>
</header>
<sheet>
<widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
<group>
<group>
<field name="email"/>
<field name="active" readonly="1"/>
<br/>
</group>
</group>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" groups="base.group_user"/>
<field name="message_ids"/>
</div>
</form>
</field>
</record>
<record id="mail_blacklist_view_search" model="ir.ui.view">
<field name="name">mail.blacklist.view.search</field>
<field name="model">mail.blacklist</field>
<field name="arch" type="xml">
<search>
<field name="email"/>
<filter string="Archived" name="inactive" domain="[('active','=',False)]"/>
</search>
</field>
</record>
<record id="mail_blacklist_action" model="ir.actions.act_window">
<field name="name">Blacklisted Email Addresses</field>
<field name="res_model">mail.blacklist</field>
<field name="view_id" ref="mail_blacklist_view_tree"/>
<field name="search_view_id" ref="mail_blacklist_view_search"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Add an email address to the blacklist
</p><p>
Email addresses that are blacklisted won't receive Email mailings anymore.
</p>
</field>
</record>
</odoo>

View file

@ -0,0 +1,49 @@
<?xml version="1.0"?>
<odoo><data>
<!-- mail.channel.member -->
<record id="mail_channel_member_view_tree" model="ir.ui.view">
<field name="name">mail.channel.member.tree</field>
<field name="model">mail.channel.member</field>
<field name="priority">10</field>
<field name="arch" type="xml">
<tree string="Channels">
<field name="display_name"/>
<field name="channel_id"/>
<field name="seen_message_id"/>
</tree>
</field>
</record>
<record id="mail_channel_member_view_form" model="ir.ui.view">
<field name="name">mail.channel.member.form</field>
<field name="model">mail.channel.member</field>
<field name="arch" type="xml">
<form string="Channel">
<sheet>
<group>
<field name="partner_id"/>
<field name="guest_id"/>
<field name="channel_id"/>
<field name="custom_channel_name"/>
<field name="fetched_message_id"/>
<field name="seen_message_id"/>
<field name="message_unread_counter"/>
<field name="fold_state"/>
<field name="is_minimized"/>
<field name="is_pinned"/>
<field name="last_interest_dt"/>
<field name="last_seen_dt"/>
<field name="rtc_inviting_session_id"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="mail_channel_member_action" model="ir.actions.act_window">
<field name="name">Channels/Member</field>
<field name="res_model">mail.channel.member</field>
<field name="view_mode">tree,form</field>
</record>
</data></odoo>

View file

@ -0,0 +1,65 @@
<?xml version="1.0"?>
<odoo>
<record id="mail_channel_rtc_session_view_search" model="ir.ui.view">
<field name="name">mail.channel.rtc.session.search</field>
<field name="model">mail.channel.rtc.session</field>
<field name="arch" type="xml">
<search string="Search RTC session">
<field name="channel_member_id"/>
<filter name="group_by_channel" string="Channel" domain="[]" context="{'group_by':'channel_id'}"/>
</search>
</field>
</record>
<record id="mail_channel_rtc_session_view_tree" model="ir.ui.view">
<field name="name">mail.channel.rtc.session.tree</field>
<field name="model">mail.channel.rtc.session</field>
<field name="arch" type="xml">
<tree string="RTC Session">
<header>
<button name="action_disconnect" type="object" string="Disconnect"/>
</header>
<field name="id"/>
<field name="channel_member_id"/>
<field name="channel_id"/>
<field name="write_date"/>
</tree>
</field>
</record>
<record id="mail_channel_rtc_session_view_form" model="ir.ui.view">
<field name="name">mail.channel.rtc.session.form</field>
<field name="model">mail.channel.rtc.session</field>
<field name="arch" type="xml">
<form string="RTC Session">
<sheet>
<div class="oe_title">
<h1><field name="channel_member_id"/></h1>
</div>
<group>
<group string="Identity">
<field name="channel_id"/>
<field name="partner_id"/>
<field name="guest_id"/>
</group>
<group string="State">
<field name="is_screen_sharing_on"/>
<field name="is_camera_on"/>
<field name="is_muted"/>
<field name="is_deaf"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="mail_channel_rtc_session_action" model="ir.actions.act_window">
<field name="name">RTC sessions</field>
<field name="res_model">mail.channel.rtc.session</field>
<field name="context">{'search_default_group_by_channel': True}</field>
<field name="view_mode">tree,form</field>
</record>
</odoo>

View file

@ -0,0 +1,123 @@
<?xml version="1.0"?>
<odoo>
<data>
<!-- mail.channel -->
<record id="mail_channel_view_kanban" model="ir.ui.view">
<field name="name">mail.channel.kanban</field>
<field name="model">mail.channel</field>
<field name="priority" eval="10"/>
<field name="arch" type="xml">
<kanban>
<field name="id"/>
<field name="description"/>
<field name="is_member"/>
<field name="group_ids"/>
<templates>
<t t-name="kanban-description">
<div class="oe_group_description" t-if="record.description.raw_value">
<field name="description"/>
</div>
</t>
<t t-name="kanban-box">
<div class="oe_module_vignette oe_kanban_global_click d-flex align-items-center">
<img t-att-src="kanban_image('mail.channel', 'avatar_128', record.id.raw_value)" class="oe_module_icon" alt="Channel"/>
<div class="oe_module_desc">
<h4 class="o_kanban_record_title">#<field name="name"/></h4>
<p class="oe_module_name">
<field name="description"/>
</p>
<button type="object" attrs="{'invisible':['|', ('is_member','=',True), ('group_ids', '!=', [])]}" class="btn btn-primary float-end" name="channel_join">Join</button>
<button type="object" attrs="{'invisible':['|', ('is_member','=',False), ('group_ids', '!=', [])]}" class="btn btn-secondary float-end" name="action_unfollow">Leave</button>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id="mail_channel_view_form" model="ir.ui.view">
<field name="name">mail.channel.form</field>
<field name="model">mail.channel</field>
<field name="priority" eval="10"/>
<field name="arch" type="xml">
<form string="Mail Channel Form">
<sheet>
<div class="oe_button_box" name="button_box"/>
<field name="avatar_128" invisible="1"/>
<field name="image_128" widget="image" class="oe_avatar" options="{'size': [90, 90], 'preview_image':'avatar_128'}"/>
<div class="oe_title">
<label for="name" string="Group Name"/>
<h1>
#<field name="name" class="oe_inline" default_focus="1" placeholder="e.g. support" readonly="0"/>
</h1>
</div>
<group class="o_label_nowrap">
<field name="active" invisible="1"/>
<field name="description" placeholder="Topics discussed in this group..."/>
</group>
<notebook>
<page string="Privacy" name="privacy">
<group class="o_label_nowrap">
<field name="group_public_id"
attrs="{'invisible': [('channel_type', '!=', 'channel')]}"
/>
<field name="group_ids" widget="many2many_tags"
attrs="{'invisible': [('channel_type', '!=', 'channel')]}"
string="Auto Subscribe Groups"/>
</group>
</page>
<page string="Members" name="members">
<field name="channel_type" invisible="1"/>
<field name="channel_member_ids" mode="tree" context="{'active_test': False}" attrs="{'readonly': [('channel_type', '=', 'chat')]}">
<tree string="Members" editable="bottom">
<field name="partner_id" required="1" attrs="{'readonly': [('id', '!=', False)]}"/>
<field name="partner_email" readonly="1"/>
</tree>
</field>
</page>
<page string="Integrations" invisible="1" name="mail_channel_integrations"></page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="mail_channel_view_tree" model="ir.ui.view">
<field name="name">mail.channel.tree</field>
<field name="model">mail.channel</field>
<field name="priority" eval="10"/>
<field name="arch" type="xml">
<tree string="Groups">
<field name="name"/>
</tree>
</field>
</record>
<record id="mail_channel_view_search" model="ir.ui.view">
<field name="name">mail.channel.search</field>
<field name="model">mail.channel</field>
<field name="priority" eval="10"/>
<field name="arch" type="xml">
<search string="Search Groups">
<field name="name"/>
<filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
</search>
</field>
</record>
<record id="mail_channel_action_view" model="ir.actions.act_window">
<field name="name">Join a group</field>
<field name="res_model">mail.channel</field>
<field name="view_mode">kanban,tree,form</field>
<field name="search_view_id" ref="mail_channel_view_search"/>
</record>
<record id="action_discuss" model="ir.actions.client">
<field name="name">Discuss</field>
<field name="tag">mail.action_discuss</field>
<field name="params" eval="&quot;{ 'default_active_id': 'mail.box_inbox' }&quot;"/>
</record>
</data>
</odoo>

View file

@ -0,0 +1,47 @@
<?xml version="1.0"?>
<odoo>
<data>
<!-- FOLLOWERS !-->
<record model="ir.ui.view" id="view_followers_tree">
<field name="name">mail.followers.tree</field>
<field name="model">mail.followers</field>
<field name="priority">10</field>
<field name="arch" type="xml">
<tree string="Followers">
<field name="res_model"/>
<field name="res_id"/>
<field name="partner_id"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="view_mail_subscription_form">
<field name="name">mail.followers.form</field>
<field name="model">mail.followers</field>
<field name="arch" type="xml">
<form string="Followers Form">
<sheet>
<group>
<group>
<field name="res_model"/>
<field name="partner_id"/>
</group>
<group>
<field name="res_id"/>
<field name="subtype_ids" widget="many2many_tags"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="action_view_followers" model="ir.actions.act_window">
<field name="name">Followers</field>
<field name="res_model">mail.followers</field>
<field name="view_mode">tree,form</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<record id="mail_gateway_allowed_view_tree" model="ir.ui.view">
<field name="name">mail.gateway.allowed.view.tree</field>
<field name="model">mail.gateway.allowed</field>
<field name="arch" type="xml">
<tree string="Mail Gateway Allowed" editable="top">
<field name="email"/>
</tree>
</field>
</record>
<record id="mail_gateway_allowed_view_search" model="ir.ui.view">
<field name="name">mail.gateway.allowed.view.search</field>
<field name="model">mail.gateway.allowed</field>
<field name="arch" type="xml">
<search>
<field name="email"/>
</search>
</field>
</record>
<record id="mail_gateway_allowed_action" model="ir.actions.act_window">
<field name="name">Mail Gateway Allowed</field>
<field name="res_model">mail.gateway.allowed</field>
<field name="view_mode">tree</field>
</record>
</odoo>

View file

@ -0,0 +1,25 @@
<?xml version="1.0"?>
<odoo>
<record id="mail_guest_view_tree" model="ir.ui.view">
<field name="name">mail.guest.tree</field>
<field name="model">mail.guest</field>
<field name="priority">10</field>
<field name="arch" type="xml">
<tree string="Guests">
<field name="id"/>
<field name="name"/>
<field name="country_id"/>
<field name="lang"/>
<field name="timezone"/>
</tree>
</field>
</record>
<record id="mail_guest_action" model="ir.actions.act_window">
<field name="name">Guests</field>
<field name="res_model">mail.guest</field>
<field name="view_mode">tree,form</field>
</record>
</odoo>

View file

@ -0,0 +1,43 @@
<?xml version="1.0"?>
<odoo>
<record id="action_ice_servers" model="ir.actions.act_window">
<field name="name">ICE servers</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">mail.ice.server</field>
<field name="view_mode">tree,form</field>
</record>
<record model="ir.ui.view" id="view_ice_server_tree">
<field name="name">mail.ice.server.tree</field>
<field name="model">mail.ice.server</field>
<field name="arch" type="xml">
<tree editable="bottom">
<field colspan="1" name="server_type"/>
<field name="uri"/>
<field name="username"/>
<field name="credential"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="view_ice_server_form">
<field name="name">mail.ice.server.form</field>
<field name="model">mail.ice.server</field>
<field name="arch" type="xml">
<form string="ICE server">
<sheet>
<group>
<label for="uri"/>
<div class="oe_inline" name="URI" style="display: inline;">
<field name="server_type" class="oe_inline"/><field name="uri" class="oe_inline"/>
</div>
</group>
<group>
<field name="username"/>
<field name="credential"/>
</group>
</sheet>
</form>
</field>
</record>
</odoo>

View file

@ -0,0 +1,25 @@
<?xml version="1.0"?>
<odoo>
<record id="mail_link_preview_view_tree" model="ir.ui.view">
<field name="name">mail.link.preview.tree</field>
<field name="model">mail.link.preview</field>
<field name="priority">10</field>
<field name="arch" type="xml">
<tree string="Link Previews">
<field name="id"/>
<field name="source_url"/>
<field name="og_title"/>
<field name="og_type"/>
<field name="image_mimetype"/>
</tree>
</field>
</record>
<record id="mail_link_preview_action" model="ir.actions.act_window">
<field name="name">Link Previews</field>
<field name="res_model">mail.link.preview</field>
<field name="view_mode">tree,form</field>
</record>
</odoo>

View file

@ -0,0 +1,160 @@
<?xml version="1.0"?>
<odoo>
<data>
<record model="ir.ui.view" id="view_mail_form">
<field name="name">mail.mail.form</field>
<field name="model">mail.mail</field>
<field name="arch" type="xml">
<form string="Email message" duplicate="0">
<header>
<field name="message_type" invisible="1"/>
<button name="send" string="Send Now" type="object" class="oe_highlight" attrs="{'invisible': ['|', ('state', '!=', 'outgoing'), ('message_type', '=', 'user_notification')]}"/>
<button name="mark_outgoing" string="Retry" type="object" states='exception,cancel'/>
<button name="cancel" string="Cancel" type="object" states='outgoing'/>
<field name="state" widget="statusbar" statusbar_visible="outgoing,sent,received,exception,cancel"/>
</header>
<sheet>
<field name="model" invisible="1"/>
<field name="res_id" invisible="1"/>
<div class="oe_button_box" name="button_box">
<button name="action_open_document" string="Open Document"
type="object" class="oe_link" icon="fa-file-text-o"
attrs="{'invisible': ['|', ('model', '=', False), ('res_id', '=', 0)]}"/>
</div>
<field name="mail_message_id_int" required="0" invisible="1"/>
<label for="subject" class="oe_edit_only"/>
<h2><field name="subject"/></h2>
<div style="vertical-align: top;">
by <field name="author_id" class="oe_inline" string="User"/> on <field name="date" readonly="1" class="oe_inline"/>
<button name="%(action_email_compose_message_wizard)d" string="Reply" type="action" icon="fa-reply text-warning"
context="{'default_composition_mode':'comment', 'default_parent_id': mail_message_id_int}" states='received,sent,exception,cancel'/>
</div>
<group>
<field name="email_from"/>
<field name="email_to"/>
<field name="recipient_ids" widget="many2many_tags"
domain="[('type', '!=', 'private'), ('active', '=', True)]"/>
<field name="email_cc"/>
<field name="reply_to"/>
<field name="scheduled_date" placeholder="YYYY-MM-DD HH:MM:SS"/>
</group>
<notebook>
<page string="Body" name="body">
<field name="body_content"/>
<field name="body_html" attrs="{'invisible': 1}"/>
</page>
<page string="Advanced" name="advanced" groups="base.group_no_one">
<group>
<group string="Status">
<field name="auto_delete"
attrs="{'invisible': [('state', '!=', 'outgoing'), ('state', '!=', 'exception')]}"/>
<field name="to_delete" invisible="1"/>
<field name="is_notification"/>
<field name="message_type"/>
<field name="mail_server_id"/>
<field name="model"/>
<field name="res_id"/>
</group>
<group string="Headers">
<field name="message_id"/>
<field name="references"/>
<field name="fetchmail_server_id"/>
<field name="headers"/>
</group>
</group>
</page>
<page string="Attachments" name="attachments">
<div class="alert alert-warning" role="alert"
attrs="{'invisible': [('restricted_attachment_count', '=', 0)]}">
You do not have access to <field name="restricted_attachment_count"/>
attachment(s) of this email.
</div>
<field name="unrestricted_attachment_ids"
domain="[('res_field','=', False)]"/>
</page>
<page string="Failure Reason" name="failure_reason" attrs="{'invisible': [('state', '!=', 'exception')]}">
<field name="failure_reason"/>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record model="ir.ui.view" id="view_mail_tree">
<field name="name">mail.mail.tree</field>
<field name="model">mail.mail</field>
<field name="arch" type="xml">
<tree string="Emails">
<header>
<button name="action_retry" string="Retry" type="object"/>
</header>
<field name="date"/>
<field name="subject"/>
<field name="author_id" string="User"/>
<field name="message_id" invisible="1"/>
<field name="recipient_ids" invisible="1"/>
<field name="model" invisible="1"/>
<field name="res_id" invisible="1"/>
<field name="email_from" invisible="1"/>
<field name="message_type" invisible="1"/>
<field name="state" widget="badge" decoration-muted="state in ('sent', 'cancel')"
decoration-info="state=='outgoing'" decoration-danger="state=='exception'"/>
<field name="to_delete" invisible="1"/>
<button name="send" string="Send Now" type="object" icon="fa-paper-plane" attrs="{'invisible': ['|', ('state', '!=', 'outgoing'), ('message_type', '=', 'user_notification')]}"/>
<button name="mark_outgoing" string="Retry" type="object" icon="fa-repeat" states='exception,cancel'/>
<button name="cancel" string="Cancel Email" type="object" icon="fa-times-circle" states='outgoing'/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="view_mail_search">
<field name="name">mail.mail.search</field>
<field name="model">mail.mail</field>
<field name="arch" type="xml">
<search string="Email Search">
<field name="email_from" filter_domain="['|', '|',('email_from','ilike',self), ('email_to','ilike',self), ('subject','ilike',self)]" string="Email"/>
<field name="date"/>
<filter name="received" string="Received" domain="[('state','=','received')]"/>
<filter name="outgoing" string="Outgoing" domain="[('state','=','outgoing')]"/>
<filter name="sent" string="Sent" domain="[('state','=','sent')]"/>
<filter name="exception" string="Failed" domain="[('state','=','exception')]"/>
<separator/>
<filter name="type_email" string="Email" domain="[('message_type','=','email')]"/>
<filter name="type_comment" string="Comment" domain="[('message_type','=','comment')]"/>
<filter name="type_notification" string="Notification" domain="[('message_type','=','notification')]"/>
<group expand="0" string="Extended Filters...">
<field name="author_id"/>
<field name="recipient_ids"/>
<field name="model"/>
<field name="res_id"/>
</group>
<group expand="0" string="Group By">
<filter string="Status" name="status" domain="[]" context="{'group_by':'state'}"/>
<filter string="Author" name="author" context="{'group_by':'author_id'}"/>
<filter string="Thread" name="thread" domain="[]" context="{'group_by':'message_id'}"/>
<filter string="Date" name="month" help="Creation Date" domain="[]" context="{'group_by':'date'}"/>
</group>
</search>
</field>
</record>
<record id="action_view_mail_mail" model="ir.actions.act_window">
<field name="name">Emails</field>
<field name="res_model">mail.mail</field>
<field name="view_mode">tree,form</field>
<field name="context">{}</field>
<field name="search_view_id" ref="view_mail_search"/>
</record>
<record id="act_server_history" model="ir.actions.act_window">
<field name="name">Messages</field>
<field name="res_model">mail.mail</field>
<field name="domain">[('email_from', '!=', False), ('fetchmail_server_id', '=', active_id)]</field>
<field name="context">{'search_default_server_id': active_id, 'default_fetchmail_server_id': active_id}</field>
<field name="binding_model_id" ref="model_fetchmail_server"/>
<field name="binding_view_types">form</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,153 @@
<?xml version="1.0"?>
<odoo><data>
<menuitem name="Discuss"
id="mail.menu_root_discuss"
action="action_discuss"
web_icon="mail,static/description/icon.svg"
groups="base.group_user"
sequence="5"
/>
<record id="base.menu_email" model="ir.ui.menu">
<field name="sequence">3</field>
</record>
<!-- Under Technical/Email -->
<menuitem name="Emails"
id="menu_mail_mail"
parent="base.menu_email"
action="action_view_mail_mail"
sequence="1"/>
<menuitem name="Incoming Mail Servers"
id="menu_action_fetchmail_server_tree"
parent="base.menu_email"
action="action_email_server_tree"
sequence="6"
groups="base.group_no_one"/>
<menuitem id="menu_email_templates"
parent="base.menu_email"
action="action_email_template_tree_all"
sequence="10"/>
<menuitem id="mail_alias_menu"
parent="base.menu_email"
action="action_view_mail_alias"
sequence="11"
groups="base.group_no_one"/>
<menuitem id="mail_channel_menu_settings"
name="Channels"
parent="base.menu_email"
action="mail_channel_action_view"
sequence="20"
groups="base.group_no_one"/>
<menuitem name="Channels/Partner"
id="mail_channel_member_menu"
parent="base.menu_email"
action="mail_channel_member_action"
sequence="21"
groups="base.group_no_one"/>
<menuitem id="mail_gateway_allowed_menu"
parent="base.menu_email"
action="mail_gateway_allowed_action"
sequence="22"
groups="base.group_no_one"/>
<!-- Under Technical/Discuss -->
<menuitem name="Discuss"
id="mail_menu_technical"
parent="base.menu_custom"
sequence="1"/>
<menuitem name="Messages"
id="menu_mail_message"
parent="mail.mail_menu_technical"
action="action_view_mail_message"
sequence="1"/>
<menuitem name="Scheduled Messages"
id="mail_message_schedule_menu"
parent="mail.mail_menu_technical"
action="mail_message_schedule_action"
sequence="2"/>
<menuitem name="Subtypes"
id="menu_message_subtype"
parent="mail.mail_menu_technical"
action="action_view_message_subtype"
sequence="4"/>
<menuitem name="Tracking Values"
id="menu_mail_tracking_value"
parent="mail.mail_menu_technical"
action="action_view_mail_tracking_value"
sequence="5"/>
<menuitem
id="menu_mail_activity_type"
action="mail_activity_type_action"
parent="mail.mail_menu_technical"
sequence="10"
/>
<menuitem
id="menu_mail_activities"
action="mail_activity_action"
parent="mail.mail_menu_technical"
sequence="11"
/>
<menuitem name="Notifications"
id="mail_notification_menu"
parent="mail.mail_menu_technical"
action="mail_notification_action"
sequence="20"
groups="base.group_no_one"/>
<menuitem name="Followers"
id="menu_email_followers"
parent="mail.mail_menu_technical"
action="action_view_followers"
sequence="21"
groups="base.group_no_one"/>
<menuitem id="mail_blacklist_menu"
name="Email Blacklist"
action="mail_blacklist_action"
parent="mail.mail_menu_technical"
sequence="22"/>
<menuitem id="res_users_settings_menu"
name="User Settings"
action="res_users_settings_action"
parent="mail.mail_menu_technical"
sequence="50"/>
<menuitem id="mail_guest_menu"
name="Guests"
action="mail_guest_action"
parent="mail.mail_menu_technical"
sequence="51"/>
<menuitem id="mail_channel_rtc_session_menu"
name="RTC sessions"
action="mail_channel_rtc_session_action"
parent="mail.mail_menu_technical"
sequence="52"/>
<menuitem id="mail_channel_ice_servers_menu"
name="ICE servers"
action="action_ice_servers"
parent="mail.mail_menu_technical"
sequence="53"/>
<menuitem id="mail_message_reaction_menu"
name="Message Reactions"
action="mail_message_reaction_action"
parent="mail.mail_menu_technical"
sequence="54"/>
<menuitem id="mail_link_preview_menu"
name="Link Previews"
action="mail_link_preview_action"
parent="mail.mail_menu_technical"
sequence="55"/>
<!--
This menuitem will be activated by integrations modules (like github, twitter, ...). It
is a hook to ease other modules to plug into mail.
-->
<record id="mail.mail_channel_integrations_menu" model="ir.ui.menu">
<field name="name">Integrations</field>
<field name="parent_id" ref="mail.menu_root_discuss"></field>
<field name="active" eval="False"></field>
</record>
</data></odoo>

View file

@ -0,0 +1,25 @@
<?xml version="1.0"?>
<odoo>
<record id="mail_message_reaction_view_tree" model="ir.ui.view">
<field name="name">mail.message.reaction.tree</field>
<field name="model">mail.message.reaction</field>
<field name="priority">10</field>
<field name="arch" type="xml">
<tree string="Reactions">
<field name="id"/>
<field name="message_id"/>
<field name="content"/>
<field name="partner_id"/>
<field name="guest_id"/>
</tree>
</field>
</record>
<record id="mail_message_reaction_action" model="ir.actions.act_window">
<field name="name">Message Reactions</field>
<field name="res_model">mail.message.reaction</field>
<field name="view_mode">tree,form</field>
</record>
</odoo>

View file

@ -0,0 +1,52 @@
<?xml version="1.0"?>
<odoo><data>
<record id="mail_message_schedule_view_form" model="ir.ui.view">
<field name="name">mail.message.schedule.view.form</field>
<field name="model">mail.message.schedule</field>
<field name="arch" type="xml">
<form string="Scheduled Message" duplicate="0">
<header>
<button name="force_send" string="Force Send" type="object"/>
</header>
<sheet>
<group>
<field name="mail_message_id"/>
<field name="scheduled_datetime"/>
</group>
<group>
<field name="notification_parameters"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="mail_message_schedule_view_tree" model="ir.ui.view">
<field name="name">mail.message.schedule.view.tree</field>
<field name="model">mail.message.schedule</field>
<field name="arch" type="xml">
<tree string="Emails">
<field name="mail_message_id"/>
<field name="scheduled_datetime"/>
</tree>
</field>
</record>
<record id="mail_message_schedule_view_search" model="ir.ui.view">
<field name="name">mail.message.schedule.view.search</field>
<field name="model">mail.message.schedule</field>
<field name="arch" type="xml">
<search string="Scheduled Messages">
<field name="mail_message_id"/>
</search>
</field>
</record>
<record id="mail_message_schedule_action" model="ir.actions.act_window">
<field name="name">Scheduled Messages</field>
<field name="res_model">mail.message.schedule</field>
<field name="view_mode">tree,form</field>
<field name="context">{}</field>
</record>
</data></odoo>

View file

@ -0,0 +1,53 @@
<?xml version="1.0"?>
<odoo>
<data>
<record model="ir.ui.view" id="view_message_subtype_tree">
<field name="name">mail.message.subtype.tree</field>
<field name="model">mail.message.subtype</field>
<field name="priority">10</field>
<field name="arch" type="xml">
<tree string="Subtype">
<field name="sequence" widget="handle"/>
<field name="name"/>
<field name="res_model"/>
<field name="default"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="view_mail_message_subtype_form">
<field name="name">mail.message.subtype.form</field>
<field name="model">mail.message.subtype</field>
<field name="arch" type="xml">
<form string="Email message">
<sheet>
<group>
<group string='Description'>
<field name="name"/>
<field name="sequence"/>
<field name="res_model"/>
<field name="description"/>
<field name="default"/>
<field name="internal"/>
<field name="hidden"/>
<field name="track_recipients"/>
</group>
<group string='Auto subscription'>
<field name="parent_id"/>
<field name="relation_field"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record model="ir.actions.act_window" id="action_view_message_subtype">
<field name="name">Subtypes</field>
<field name="res_model">mail.message.subtype</field>
<field name="view_mode">tree,form</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,203 @@
<?xml version="1.0"?>
<odoo>
<data>
<!-- mail.message tree: short view !-->
<record model="ir.ui.view" id="view_message_tree">
<field name="name">mail.message.tree</field>
<field name="model">mail.message</field>
<field name="priority">20</field>
<field name="arch" type="xml">
<tree string="Messages">
<field name="date"/>
<field name="subject"/>
<field name="author_id"/>
<field name="model"/>
<field name="res_id"/>
</tree>
</field>
</record>
<!-- mail.message form: short view !-->
<record id="mail_message_view_form" model="ir.ui.view">
<field name="name">mail.message.view.form</field>
<field name="model">mail.message</field>
<field name="priority">20</field>
<field name="arch" type="xml">
<form string="Message" duplicate="0">
<sheet>
<div class="oe_button_box" name="button_box">
<button name="action_open_document" string="Open Document"
type="object" class="oe_link" icon="fa-file-text-o"
attrs="{'invisible': ['|', ('model', '=', False), ('res_id', '=', 0)]}"/>
</div>
<group>
<group>
<field name="subject"/>
<field name="date"/>
<field name="email_from"/>
<field name="author_id"/>
<field name="message_type"/>
<field name="subtype_id"/>
<field name="is_internal"/>
</group>
<group>
<field name="model"/>
<field name="res_id"/>
<field name="record_name"/>
<field name="parent_id"/>
</group>
</group>
<notebook>
<page string="Body" name="body">
<field name="body" options="{'style-inline': true}"/>
</page>
<page string="Gateway" name="gateway">
<group>
<group>
<field name="reply_to"/>
<field name="reply_to_force_new"/>
</group>
<group>
<field name="message_id"/>
<field name="mail_server_id"/>
</group>
</group>
</page>
<page string="Recipients" name="recipients">
<group>
<group>
<field name="partner_ids" widget="many2many_tags"/>
</group>
<group>
<field name="notified_partner_ids" widget="many2many_tags"/>
<field name="starred_partner_ids" widget="many2many_tags"/>
</group>
</group>
<group>
<field name="notification_ids">
<tree>
<field name="res_partner_id"/>
<field name="is_read"/>
<field name="notification_type"/>
<field name="notification_status"/>
</tree>
</field>
</group>
</page>
<page string="Tracking" name="page_tracking">
<field name="tracking_value_ids"/>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<!-- mail.message search: wall view !-->
<record model="ir.ui.view" id="view_message_search">
<field name="name">mail.message.search</field>
<field name="model">mail.message</field>
<field name="priority">25</field>
<field name="arch" type="xml">
<search string="Messages Search">
<field name="body" string="Content" filter_domain="['|', ('subject', 'ilike', self), ('body', 'ilike', self)]" />
<field name="subject"/>
<field name="message_type"/>
<field name="author_id"/>
<field name="partner_ids"/>
<field name="model"/>
<field name="res_id"/>
<field name="parent_id"/>
<filter string="Has Mentions"
name="filter_has_mentions"
domain="[('partner_ids.user_ids', 'in', [uid])]"/>
<separator/>
<filter string="Need Action"
name="message_needaction" help="Unread messages"
domain="[('needaction', '=', True)]"/>
<separator/>
</search>
</field>
</record>
<record id="action_view_mail_message" model="ir.actions.act_window">
<field name="name">Messages</field>
<field name="res_model">mail.message</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="view_message_search"/>
</record>
<record model="ir.ui.view" id="view_document_file_kanban">
<field name="name">ir.attachment kanban</field>
<field name="model">ir.attachment</field>
<field name="arch" type="xml">
<kanban edit="false" import="false">
<field name="id"/>
<field name="mimetype"/>
<field name="type"/>
<field name="create_uid"/>
<field name="url"/>
<field name="create_date"/>
<field name="name"/>
<templates>
<t t-name="kanban-box">
<div class="oe_kanban_global_area oe_kanban_global_click o_kanban_attachment">
<div class="row">
<div class="offset-10">
<div class="o_dropdown_kanban dropdown" groups="base.group_user">
<a role="button" class="dropdown-toggle o-no-caret btn" data-bs-toggle="dropdown" href="#" aria-label="Dropdown menu" title="Dropdown menu">
<span class="fa fa-ellipsis-v"/>
</a>
<div class="dropdown-menu" role="menu">
<a t-attf-href="/web/content/ir.attachment/#{record.id.raw_value}/datas?download=true" download="" class="dropdown-item">Download</a>
<a t-if="widget.deletable" role="menuitem" type="delete" class="dropdown-item">Delete</a>
</div>
</div>
</div>
</div>
<div class="o_kanban_image">
<div class="o_kanban_image_wrapper">
<t t-set="webimage" t-value="new RegExp('image.*(gif|jpeg|jpg|png)').test(record.mimetype.value)"/>
<div t-if="record.type.raw_value == 'url'" class="o_url_image fa fa-link fa-3x text-muted" aria-label="Image is a link"/>
<img t-elif="webimage" t-attf-src="/web/image/#{record.id.raw_value}" width="100" height="100" alt="Document" class="o_attachment_image"/>
<div t-else="!webimage" class="o_image o_image_thumbnail" t-att-data-mimetype="record.mimetype.value"/>
</div>
</div>
<div class="o_kanban_details">
<div class="o_kanban_details_wrapper">
<div t-att-title="record.name.raw_value" class="o_kanban_record_title">
<field name="name" class="o_text_overflow"/>
</div>
<div class="o_kanban_record_body">
<t t-if="record.type.raw_value == 'url'">
<span class="o_document_url"><i class="fa fa-globe" aria-label="Document url"/> <field name="url" widget="url"/></span>
</t>
<samp t-else="" class="text-muted"> </samp>
</div>
<div class="o_kanban_record_bottom">
<time class="oe_kanban_bottom_left">
<field name="create_date" widget="date"/>
</time>
<div class="oe_kanban_bottom_right">
<field name="create_uid" widget="many2one_avatar_user"/>
</div>
</div>
</div>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id="base.action_attachment" model="ir.actions.act_window">
<field name="view_mode">kanban,tree,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Attach a new document
</p>
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,51 @@
<?xml version="1.0"?>
<odoo><data>
<record id="mail_notification_view_tree" model="ir.ui.view">
<field name="name">mail.notification.view.tree</field>
<field name="model">mail.notification</field>
<field name="arch" type="xml">
<tree string="Notifications">
<field name="mail_message_id"/>
<field name="notification_type"/>
<field name="res_partner_id"/>
<field name="is_read"/>
<field name="failure_type"/>
</tree>
</field>
</record>
<record id="mail_notification_view_form" model="ir.ui.view">
<field name="name">mail.notification.view.form</field>
<field name="model">mail.notification</field>
<field name="arch" type="xml">
<form string="Notification" duplicate="0">
<header>
<field name="notification_status" widget="statusbar"/>
</header>
<sheet>
<group>
<group string="Source">
<field name="mail_message_id"/>
<field name="notification_type"/>
<field name="mail_mail_id"/>
<field name="res_partner_id"/>
</group>
<group string="Status">
<field name="is_read"/>
<field name="read_date"/>
<field name="failure_type"/>
<field name="failure_reason"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="mail_notification_action" model="ir.actions.act_window">
<field name="name">Notifications</field>
<field name="res_model">mail.notification</field>
<field name="view_mode">tree,form</field>
</record>
</data></odoo>

View file

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- mail.shortcode -->
<record id="mail_shortcode_action" model="ir.actions.act_window">
<field name="name">Chat Shortcode</field>
<field name="res_model">mail.shortcode</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Define a new chat shortcode
</p><p>
A shortcode is a keyboard shortcut. For instance, you type #gm and it will be transformed into "Good Morning".
</p>
</field>
</record>
<record id="mail_shortcode_view_tree" model="ir.ui.view">
<field name="name">mail.shortcode.tree</field>
<field name="model">mail.shortcode</field>
<field name="arch" type="xml">
<tree string="Shortcodes">
<field name="source"/>
<field name="substitution"/>
<field name="description"/>
</tree>
</field>
</record>
<record id="mail_shortcode_view_form" model="ir.ui.view">
<field name="name">mail.shortcode.form</field>
<field name="model">mail.shortcode</field>
<field name="arch" type="xml">
<form string="Shortcodes">
<sheet>
<group>
<field name="source"/>
<field name="substitution"/>
<field name="description"/>
</group>
</sheet>
</form>
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,138 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data>
<record model="ir.ui.view" id="email_template_form">
<field name="name">email.template.form</field>
<field name="model">mail.template</field>
<field name="arch" type="xml">
<form string="Templates">
<header>
<field name="template_fs" invisible="1"/>
<button string="Reset Template"
name="%(mail_template_reset_action)d" type="action"
groups="mail.group_mail_template_editor"
attrs="{'invisible': [('template_fs', '=', False)]}"/>
</header>
<sheet>
<div class="oe_button_box" name="button_box">
<field name="ref_ir_act_window" invisible="1"/>
<button class="oe_stat_button"
groups="base.group_no_one"
name="create_action" type="object"
attrs="{'invisible':[('ref_ir_act_window','!=',False)]}" icon="fa-plus"
help="Display an option on related documents to open a composition wizard with this template">
<div class="o_field_widget o_stat_info">
<span class="o_stat_text">Add</span>
<span class="o_stat_text">Context Action</span>
</div>
</button>
<button name="unlink_action" type="object"
groups="base.group_no_one"
class="oe_stat_button" icon="fa-minus"
attrs="{'invisible':[('ref_ir_act_window','=',False)]}"
help="Remove the contextual action to use this template on related documents" widget="statinfo">
<div class="o_field_widget o_stat_info">
<span class="o_stat_text">Remove</span>
<span class="o_stat_text">Context Action</span>
</div>
</button>
<button class="oe_stat_button" name="%(mail_template_preview_action)d" icon="fa-search-plus" string="Preview"
type="action" target="new"/>
</div>
<div class="oe_title">
<label for="name"/>
<h1><field name="name" class="w-100"
required="1" placeholder='e.g. "Welcome email"'/></h1>
<group>
<field name="model_id" placeholder="e.g. Contact" required="1" options="{'no_create': True}"/>
<field name="subject" placeholder='e.g. "Welcome to MyCompany" or "Nice to meet you, {{ object.name }}"'/>
<field name="model" invisible="1"/>
<field name="description"/>
</group>
</div>
<notebook>
<page string="Content" name="content">
<field name="can_write" invisible="1"/>
<field name="body_html" widget="html" class="oe-bordered-editor"
options="{'style-inline': true, 'codeview': true, 'dynamic_placeholder': true}"
attrs="{'readonly': [('can_write', '=', False), ('id', '!=', False)]}"/>
<field name="attachment_ids" widget="many2many_binary"/>
</page>
<page string="Email Configuration" name="email_configuration">
<group>
<field name="email_from"
placeholder="Override author's email"/>
<field name="use_default_to"/>
<field name="email_to" attrs="{'invisible': [('use_default_to', '=', True)]}"
placeholder="Comma-separated recipient addresses"/>
<field name="partner_to" attrs="{'invisible': [('use_default_to', '=', True)]}"
placeholder="Comma-separated ids of recipient partners"/>
<field name="email_cc" attrs="{'invisible': [('use_default_to', '=', True)]}"
placeholder="Comma-separated carbon copy recipients addresses"/>
<field name="reply_to"
placeholder="Email address to which replies will be redirected when sending emails in mass"/>
<field name="scheduled_date" string="Scheduled Send Date"/>
</group>
</page>
<page string="Settings" name="email_settings">
<group>
<field name="lang" placeholder="{{ object.partner_id.lang }}"/>
<field name="mail_server_id"/>
<field name="auto_delete"/>
<field name="report_template" domain="[('model','=',model)]"/>
<field name="report_name" attrs="{'invisible':[('report_template','=',False)]}"/>
</group>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record model="ir.ui.view" id="email_template_tree">
<field name="name">email.template.tree</field>
<field name="model">mail.template</field>
<field name="arch" type="xml">
<tree string="Templates">
<field name="mail_server_id" invisible="1"/>
<field name="name"/>
<field name="model_id" groups="base.group_no_one"/>
<field name="description"/>
<field name="subject" optional="hidden"/>
<field name="email_from" optional="hidden"/>
<field name="email_to" optional="hidden"/>
<field name="partner_to" optional="hidden"/>
<field name="report_name" optional="hidden"/>
</tree>
</field>
</record>
<record id="view_email_template_search" model="ir.ui.view">
<field name="name">email.template.search</field>
<field name="model">mail.template</field>
<field name="arch" type="xml">
<search string="Templates">
<field name="name" filter_domain="['|', '|', '|',('name','ilike',self), ('report_name','ilike',self), ('subject','ilike',self), ('email_to','ilike',self)]" string="Templates"/>
<field name="lang"/>
<field name="model_id"/>
<filter name="base_templates" string="Base Templates" domain="[('template_category', '=', 'base_template')]"/>
<filter name="custom_templates" string="Custom Templates" domain="[('template_category', '=', 'custom_template')]"/>
<group expand="0" string="Group by...">
<filter string="SMTP Server" name="smtpserver" domain="[]" context="{'group_by':'mail_server_id'}"/>
<filter string="Model" name="model" domain="[]" context="{'group_by':'model_id'}"/>
</group>
</search>
</field>
</record>
<record model="ir.actions.act_window" id="action_email_template_tree_all">
<field name="name">Email Templates</field>
<field name="res_model">mail.template</field>
<field name="view_mode">form,tree</field>
<field name="view_id" ref="email_template_tree" />
<field name="search_view_id" ref="view_email_template_search"/>
<field name="context">{'search_default_base_templates': 1}</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,70 @@
<?xml version="1.0"?>
<odoo>
<data>
<record model="ir.ui.view" id="view_mail_tracking_value_tree">
<field name="name">mail.tracking.value.tree</field>
<field name="model">mail.tracking.value</field>
<field name="priority">12</field>
<field name="arch" type="xml">
<tree string="Tracking Value">
<field name="field"/>
<field name="old_value_integer"/>
<field name="old_value_float"/>
<field name="old_value_char"/>
<field name="old_value_text"/>
<field name="old_value_datetime"/>
<field name="new_value_integer"/>
<field name="new_value_float"/>
<field name="new_value_char"/>
<field name="new_value_text"/>
<field name="new_value_datetime"/>
<field name="mail_message_id"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="view_mail_tracking_value_form">
<field name="name">mail.tracking.value.form</field>
<field name="model">mail.tracking.value</field>
<field name="arch" type="xml">
<form string="Tracking Value">
<sheet>
<group name="field_details" string="Field details">
<field name="field"/>
<field name="field_desc"/>
<field name="field_type"/>
<field name="tracking_sequence"/>
</group>
<group name="values">
<group name="old_values" string="Old values">
<field name="old_value_integer"/>
<field name="old_value_float"/>
<field name="old_value_char"/>
<field name="old_value_text"/>
<field name="old_value_datetime"/>
</group>
<group name="new_values" string="New values">
<field name="new_value_integer"/>
<field name="new_value_float"/>
<field name="new_value_char"/>
<field name="new_value_text"/>
<field name="new_value_datetime"/>
</group>
</group>
<group string='Related Message'>
<field name="mail_message_id"/>
</group>
</sheet>
</form>
</field>
</record>
<record model="ir.actions.act_window" id="action_view_mail_tracking_value">
<field name="name">Tracking Values</field>
<field name="res_model">mail.tracking.value</field>
<field name="view_mode">tree,form</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,164 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="res_config_settings_view_form" model="ir.ui.view">
<field name="name">res.config.settings.view.form.inherit.mail</field>
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="base_setup.res_config_settings_view_form"/>
<field name="arch" type="xml">
<div id="emails" position='replace'>
<h2>Discuss</h2>
<div class="row mt16 o_settings_container" id="emails">
<div class="col-12 col-lg-6 o_setting_box" id="activities_setting">
<div class="o_setting_left_pane"/>
<div class="o_setting_right_pane">
<span class="o_form_label">Activities</span>
<div class="text-muted">
Configure your activity types
</div>
<div class="content-group">
<div class="mt8">
<button name="%(mail.mail_activity_type_action)d" string="Activity Types" type="action" class="oe_link" icon="fa-arrow-right"/>
</div>
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box"
id="email_servers_setting"
title="Using your own email server is required to send/receive emails in Community and Enterprise versions. Online users already benefit from a ready-to-use email server (@mycompany.odoo.com).">
<div class="o_setting_left_pane">
<field name="external_email_server_default"/>
</div>
<div class="o_setting_right_pane">
<label for="external_email_server_default"/>
<a href="https://www.odoo.com/documentation/16.0/applications/general/email_communication/email_servers.html" title="Documentation" class="o_doc_link" target="_blank"></a>
<div class="text-muted" id="external_email_server_default">
Configure your own email servers
</div>
<div class="content-group mb-3" attrs="{'invisible': [('external_email_server_default', '=', False)]}">
<div class="mt16" id="mail_alias_domain" dir="ltr">
<label for="alias_domain" class="o_light_label"/>
<span>@</span>
<field name="alias_domain" placeholder='e.g. "mycompany.com"'/>
</div>
<div class="mt8">
<button type="action"
name="%(action_email_server_tree)d"
string="Incoming Email Servers" icon="fa-arrow-right" class="btn-link"/>
</div>
<div class="mt8">
<button type="action"
name="%(base.action_ir_mail_server_list)d"
string="Outgoing Email Servers" icon="fa-arrow-right" class="btn-link"/>
</div>
</div>
<div class="mt-3 d-flex" attrs="{'invisible': [('external_email_server_default', '=', False)]}">
<field name="module_google_gmail"/>
<div>
<label string="Gmail Credentials" for="module_google_gmail"/>
<a href="https://console.developers.google.com/" title="Get Gmail API credentials" class="o_doc_link" target="_blank"/>
<div class="text-muted">
Send and receive emails through your Gmail account.
</div>
<div class="content-group" attrs="{'invisible': [('module_google_gmail','=',False)]}" id="msg_module_google_gmail">
<div class="mt16 text-warning"><strong>Save</strong> this page and come back here to set up the feature.</div>
</div>
</div>
</div>
<div class="mt-3 d-flex" attrs="{'invisible': [('external_email_server_default', '=', False)]}">
<field name="module_microsoft_outlook"/>
<div>
<label string="Outlook Credentials" for="module_microsoft_outlook"/>
<a href="https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app"
title="Get Outlook API credentials" class="o_doc_link" target="_blank"/>
<div class="text-muted">
Send and receive emails through your Outlook account.
</div>
<div class="content-group" id="msg_module_microsoft_outlook"
attrs="{'invisible': [('module_microsoft_outlook','=',False)]}">
<div class="mt16 text-warning">
<strong>Save</strong> this page and come back here to set up the feature.
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_pane">
<field name="use_twilio_rtc_servers"/>
</div>
<div class="o_setting_right_pane">
<label for="use_twilio_rtc_servers"/>
<div class="text-muted col-md-12">
Add your twilio credentials for ICE servers
</div>
<div class="content-group" attrs="{'invisible': [('use_twilio_rtc_servers', '=', False)]}">
<div class="row mt16" id="mail_twilio_sid">
<label for="twilio_account_sid" class="col-lg-3"/>
<field name="twilio_account_sid" placeholder="e.g. ACd5543a0b450ar4c7t95f1b6e8a39t543"/>
</div>
<div class="row mt16" id="mail_twilio_auth_token">
<label for="twilio_account_token" class="col-lg-3"/>
<field name="twilio_account_token" placeholder="e.g. 65ea4f9e948b693N5156F350256bd152"/>
</div>
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_right_pane">
<span class="o_form_label">Custom ICE server list</span>
<div class="row">
<div class="text-muted col-md-12">
Configure your ICE server list for webRTC
</div>
</div>
<div class="content-group">
<div class="row col-lg-4">
<button type="action" name="%(mail.action_ice_servers)d" string="ICE Servers" icon="fa-arrow-right" class="btn-link"/>
</div>
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box"
id="restrict_template_rendering_setting">
<div class="o_setting_left_pane">
<field name="restrict_template_rendering"/>
</div>
<div class="o_setting_right_pane">
<label for="restrict_template_rendering"/>
<div class="text-muted" id="restrict_template_rendering">
Restrict mail templates edition and QWEB placeholders usage.
</div>
</div>
</div>
</div>
</div>
<div id="companies_setting" position="inside">
<br/>
<div class="o_setting_right_pane" id="mail_templates_setting"
groups="mail.group_mail_template_editor,base.group_system">
<span class="o_form_label">Email Templates</span>
<div class="text-muted">
Customize the look and feel of automated emails
</div>
<div class="w-50 row">
<span class="d-block w-75 py-2">Header Color</span>
<field name="primary_color" class="d-block w-25 p-0 m-0" widget="color"/>
</div>
<div class="w-50 row mt-1">
<span class="d-block w-75 py-2">Button Color</span>
<field name="secondary_color" class="d-block w-25 p-0 m-0" widget="color"/>
</div>
<button name="open_email_layout" icon="fa-arrow-right"
type="object" string="Update Mail Layout"
groups="base.group_no_one" class="btn-link"/>
<br groups="base.group_no_one"/>
<button name="open_mail_templates" icon="fa-arrow-right" type="object" string="Review All Templates" class="btn-link"/>
</div>
</div>
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,121 @@
<?xml version="1.0" ?>
<odoo>
<data>
<record id="res_partner_view_form_inherit_mail" model="ir.ui.view">
<field name="name">res.partner.view.form.inherit.mail</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='email']" position="replace">
<field name="is_blacklisted" invisible="1"/>
<label for="email" class="oe_inline"/>
<div class="o_row o_row_readonly">
<button name="mail_action_blacklist_remove" class="fa fa-ban text-danger"
title="This email is blacklisted for mass mailings. Click to unblacklist."
type="object" context="{'default_email': email}" groups="base.group_user"
attrs="{'invisible': [('is_blacklisted', '=', False)]}"/>
<field name="email" widget="email" context="{'gravatar_image': True}" attrs="{'required': [('user_ids','!=', [])]}"/>
</div>
</xpath>
<xpath expr="//sheet" position="after">
<div class="oe_chatter">
<field name="message_follower_ids"/>
<field name="activity_ids"/>
<field name="message_ids"/>
</div>
</xpath>
</field>
</record>
<record id="res_partner_view_kanban_inherit_mail" model="ir.ui.view">
<field name="name">res.partner.view.kanban.inherit.mail</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.res_partner_kanban_view"/>
<field name="arch" type="xml">
<field name="type" position="after">
<field name="activity_state"/>
</field>
<xpath expr="//div[hasclass('oe_kanban_bottom_right')]" position="inside">
<field name="activity_ids" widget="kanban_activity"/>
</xpath>
</field>
</record>
<record id="res_partner_view_search_inherit_mail" model="ir.ui.view">
<field name="name">res.partner.view.search.inherit.mail</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_res_partner_filter"/>
<field name="arch" type="xml">
<filter name="inactive" position="after">
<filter invisible="1" string="Late Activities" name="activities_overdue"
domain="[('my_activity_date_deadline', '&lt;', context_today().strftime('%Y-%m-%d'))]"
help="Show all records which has next action date is before today"/>
<filter invisible="1" string="Today Activities" name="activities_today"
domain="[('my_activity_date_deadline', '=', context_today().strftime('%Y-%m-%d'))]"/>
<filter invisible="1" string="Future Activities" name="activities_upcoming_all"
domain="[('my_activity_date_deadline', '&gt;', context_today().strftime('%Y-%m-%d'))]"/>
<separator/>
</filter>
</field>
</record>
<record id="res_partner_view_tree_inherit_mail" model="ir.ui.view">
<field name="name">res.partner.view.tree.inherit.mail</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_tree"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='user_id']" position="after">
<field name="activity_ids" optional="show" widget="list_activity"/>
</xpath>
</field>
</record>
<record id="res_partner_view_activity" model="ir.ui.view">
<field name="name">res.partner.activity</field>
<field name="model">res.partner</field>
<field name="arch" type="xml">
<activity string="Contacts">
<field name="id"/>
<templates>
<div t-name="activity-box">
<img t-att-src="activity_image('res.partner', 'avatar_128', record.id.raw_value)" role="img" t-att-title="record.id.value" t-att-alt="record.id.value"/>
<div>
<field name="name" display="full"/>
<field name="parent_id" muted="1" display="full"/>
</div>
</div>
</templates>
</activity>
</field>
</record>
<!-- Add mail-defined activity view to standard action on partners to manage activities related to partner model -->
<record id="base.action_partner_form" model="ir.actions.act_window">
<field name="view_mode">kanban,tree,form,activity</field>
</record>
<record id="base.action_partner_customer_form" model="ir.actions.act_window">
<field name="view_mode">kanban,tree,form,activity</field>
</record>
<record id="base.action_partner_supplier_form" model="ir.actions.act_window">
<field name="view_mode">kanban,tree,form,activity</field>
</record>
<!-- Replace the default mass-mailing wizard in base with the composition wizard -->
<record id="action_partner_mass_mail" model="ir.actions.act_window">
<field name="name">Send email</field>
<field name="res_model">mail.compose.message</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<field name="context" eval="{
'default_composition_mode': 'mass_mail',
'default_partner_to': '{{ object.id or \'\' }}',
'default_use_template': False,
'default_reply_to_force_new': True,
}"/>
<field name="binding_model_id" ref="base.model_res_partner"/>
<field name="binding_view_types">list</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,58 @@
<?xml version="1.0"?>
<odoo>
<record id="res_users_settings_view_tree" model="ir.ui.view">
<field name="name">res.users.settings.tree</field>
<field name="model">res.users.settings</field>
<field name="priority">10</field>
<field name="arch" type="xml">
<tree string="User Settings">
<field name="id"/>
<field name="user_id"/>
<field name="use_push_to_talk"/>
</tree>
</field>
</record>
<record id="res_users_settings_view_form" model="ir.ui.view">
<field name="name">res.users.settings.form</field>
<field name="model">res.users.settings</field>
<field name="arch" type="xml">
<form string="User Settings">
<sheet>
<div class="oe_title">
<h1><field name="user_id" attrs="{'readonly': [('id', '!=', False)]}"/></h1>
</div>
<group name="discuss_user_settings">
<group string="Discuss sidebar">
<field name="is_discuss_sidebar_category_channel_open"/>
<field name="is_discuss_sidebar_category_chat_open"/>
</group>
<group string="Voice">
<field name="use_push_to_talk"/>
<field name="push_to_talk_key" placeholder="e.g. true.true..f" attrs="{'invisible': [('use_push_to_talk', '=', False)]}"/>
<field name="voice_active_duration" attrs="{'invisible': [('use_push_to_talk', '=', True)]}"/>
</group>
</group>
<notebook colspan="4">
<page string="Volume per partner">
<field name="volume_settings_ids">
<tree editable="bottom">
<field name="partner_id"/>
<field name="volume"/>
</tree>
</field>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="res_users_settings_action" model="ir.actions.act_window">
<field name="name">User Settings</field>
<field name="res_model">res.users.settings</field>
<field name="view_mode">tree,form</field>
</record>
</odoo>

View file

@ -0,0 +1,37 @@
<?xml version="1.0"?>
<odoo>
<data>
<!-- Update Preferences form !-->
<record id="view_users_form_simple_modif_mail" model="ir.ui.view">
<field name="name">res.users.preferences.form.mail</field>
<field name="model">res.users</field>
<field name="inherit_id" ref="base.view_users_form_simple_modif"/>
<field name="arch" type="xml">
<data>
<field name="email" position="before">
<field name="notification_type" widget="radio" readonly="0"/>
</field>
<xpath expr="//field[@name='image_1920']" position="before">
<widget name="notification_alert"/>
</xpath>
</data>
</field>
</record>
<!-- Update user form !-->
<record id="view_users_form_mail" model="ir.ui.view">
<field name="name">res.users.form.mail</field>
<field name="model">res.users</field>
<field name="inherit_id" ref="base.view_users_form"/>
<field name="arch" type="xml">
<data>
<field name="signature" position="before">
<field name="notification_type" widget="radio"
attrs="{'invisible': [('share', '=', True)]}"/>
</field>
</data>
</field>
</record>
</data>
</odoo>