From 772e1c0cc4e75cec971d2b4e1c820eb54872dc93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 17 Jul 2019 10:58:39 +0000 Subject: [PATCH] [REF] mass_mailing: rename mail.mass_mailing.{.contact{_rel}, list{.merge}} models PURPOSE Mass mailing is currently a bit messy. As SMS will be added as a way to notify people in mass through SMS let us take this opportunity to somehow clean this application: organization, light code cleaning, model renaming. SPECIFICATIONS Rename mail.mass_mailing.list and mail.mass_mailing.list to mailing.list and mailing.list.merge. Rename mail.mass_mailing.contact to mailing.contact. Rename mail.mailing_list.list_contact_rel to mailing.contact.subscription. Rationale : * those new names are easier to understand: mailing.list and mailing.contact are less mail-related, especially taking into account that SMS will allow to be less mail-oriented; * those names are easier to read / find / understand; * align wizard and sub-models naming with the main naming; * have a mailing as first part of namespacing; MIGRATION mail.mass_mailing.list model -> mailing.list mail.mass_mailing.list.merge model -> mailing.list.merge mail.mass_mailing.contact model -> mailing.contact mail.mass_mailing.list_contact_rel model -> mailing.contact.subscription mail_mass_mailing_contact_list_rel table -> mailing_contact_list_rel (specific case of a decorated m2m) fields updated (no column change) * mailing.list: subscription_contact_ids -> subscription_ids LINKS Task ID 2037906 Preparing task ID 1997464 (SMS addition in mass mailing) PR #34938 --- addons/mass_mailing/__manifest__.py | 6 +-- addons/mass_mailing/controllers/main.py | 8 +-- .../mass_mailing/data/mass_mailing_demo.xml | 14 ++--- addons/mass_mailing/models/__init__.py | 4 +- ..._mailing_contact.py => mailing_contact.py} | 19 ++++--- .../{mass_mailing_list.py => mailing_list.py} | 28 +++++----- addons/mass_mailing/models/mass_mailing.py | 24 ++++----- .../mass_mailing/security/ir.model.access.csv | 6 +-- .../static/src/js/mass_mailing.js | 2 +- .../tests/test_mass_mailing_list_merge.py | 8 +-- .../tests/test_mass_mailing_shortener.py | 10 ++-- ...ct_views.xml => mailing_contact_views.xml} | 51 +++++++++---------- ..._list_views.xml => mailing_list_views.xml} | 36 ++++++------- .../mass_mailing/views/mass_mailing_views.xml | 6 +-- addons/mass_mailing/wizard/__init__.py | 2 +- .../wizard/mail_compose_message.py | 5 +- ...ng_list_merge.py => mailing_list_merge.py} | 8 +-- ...views.xml => mailing_list_merge_views.xml} | 12 ++--- .../tests/test_mail_auto_blacklist.py | 12 ++--- .../tests/test_mass_mailing.py | 20 ++++---- addons/website_mass_mailing/__manifest__.py | 3 +- .../website_mass_mailing/controllers/main.py | 18 +++---- .../website_mass_mailing/models/__init__.py | 3 +- .../models/mailing_list.py | 14 +++++ ...ailing_list.py => website_mass_mailing.py} | 12 +---- .../src/js/website_mass_mailing.editor.js | 2 +- .../views/mailing_list_views.xml | 26 ++++++++++ ...iew.xml => website_mass_mailing_views.xml} | 24 --------- 28 files changed, 193 insertions(+), 190 deletions(-) rename addons/mass_mailing/models/{mass_mailing_contact.py => mailing_contact.py} (88%) rename addons/mass_mailing/models/{mass_mailing_list.py => mailing_list.py} (82%) rename addons/mass_mailing/views/{mass_mailing_contact_views.xml => mailing_contact_views.xml} (86%) rename addons/mass_mailing/views/{mass_mailing_list_views.xml => mailing_list_views.xml} (85%) rename addons/mass_mailing/wizard/{mass_mailing_list_merge.py => mailing_list_merge.py} (79%) rename addons/mass_mailing/wizard/{mass_mailing_list_merge_views.xml => mailing_list_merge_views.xml} (75%) create mode 100644 addons/website_mass_mailing/models/mailing_list.py rename addons/website_mass_mailing/models/{mass_mailing_list.py => website_mass_mailing.py} (56%) create mode 100644 addons/website_mass_mailing/views/mailing_list_views.xml rename addons/website_mass_mailing/views/{mass_mailing_view.xml => website_mass_mailing_views.xml} (50%) diff --git a/addons/mass_mailing/__manifest__.py b/addons/mass_mailing/__manifest__.py index 10c3939ea80..82c20b4afae 100644 --- a/addons/mass_mailing/__manifest__.py +++ b/addons/mass_mailing/__manifest__.py @@ -24,14 +24,14 @@ 'data/mail_data.xml', 'data/mass_mailing_data.xml', 'wizard/mail_compose_message_views.xml', - 'wizard/mass_mailing_list_merge_views.xml', + 'wizard/mailing_list_merge_views.xml', 'wizard/test_mailing_views.xml', 'wizard/mass_mailing_schedule_date_views.xml', 'views/mass_mailing_views_menus.xml', 'views/mailing_trace_views.xml', 'views/link_tracker_views.xml', - 'views/mass_mailing_contact_views.xml', - 'views/mass_mailing_list_views.xml', + 'views/mailing_contact_views.xml', + 'views/mailing_list_views.xml', 'views/mass_mailing_views.xml', 'views/res_config_settings_views.xml', 'report/mailing_trace_report_views.xml', diff --git a/addons/mass_mailing/controllers/main.py b/addons/mass_mailing/controllers/main.py index 4470bb75dfa..56e5259cdb3 100644 --- a/addons/mass_mailing/controllers/main.py +++ b/addons/mass_mailing/controllers/main.py @@ -35,11 +35,11 @@ class MassMailController(http.Controller): if not self._valid_unsubscribe_token(mailing_id, res_id, email, str(token)): raise exceptions.AccessDenied() - if mailing.mailing_model_real == 'mail.mass_mailing.contact': + if mailing.mailing_model_real == 'mailing.contact': # Unsubscribe directly + Let the user choose his subscriptions mailing.update_opt_out(email, mailing.contact_list_ids.ids, True) - contacts = request.env['mail.mass_mailing.contact'].sudo().search([('email_normalized', '=', tools.email_normalize(email))]) + contacts = request.env['mailing.contact'].sudo().search([('email_normalized', '=', tools.email_normalize(email))]) subscription_list_ids = contacts.mapped('subscription_list_ids') # In many user are found : if user is opt_out on the list with contact_id 1 but not with contact_id 2, # assume that the user is not opt_out on both @@ -49,7 +49,7 @@ class MassMailController(http.Controller): opt_out_list_ids = set([list.id for list in opt_out_list_ids if list not in opt_in_list_ids]) unique_list_ids = set([list.list_id.id for list in subscription_list_ids]) - list_ids = request.env['mail.mass_mailing.list'].sudo().browse(unique_list_ids) + list_ids = request.env['mailing.list'].sudo().browse(unique_list_ids) unsubscribed_list = ', '.join(str(list.name) for list in mailing.contact_list_ids if list.is_public) return request.render('mass_mailing.page_unsubscribe', { 'contacts': contacts, @@ -62,7 +62,7 @@ class MassMailController(http.Controller): 'show_blacklist_button': request.env['ir.config_parameter'].sudo().get_param('mass_mailing.show_blacklist_buttons'), }) else: - opt_in_lists = request.env['mail.mass_mailing.list_contact_rel'].sudo().search([ + opt_in_lists = request.env['mailing.contact.subscription'].sudo().search([ ('contact_id.email_normalized', '=', email), ('opt_out', '=', False) ]).mapped('list_id') diff --git a/addons/mass_mailing/data/mass_mailing_demo.xml b/addons/mass_mailing/data/mass_mailing_demo.xml index 172d90873bd..825340f1618 100644 --- a/addons/mass_mailing/data/mass_mailing_demo.xml +++ b/addons/mass_mailing/data/mass_mailing_demo.xml @@ -8,38 +8,38 @@ - + Imported Contacts - + Aristide Antario aa@example.com - + Beverly Bridge bb@example.com - + Carol Cartridge cc@example.com - + David Dawson dd@example.com - + Elsa Ericson ee@example.com - + True diff --git a/addons/mass_mailing/models/__init__.py b/addons/mass_mailing/models/__init__.py index d00a7590cf8..3caef695204 100644 --- a/addons/mass_mailing/models/__init__.py +++ b/addons/mass_mailing/models/__init__.py @@ -2,8 +2,8 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from . import link_tracker -from . import mass_mailing_contact -from . import mass_mailing_list +from . import mailing_contact +from . import mailing_list from . import mass_mailing from . import mailing_trace from . import mail_mail diff --git a/addons/mass_mailing/models/mass_mailing_contact.py b/addons/mass_mailing/models/mailing_contact.py similarity index 88% rename from addons/mass_mailing/models/mass_mailing_contact.py rename to addons/mass_mailing/models/mailing_contact.py index 817c30830ac..966a5f29aaa 100644 --- a/addons/mass_mailing/models/mass_mailing_contact.py +++ b/addons/mass_mailing/models/mailing_contact.py @@ -9,13 +9,13 @@ 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 = 'mail.mass_mailing.list_contact_rel' + _name = 'mailing.contact.subscription' _description = 'Mass Mailing Subscription Information' - _table = 'mail_mass_mailing_contact_list_rel' + _table = 'mailing_contact_list_rel' _rec_name = 'contact_id' - contact_id = fields.Many2one('mail.mass_mailing.contact', string='Contact', ondelete='cascade', required=True) - list_id = fields.Many2one('mail.mass_mailing.list', string='Mailing List', ondelete='cascade', required=True) + 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', help='The contact has chosen not to receive mails anymore from this list', default=False) unsubscription_date = fields.Datetime(string='Unsubscription Date') @@ -45,7 +45,7 @@ class MassMailingContactListRel(models.Model): action = { 'name': _(contact_id.name), 'type': 'ir.actions.act_window', - 'res_model': 'mail.mass_mailing.contact', + 'res_model': 'mailing.contact', 'view_mode': 'form', 'target': 'current', 'res_id': contact_id.id @@ -58,7 +58,7 @@ class MassMailingContact(models.Model): because it holds only some basic information: name, email. The purpose is to be able to deal with large contact list to email without bloating the partner base.""" - _name = 'mail.mass_mailing.contact' + _name = 'mailing.contact' _inherit = ['mail.thread.blacklist'] _description = 'Mass Mailing Contact' _order = 'email' @@ -70,10 +70,9 @@ class MassMailingContact(models.Model): email = fields.Char(required=True) is_email_valid = fields.Boolean(compute='_compute_is_email_valid', store=True) list_ids = fields.Many2many( - 'mail.mass_mailing.list', 'mail_mass_mailing_contact_list_rel', + 'mailing.list', 'mailing_contact_list_rel', 'contact_id', 'list_id', string='Mailing Lists') - subscription_list_ids = fields.One2many('mail.mass_mailing.list_contact_rel', - 'contact_id', string='Subscription Information') + subscription_list_ids = fields.One2many('mailing.contact.subscription', 'contact_id', string='Subscription Information') country_id = fields.Many2one('res.country', string='Country') tag_ids = fields.Many2many('res.partner.category', string='Tags') opt_out = fields.Boolean('Opt Out', compute='_compute_opt_out', search='_search_opt_out', @@ -97,7 +96,7 @@ class MassMailingContact(models.Model): if 'default_list_ids' in self._context and isinstance(self._context['default_list_ids'], (list, tuple)) and len(self._context['default_list_ids']) == 1: [active_list_id] = self._context['default_list_ids'] - contacts = self.env['mail.mass_mailing.list_contact_rel'].search([('list_id', '=', active_list_id)]) + contacts = self.env['mailing.contact.subscription'].search([('list_id', '=', active_list_id)]) return [('id', 'in', [record.contact_id.id for record in contacts if record.opt_out == value])] else: raise UserError('Search opt out cannot be executed without a unique and valid active mailing list context.') diff --git a/addons/mass_mailing/models/mass_mailing_list.py b/addons/mass_mailing/models/mailing_list.py similarity index 82% rename from addons/mass_mailing/models/mass_mailing_list.py rename to addons/mass_mailing/models/mailing_list.py index 48cde5784c3..ad78b7ad85f 100644 --- a/addons/mass_mailing/models/mass_mailing_list.py +++ b/addons/mass_mailing/models/mailing_list.py @@ -6,7 +6,7 @@ from odoo import api, fields, models class MassMailingList(models.Model): """Model of a contact list. """ - _name = 'mail.mass_mailing.list' + _name = 'mailing.list' _order = 'name' _description = 'Mailing List' @@ -14,9 +14,9 @@ class MassMailingList(models.Model): active = fields.Boolean(default=True) contact_nbr = fields.Integer(compute="_compute_contact_nbr", string='Number of Contacts') contact_ids = fields.Many2many( - 'mail.mass_mailing.contact', 'mail_mass_mailing_contact_list_rel', 'list_id', 'contact_id', + 'mailing.contact', 'mailing_contact_list_rel', 'list_id', 'contact_id', string='Mailing Lists') - subscription_contact_ids = fields.One2many('mail.mass_mailing.list_contact_rel', 'list_id', + subscription_ids = fields.One2many('mailing.contact.subscription', 'list_id', string='Subscription Information') is_public = fields.Boolean(default=True, help="The mailing list can be accessible by recipient in the unsubscription" " page to allows him to update his subscription preferences.") @@ -27,8 +27,8 @@ class MassMailingList(models.Model): select list_id, count(*) from - mail_mass_mailing_contact_list_rel r - left join mail_mass_mailing_contact c on (r.contact_id=c.id) + mailing_contact_list_rel r + left join mailing_contact c on (r.contact_id=c.id) left join mail_blacklist bl on c.email_normalized = bl.email and bl.active where list_id in %s @@ -73,30 +73,30 @@ class MassMailingList(models.Model): # Put destination is sources lists if not already the case src_lists |= self self.env.cr.execute(""" - INSERT INTO mail_mass_mailing_contact_list_rel (contact_id, list_id) + INSERT INTO mailing_contact_list_rel (contact_id, list_id) SELECT st.contact_id AS contact_id, %s AS list_id FROM ( SELECT contact.id AS contact_id, contact.email AS email, - mailing_list.id AS list_id, + list.id AS list_id, row_number() OVER (PARTITION BY email ORDER BY email) AS rn FROM - mail_mass_mailing_contact contact, - mail_mass_mailing_contact_list_rel contact_list_rel, - mail_mass_mailing_list mailing_list + mailing_contact contact, + mailing_contact_list_rel contact_list_rel, + mailing_list list WHERE contact.id=contact_list_rel.contact_id AND COALESCE(contact_list_rel.opt_out,FALSE) = FALSE AND contact.email_normalized NOT IN (select email from mail_blacklist where active = TRUE) - AND mailing_list.id=contact_list_rel.list_id - AND mailing_list.id IN %s + AND list.id=contact_list_rel.list_id + AND list.id IN %s AND NOT EXISTS ( SELECT 1 FROM - mail_mass_mailing_contact contact2, - mail_mass_mailing_contact_list_rel contact_list_rel2 + mailing_contact contact2, + mailing_contact_list_rel contact_list_rel2 WHERE contact2.email = contact.email AND contact_list_rel2.contact_id = contact2.id AND contact_list_rel2.list_id = %s diff --git a/addons/mass_mailing/models/mass_mailing.py b/addons/mass_mailing/models/mass_mailing.py index d0249777baf..29493baa4e8 100644 --- a/addons/mass_mailing/models/mass_mailing.py +++ b/addons/mass_mailing/models/mass_mailing.py @@ -24,8 +24,8 @@ MASS_MAILING_BUSINESS_MODELS = [ 'res.partner', 'event.track', 'sale.order', - 'mail.mass_mailing.list', - 'mail.mass_mailing.contact' + 'mailing.list', + 'mailing.contact' ] # Syntax of the data URL Scheme: https://tools.ietf.org/html/rfc2397#section-3 @@ -205,7 +205,7 @@ class MassMailing(models.Model): def default_get(self, fields): res = super(MassMailing, self).default_get(fields) if 'reply_to_mode' in fields and not 'reply_to_mode' in res and res.get('mailing_model_real'): - if res['mailing_model_real'] in ['res.partner', 'mail.mass_mailing.contact']: + if res['mailing_model_real'] in ['res.partner', 'mailing.contact']: res['reply_to_mode'] = 'email' else: res['reply_to_mode'] = 'thread' @@ -240,15 +240,15 @@ class MassMailing(models.Model): reply_to = fields.Char(string='Reply To', help='Preferred Reply-To Address', default=lambda self: self.env['mail.message']._get_default_from()) # recipients - mailing_model_real = fields.Char(compute='_compute_model', string='Recipients Real Model', default='mail.mass_mailing.contact', required=True) + mailing_model_real = fields.Char(compute='_compute_model', string='Recipients Real Model', default='mailing.contact', required=True) mailing_model_id = fields.Many2one('ir.model', string='Recipients Model', domain=[('model', 'in', MASS_MAILING_BUSINESS_MODELS)], - default=lambda self: self.env.ref('mass_mailing.model_mail_mass_mailing_list').id) + default=lambda self: self.env.ref('mass_mailing.model_mailing_list').id) mailing_model_name = fields.Char(related='mailing_model_id.model', string='Recipients Model Name', readonly=True, related_sudo=True) mailing_domain = fields.Char(string='Domain', oldname='domain', default=[]) mail_server_id = fields.Many2one('ir.mail_server', string='Mail Server', default=_get_default_mail_server_id, help="Use a specific mail server in priority. Otherwise Odoo relies on the first outgoing mail server available (based on their sequencing) as it does for normal mails.") - contact_list_ids = fields.Many2many('mail.mass_mailing.list', 'mail_mass_mailing_list_rel', + contact_list_ids = fields.Many2many('mailing.list', 'mail_mass_mailing_list_rel', string='Mailing Lists') contact_ab_pc = fields.Integer(string='A/B Testing percentage', help='Percentage of the contacts that will be mailed. Recipients will be taken randomly.', default=100) @@ -292,7 +292,7 @@ class MassMailing(models.Model): @api.depends('mailing_model_id') def _compute_model(self): for record in self: - record.mailing_model_real = (record.mailing_model_name != 'mail.mass_mailing.list') and record.mailing_model_name or 'mail.mass_mailing.contact' + record.mailing_model_real = (record.mailing_model_name != 'mailing.list') and record.mailing_model_name or 'mailing.contact' def _compute_statistics(self): """ Compute statistics of the mass mailing """ @@ -349,7 +349,7 @@ class MassMailing(models.Model): def _onchange_model_and_list(self): mailing_domain = [] if self.mailing_model_name: - if self.mailing_model_name == 'mail.mass_mailing.list': + if self.mailing_model_name == 'mailing.list': if self.contact_list_ids: mailing_domain.append(('list_ids', 'in', self.contact_list_ids.ids)) else: @@ -488,9 +488,9 @@ class MassMailing(models.Model): def update_opt_out(self, email, list_ids, value): if len(list_ids) > 0: - model = self.env['mail.mass_mailing.contact'].with_context(active_test=False) + model = self.env['mailing.contact'].with_context(active_test=False) records = model.search([('email_normalized', '=', tools.email_normalize(email))]) - opt_out_records = self.env['mail.mass_mailing.list_contact_rel'].search([ + opt_out_records = self.env['mailing.contact.subscription'].search([ ('contact_id', 'in', records.ids), ('list_id', 'in', list_ids), ('opt_out', '!=', value) @@ -514,11 +514,11 @@ class MassMailing(models.Model): self.ensure_one() opt_out = {} target = self.env[self.mailing_model_real] - if self.mailing_model_real == "mail.mass_mailing.contact": + if self.mailing_model_real == "mailing.contact": # if user is opt_out on One list but not on another # or if two user with same email address, one opted in and the other one opted out, send the mail anyway # TODO DBE Fixme : Optimise the following to get real opt_out and opt_in - target_list_contacts = self.env['mail.mass_mailing.list_contact_rel'].search( + target_list_contacts = self.env['mailing.contact.subscription'].search( [('list_id', 'in', self.contact_list_ids.ids)]) opt_out_contacts = target_list_contacts.filtered(lambda rel: rel.opt_out).mapped('contact_id.email_normalized') opt_in_contacts = target_list_contacts.filtered(lambda rel: not rel.opt_out).mapped('contact_id.email_normalized') diff --git a/addons/mass_mailing/security/ir.model.access.csv b/addons/mass_mailing/security/ir.model.access.csv index ed137e9ba92..1bf09f0486a 100644 --- a/addons/mass_mailing/security/ir.model.access.csv +++ b/addons/mass_mailing/security/ir.model.access.csv @@ -1,7 +1,8 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_mass_mailing_tag,mail.mass_mailing.tag,model_mail_mass_mailing_tag,mass_mailing.group_mass_mailing_campaign,1,1,1,1 -access_mass_mailing_contact,mail.mass_mailing.contact,model_mail_mass_mailing_contact,mass_mailing.group_mass_mailing_user,1,1,1,1 -access_mass_mailing_list,mail.mass_mailing.list,model_mail_mass_mailing_list,mass_mailing.group_mass_mailing_user,1,1,1,1 +access_mailing_contact_mm_user,access.mailing.contact.mm.user,model_mailing_contact,mass_mailing.group_mass_mailing_user,1,1,1,1 +access_mailing_contact_subscription_mm_user,access.mailing.contact.subscription.mm.user,model_mailing_contact_subscription,mass_mailing.group_mass_mailing_user,1,1,1,1 +access_mailing_list_mm_user,access.mailing.list.mm.user,model_mailing_list,mass_mailing.group_mass_mailing_user,1,1,1,1 access_mass_mailing_stage,mail.mass_mailing.stage,model_mail_mass_mailing_stage,mass_mailing.group_mass_mailing_user,1,1,1,1 access_mass_mailing_campaign,mail.mass_mailing.campaign,model_mail_mass_mailing_campaign,mass_mailing.group_mass_mailing_user,1,1,1,1 access_mass_mailing_campaign_system,mail.mass_mailing.campaign.system,model_mail_mass_mailing_campaign,base.group_system,1,1,1,1 @@ -13,5 +14,4 @@ access_mailing_trace_report_mm_user,access.mailing.trace.report.mm.user,model_ma access_utm_source,access_utm_source,utm.model_utm_source,mass_mailing.group_mass_mailing_user,1,1,1,0 access_ir_mail_server,access_ir_mail_server,base.model_ir_mail_server,mass_mailing.group_mass_mailing_user,1,0,0,0 access_mail_blacklist_mass_mailing_user,access.mail.blacklist.mass_mailing_user,mail.model_mail_blacklist,mass_mailing.group_mass_mailing_user,1,1,1,1 -access_mail_mass_mailing_list_contact_rel,access.mail.mass_mailing_list_contact_rel,model_mail_mass_mailing_list_contact_rel,mass_mailing.group_mass_mailing_user,1,1,1,1 access_link_tracker_mailing,access.link.tracker.mailing,link_tracker.model_link_tracker,mass_mailing.group_mass_mailing_user,1,1,1,1 \ No newline at end of file diff --git a/addons/mass_mailing/static/src/js/mass_mailing.js b/addons/mass_mailing/static/src/js/mass_mailing.js index 404ed6e554b..b516af7a47a 100644 --- a/addons/mass_mailing/static/src/js/mass_mailing.js +++ b/addons/mass_mailing/static/src/js/mass_mailing.js @@ -16,7 +16,7 @@ KanbanRecord.include({ _openRecord: function () { if (this.modelName === 'mail.mass_mailing.campaign') { this.$('.oe_mailings').click(); - } else if (this.modelName === 'mail.mass_mailing.list' && + } else if (this.modelName === 'mailing.list' && this.$('.o_mailing_list_kanban_boxes a')) { this.$('.o_mailing_list_kanban_boxes a').first().click(); } else { diff --git a/addons/mass_mailing/tests/test_mass_mailing_list_merge.py b/addons/mass_mailing/tests/test_mass_mailing_list_merge.py index 3408989d77e..fe8feba73ec 100644 --- a/addons/mass_mailing/tests/test_mass_mailing_list_merge.py +++ b/addons/mass_mailing/tests/test_mass_mailing_list_merge.py @@ -9,7 +9,7 @@ class TestMassMailingCommon(common.TransactionCase): def test_00_test_mass_mailing_list_merge(self): # Data set up - mailing_list_A = self.env['mail.mass_mailing.list'].create({ + mailing_list_A = self.env['mailing.list'].create({ 'name': 'A', 'contact_ids': [ (0, 0, {'name': 'Noel Flantier', 'email': 'noel.flantier@example.com'}), @@ -18,7 +18,7 @@ class TestMassMailingCommon(common.TransactionCase): ] }) - mailing_list_B = self.env['mail.mass_mailing.list'].create({ + mailing_list_B = self.env['mailing.list'].create({ 'name': 'B', 'contact_ids': [ (0, 0, {'name': 'Icallhimtest', 'email': 'icallhimtest@example.com'}), @@ -27,7 +27,7 @@ class TestMassMailingCommon(common.TransactionCase): ] }) - mailing_list_C = self.env['mail.mass_mailing.list'].create({ + mailing_list_C = self.env['mailing.list'].create({ 'name': 'C', 'contact_ids': [ (0, 0, {'name': 'Norberto', 'email': 'norbert@example.com'}), @@ -39,7 +39,7 @@ class TestMassMailingCommon(common.TransactionCase): # This test ensure that the mailing lists are correctly merged and no # duplicates are appearing in C - result_list = self.env['mass.mailing.list.merge'].create({ + result_list = self.env['mailing.list.merge'].create({ 'src_list_ids': [(4, list_id) for list_id in [mailing_list_A.id, mailing_list_B.id]], 'dest_list_id': mailing_list_C.id, 'merge_options': 'existing', diff --git a/addons/mass_mailing/tests/test_mass_mailing_shortener.py b/addons/mass_mailing/tests/test_mass_mailing_shortener.py index d279208264d..5b7ba5cf877 100644 --- a/addons/mass_mailing/tests/test_mass_mailing_shortener.py +++ b/addons/mass_mailing/tests/test_mass_mailing_shortener.py @@ -35,23 +35,23 @@ class TestMassMailingShortener(common.TransactionCase): self.addCleanup(patcher2.stop) def test_00_test_mass_mailing_shortener(self): - mailing_list_A = self.env['mail.mass_mailing.list'].create({ + mailing_list_A = self.env['mailing.list'].create({ 'name': 'A', }) - self.env['mail.mass_mailing.contact'].create({ + self.env['mailing.contact'].create({ 'name': 'User 1', 'email': 'user1@example.com', 'list_ids': [(4, mailing_list_A.id)] }) - self.env['mail.mass_mailing.contact'].create({ + self.env['mailing.contact'].create({ 'name': 'User 2', 'email': 'user2@example.com', 'list_ids': [(4, mailing_list_A.id)] }) - self.env['mail.mass_mailing.contact'].create({ + self.env['mailing.contact'].create({ 'name': 'User 3', 'email': 'user3@example.com', 'list_ids': [(4, mailing_list_A.id)] }) mass_mailing = self.env['mail.mass_mailing'].create({ "reply_to_mode": "email", "reply_to": "Administrator ", - "mailing_model_id": self.env.ref('mass_mailing.model_mail_mass_mailing_list').id, + "mailing_model_id": self.env.ref('mass_mailing.model_mailing_list').id, "mailing_domain": "[('list_ids', 'in', [%d])]" % mailing_list_A.id, "contact_list_ids": [[6, False, [mailing_list_A.id]]], "mass_mailing_campaign_id": False, diff --git a/addons/mass_mailing/views/mass_mailing_contact_views.xml b/addons/mass_mailing/views/mailing_contact_views.xml similarity index 86% rename from addons/mass_mailing/views/mass_mailing_contact_views.xml rename to addons/mass_mailing/views/mailing_contact_views.xml index f474b76240c..9a0b8989628 100644 --- a/addons/mass_mailing/views/mass_mailing_contact_views.xml +++ b/addons/mass_mailing/views/mailing_contact_views.xml @@ -1,10 +1,9 @@ - - - - mail.mass_mailing.list_contact_rel.view.form - mail.mass_mailing.list_contact_rel + + + mailing.contact.subscription.view.form + mailing.contact.subscription 10
@@ -27,10 +26,9 @@ - - - mail.mass_mailing.list_contact_rel.list_contact.view.tree - mail.mass_mailing.list_contact_rel + + mailing.contact.subscription.view.tree + mailing.contact.subscription @@ -43,10 +41,9 @@ - - - mail.mass_mailing.list_contact_rel.view.search - mail.mass_mailing.list_contact_rel + + mailing.contact.subscription.view.search + mailing.contact.subscription @@ -71,8 +68,8 @@ - mail.mass_mailing.contact.search - mail.mass_mailing.contact + mailing.contact.search + mailing.contact - mail.mass_mailing.contact.tree - mail.mass_mailing.contact + mailing.contact.tree + mailing.contact 10 @@ -116,8 +113,8 @@ - mail.mass_mailing.contact.kanban - mail.mass_mailing.contact + mailing.contact.kanban + mailing.contact @@ -158,8 +155,8 @@ - mail.mass_mailing.contact.form - mail.mass_mailing.contact + mailing.contact.form + mailing.contact 10 @@ -213,8 +210,8 @@ - mail.mass_mailing.contact.pivot - mail.mass_mailing.contact + mailing.contact.pivot + mailing.contact 10 @@ -224,8 +221,8 @@ - mail.mass_mailing.contact.graph - mail.mass_mailing.contact + mailing.contact.graph + mailing.contact 10 @@ -236,7 +233,7 @@ Mailing List Contacts - mail.mass_mailing.contact + mailing.contact tree,kanban,form,graph,pivot {'search_default_valid_recipient': 1} @@ -250,7 +247,7 @@ Recipients - mail.mass_mailing.contact + mailing.contact tree,form,graph [('list_ids', 'in', [active_id])] {'search_default_valid_recipients': 1, 'default_list_ids': [active_id]} diff --git a/addons/mass_mailing/views/mass_mailing_list_views.xml b/addons/mass_mailing/views/mailing_list_views.xml similarity index 85% rename from addons/mass_mailing/views/mass_mailing_list_views.xml rename to addons/mass_mailing/views/mailing_list_views.xml index 3a3185f9bda..597c7b3a9ff 100644 --- a/addons/mass_mailing/views/mass_mailing_list_views.xml +++ b/addons/mass_mailing/views/mailing_list_views.xml @@ -1,9 +1,9 @@ - - mail.mass_mailing.list.search - mail.mass_mailing.list + + mailing.list.view.search + mailing.list @@ -18,9 +18,9 @@ - - mail.mass_mailing.list.tree - mail.mass_mailing.list + + mailing.list.view.tree + mailing.list 10 @@ -32,9 +32,9 @@ - - mail.mass_mailing.list.form - mail.mass_mailing.list + + mailing.list.form + mailing.list @@ -60,9 +60,9 @@ - - mail.mass_mailing.list.form.simplified - mail.mass_mailing.list + + mailing.list.form.simplified + mailing.list @@ -88,15 +88,15 @@ Create a Mass Mailing List - mail.mass_mailing.list + mailing.list form - + new - - mail.mass_mailing.list.kanban - mail.mass_mailing.list + + mailing.list.view.kanban + mailing.list @@ -149,7 +149,7 @@ Mailing Lists - mail.mass_mailing.list + mailing.list kanban,tree,form

diff --git a/addons/mass_mailing/views/mass_mailing_views.xml b/addons/mass_mailing/views/mass_mailing_views.xml index 7bbf205497f..7643974d42b 100644 --- a/addons/mass_mailing/views/mass_mailing_views.xml +++ b/addons/mass_mailing/views/mass_mailing_views.xml @@ -158,10 +158,10 @@ -

+