From edcb4ac3f7c5bb22691c165e563b2fe301c5fe04 Mon Sep 17 00:00:00 2001 From: Antonio Hidalgo Date: Wed, 17 Aug 2016 10:18:05 -0600 Subject: [PATCH 01/64] Initial commit for Project migration --- mail_private_message/README.rst | 30 + mail_private_message/__init__.py | 6 + mail_private_message/__openerp__.py | 24 + mail_private_message/i18n/es.po | 48 + .../i18n/mail_private_message.pot | 48 + mail_private_message/models/__init__.py | 6 + mail_private_message/models/message.py | 89 ++ mail_private_message/models/notification.py | 34 + .../mail_private_message_security.xml | 11 + mail_private_message/static/src/js/mail.js | 67 ++ mail_private_message/static/src/xml/mail.xml | 20 + mail_private_message/views/assets_backend.xml | 10 + mail_private_message/wizard/__init__.py | 5 + mail_private_message/wizard/mail_compose.py | 32 + .../wizard/mail_compose_view.xml | 20 + mail_private_message_followers/README.rst | 28 + mail_private_message_followers/__init__.py | 5 + mail_private_message_followers/__openerp__.py | 18 + .../wizard/__init__.py | 5 + .../wizard/mail_compose.py | 26 + project_issue_contact/README.rst | 28 + project_issue_contact/__init__.py | 21 + project_issue_contact/__openerp__.py | 39 + .../project_issue_contact.xml | 23 + project_issue_day_count/README.rst | 27 + project_issue_day_count/__init__.py | 23 + project_issue_day_count/__openerp__.py | 39 + project_issue_day_count/i18n/es.po | 27 + .../project_issue_day_count.py | 42 + .../project_issue_day_count_view.xml | 35 + project_issue_multi_task/__init__.py | 23 + project_issue_multi_task/__openerp__.py | 42 + .../project_issue_multi_task.py | 37 + .../project_issue_multi_task_view.xml | 46 + project_issue_priority/README.rst | 28 + project_issue_priority/__init__.py | 23 + project_issue_priority/__openerp__.py | 39 + .../project_issue_priority.py | 31 + project_issue_stage/__init__.py | 23 + project_issue_stage/__openerp__.py | 39 + project_issue_stage/i18n/es.po | 246 ++++++ project_issue_stage/project_issue_stage.py | 36 + .../project_issue_stage_view.xml | 18 + project_issue_stage_history/README.rst | 26 + project_issue_stage_history/__init__.py | 22 + project_issue_stage_history/__openerp__.py | 42 + project_issue_stage_history/i18n/es.po | 77 ++ .../i18n/project_issue_stage_history.pot | 77 ++ .../project_issue_stage_history.py | 81 ++ .../project_issue_stage_history.xml | 25 + .../security/ir.model.access.csv | 2 + project_issue_type/__init__.py | 23 + project_issue_type/__openerp__.py | 39 + project_issue_type/project_issue_type.py | 69 ++ .../project_issue_type_view.xml | 52 ++ .../security/ir.model.access.csv | 8 + project_name/__init__.py | 23 + project_name/__openerp__.py | 38 + project_name/project_name.py | 84 ++ project_name/project_name_view.xml | 50 ++ project_scrum_method/__init__.py | 23 + project_scrum_method/__openerp__.py | 53 ++ .../data/project_scrum_data.xml | 26 + .../i18n/ccorp_project_scrum.pot | 813 +++++++++++++++++ project_scrum_method/i18n/es.po | 820 ++++++++++++++++++ project_scrum_method/project_scrum_method.py | 791 +++++++++++++++++ .../security/ir.model.access.csv | 9 + .../static/src/css/project_scrum.css | 33 + .../view/project_scrum_menu.xml | 21 + .../view/project_scrum_view.xml | 809 +++++++++++++++++ project_scrum_work_type/__init__.py | 23 + project_scrum_work_type/__openerp__.py | 45 + project_scrum_work_type/i18n/es.po | 614 +++++++++++++ .../i18n/project_scrum_work_type.pot | 560 ++++++++++++ .../project_scrum_work_type.py | 206 +++++ .../security/ir.model.access.csv | 3 + project_scrum_work_type/view/view.xml | 107 +++ project_state_history/README.rst | 26 + project_state_history/__init__.py | 22 + project_state_history/__openerp__.py | 39 + project_state_history/i18n/es.po | 115 +++ .../project_state_history.py | 85 ++ .../project_state_history.xml | 25 + .../security/ir.model.access.csv | 2 + project_task_color/__init__.py | 23 + project_task_color/__openerp__.py | 38 + project_task_color/project_task_color.py | 74 ++ project_task_priority/README.rst | 27 + project_task_priority/__init__.py | 23 + project_task_priority/__openerp__.py | 39 + .../project_task_priority.py | 32 + project_task_sequence/__init__.py | 23 + project_task_sequence/__openerp__.py | 38 + .../project_task_sequence.py | 80 ++ .../project_task_sequence_data.xml | 11 + .../project_task_sequence_view.xml | 59 ++ project_task_state/__init__.py | 23 + project_task_state/__openerp__.py | 38 + project_task_state/i18n/es.po | 59 ++ project_task_state/project_task_state.py | 66 ++ .../project_task_state_view.xml | 85 ++ project_time_reassigment/README.rst | 28 + project_time_reassigment/__init__.py | 23 + project_time_reassigment/__openerp__.py | 39 + project_time_reassigment/i18n/es_CR.po | 200 +++++ .../project_task_reassigment_view.xml | 110 +++ .../reassignment_hours.py | 138 +++ .../security/ir.model.access.csv | 4 + project_work_type/__init__.py | 23 + project_work_type/__openerp__.py | 40 + project_work_type/project_work_type.py | 61 ++ project_work_type/project_work_type_view.xml | 65 ++ .../security/ir.model.access.csv | 11 + .../security/project_security.xml | 16 + 114 files changed, 8971 insertions(+) create mode 100644 mail_private_message/README.rst create mode 100644 mail_private_message/__init__.py create mode 100644 mail_private_message/__openerp__.py create mode 100644 mail_private_message/i18n/es.po create mode 100644 mail_private_message/i18n/mail_private_message.pot create mode 100644 mail_private_message/models/__init__.py create mode 100644 mail_private_message/models/message.py create mode 100644 mail_private_message/models/notification.py create mode 100644 mail_private_message/security/mail_private_message_security.xml create mode 100644 mail_private_message/static/src/js/mail.js create mode 100644 mail_private_message/static/src/xml/mail.xml create mode 100644 mail_private_message/views/assets_backend.xml create mode 100644 mail_private_message/wizard/__init__.py create mode 100644 mail_private_message/wizard/mail_compose.py create mode 100644 mail_private_message/wizard/mail_compose_view.xml create mode 100644 mail_private_message_followers/README.rst create mode 100644 mail_private_message_followers/__init__.py create mode 100644 mail_private_message_followers/__openerp__.py create mode 100644 mail_private_message_followers/wizard/__init__.py create mode 100644 mail_private_message_followers/wizard/mail_compose.py create mode 100644 project_issue_contact/README.rst create mode 100644 project_issue_contact/__init__.py create mode 100644 project_issue_contact/__openerp__.py create mode 100644 project_issue_contact/project_issue_contact.xml create mode 100644 project_issue_day_count/README.rst create mode 100644 project_issue_day_count/__init__.py create mode 100644 project_issue_day_count/__openerp__.py create mode 100644 project_issue_day_count/i18n/es.po create mode 100644 project_issue_day_count/project_issue_day_count.py create mode 100644 project_issue_day_count/project_issue_day_count_view.xml create mode 100644 project_issue_multi_task/__init__.py create mode 100644 project_issue_multi_task/__openerp__.py create mode 100644 project_issue_multi_task/project_issue_multi_task.py create mode 100644 project_issue_multi_task/project_issue_multi_task_view.xml create mode 100644 project_issue_priority/README.rst create mode 100644 project_issue_priority/__init__.py create mode 100644 project_issue_priority/__openerp__.py create mode 100644 project_issue_priority/project_issue_priority.py create mode 100644 project_issue_stage/__init__.py create mode 100644 project_issue_stage/__openerp__.py create mode 100644 project_issue_stage/i18n/es.po create mode 100644 project_issue_stage/project_issue_stage.py create mode 100644 project_issue_stage/project_issue_stage_view.xml create mode 100644 project_issue_stage_history/README.rst create mode 100644 project_issue_stage_history/__init__.py create mode 100644 project_issue_stage_history/__openerp__.py create mode 100644 project_issue_stage_history/i18n/es.po create mode 100644 project_issue_stage_history/i18n/project_issue_stage_history.pot create mode 100644 project_issue_stage_history/project_issue_stage_history.py create mode 100644 project_issue_stage_history/project_issue_stage_history.xml create mode 100644 project_issue_stage_history/security/ir.model.access.csv create mode 100644 project_issue_type/__init__.py create mode 100644 project_issue_type/__openerp__.py create mode 100644 project_issue_type/project_issue_type.py create mode 100644 project_issue_type/project_issue_type_view.xml create mode 100644 project_issue_type/security/ir.model.access.csv create mode 100644 project_name/__init__.py create mode 100644 project_name/__openerp__.py create mode 100644 project_name/project_name.py create mode 100644 project_name/project_name_view.xml create mode 100644 project_scrum_method/__init__.py create mode 100644 project_scrum_method/__openerp__.py create mode 100644 project_scrum_method/data/project_scrum_data.xml create mode 100644 project_scrum_method/i18n/ccorp_project_scrum.pot create mode 100644 project_scrum_method/i18n/es.po create mode 100644 project_scrum_method/project_scrum_method.py create mode 100644 project_scrum_method/security/ir.model.access.csv create mode 100644 project_scrum_method/static/src/css/project_scrum.css create mode 100644 project_scrum_method/view/project_scrum_menu.xml create mode 100644 project_scrum_method/view/project_scrum_view.xml create mode 100644 project_scrum_work_type/__init__.py create mode 100644 project_scrum_work_type/__openerp__.py create mode 100644 project_scrum_work_type/i18n/es.po create mode 100644 project_scrum_work_type/i18n/project_scrum_work_type.pot create mode 100644 project_scrum_work_type/project_scrum_work_type.py create mode 100644 project_scrum_work_type/security/ir.model.access.csv create mode 100644 project_scrum_work_type/view/view.xml create mode 100644 project_state_history/README.rst create mode 100644 project_state_history/__init__.py create mode 100644 project_state_history/__openerp__.py create mode 100644 project_state_history/i18n/es.po create mode 100644 project_state_history/project_state_history.py create mode 100644 project_state_history/project_state_history.xml create mode 100644 project_state_history/security/ir.model.access.csv create mode 100644 project_task_color/__init__.py create mode 100644 project_task_color/__openerp__.py create mode 100644 project_task_color/project_task_color.py create mode 100644 project_task_priority/README.rst create mode 100644 project_task_priority/__init__.py create mode 100644 project_task_priority/__openerp__.py create mode 100644 project_task_priority/project_task_priority.py create mode 100644 project_task_sequence/__init__.py create mode 100644 project_task_sequence/__openerp__.py create mode 100644 project_task_sequence/project_task_sequence.py create mode 100644 project_task_sequence/project_task_sequence_data.xml create mode 100644 project_task_sequence/project_task_sequence_view.xml create mode 100644 project_task_state/__init__.py create mode 100644 project_task_state/__openerp__.py create mode 100644 project_task_state/i18n/es.po create mode 100644 project_task_state/project_task_state.py create mode 100644 project_task_state/project_task_state_view.xml create mode 100644 project_time_reassigment/README.rst create mode 100644 project_time_reassigment/__init__.py create mode 100644 project_time_reassigment/__openerp__.py create mode 100644 project_time_reassigment/i18n/es_CR.po create mode 100644 project_time_reassigment/project_task_reassigment_view.xml create mode 100644 project_time_reassigment/reassignment_hours.py create mode 100644 project_time_reassigment/security/ir.model.access.csv create mode 100644 project_work_type/__init__.py create mode 100644 project_work_type/__openerp__.py create mode 100644 project_work_type/project_work_type.py create mode 100644 project_work_type/project_work_type_view.xml create mode 100644 project_work_type/security/ir.model.access.csv create mode 100644 project_work_type/security/project_security.xml diff --git a/mail_private_message/README.rst b/mail_private_message/README.rst new file mode 100644 index 00000000000..afc306439e5 --- /dev/null +++ b/mail_private_message/README.rst @@ -0,0 +1,30 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +==================== +Mail Private Message +==================== + +Features + +* Private messages only visible to employees. +* Disable notifications to followers. + +Credits +======= + +Contributors +------------ + +* Glen Sojo +* Lesmed Gutiérrez + +Maintainer +---------- + +.. image:: https://avatars0.githubusercontent.com/u/7594691?v=3&s=200 + :alt: ClearCorp + :target: http://clearcorp.cr + +This module is maintained by ClearCorp. diff --git a/mail_private_message/__init__.py b/mail_private_message/__init__.py new file mode 100644 index 00000000000..1e285d85473 --- /dev/null +++ b/mail_private_message/__init__.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# © 2016 ClearCorp +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +import models +import wizard diff --git a/mail_private_message/__openerp__.py b/mail_private_message/__openerp__.py new file mode 100644 index 00000000000..b720f9df362 --- /dev/null +++ b/mail_private_message/__openerp__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# © 2016 ClearCorp +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +{ + 'name': 'Mail Private Message', + 'version': '8.0.1.2', + 'category': 'Mail', + 'sequence': 10, + 'summary': """Private messages and notifications""", + 'author': 'ClearCorp', + 'website': 'http://clearcorp.cr', + 'installable': True, + 'auto_install': False, + 'application': False, + 'license': 'AGPL-3', + 'depends': ['mail', 'base'], + 'data': [ + 'views/assets_backend.xml', + 'wizard/mail_compose_view.xml', + 'security/mail_private_message_security.xml', + ], + 'qweb': ['static/src/xml/mail.xml'], +} diff --git a/mail_private_message/i18n/es.po b/mail_private_message/i18n/es.po new file mode 100644 index 00000000000..ab05fffacab --- /dev/null +++ b/mail_private_message/i18n/es.po @@ -0,0 +1,48 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_private_message +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-02-18 15:51+0000\n" +"PO-Revision-Date: 2016-02-18 15:51+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: mail_private_message +#: field:mail.compose.message,privacity:0 +#: field:mail.message,privacity:0 +msgid "Privacity" +msgstr "Privacidad" + +#. module: mail_private_message +#: selection:mail.compose.message,privacity:0 +#: selection:mail.message,privacity:0 +msgid "Private" +msgstr "Privado" + +#. module: mail_private_message +#: selection:mail.compose.message,privacity:0 +#: selection:mail.message,privacity:0 +msgid "Public" +msgstr "Público" + +#. module: mail_private_message +#. openerp-web +#: code:addons/mail_private_message/static/src/xml/mail.xml:15 +#, python-format +msgid "Send" +msgstr "Enviar" + +#. module: mail_private_message +#. openerp-web +#: code:addons/mail_private_message/static/src/xml/mail.xml:9 +#, python-format +msgid "Send as private" +msgstr "Enviar como privado" diff --git a/mail_private_message/i18n/mail_private_message.pot b/mail_private_message/i18n/mail_private_message.pot new file mode 100644 index 00000000000..0bf5bc4c79f --- /dev/null +++ b/mail_private_message/i18n/mail_private_message.pot @@ -0,0 +1,48 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_private_message +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-02-18 15:51+0000\n" +"PO-Revision-Date: 2016-02-18 15:51+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: mail_private_message +#: field:mail.compose.message,privacity:0 +#: field:mail.message,privacity:0 +msgid "Privacity" +msgstr "" + +#. module: mail_private_message +#: selection:mail.compose.message,privacity:0 +#: selection:mail.message,privacity:0 +msgid "Private" +msgstr "" + +#. module: mail_private_message +#: selection:mail.compose.message,privacity:0 +#: selection:mail.message,privacity:0 +msgid "Public" +msgstr "" + +#. module: mail_private_message +#. openerp-web +#: code:addons/mail_private_message/static/src/xml/mail.xml:15 +#, python-format +msgid "Send" +msgstr "" + +#. module: mail_private_message +#. openerp-web +#: code:addons/mail_private_message/static/src/xml/mail.xml:9 +#, python-format +msgid "Send as private" +msgstr "" diff --git a/mail_private_message/models/__init__.py b/mail_private_message/models/__init__.py new file mode 100644 index 00000000000..92ce838942b --- /dev/null +++ b/mail_private_message/models/__init__.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# © 2016 ClearCorp +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +import notification +import message diff --git a/mail_private_message/models/message.py b/mail_private_message/models/message.py new file mode 100644 index 00000000000..fdabe5984f2 --- /dev/null +++ b/mail_private_message/models/message.py @@ -0,0 +1,89 @@ +# -*- coding: utf-8 -*- +# © 2016 ClearCorp +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import models, fields, api + + +class MailMessage(models.Model): + + _inherit = 'mail.message' + + privacity = fields.Selection( + [('private', 'Private'), ('public', 'Public')], + 'Privacity', default='public') + + @api.model + def _notify(self, newid, force_send=False, user_signature=True): + + message = self.sudo().browse(newid) + + if message.privacity != 'private': + return super(MailMessage, self)._notify( + newid, force_send=force_send, user_signature=user_signature) + + notification_obj = self.env['mail.notification'] + partner_obj = self.env['res.partner'] + user_obj = self.pool.get('res.users') + partners_to_notify = set([]) + + # all followers of the mail.message document have to be added + # as partners and notified if a subtype is defined + # (otherwise: log message) + if message.subtype_id and message.model and message.res_id: + fol_obj = self.env['mail.followers'] + # browse as SUPERUSER because rules could + # restrict the search results + fol_ids = fol_obj.sudo().search([ + ('res_model', '=', message.model), + ('res_id', '=', message.res_id)]) + partners_to_notify |= set( + fo.partner_id.id for fo in fol_ids + if message.subtype_id.id in [st.id for st in fo.subtype_ids] + ) + + # remove me from notified partners, unless the message + # is written on my own wall + if message.subtype_id and message.author_id and \ + message.model == 'res.partner' and \ + message.res_id == message.author_id.id: + partners_to_notify |= set([message.author_id.id]) + elif message.author_id: + partners_to_notify -= set([message.author_id.id]) + + # all partner_ids of the mail.message have to be notified + # regardless of the above (even the author if explicitly added!) + if message.partner_ids: + partners_to_notify |= set([p.id for p in message.partner_ids]) + + clean_partners = [] + # clean partners to notify only internal users + for partner in partner_obj.browse(list(partners_to_notify)): + for user in partner.user_ids: + if user_obj.has_group(self._cr, user.id, 'base.group_user'): + clean_partners.append(partner.id) + + # notify + notification_obj._notify( + newid, partners_to_notify=clean_partners, + force_send=force_send, user_signature=user_signature + ) + message.refresh() + + # An error appear when a user receive a notification without notifying + # the parent message -> add a read notification for the parent + if message.parent_id: + # all notified_partner_ids of the mail.message have + # to be notified for the parented messages + partners_to_parent_notify = set( + message.notified_partner_ids).difference( + message.parent_id.notified_partner_ids) + for partner in partners_to_parent_notify: + for user in partner.user_ids: + if user.has_group('base.group_user'): + notification_obj.create({ + 'message_id': message.parent_id.id, + 'partner_id': partner.id, + 'is_read': True, + }) + return True diff --git a/mail_private_message/models/notification.py b/mail_private_message/models/notification.py new file mode 100644 index 00000000000..c029e8c24d4 --- /dev/null +++ b/mail_private_message/models/notification.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +# © 2016 ClearCorp +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import models, api + + +class Notification(models.Model): + + _inherit = 'mail.notification' + + @api.model + def _notify(self, message_id, partners_to_notify=None, + force_send=False, user_signature=True): + if 'notify' in self.env.context and not self.env.context['notify']: + partner_obj = self.env['res.partner'] + message = self.env['mail.message'].browse(message_id) + partners_to_notify = self.env.context.get('partners_to_notify', []) + if message.privacity == 'private': + user_obj = self.pool.get('res.users') + clean_partners = [] + # clean partners to notify only internal users + for partner in partner_obj.browse(partners_to_notify): + for user in partner.user_ids: + if user_obj.has_group( + self._cr, user.id, 'base.group_user'): + clean_partners.append(partner.id) + partners_to_notify = clean_partners + else: + partners_to_notify = self.env.context.get('partners_to_notify', + partners_to_notify) + return super(Notification, self)._notify( + message_id, partners_to_notify=partners_to_notify, + force_send=force_send, user_signature=user_signature) diff --git a/mail_private_message/security/mail_private_message_security.xml b/mail_private_message/security/mail_private_message_security.xml new file mode 100644 index 00000000000..df058bc13e0 --- /dev/null +++ b/mail_private_message/security/mail_private_message_security.xml @@ -0,0 +1,11 @@ + + + + + Portal Public Messages + + [('privacity', '=', 'public')] + + + + \ No newline at end of file diff --git a/mail_private_message/static/src/js/mail.js b/mail_private_message/static/src/js/mail.js new file mode 100644 index 00000000000..3b0792e43d8 --- /dev/null +++ b/mail_private_message/static/src/js/mail.js @@ -0,0 +1,67 @@ +openerp.mail_private_message = function(session) { + + session.mail.ThreadComposeMessage.include({ + bind_events: function () { + var self = this; + this.$('.oe_post_private').on('click', self.on_message_post_private); + this._super(); + }, + + on_message_post_private: function (event) { + var self = this; + if (self.flag_post) { + return; + } + if (this.do_check_attachment_upload() && (this.attachment_ids.length || this.$('textarea').val().match(/\S+/))) { + self.flag_post = true; + if (this.is_log) { + this.do_send_message_post([], this.is_log); + } + else { + this.check_recipient_partners().done(function (partner_ids) { + self.do_send_message_post_private(partner_ids, self.is_log); + }); + } + } + }, + + do_send_message_post_private: function (partner_ids, log) { + var self = this; + var values = { + 'body': this.$('textarea').val(), + 'subject': false, + 'parent_id': this.context.default_parent_id, + 'attachment_ids': _.map(this.attachment_ids, function (file) {return file.id;}), + 'partner_ids': partner_ids, + 'context': _.extend(this.parent_thread.context, { + 'mail_post_autofollow': true, + 'mail_post_autofollow_partner_ids': partner_ids, + }), + 'type': 'comment', + 'content_subtype': 'plaintext', + 'privacity': 'private', + }; + if (log) { + values['subtype'] = false; + } + else { + values['subtype'] = 'mail.mt_comment'; + } + this.parent_thread.ds_thread._model.call('message_post', [this.context.default_res_id], values).done(function (message_id) { + var thread = self.parent_thread; + var root = thread == self.options.root_thread; + if (self.options.display_indented_thread < self.thread_level && thread.parent_message) { + var thread = thread.parent_message.parent_thread; + } + // create object and attach to the thread object + thread.message_fetch([["id", "=", message_id]], false, [message_id], function (arg, data) { + var message = thread.create_message_object( data.slice(-1)[0] ); + // insert the message on dom + thread.insert_message( message, root ? undefined : self.$el, root ); + }); + self.on_cancel(); + self.flag_post = false; + }); + }, + }); +} \ No newline at end of file diff --git a/mail_private_message/static/src/xml/mail.xml b/mail_private_message/static/src/xml/mail.xml new file mode 100644 index 00000000000..02d46b2117d --- /dev/null +++ b/mail_private_message/static/src/xml/mail.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mail_private_message/views/assets_backend.xml b/mail_private_message/views/assets_backend.xml new file mode 100644 index 00000000000..0f734eee897 --- /dev/null +++ b/mail_private_message/views/assets_backend.xml @@ -0,0 +1,10 @@ + + + +