From 5ec76d12d0f841a1bc88051bbb2c0a9c4cd54a90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20BEAU?= Date: Fri, 11 Jan 2019 11:07:29 +0100 Subject: [PATCH] [REF] refactor the code in order to split it in several file --- mail_usability/__init__.py | 6 +- mail_usability/__manifest__.py | 5 +- mail_usability/{ => data}/mail_data.xml | 0 mail_usability/mail.py | 108 ------------------ mail_usability/models/__init__.py | 7 ++ mail_usability/models/mail.py | 26 +++++ mail_usability/{ => models}/mail_message.py | 0 mail_usability/{ => models}/mail_template.py | 0 mail_usability/models/res_partner.py | 51 +++++++++ mail_usability/{ => models}/tools.py | 0 mail_usability/views/mail_view.xml | 21 ++++ mail_usability/wizard/__init__.py | 3 + .../wizard/email_template_preview.py | 44 +++++++ .../email_template_preview_view.xml} | 21 +--- 14 files changed, 159 insertions(+), 133 deletions(-) rename mail_usability/{ => data}/mail_data.xml (100%) delete mode 100644 mail_usability/mail.py create mode 100644 mail_usability/models/__init__.py create mode 100644 mail_usability/models/mail.py rename mail_usability/{ => models}/mail_message.py (100%) rename mail_usability/{ => models}/mail_template.py (100%) create mode 100644 mail_usability/models/res_partner.py rename mail_usability/{ => models}/tools.py (100%) create mode 100644 mail_usability/views/mail_view.xml create mode 100644 mail_usability/wizard/__init__.py create mode 100644 mail_usability/wizard/email_template_preview.py rename mail_usability/{mail_view.xml => wizard/email_template_preview_view.xml} (52%) diff --git a/mail_usability/__init__.py b/mail_usability/__init__.py index b5cf981..35e7c96 100644 --- a/mail_usability/__init__.py +++ b/mail_usability/__init__.py @@ -1,6 +1,4 @@ # -*- coding: utf-8 -*- -from . import mail -from . import tools -from . import mail_template -from . import mail_message +from . import models +from . import wizard diff --git a/mail_usability/__manifest__.py b/mail_usability/__manifest__.py index 0f4426a..07550ac 100644 --- a/mail_usability/__manifest__.py +++ b/mail_usability/__manifest__.py @@ -26,8 +26,9 @@ Small usability improvements on mails: 'website': 'http://www.akretion.com', 'depends': ['mail'], 'data': [ - 'mail_view.xml', - 'mail_data.xml', + 'views/mail_view.xml', + 'data/mail_data.xml', + 'wizard/email_template_preview_view.xml', ], 'installable': True, } diff --git a/mail_usability/mail_data.xml b/mail_usability/data/mail_data.xml similarity index 100% rename from mail_usability/mail_data.xml rename to mail_usability/data/mail_data.xml diff --git a/mail_usability/mail.py b/mail_usability/mail.py deleted file mode 100644 index 56e361b..0000000 --- a/mail_usability/mail.py +++ /dev/null @@ -1,108 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (C) 2016-2017 Akretion (http://www.akretion.com) -# @author: Alexis de Lattre -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - - -from odoo import models, fields, api - - -class ResPartner(models.Model): - _inherit = 'res.partner' - - notify_email = fields.Selection( - selection_add=[ - ('all_except_notification', 'All Messages Except Notifications')], - default='all_except_notification') - - def _should_be_notify_by_email(self, message): - if message.message_type == 'notification': - if self.notify_email == 'always': - return True - else: - return False - else: - return True - - def _notify_by_email( - self, message, force_send=False, send_after_commit=True, - user_signature=True): - - # use an empty layout for notification by default - if not self._context.get('custom_layout'): - self = self.with_context( - custom_layout='mail_usability.mail_template_notification') - - # Filter the partner that should receive the notification - filtered_partners = self.filtered( - lambda p: p._should_be_notify_by_email(message) - ) - - return super(ResPartner, filtered_partners)._notify_by_email( - message, force_send=force_send, - send_after_commit=send_after_commit, - user_signature=user_signature) - - def _notify_prepare_email_values(self, message): - res = super(ResPartner, self)._notify_prepare_email_values(message) - # Never auto delete notification email - # fucking to hard to debug when message have been delete - res['auto_delete'] = False - return res - - -class TemplatePreview(models.TransientModel): - _inherit = "email_template.preview" - - res_id = fields.Integer(compute='_compute_res_id') - object_id = fields.Reference(selection='_reference_models') - - @api.model - def default_get(self, fields): - result = super(TemplatePreview, self).default_get(fields) - if result.get('model_id'): - model = self.env['ir.model'].browse(result['model_id']) - result['object_id'] = model.model - return result - - def _reference_models(self): - result = self.default_get(['model_id']) - if result.get('model_id'): - model = self.env['ir.model'].browse(result['model_id']) - return [(model.model, model.name)] - else: - models = self.env['ir.model'].search([('state', '!=', 'manual')]) - return [(model.model, model.name) - for model in models - if not model.model.startswith('ir.')] - - @api.depends('object_id') - def _compute_res_id(self): - for record in self: - if self.object_id: - record.res_id = self.object_id.id - - def send(self): - template = self.env['mail.template'].browse( - self._context['template_id']) - template.send_mail( - self.res_id, force_send=True, raise_exception=True) - - -class MailThread(models.AbstractModel): - _inherit = 'mail.thread' - - @api.multi - @api.returns('self', lambda value: value.id) - def message_post(self, body='', subject=None, message_type='notification', - subtype=None, parent_id=False, attachments=None, - content_subtype='html', **kwargs): - if not 'mail_create_nosubscribe' in self._context: - # Do not implicitly follow an object by just sending a message - self = self.with_context(mail_create_nosubscribe=True) - return super(MailThread, - self.with_context(mail_create_nosubscribe=True) - ).message_post( - body=body, subject=subject, message_type=message_type, - subtype=subtype, parent_id=parent_id, attachments=attachments, - content_subtype=content_subtype, **kwargs) diff --git a/mail_usability/models/__init__.py b/mail_usability/models/__init__.py new file mode 100644 index 0000000..342436c --- /dev/null +++ b/mail_usability/models/__init__.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- + +from . import mail +from . import tools +from . import mail_template +from . import mail_message +from . import res_partner diff --git a/mail_usability/models/mail.py b/mail_usability/models/mail.py new file mode 100644 index 0000000..4163499 --- /dev/null +++ b/mail_usability/models/mail.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2016-2017 Akretion (http://www.akretion.com) +# @author: Alexis de Lattre +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + + +from odoo import models, api + + +class MailThread(models.AbstractModel): + _inherit = 'mail.thread' + + @api.multi + @api.returns('self', lambda value: value.id) + def message_post(self, body='', subject=None, message_type='notification', + subtype=None, parent_id=False, attachments=None, + content_subtype='html', **kwargs): + if not 'mail_create_nosubscribe' in self._context: + # Do not implicitly follow an object by just sending a message + self = self.with_context(mail_create_nosubscribe=True) + return super(MailThread, + self.with_context(mail_create_nosubscribe=True) + ).message_post( + body=body, subject=subject, message_type=message_type, + subtype=subtype, parent_id=parent_id, attachments=attachments, + content_subtype=content_subtype, **kwargs) diff --git a/mail_usability/mail_message.py b/mail_usability/models/mail_message.py similarity index 100% rename from mail_usability/mail_message.py rename to mail_usability/models/mail_message.py diff --git a/mail_usability/mail_template.py b/mail_usability/models/mail_template.py similarity index 100% rename from mail_usability/mail_template.py rename to mail_usability/models/mail_template.py diff --git a/mail_usability/models/res_partner.py b/mail_usability/models/res_partner.py new file mode 100644 index 0000000..f45a10b --- /dev/null +++ b/mail_usability/models/res_partner.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2016-2019 Akretion (http://www.akretion.com) +# @author Sébastien BEAU +# @author: Alexis de Lattre +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import models, fields + + +class ResPartner(models.Model): + _inherit = 'res.partner' + + notify_email = fields.Selection( + selection_add=[ + ('all_except_notification', 'All Messages Except Notifications')], + default='all_except_notification') + + def _should_be_notify_by_email(self, message): + if message.message_type == 'notification': + if self.notify_email == 'always': + return True + else: + return False + else: + return True + + def _notify_by_email( + self, message, force_send=False, send_after_commit=True, + user_signature=True): + + # use an empty layout for notification by default + if not self._context.get('custom_layout'): + self = self.with_context( + custom_layout='mail_usability.mail_template_notification') + + # Filter the partner that should receive the notification + filtered_partners = self.filtered( + lambda p: p._should_be_notify_by_email(message) + ) + + return super(ResPartner, filtered_partners)._notify_by_email( + message, force_send=force_send, + send_after_commit=send_after_commit, + user_signature=user_signature) + + def _notify_prepare_email_values(self, message): + res = super(ResPartner, self)._notify_prepare_email_values(message) + # Never auto delete notification email + # fucking to hard to debug when message have been delete + res['auto_delete'] = False + return res diff --git a/mail_usability/tools.py b/mail_usability/models/tools.py similarity index 100% rename from mail_usability/tools.py rename to mail_usability/models/tools.py diff --git a/mail_usability/views/mail_view.xml b/mail_usability/views/mail_view.xml new file mode 100644 index 0000000..6cbdc3f --- /dev/null +++ b/mail_usability/views/mail_view.xml @@ -0,0 +1,21 @@ + + + + + + + mail.mail + + + + + + + + + + + diff --git a/mail_usability/wizard/__init__.py b/mail_usability/wizard/__init__.py new file mode 100644 index 0000000..39d98f0 --- /dev/null +++ b/mail_usability/wizard/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import email_template_preview diff --git a/mail_usability/wizard/email_template_preview.py b/mail_usability/wizard/email_template_preview.py new file mode 100644 index 0000000..06df816 --- /dev/null +++ b/mail_usability/wizard/email_template_preview.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +# Copyright 2019 Akretion (http://www.akretion.com). +# @author Sébastien BEAU +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from openerp import api, fields, models + + +class TemplatePreview(models.TransientModel): + _inherit = "email_template.preview" + + res_id = fields.Integer(compute='_compute_res_id') + object_id = fields.Reference(selection='_reference_models') + + @api.model + def default_get(self, fields): + result = super(TemplatePreview, self).default_get(fields) + if result.get('model_id'): + model = self.env['ir.model'].browse(result['model_id']) + result['object_id'] = model.model + return result + + def _reference_models(self): + result = self.default_get(['model_id']) + if result.get('model_id'): + model = self.env['ir.model'].browse(result['model_id']) + return [(model.model, model.name)] + else: + models = self.env['ir.model'].search([('state', '!=', 'manual')]) + return [(model.model, model.name) + for model in models + if not model.model.startswith('ir.')] + + @api.depends('object_id') + def _compute_res_id(self): + for record in self: + if self.object_id: + record.res_id = self.object_id.id + + def send(self): + template = self.env['mail.template'].browse( + self._context['template_id']) + template.send_mail( + self.res_id, force_send=True, raise_exception=True) diff --git a/mail_usability/mail_view.xml b/mail_usability/wizard/email_template_preview_view.xml similarity index 52% rename from mail_usability/mail_view.xml rename to mail_usability/wizard/email_template_preview_view.xml index 6bce9e3..494b92e 100644 --- a/mail_usability/mail_view.xml +++ b/mail_usability/wizard/email_template_preview_view.xml @@ -1,24 +1,6 @@ - - - + - - mail_usability.mail.tree - mail.mail - - - - - - - - - - email_template.preview @@ -38,4 +20,5 @@ +