diff --git a/addons/mass_mailing/__manifest__.py b/addons/mass_mailing/__manifest__.py index b9ec211e7d0..9580bce45b9 100644 --- a/addons/mass_mailing/__manifest__.py +++ b/addons/mass_mailing/__manifest__.py @@ -36,16 +36,17 @@ 'wizard/mailing_list_merge_views.xml', 'wizard/mailing_mailing_test_views.xml', 'wizard/mailing_mailing_schedule_date_views.xml', + 'report/mailing_trace_report_views.xml', 'views/mailing_filter_views.xml', - 'views/mailing_mailing_views_menus.xml', 'views/mailing_trace_views.xml', 'views/link_tracker_views.xml', 'views/mailing_contact_views.xml', + 'views/mailing_contact_subscription_views.xml', 'views/mailing_list_views.xml', 'views/mailing_mailing_views.xml', 'views/res_config_settings_views.xml', 'views/utm_campaign_views.xml', - 'report/mailing_trace_report_views.xml', + 'views/mailing_menus.xml', 'views/assets.xml', 'views/mass_mailing_templates_portal.xml', 'views/themes_templates.xml', diff --git a/addons/mass_mailing/models/__init__.py b/addons/mass_mailing/models/__init__.py index 62a584ceda8..3ad476609b3 100644 --- a/addons/mass_mailing/models/__init__.py +++ b/addons/mass_mailing/models/__init__.py @@ -3,6 +3,7 @@ from . import ir_model from . import link_tracker +from . import mailing_contact_subscription from . import mailing_contact from . import mailing_list from . import mailing_trace diff --git a/addons/mass_mailing/models/mailing_contact.py b/addons/mass_mailing/models/mailing_contact.py index 717019aa886..1fa42ad9135 100644 --- a/addons/mass_mailing/models/mailing_contact.py +++ b/addons/mass_mailing/models/mailing_contact.py @@ -6,49 +6,6 @@ from odoo.exceptions import UserError from odoo.osv import expression -class MassMailingContactListRel(models.Model): - """ Intermediate model between mass mailing list and mass mailing contact - Indicates if a contact is opted out for a particular list - """ - _name = 'mailing.contact.subscription' - _description = 'Mass Mailing Subscription Information' - _table = 'mailing_contact_list_rel' - _rec_name = 'contact_id' - _order = 'list_id DESC, contact_id DESC' - - contact_id = fields.Many2one('mailing.contact', string='Contact', ondelete='cascade', required=True) - list_id = fields.Many2one('mailing.list', string='Mailing List', ondelete='cascade', required=True) - opt_out = fields.Boolean( - string='Opt Out', - default=False, - help='The contact has chosen not to receive mails anymore from this list') - unsubscription_date = fields.Datetime(string='Unsubscription Date') - message_bounce = fields.Integer(related='contact_id.message_bounce', store=False, readonly=False) - is_blacklisted = fields.Boolean(related='contact_id.is_blacklisted', store=False, readonly=False) - - _sql_constraints = [ - ('unique_contact_list', 'unique (contact_id, list_id)', - 'A mailing contact cannot subscribe to the same mailing list multiple times.') - ] - - @api.model_create_multi - def create(self, vals_list): - now = fields.Datetime.now() - for vals in vals_list: - if 'opt_out' in vals and 'unsubscription_date' not in vals: - vals['unsubscription_date'] = now if vals['opt_out'] else False - if vals.get('unsubscription_date'): - vals['opt_out'] = True - return super().create(vals_list) - - def write(self, vals): - if 'opt_out' in vals and 'unsubscription_date' not in vals: - vals['unsubscription_date'] = fields.Datetime.now() if vals['opt_out'] else False - if vals.get('unsubscription_date'): - vals['opt_out'] = True - return super(MassMailingContactListRel, self).write(vals) - - class MassMailingContact(models.Model): """Model of a contact. This model is different from the partner model because it holds only some basic information: name, email. The purpose is to diff --git a/addons/mass_mailing/models/mailing_contact_subscription.py b/addons/mass_mailing/models/mailing_contact_subscription.py new file mode 100644 index 00000000000..c20c504587b --- /dev/null +++ b/addons/mass_mailing/models/mailing_contact_subscription.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import api, fields, models + + +class MassMailingContactListRel(models.Model): + """ Intermediate model between mass mailing list and mass mailing contact + Indicates if a contact is opted out for a particular list + """ + _name = 'mailing.contact.subscription' + _description = 'Mass Mailing Subscription Information' + _table = 'mailing_contact_list_rel' + _rec_name = 'contact_id' + _order = 'list_id DESC, contact_id DESC' + + contact_id = fields.Many2one('mailing.contact', string='Contact', ondelete='cascade', required=True) + list_id = fields.Many2one('mailing.list', string='Mailing List', ondelete='cascade', required=True) + opt_out = fields.Boolean( + string='Opt Out', + default=False, + help='The contact has chosen not to receive mails anymore from this list') + unsubscription_date = fields.Datetime(string='Unsubscription Date') + message_bounce = fields.Integer(related='contact_id.message_bounce', store=False, readonly=False) + is_blacklisted = fields.Boolean(related='contact_id.is_blacklisted', store=False, readonly=False) + + _sql_constraints = [ + ('unique_contact_list', 'unique (contact_id, list_id)', + 'A mailing contact cannot subscribe to the same mailing list multiple times.') + ] + + @api.model_create_multi + def create(self, vals_list): + now = fields.Datetime.now() + for vals in vals_list: + if 'opt_out' in vals and 'unsubscription_date' not in vals: + vals['unsubscription_date'] = now if vals['opt_out'] else False + if vals.get('unsubscription_date'): + vals['opt_out'] = True + return super().create(vals_list) + + def write(self, vals): + if 'opt_out' in vals and 'unsubscription_date' not in vals: + vals['unsubscription_date'] = fields.Datetime.now() if vals['opt_out'] else False + if vals.get('unsubscription_date'): + vals['opt_out'] = True + return super(MassMailingContactListRel, self).write(vals) diff --git a/addons/mass_mailing/report/mailing_trace_report_views.xml b/addons/mass_mailing/report/mailing_trace_report_views.xml index 464c9f09327..01b94169f32 100644 --- a/addons/mass_mailing/report/mailing_trace_report_views.xml +++ b/addons/mass_mailing/report/mailing_trace_report_views.xml @@ -95,8 +95,4 @@
- - diff --git a/addons/mass_mailing/views/link_tracker_views.xml b/addons/mass_mailing/views/link_tracker_views.xml index 615b4c27f24..ef227f04f75 100644 --- a/addons/mass_mailing/views/link_tracker_views.xml +++ b/addons/mass_mailing/views/link_tracker_views.xml @@ -78,12 +78,4 @@ - - - - diff --git a/addons/mass_mailing/views/mailing_contact_subscription_views.xml b/addons/mass_mailing/views/mailing_contact_subscription_views.xml new file mode 100644 index 00000000000..d59e92300f4 --- /dev/null +++ b/addons/mass_mailing/views/mailing_contact_subscription_views.xml @@ -0,0 +1,53 @@ + +