summaryrefslogtreecommitdiff
path: root/addons/mail/views
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/mail/views
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/mail/views')
-rw-r--r--addons/mail/views/assets.xml324
-rw-r--r--addons/mail/views/ir_actions_views.xml52
-rw-r--r--addons/mail/views/ir_model_views.xml41
-rw-r--r--addons/mail/views/mail_activity_views.xml220
-rw-r--r--addons/mail/views/mail_alias_views.xml88
-rw-r--r--addons/mail/views/mail_blacklist_views.xml77
-rw-r--r--addons/mail/views/mail_channel_views.xml227
-rw-r--r--addons/mail/views/mail_followers_views.xml57
-rw-r--r--addons/mail/views/mail_mail_views.xml133
-rw-r--r--addons/mail/views/mail_menus.xml11
-rw-r--r--addons/mail/views/mail_message_subtype_views.xml57
-rw-r--r--addons/mail/views/mail_message_views.xml207
-rw-r--r--addons/mail/views/mail_moderation_views.xml52
-rw-r--r--addons/mail/views/mail_notification_views.xml58
-rw-r--r--addons/mail/views/mail_shortcode_views.xml48
-rw-r--r--addons/mail/views/mail_template_views.xml138
-rw-r--r--addons/mail/views/mail_tracking_views.xml75
-rw-r--r--addons/mail/views/res_config_settings_views.xml51
-rw-r--r--addons/mail/views/res_partner_views.xml135
-rw-r--r--addons/mail/views/res_users_views.xml36
20 files changed, 2087 insertions, 0 deletions
diff --git a/addons/mail/views/assets.xml b/addons/mail/views/assets.xml
new file mode 100644
index 00000000..4290edba
--- /dev/null
+++ b/addons/mail/views/assets.xml
@@ -0,0 +1,324 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+ <data>
+ <template id="_assets_primary_variables" inherit_id="web._assets_primary_variables">
+ <xpath expr="//link[last()]" position="after">
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/scss/variables.scss"/>
+ </xpath>
+ </template>
+
+ <template id="assets_backend" name="mail assets" inherit_id="web.assets_backend">
+ <xpath expr="." position="inside">
+ <script type="text/javascript" src="/mail/static/src/js/core/translation.js"></script>
+
+ <script type="text/javascript" src="/mail/static/src/js/many2many_tags_email.js"></script>
+ <script type="text/javascript" src="/mail/static/src/js/many2one_avatar_user.js"></script>
+ <script type="text/javascript" src="/mail/static/src/js/field_char.js"></script>
+
+ <!-- Widgets -->
+ <script type="text/javascript" src="/mail/static/src/js/document_viewer.js"></script>
+ <script type="text/javascript" src="/mail/static/src/js/basic_view.js"></script>
+ <!-- systray -->
+ <script type="text/javascript" src="/mail/static/src/js/systray/systray_activity_menu.js"></script>
+ <script type="text/javascript" src="/mail/static/src/js/tours/mail.js"></script>
+ <!-- tools -->
+ <script type="text/javascript" src="/mail/static/src/js/tools/debug_manager.js"></script>
+ <!-- filter menu -->
+ <script type="text/javascript" src="/mail/static/src/js/custom_filter_item.js"></script>
+ <!-- utils -->
+ <script type="text/javascript" src="/mail/static/src/js/utils.js"></script>
+ <script type="text/javascript" src="/mail/static/src/js/activity.js"></script>
+ <!-- Activity view type -->
+ <script type="text/javascript" src="/mail/static/src/js/views/activity/activity_view.js"></script>
+ <script type="text/javascript" src="/mail/static/src/js/views/activity/activity_model.js"></script>
+ <script type="text/javascript" src="/mail/static/src/js/views/activity/activity_controller.js"></script>
+ <script type="text/javascript" src="/mail/static/src/js/views/activity/activity_renderer.js"></script>
+ <script type="text/javascript" src="/mail/static/src/js/views/activity/activity_record.js"></script>
+ <script type="text/javascript" src="/mail/static/src/js/views/activity/activity_cell.js"></script>
+ <!-- Emojis -->
+ <script type="text/javascript" src="/mail/static/src/js/emojis.js"></script>
+ <script type="text/javascript" src="/mail/static/src/js/emojis_mixin.js"/>
+ <script type="text/javascript" src="/mail/static/src/js/field_emojis_common.js"/>
+ <script type="text/javascript" src="/mail/static/src/js/field_char_emojis.js"/>
+ <script type="text/javascript" src="/mail/static/src/js/field_text_emojis.js"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/scss/emojis.scss"/>
+ <!-- Others -->
+
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/variables.scss"/>
+
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/scss/discuss.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/scss/composer.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/scss/thread.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/scss/systray.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/scss/mail_activity.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/scss/many2one_avatar_user.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/scss/activity_view.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/scss/kanban_view.scss"/>
+
+ <script type="text/javascript" src="/mail/static/src/bugfix/bugfix.js"></script>
+ <script type="text/javascript" src="/mail/static/src/component_hooks/use_drag_visible_dropzone/use_drag_visible_dropzone.js"></script>
+ <script type="text/javascript" src="/mail/static/src/component_hooks/use_refs/use_refs.js"></script>
+ <script type="text/javascript" src="/mail/static/src/component_hooks/use_store/use_store.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/activity/activity.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/activity_box/activity_box.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/activity_mark_done_popover/activity_mark_done_popover.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/attachment/attachment.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/attachment_box/attachment_box.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/attachment_delete_confirm_dialog/attachment_delete_confirm_dialog.js"/>
+ <script type="text/javascript" src="/mail/static/src/components/attachment_list/attachment_list.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/attachment_viewer/attachment_viewer.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/autocomplete_input/autocomplete_input.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/chat_window/chat_window.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/chat_window_header/chat_window_header.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/chat_window_hidden_menu/chat_window_hidden_menu.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/chat_window_manager/chat_window_manager.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/chatter/chatter.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/chatter_container/chatter_container.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/chatter_topbar/chatter_topbar.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/composer/composer.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/composer_suggested_recipient/composer_suggested_recipient.js"/>
+ <script type="text/javascript" src="/mail/static/src/components/composer_suggested_recipient_list/composer_suggested_recipient_list.js"/>
+ <script type="text/javascript" src="/mail/static/src/components/composer_suggestion/composer_suggestion.js"/>
+ <script type="text/javascript" src="/mail/static/src/components/composer_suggestion_list/composer_suggestion_list.js"/>
+ <script type="text/javascript" src="/mail/static/src/components/composer_text_input/composer_text_input.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/dialog/dialog.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/dialog_manager/dialog_manager.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/discuss/discuss.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/discuss_mobile_mailbox_selection/discuss_mobile_mailbox_selection.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/discuss_sidebar/discuss_sidebar.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/discuss_sidebar_item/discuss_sidebar_item.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/drop_zone/drop_zone.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/editable_text/editable_text.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/emojis_popover/emojis_popover.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/file_uploader/file_uploader.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/follow_button/follow_button.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/follower/follower.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/follower_list_menu/follower_list_menu.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/follower_subtype/follower_subtype.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/follower_subtype_list/follower_subtype_list.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/mail_template/mail_template.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/message/message.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/message_author_prefix/message_author_prefix.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/message_list/message_list.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/message_seen_indicator/message_seen_indicator.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/messaging_menu/messaging_menu.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/mobile_messaging_navbar/mobile_messaging_navbar.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/moderation_ban_dialog/moderation_ban_dialog.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/moderation_discard_dialog/moderation_discard_dialog.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/moderation_reject_dialog/moderation_reject_dialog.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/notification_alert/notification_alert.js"/>
+ <script type="text/javascript" src="/mail/static/src/components/notification_group/notification_group.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/notification_list/notification_list.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/notification_popover/notification_popover.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/notification_request/notification_request.js"/>
+ <script type="text/javascript" src="/mail/static/src/components/partner_im_status_icon/partner_im_status_icon.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/thread_icon/thread_icon.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/thread_needaction_preview/thread_needaction_preview.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/thread_preview/thread_preview.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/thread_textual_typing_status/thread_textual_typing_status.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/thread_typing_icon/thread_typing_icon.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/thread_view/thread_view.js"></script>
+ <script type="text/javascript" src="/mail/static/src/model/model_core.js"></script>
+ <script type="text/javascript" src="/mail/static/src/model/model_errors.js"></script>
+ <script type="text/javascript" src="/mail/static/src/model/model_field.js"></script>
+ <script type="text/javascript" src="/mail/static/src/model/model_field_command.js"></script>
+ <script type="text/javascript" src="/mail/static/src/model/model_manager.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/activity/activity.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/activity_type/activity_type.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/attachment/attachment.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/attachment_viewer/attachment_viewer.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/canned_response/canned_response.js"/>
+ <script type="text/javascript" src="/mail/static/src/models/channel_command/channel_command.js"/>
+ <script type="text/javascript" src="/mail/static/src/models/chat_window/chat_window.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/chat_window_manager/chat_window_manager.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/chatter/chatter.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/composer/composer.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/country/country.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/device/device.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/dialog/dialog.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/dialog_manager/dialog_manager.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/discuss/discuss.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/follower/follower.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/follower_subtype/follower_subtype.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/follower_subtype_list/follower_subtype_list.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/locale/locale.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/mail_template/mail_template.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/message/message.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/message_seen_indicator/message_seen_indicator.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/messaging/messaging.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/messaging_initializer/messaging_initializer.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/messaging_menu/messaging_menu.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/messaging_notification_handler/messaging_notification_handler.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/model/model.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/notification/notification.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/notification_group/notification_group.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/notification_group_manager/notification_group_manager.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/partner/partner.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/suggested_recipient_info/suggested_recipient_info.js"/>
+ <script type="text/javascript" src="/mail/static/src/models/thread/thread.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/thread_cache/thread_cache.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/thread_partner_seen_info/thread_partner_seen_info.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/thread_view/thread_view.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/thread_view/thread_viewer.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/user/user.js"></script>
+ <script type="text/javascript" src="/mail/static/src/services/chat_window_service/chat_window_service.js"></script>
+ <script type="text/javascript" src="/mail/static/src/services/dialog_service/dialog_service.js"></script>
+ <script type="text/javascript" src="/mail/static/src/utils/deferred/deferred.js"></script>
+ <script type="text/javascript" src="/mail/static/src/utils/throttle/throttle.js"></script>
+ <script type="text/javascript" src="/mail/static/src/utils/timer/timer.js"></script>
+ <script type="text/javascript" src="/mail/static/src/utils/utils.js"></script>
+ <script type="text/javascript" src="/mail/static/src/widgets/discuss/discuss.js"></script>
+ <script type="text/javascript" src="/mail/static/src/widgets/discuss_invite_partner_dialog/discuss_invite_partner_dialog.js"></script>
+ <script type="text/javascript" src="/mail/static/src/widgets/form_renderer/form_renderer.js"></script>
+ <script type="text/javascript" src="/mail/static/src/widgets/messaging_menu/messaging_menu.js"></script>
+ <script type="text/javascript" src="/mail/static/src/widgets/notification_alert/notification_alert.js"/>
+
+ <!-- notification_list_item.scss contains variables/mixins, it must be positioned before sub-components of NotificationList -->
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/notification_list/notification_list_item.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/bugfix/bugfix.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/activity/activity.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/activity_box/activity_box.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/activity_mark_done_popover/activity_mark_done_popover.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/attachment/attachment.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/attachment_box/attachment_box.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/attachment_list/attachment_list.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/attachment_viewer/attachment_viewer.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/chat_window/chat_window.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/chat_window_header/chat_window_header.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/chat_window_hidden_menu/chat_window_hidden_menu.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/chat_window_manager/chat_window_manager.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/chatter/chatter.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/chatter_container/chatter_container.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/chatter_topbar/chatter_topbar.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/composer/composer.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/composer_suggested_recipient/composer_suggested_recipient.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/composer_suggested_recipient_list/composer_suggested_recipient_list.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/composer_suggestion/composer_suggestion.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/composer_suggestion_list/composer_suggestion_list.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/composer_text_input/composer_text_input.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/dialog/dialog.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/discuss/discuss.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/discuss_mobile_mailbox_selection/discuss_mobile_mailbox_selection.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/discuss_sidebar/discuss_sidebar.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/discuss_sidebar_item/discuss_sidebar_item.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/drop_zone/drop_zone.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/emojis_popover/emojis_popover.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/file_uploader/file_uploader.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/follow_button/follow_button.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/follower/follower.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/follower_list_menu/follower_list_menu.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/follower_subtype/follower_subtype.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/follower_subtype_list/follower_subtype_list.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/mail_template/mail_template.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/message/message.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/message_author_prefix/message_author_prefix.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/message_list/message_list.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/message_seen_indicator/message_seen_indicator.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/messaging_menu/messaging_menu.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/mobile_messaging_navbar/mobile_messaging_navbar.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/notification_group/notification_group.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/notification_list/notification_list.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/notification_popover/notification_popover.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/notification_request/notification_request.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/partner_im_status_icon/partner_im_status_icon.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/thread_icon/thread_icon.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/thread_needaction_preview/thread_needaction_preview.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/thread_preview/thread_preview.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/thread_textual_typing_status/thread_textual_typing_status.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/thread_typing_icon/thread_typing_icon.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/components/thread_view/thread_view.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/widgets/discuss/discuss.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/mail/static/src/widgets/form_renderer/form_renderer.scss"/>
+ </xpath>
+ </template>
+
+ <template id="assets_backend_prod_only" name="mail prod only assets" inherit_id="web.assets_backend_prod_only">
+ <xpath expr="." position="inside">
+ <script type="text/javascript" src="/mail/static/src/js/main.js"></script>
+ </xpath>
+ </template>
+
+ <template id="assets_tests" name="Mail Assets Tests" inherit_id="web.assets_tests">
+ <xpath expr="." position="inside">
+ <script type="text/javascript" src="/mail/static/tests/tours/mail_full_composer_test_tour.js"/>
+ </xpath>
+ </template>
+
+ <template id="tests_assets" name="mail_tests_assets" inherit_id="web.tests_assets">
+ <xpath expr="." position="inside">
+ <script type="text/javascript" src="/mail/static/src/env/test_env.js"></script>
+ <script type="text/javascript" src="/mail/static/src/utils/test_utils.js"></script>
+ <script type="text/javascript" src="/mail/static/tests/helpers/mock_models.js"></script>
+ <script type="text/javascript" src="/mail/static/tests/helpers/mock_server.js"></script>
+ </xpath>
+ </template>
+
+ <template id="qunit_suite" name="mail_tests" inherit_id="web.qunit_suite_tests">
+ <xpath expr="." position="inside">
+ <script type="text/javascript" src="/mail/static/tests/chatter_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/tests/mail_utils_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/tests/document_viewer_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/tests/many2one_avatar_user_tests.js"></script>
+ <!-- systray -->
+ <script type="text/javascript" src="/mail/static/tests/systray/systray_activity_menu_tests.js"></script>
+ <!-- tools -->
+ <script type="text/javascript" src="/mail/static/tests/tools/debug_manager_tests.js"></script>>
+ <!-- activity view -->
+ <script type="text/javascript" src="/mail/static/tests/activity_tests.js"></script>
+
+ <script type="text/javascript" src="/mail/static/src/bugfix/bugfix_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/component_hooks/use_store/use_store_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/activity/activity_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/activity_mark_done_popover/activity_mark_done_popover_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/attachment/attachment_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/attachment_box/attachment_box_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/chat_window_manager/chat_window_manager_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/chatter/chatter_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/chatter/chatter_suggested_recipient_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/chatter_topbar/chatter_topbar_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/composer/composer_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/composer_suggestion/composer_suggestion_canned_response_tests.js"/>
+ <script type="text/javascript" src="/mail/static/src/components/composer_suggestion/composer_suggestion_channel_tests.js"/>
+ <script type="text/javascript" src="/mail/static/src/components/composer_suggestion/composer_suggestion_command_tests.js"/>
+ <script type="text/javascript" src="/mail/static/src/components/composer_suggestion/composer_suggestion_partner_tests.js"/>
+ <script type="text/javascript" src="/mail/static/src/components/dialog_manager/dialog_manager_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/discuss/tests/discuss_domain_tests.js"/>
+ <script type="text/javascript" src="/mail/static/src/components/discuss/tests/discuss_inbox_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/discuss/tests/discuss_moderation_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/discuss/tests/discuss_pinned_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/discuss/tests/discuss_sidebar_tests.js"/>
+ <script type="text/javascript" src="/mail/static/src/components/discuss/tests/discuss_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/file_uploader/file_uploader_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/follow_button/follow_button_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/follower/follower_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/follower_list_menu/follower_list_menu_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/follower_subtype/follower_subtype_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/message/message_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/message_seen_indicator/message_seen_indicator_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/messaging_menu/messaging_menu_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/notification_list/notification_list_notification_group_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/notification_list/notification_list_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/partner_im_status_icon/partner_im_status_icon_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/thread_icon/thread_icon_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/thread_needaction_preview/thread_needaction_preview_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/thread_preview/thread_preview_tests.js"/>
+ <script type="text/javascript" src="/mail/static/src/components/thread_textual_typing_status/thread_textual_typing_status_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/components/thread_view/thread_view_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/attachment/attachment_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/message/message_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/messaging/messaging_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/models/thread/thread_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/utils/throttle/throttle_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/utils/timer/timer_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/widgets/form_renderer/form_renderer_tests.js"></script>
+ <script type="text/javascript" src="/mail/static/src/widgets/notification_alert/notification_alert_tests.js"/>
+ </xpath>
+ </template>
+
+ <template id="qunit_mobile_suite" name="mail_qunit_mobile_suite" inherit_id="web.qunit_mobile_suite_tests">
+ <xpath expr="." position="inside">
+ <script type="text/javascript" src="/mail/static/src/components/discuss_mobile_mailbox_selection/discuss_mobile_mailbox_selection_tests.js"/>
+ </xpath>
+ </template>
+ </data>
+</odoo>
diff --git a/addons/mail/views/ir_actions_views.xml b/addons/mail/views/ir_actions_views.xml
new file mode 100644
index 00000000..0c7e2ef6
--- /dev/null
+++ b/addons/mail/views/ir_actions_views.xml
@@ -0,0 +1,52 @@
+<?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"/>
+ <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" 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="channel_ids" widget="many2many_tags"
+ attrs="{'invisible': [('state', '!=', 'followers')]}"/>
+ <field name="template_id"
+ attrs="{'invisible': [('state', '!=', 'email')],
+ 'required': [('state', '=', 'email')]}"/>
+ </xpath>
+ </field>
+ </record>
+
+ </data>
+</odoo>
diff --git a/addons/mail/views/ir_model_views.xml b/addons/mail/views/ir_model_views.xml
new file mode 100644
index 00000000..f146375f
--- /dev/null
+++ b/addons/mail/views/ir_model_views.xml
@@ -0,0 +1,41 @@
+<?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="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="tracking" attrs="{'readonly': [('state','!=', 'manual')]}"/>
+ </field>
+ </field>
+ </record>
+
+</odoo>
diff --git a/addons/mail/views/mail_activity_views.xml b/addons/mail/views/mail_activity_views.xml
new file mode 100644
index 00000000..71bc3592
--- /dev/null
+++ b/addons/mail/views/mail_activity_views.xml
@@ -0,0 +1,220 @@
+<?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"/></h1>
+ </div>
+ <group>
+ <group name="activity_details">
+ <field name="active" invisible="1"/>
+ <field name="category"/>
+ <field name="default_user_id" options="{'no_create': True, 'no_edit': True}" domain="[('share', '=', False)]"/>
+ <field name="res_model_id" groups="base.group_no_one"/>
+ <field name="res_model_change" invisible="1"/>
+ <field name="initial_res_model_id" invisible="1"/>
+ <field name="summary"/>
+ <field name="icon" groups="base.group_no_one"/>
+ <field name="decoration_type" groups="base.group_no_one"/>
+ </group>
+ <group name="activity_planning">
+ <field name="force_next"/>
+ <field name="default_next_type_id" attrs="{'required': [('force_next', '=', True)]}" context="{'default_res_model_id': res_model_id}"/>
+ <field name="next_type_ids" widget="many2many_tags"
+ attrs="{'invisible': ['|', ('force_next', '=', True), ('category', '=', 'upload_file')]}" context="{'default_res_model_id': res_model_id}"/>
+ <field name="mail_template_ids" widget="many2many_tags"
+ domain="[('model_id', '=', res_model_id)]"
+ attrs="{'invisible': [('res_model_id', '=', False)]}"
+ context="{'default_model_id': res_model_id}"/>
+ <label for="delay_count"/>
+ <div>
+ <div class="o_row">
+ <field name="delay_count"/>
+ <field name="delay_unit"/>
+ </div>
+ <field name="delay_from"/>
+ </div>
+ </group>
+ </group>
+ <group>
+ <field name="default_description"/>
+ </group>
+ <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-right"/>
+ <field name="delay_from" string="Type"/>
+ <field name="res_model_id" 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>
+
+ <menuitem
+ id="menu_mail_activity_type"
+ action="mail_activity_type_action"
+ parent="mail.mail_menu_technical"
+ sequence="10"
+ />
+
+ <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>
+
+ <menuitem
+ id="menu_mail_activities"
+ action="mail_activity_action"
+ parent="mail.mail_menu_technical"
+ sequence="11"
+ />
+
+ <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">
+ <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" widget="integer"/>
+ <field name="force_next" invisible="1"/>
+ <field name="previous_activity_type_id"/>
+ <field name="has_recommended_activities"/>
+ </group>
+ <group attrs="{'invisible': [('has_recommended_activities','=',False)]}">
+ <div class="o_row">
+ <strong>Recommended Activities</strong>
+ <field name="recommended_activity_type_id" widget="selection_badge"
+ domain="[('previous_type_ids', '=', previous_activity_type_id)]"
+ nolabel="1"/>
+ </div>
+ </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" placeholder="Log a note..."/>
+ <footer>
+ <field name="id" invisible="1"/>
+ <button string="Schedule" name="action_close_dialog" type="object" class="btn-primary"
+ attrs="{'invisible': [('id', '!=', False)]}"/>
+ <button string="Save" name="action_close_dialog" type="object" class="btn-primary"
+ attrs="{'invisible': [('id', '=', False)]}"/>
+ <button attrs="{'invisible': [('force_next', '=', True)]}" string="Mark as Done" name="action_done"
+ type="object" class="btn-secondary"
+ context="{'mail_activity_quick_update': True}"/>
+ <button attrs="{'invisible': [('force_next', '=', True)]}" string="Done &amp; Schedule Next" name="action_done_schedule_next"
+ type="object" class="btn-secondary"
+ context="{'mail_activity_quick_update': True}"/>
+ <button attrs="{'invisible': [('force_next', '=', False)]}" string="Done &amp; Launch Next" name="action_done_schedule_next"
+ type="object" class="btn-secondary"
+ context="{'mail_activity_quick_update': True}"/>
+ <button string="Discard" class="btn-secondary" special="cancel" />
+ </footer>
+ </sheet>
+ </form>
+ </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_id"/>
+ <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_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="image_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>
diff --git a/addons/mail/views/mail_alias_views.xml b/addons/mail/views/mail_alias_views.xml
new file mode 100644
index 00000000..3584bac5
--- /dev/null
+++ b/addons/mail/views/mail_alias_views.xml
@@ -0,0 +1,88 @@
+<?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><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"/>
+ <field name="alias_bounced_content" attrs="{'invisible':[('alias_contact', '=', 'everyone')]}"/>
+ </group>
+ </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>
+
+ <menuitem id="mail_alias_menu"
+ parent="base.menu_email"
+ action="action_view_mail_alias"
+ sequence="11"
+ groups="base.group_no_one"/>
+
+ </data>
+</odoo>
diff --git a/addons/mail/views/mail_blacklist_views.xml b/addons/mail/views/mail_blacklist_views.xml
new file mode 100644
index 00000000..4ad4dc86
--- /dev/null
+++ b/addons/mail/views/mail_blacklist_views.xml
@@ -0,0 +1,77 @@
+<?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" edit="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 in the blacklist
+ </p><p>
+ Email addresses that are blacklisted means that the recipient won't receive mass mailing anymore.
+ </p>
+ </field>
+ </record>
+
+ <!-- Technical Menu -->
+ <menuitem id="mail_blacklist_menu"
+ name="Email Blacklist"
+ action="mail_blacklist_action"
+ parent="mail.mail_menu_technical"
+ sequence="22"/>
+
+</odoo>
diff --git a/addons/mail/views/mail_channel_views.xml b/addons/mail/views/mail_channel_views.xml
new file mode 100644
index 00000000..78853166
--- /dev/null
+++ b/addons/mail/views/mail_channel_views.xml
@@ -0,0 +1,227 @@
+<?xml version="1.0"?>
+<odoo>
+ <data>
+
+ <!-- mail.channel.partner -->
+ <record id="mail_channel_partner_view_tree" model="ir.ui.view">
+ <field name="name">mail.channel.partner.tree</field>
+ <field name="model">mail.channel.partner</field>
+ <field name="priority">10</field>
+ <field name="arch" type="xml">
+ <tree string="Channels">
+ <field name="partner_id"/>
+ <field name="channel_id"/>
+ <field name="seen_message_id"/>
+ </tree>
+ </field>
+ </record>
+
+ <record id="mail_channel_partner_view_form" model="ir.ui.view">
+ <field name="name">mail.channel.partner.form</field>
+ <field name="model">mail.channel.partner</field>
+ <field name="arch" type="xml">
+ <form string="Channel">
+ <sheet>
+ <group>
+ <field name="partner_id"/>
+ <field name="channel_id"/>
+ <field name="seen_message_id"/>
+ </group>
+ </sheet>
+ </form>
+ </field>
+ </record>
+
+ <record id="mail_channel_partner_action" model="ir.actions.act_window">
+ <field name="name">Channels/Partner</field>
+ <field name="res_model">mail.channel.partner</field>
+ <field name="view_mode">tree,form</field>
+ </record>
+
+ <menuitem name="Channels/Partner"
+ id="mail_channel_partner_menu"
+ parent="base.menu_email"
+ action="mail_channel_partner_action"
+ sequence="21"
+ groups="base.group_no_one"/>
+
+ <!-- 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_subscribed"/>
+ <field name="group_ids"/>
+ <field name="public"/>
+ <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">
+ <img t-att-src="kanban_image('mail.channel', 'image_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_subscribed','=',True), ('group_ids', '!=', [])]}" class="btn btn-primary float-right" name="channel_join_and_get_info">Join</button>
+ <button type="object" attrs="{'invisible':['|', ('is_subscribed','=',False), ('group_ids', '!=', [])]}" class="btn btn-secondary float-right" 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">
+ <header>
+ <button name="send_guidelines" type="object" string="Send guidelines" confirm="You are going to send the guidelines to all the subscribers. Do you confirm the action?" attrs="{'invisible':['|',('moderation_guidelines','=',False), ('is_moderator', '=', False)]}"/>
+ </header>
+ <sheet>
+ <div class="oe_button_box" name="button_box">
+ <field name="is_moderator" invisible="1"/>
+ <button class="btn oe_stat_button" name="mail.mail_moderation_action" type="action" attrs="{'invisible':[('is_moderator', '=', False)]}" icon="fa-bars" context="{'search_default_channel_id': active_id}">
+ <field string="Moderation List" name="moderation_count" widget="statinfo"/>
+ </button>
+ </div>
+ <div class="oe_button_box" name="button_box"/>
+ <field name="image_128" widget="image" class="oe_avatar" options="{'size': [90, 90]}"/>
+ <div class="oe_title">
+ <div class="oe_edit_only">
+ <label for="name"/>
+ </div>
+ <h1>
+ #<field name="name" default_focus="1" placeholder="Name" readonly="0"/>
+ </h1>
+ </div>
+ <group class="o_label_nowrap">
+ <field name="active" invisible="1"/>
+ <field name="email_send"/>
+ <field name="moderation" attrs="{'invisible': [('email_send', '=', False)]}"/>
+ <field name="description" placeholder="Topics discussed in this group..."/>
+ </group>
+ <group name="group_alias" attrs="{'invisible': [('alias_domain', '=', False)]}">
+ <label for="alias_id" string=" " class="fa fa-envelope-o" style="min-width: 20px;" aria-label="Email" title="Email" role="img"/>
+ <div name="alias_def">
+ <field name="alias_id" class="oe_read_only oe_inline"
+ string="Email Alias" required="0"/>
+ <div class="oe_edit_only oe_inline" name="edit_alias" style="display: inline;" >
+ <field name="alias_name" class="oe_inline"/>@<field name="alias_domain" class="oe_inline" readonly="1"/>
+ </div>
+ </div>
+ <field name="alias_contact" class="oe_inline" invisible="1"/>
+ </group>
+ <notebook>
+ <page string="Privacy" name="privacy">
+ <group class="o_label_nowrap">
+ <field name="public" widget="radio" string="Who can follow the group's activities?"/>
+ <field name="group_public_id"
+ attrs="{'invisible': [('public','!=','groups')], 'required': [('public','=','groups')]}"
+ />
+ <field name="group_ids" widget="many2many_tags"
+ string="Auto Subscribe Groups"/>
+ </group>
+ </page>
+ <page string="Members" name="members">
+ <field name="channel_last_seen_partner_ids" mode="tree" context="{'active_test': False}">
+ <tree string="Members" editable="bottom">
+ <field name="partner_id" required="1"/>
+ <field name="partner_email" readonly="1"/>
+ </tree>
+ </field>
+ </page>
+ <page string="Moderation" name="moderation" attrs="{'invisible': [('moderation', '=', False)]}">
+ <group>
+ <field name="moderator_ids" widget="many2many_tags"/>
+ <field name="moderation_notify"/>
+ <field name="moderation_notify_msg" attrs="{'invisible': [('moderation_notify', '=', False)]}"/>
+ <field name="moderation_guidelines"/>
+ <field name="moderation_guidelines_msg" attrs="{'invisible':[('moderation_guidelines', '=', False)]}"/>
+ </group>
+ </page>
+ <page string="Integrations" invisible="1" name="mail_channel_integrations"></page>
+ </notebook>
+ <div class="oe_chatter" groups="base.group_no_one">
+ <field name="message_follower_ids"/>
+ </div>
+ </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>
+
+ <!-- settings !-->
+ <menuitem id="mail_channel_menu_settings" parent="base.menu_email" sequence="20"
+ name="Channels" action="mail_channel_action_view"
+ groups="base.group_no_one"/>
+
+ <record id="action_discuss" model="ir.actions.client">
+ <field name="name">Discuss</field>
+ <field name="tag">mail.widgets.discuss</field>
+ <field name="res_model">mail.channel</field>
+ <field name="params" eval="&quot;{ 'default_active_id': 'mail.box_inbox' }&quot;"/>
+ </record>
+
+ <menuitem
+ id="mail.menu_root_discuss"
+ name="Discuss"
+ action="action_discuss"
+ web_icon="mail,static/description/icon.png"
+ groups="base.group_user"
+ sequence="1"
+ />
+
+ <!--
+ 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>
diff --git a/addons/mail/views/mail_followers_views.xml b/addons/mail/views/mail_followers_views.xml
new file mode 100644
index 00000000..bb098690
--- /dev/null
+++ b/addons/mail/views/mail_followers_views.xml
@@ -0,0 +1,57 @@
+<?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" widget="integer"/>
+ <field name="partner_id"/>
+ <field name="channel_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"/>
+ <field name="channel_id"/>
+ </group>
+ <group>
+ <field name="res_id" widget="integer"/>
+ <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>
+
+ <!-- Add followers related menu entries in Settings/Email -->
+ <menuitem name="Followers"
+ id="menu_email_followers"
+ parent="mail.mail_menu_technical"
+ action="action_view_followers"
+ sequence="21"
+ groups="base.group_no_one"/>
+
+ </data>
+</odoo>
diff --git a/addons/mail/views/mail_mail_views.xml b/addons/mail/views/mail_mail_views.xml
new file mode 100644
index 00000000..bc087e39
--- /dev/null
+++ b/addons/mail/views/mail_mail_views.xml
@@ -0,0 +1,133 @@
+<?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">
+ <header>
+ <button name="send" string="Send Now" type="object" states='outgoing' class="oe_highlight"/>
+ <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="mail_message_id" 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}" states='received,sent,exception,cancel'/>
+ </div>
+ <group>
+ <field name="email_from"/>
+ <field name="email_to"/>
+ <field name="recipient_ids" widget="many2many_tags"/>
+ <field name="email_cc"/>
+ <field name="reply_to"/>
+ <field name="scheduled_date"/>
+ </group>
+ <notebook>
+ <page string="Body" name="body">
+ <field name="body_html" widget="html" options="{'style-inline': true}"/>
+ </page>
+ <page string="Advanced" name="advanced" groups="base.group_no_one">
+ <group>
+ <group string="Status">
+ <field name="auto_delete"/>
+ <field name="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="headers"/>
+ </group>
+ </group>
+ </page>
+ <page string="Attachments" name="attachments">
+ <field name="attachment_ids"/>
+ </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" decoration-muted="state in ('sent', 'cancel')" decoration-info="state=='outgoing'" decoration-danger="state=='exception'">
+ <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="state" invisible="1"/>
+ <field name="message_type" invisible="1"/>
+ <button name="send" string="Send Now" type="object" icon="fa-paper-plane" states='outgoing'/>
+ <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>
+
+ <!-- Add menu entry in Settings/Email -->
+ <menuitem name="Emails"
+ id="menu_mail_mail"
+ parent="base.menu_email"
+ action="action_view_mail_mail"
+ sequence="1"/>
+ </data>
+</odoo>
diff --git a/addons/mail/views/mail_menus.xml b/addons/mail/views/mail_menus.xml
new file mode 100644
index 00000000..44df3e56
--- /dev/null
+++ b/addons/mail/views/mail_menus.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<odoo><data>
+ <record id="base.menu_email" model="ir.ui.menu">
+ <field name="sequence">3</field>
+ </record>
+
+ <menuitem name="Discuss"
+ id="mail_menu_technical"
+ parent="base.menu_custom"
+ sequence="1"/>
+</data></odoo>
diff --git a/addons/mail/views/mail_message_subtype_views.xml b/addons/mail/views/mail_message_subtype_views.xml
new file mode 100644
index 00000000..a9c9171e
--- /dev/null
+++ b/addons/mail/views/mail_message_subtype_views.xml
@@ -0,0 +1,57 @@
+<?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"/>
+ </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>
+ <menuitem name="Subtypes"
+ id="menu_message_subtype"
+ parent="mail.mail_menu_technical"
+ action="action_view_message_subtype"
+ sequence="4"/>
+
+ </data>
+</odoo>
diff --git a/addons/mail/views/mail_message_views.xml b/addons/mail/views/mail_message_views.xml
new file mode 100644
index 00000000..f0405ea3
--- /dev/null
+++ b/addons/mail/views/mail_message_views.xml
@@ -0,0 +1,207 @@
+<?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" widget="integer"/>
+ </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">
+ <sheet>
+ <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" widget="integer"/>
+ <field name="record_name"/>
+ <field name="parent_id"/>
+ <field name="moderation_status"/>
+ <field name="moderator_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="no_auto_thread"/>
+ </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"/>
+ <field name="channel_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>
+
+ <!-- Add menu entry in Settings/Email -->
+ <menuitem name="Messages"
+ id="menu_mail_message"
+ parent="mail.mail_menu_technical"
+ action="action_view_mail_message"
+ sequence="1"/>
+
+ <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-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-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>
diff --git a/addons/mail/views/mail_moderation_views.xml b/addons/mail/views/mail_moderation_views.xml
new file mode 100644
index 00000000..4bcc602b
--- /dev/null
+++ b/addons/mail/views/mail_moderation_views.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0"?>
+<odoo>
+ <data>
+ <record id="mail_moderation_view_tree" model="ir.ui.view">
+ <field name="name">mail.moderation.view.tree</field>
+ <field name="model">mail.moderation</field>
+ <field name="priority">20</field>
+ <field name="arch" type="xml">
+ <tree string="Moderation Lists" editable="bottom">
+ <field name="channel_id"/>
+ <field name="email"/>
+ <field name="status"/>
+ </tree>
+ </field>
+ </record>
+
+ <record id="mail_moderation_view_search" model="ir.ui.view">
+ <field name="name">mail.moderation.view.search</field>
+ <field name="model">mail.moderation</field>
+ <field name="priority">25</field>
+ <field name="arch" type="xml">
+ <search string="Search Moderation List">
+ <field name="channel_id"/>
+ <field name="email"/>
+ <field name="status"/>
+ <filter string="Is Banned"
+ name="status_ban" help="Banned Emails"
+ domain="[('status', '=', 'ban')]"/>
+ <separator/>
+ <filter string="Is Allowed"
+ name="status_allow" help="Allowed Emails"
+ domain="[('status', '=', 'allow')]"/>
+ </search>
+ </field>
+ </record>
+
+ <record id="mail_moderation_action" model="ir.actions.act_window">
+ <field name="name">Moderation</field>
+ <field name="res_model">mail.moderation</field>
+ <field name="view_mode">tree,form</field>
+ <field name="search_view_id" ref="mail_moderation_view_search"/>
+ <field name="context">{'search_default_status_ban': 1}</field>
+ </record>
+
+ <!-- Add menu entry in Settings/Email -->
+ <menuitem name="Channel Moderation"
+ id="mail_moderation_menu"
+ parent="base.menu_email"
+ sequence="22"
+ action="mail_moderation_action"/>
+ </data>
+</odoo>
diff --git a/addons/mail/views/mail_notification_views.xml b/addons/mail/views/mail_notification_views.xml
new file mode 100644
index 00000000..3167fb4c
--- /dev/null
+++ b/addons/mail/views/mail_notification_views.xml
@@ -0,0 +1,58 @@
+<?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">
+ <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_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>
+
+ <menuitem name="Notifications"
+ id="mail_notification_menu"
+ parent="mail.mail_menu_technical"
+ action="mail_notification_action"
+ sequence="20"
+ groups="base.group_no_one"/>
+
+</data></odoo>
diff --git a/addons/mail/views/mail_shortcode_views.xml b/addons/mail/views/mail_shortcode_views.xml
new file mode 100644
index 00000000..84002678
--- /dev/null
+++ b/addons/mail/views/mail_shortcode_views.xml
@@ -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>
diff --git a/addons/mail/views/mail_template_views.xml b/addons/mail/views/mail_template_views.xml
new file mode 100644
index 00000000..0f374402
--- /dev/null
+++ b/addons/mail/views/mail_template_views.xml
@@ -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">
+ <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_system"
+ 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_system"
+ 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" class="oe_edit_only"/>
+ <h1><field name="name" required="1"/></h1>
+ <group>
+ <field name="model_id" required="1" options="{'no_create': True}"/>
+ <field name="model" invisible="1"/>
+ </group>
+ </div>
+ <notebook>
+ <page string="Content" name="content">
+ <label for="subject"/>
+ <h2 style="display: inline-block;"><field name="subject" placeholder="Subject (placeholders may be used here)"/></h2>
+ <field name="body_html" widget="html" options="{'style-inline': true}"/>
+ <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="Preferred reply address"/>
+ <field name="scheduled_date" string="Scheduled Send Date"/>
+ </group>
+ </page>
+ <page string="Advanced Settings" name="advanced_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>
+ <page string="Dynamic Placeholder Generator" name="dynamic_placeholder_generator">
+ <group>
+ <field name="model_object_field"
+ domain="[('model_id','=',model_id),('ttype','!=','one2many'),('ttype','!=','many2many')]"/>
+ <field name="sub_object" readonly="1"/>
+ <field name="sub_model_object_field"
+ domain="[('model_id','=',sub_object),('ttype','!=','one2many'),('ttype','!=','many2many')]"
+ attrs="{'readonly':[('sub_object','=',False)],'required':[('sub_object','!=',False)]}"/>
+ <field name="null_value"/>
+ <field name="copyvalue"/>
+ </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"/>
+ <field name="subject"/>
+ <field name="email_from"/>
+ <field name="email_to"/>
+ <field name="partner_to"/>
+ <field name="report_name"/>
+ </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"/>
+ <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">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"/>
+ </record>
+
+ <menuitem id="menu_email_templates" parent="base.menu_email" action="action_email_template_tree_all"
+ sequence="10"/>
+
+ </data>
+</odoo>
diff --git a/addons/mail/views/mail_tracking_views.xml b/addons/mail/views/mail_tracking_views.xml
new file mode 100644
index 00000000..ea43c5fa
--- /dev/null
+++ b/addons/mail/views/mail_tracking_views.xml
@@ -0,0 +1,75 @@
+<?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>
+ <menuitem name="Tracking Values"
+ id="menu_mail_tracking_value"
+ parent="mail.mail_menu_technical"
+ action="action_view_mail_tracking_value"
+ sequence="5"/>
+
+ </data>
+</odoo> \ No newline at end of file
diff --git a/addons/mail/views/res_config_settings_views.xml b/addons/mail/views/res_config_settings_views.xml
new file mode 100644
index 00000000..57d65b63
--- /dev/null
+++ b/addons/mail/views/res_config_settings_views.xml
@@ -0,0 +1,51 @@
+<?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/14.0/applications/productivity/discuss/advanced/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" attrs="{'invisible': [('external_email_server_default', '=', False)]}">
+ <div class="row mt16" id="mail_alias_domain">
+ <label for="alias_domain" class="col-lg-3 o_light_label"/>
+ <field name="alias_domain" placeholder="mycompany.odoo.com"/>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </field>
+ </record>
+ </data>
+</odoo>
diff --git a/addons/mail/views/res_partner_views.xml b/addons/mail/views/res_partner_views.xml
new file mode 100644
index 00000000..57c6fc54
--- /dev/null
+++ b/addons/mail/views/res_partner_views.xml
@@ -0,0 +1,135 @@
+<?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="//span[hasclass('oe_kanban_partner_links')]" position="after">
+ <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', 'image_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>
+
+ <!--Definition of an email template with an empty body that will be used in partner mailing. Used to give a
+ basis for email recipients, name and to ease the definition of a further elaborated template. -->
+ <record id="email_template_partner" model="mail.template">
+ <field name="name">Partner Mass Mail</field>
+ <field name="model_id" ref="base.model_res_partner"/>
+ <field name="partner_to">${object.id}</field>
+ <field name="auto_delete" eval="True"/>
+ <field name="lang">${object.lang}</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': True,
+ 'default_template_id': ref('email_template_partner'),
+ }"/>
+ <field name="binding_model_id" ref="base.model_res_partner"/>
+ <field name="binding_view_types">list</field>
+ </record>
+
+ <record id="email_template_partner" model="mail.template">
+ <field name="ref_ir_act_window" ref="action_partner_mass_mail"/>
+ </record>
+
+ </data>
+</odoo>
diff --git a/addons/mail/views/res_users_views.xml b/addons/mail/views/res_users_views.xml
new file mode 100644
index 00000000..a181a337
--- /dev/null
+++ b/addons/mail/views/res_users_views.xml
@@ -0,0 +1,36 @@
+<?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"/>
+ </field>
+ </data>
+ </field>
+ </record>
+ </data>
+</odoo>