[REF] mass_mailing: rename mail.mass_mailing model
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 model to mailing.mailing. Rationale : * mailing is now a prefix for mass mailing models; * mailing.mailing is easier to read / find / understand; Note that mail.mass_mailing.campaign is not updated as it is likely to be removed soon and replaced by simple utm.campaign model. MIGRATION mail.mass_mailing model -> mailing.mailing mail_mass_mailing table -> mailing_mailing LINKS Task ID 2037906 Preparing task ID 1997464 (SMS addition in mass mailing) PR #34938
This commit is contained in:
@@ -25,14 +25,14 @@
|
||||
'data/mass_mailing_data.xml',
|
||||
'wizard/mail_compose_message_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',
|
||||
'wizard/mailing_mailing_schedule_date_views.xml',
|
||||
'wizard/mailing_mailing_test_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_list_views.xml',
|
||||
'views/mass_mailing_views.xml',
|
||||
'views/mailing_mailing_views.xml',
|
||||
'views/res_config_settings_views.xml',
|
||||
'report/mailing_trace_report_views.xml',
|
||||
'views/assets.xml',
|
||||
|
||||
@@ -14,11 +14,11 @@ class MassMailController(http.Controller):
|
||||
def _valid_unsubscribe_token(self, mailing_id, res_id, email, token):
|
||||
if not (mailing_id and res_id and email and token):
|
||||
return False
|
||||
mailing = request.env['mail.mass_mailing'].sudo().browse(mailing_id)
|
||||
mailing = request.env['mailing.mailing'].sudo().browse(mailing_id)
|
||||
return consteq(mailing._unsubscribe_token(res_id, email), token)
|
||||
|
||||
def _log_blacklist_action(self, blacklist_entry, mailing_id, description):
|
||||
mailing = request.env['mail.mass_mailing'].sudo().browse(mailing_id)
|
||||
mailing = request.env['mailing.mailing'].sudo().browse(mailing_id)
|
||||
model_display = mailing.mailing_model_id.display_name
|
||||
blacklist_entry._message_log(body=description + " ({})".format(model_display))
|
||||
|
||||
@@ -29,7 +29,7 @@ class MassMailController(http.Controller):
|
||||
|
||||
@http.route(['/mail/mailing/<int:mailing_id>/unsubscribe'], type='http', website=True, auth='public')
|
||||
def mailing(self, mailing_id, email=None, res_id=None, token="", **post):
|
||||
mailing = request.env['mail.mass_mailing'].sudo().browse(mailing_id)
|
||||
mailing = request.env['mailing.mailing'].sudo().browse(mailing_id)
|
||||
if mailing.exists():
|
||||
res_id = res_id and int(res_id)
|
||||
if not self._valid_unsubscribe_token(mailing_id, res_id, email, str(token)):
|
||||
@@ -82,7 +82,7 @@ class MassMailController(http.Controller):
|
||||
|
||||
@http.route('/mail/mailing/unsubscribe', type='json', auth='public')
|
||||
def unsubscribe(self, mailing_id, opt_in_ids, opt_out_ids, email, res_id, token):
|
||||
mailing = request.env['mail.mass_mailing'].sudo().browse(mailing_id)
|
||||
mailing = request.env['mailing.mailing'].sudo().browse(mailing_id)
|
||||
if mailing.exists():
|
||||
if not self._valid_unsubscribe_token(mailing_id, res_id, email, token):
|
||||
return 'unauthorized'
|
||||
@@ -152,7 +152,7 @@ class MassMailController(http.Controller):
|
||||
|
||||
@http.route('/mailing/feedback', type='json', auth='public')
|
||||
def send_feedback(self, mailing_id, res_id, email, feedback, token):
|
||||
mailing = request.env['mail.mass_mailing'].sudo().browse(mailing_id)
|
||||
mailing = request.env['mailing.mailing'].sudo().browse(mailing_id)
|
||||
if mailing.exists() and email:
|
||||
if not self._valid_unsubscribe_token(mailing_id, res_id, email, token):
|
||||
return 'unauthorized'
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
<!-- Cron that process the mass mailing queue -->
|
||||
<record id="ir_cron_mass_mailing_queue" model="ir.cron">
|
||||
<field name="name">Mass Mailing: Process queue</field>
|
||||
<field name="model_id" ref="model_mail_mass_mailing"/>
|
||||
<field name="model_id" ref="model_mailing_mailing"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model._process_mass_mailing_queue()</field>
|
||||
<field name="user_id" ref="base.user_root" />
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
<field name="tag_ids" eval="[(6,0,[ref('mass_mailing.mass_mail_tag_1')])]"/>
|
||||
</record>
|
||||
|
||||
<record id="mass_mail_1" model="mail.mass_mailing">
|
||||
<record id="mass_mail_1" model="mailing.mailing">
|
||||
<field name="name">Newsletter 1</field>
|
||||
<field name="subject" eval="'%s Newsletter' % (DateTime.today().strftime('%B'))"/>
|
||||
<field name="state">done</field>
|
||||
@@ -196,7 +196,7 @@
|
||||
<field name="attachment_ids" eval="[(4, ref('mass_mail_attach_1'))]"/>
|
||||
</record>
|
||||
<!-- Generate link tracker information from it -->
|
||||
<function model="mail.mass_mailing" name="convert_links" eval="[ref('mass_mailing.mass_mail_1')]"/>
|
||||
<function model="mailing.mailing" name="convert_links" eval="[ref('mass_mailing.mass_mail_1')]"/>
|
||||
|
||||
<record id="mass_mail_1_stat_0" model="mailing.trace">
|
||||
<field name="mass_mailing_id" eval="ref('mass_mail_1')"/>
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
from . import link_tracker
|
||||
from . import mailing_contact
|
||||
from . import mailing_list
|
||||
from . import mass_mailing
|
||||
from . import mailing_trace
|
||||
from . import mailing
|
||||
from . import mail_mail
|
||||
from . import mail_template
|
||||
from . import mail_thread
|
||||
|
||||
@@ -7,7 +7,7 @@ from odoo import api, fields, models
|
||||
class LinkTracker(models.Model):
|
||||
_inherit = "link.tracker"
|
||||
|
||||
mass_mailing_id = fields.Many2one('mail.mass_mailing', string='Mass Mailing')
|
||||
mass_mailing_id = fields.Many2one('mailing.mailing', string='Mass Mailing')
|
||||
mass_mailing_campaign_id = fields.Many2one('mail.mass_mailing.campaign', string='Mass Mailing Campaign')
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ class LinkTrackerClick(models.Model):
|
||||
_inherit = "link.tracker.click"
|
||||
|
||||
mailing_trace_id = fields.Many2one('mailing.trace', string='Mail Statistics')
|
||||
mass_mailing_id = fields.Many2one('mail.mass_mailing', string='Mass Mailing')
|
||||
mass_mailing_id = fields.Many2one('mailing.mailing', string='Mass Mailing')
|
||||
mass_mailing_campaign_id = fields.Many2one('mail.mass_mailing.campaign', string='Mass Mailing Campaign')
|
||||
|
||||
def _prepare_click_values_from_route(self, **route_values):
|
||||
|
||||
@@ -13,7 +13,7 @@ class MailMail(models.Model):
|
||||
"""Add the mass mailing campaign data to mail"""
|
||||
_inherit = ['mail.mail']
|
||||
|
||||
mailing_id = fields.Many2one('mail.mass_mailing', string='Mass Mailing')
|
||||
mailing_id = fields.Many2one('mailing.mailing', string='Mass Mailing')
|
||||
mailing_trace_ids = fields.One2many('mailing.trace', 'mail_mail_id', string='Statistics')
|
||||
|
||||
@api.model
|
||||
|
||||
@@ -81,7 +81,7 @@ class MassMailingCampaign(models.Model):
|
||||
'mailing.tag', 'mail_mass_mailing_tag_rel',
|
||||
'tag_id', 'campaign_id', string='Tags')
|
||||
mass_mailing_ids = fields.One2many(
|
||||
'mail.mass_mailing', 'mass_mailing_campaign_id',
|
||||
'mailing.mailing', 'mass_mailing_campaign_id',
|
||||
string='Mass Mailings')
|
||||
unique_ab_testing = fields.Boolean(string='Allow A/B Testing', default=False,
|
||||
help='If checked, recipients will be mailed only once for the whole campaign. '
|
||||
@@ -154,7 +154,7 @@ class MassMailingCampaign(models.Model):
|
||||
self.browse(row.pop('campaign_id')).update(row)
|
||||
|
||||
def _compute_total_mailings(self):
|
||||
campaign_data = self.env['mail.mass_mailing'].read_group(
|
||||
campaign_data = self.env['mailing.mailing'].read_group(
|
||||
[('mass_mailing_campaign_id', 'in', self.ids)],
|
||||
['mass_mailing_campaign_id'], ['mass_mailing_campaign_id'])
|
||||
mapped_data = dict([(c['mass_mailing_campaign_id'][0], c['mass_mailing_campaign_id_count']) for c in campaign_data])
|
||||
@@ -184,7 +184,7 @@ class MassMailingCampaign(models.Model):
|
||||
class MassMailing(models.Model):
|
||||
""" MassMailing models a wave of emails for a mass mailign campaign.
|
||||
A mass mailing is an occurence of sending emails. """
|
||||
_name = 'mail.mass_mailing'
|
||||
_name = 'mailing.mailing'
|
||||
_description = 'Mass Mailing'
|
||||
# number of periods for tracking mail_mail statistics
|
||||
_period_number = 6
|
||||
@@ -313,7 +313,7 @@ class MassMailing(models.Model):
|
||||
FROM
|
||||
mailing_trace s
|
||||
RIGHT JOIN
|
||||
mail_mass_mailing m
|
||||
mailing_mailing m
|
||||
ON (m.id = s.mass_mailing_id)
|
||||
WHERE
|
||||
m.id IN %s
|
||||
@@ -409,7 +409,7 @@ class MassMailing(models.Model):
|
||||
return {
|
||||
'type': 'ir.actions.act_window',
|
||||
'view_mode': 'form',
|
||||
'res_model': 'mail.mass_mailing',
|
||||
'res_model': 'mailing.mailing',
|
||||
'res_id': mass_mailing_copy.id,
|
||||
'context': context,
|
||||
}
|
||||
@@ -422,14 +422,14 @@ class MassMailing(models.Model):
|
||||
'name': _('Test Mailing'),
|
||||
'type': 'ir.actions.act_window',
|
||||
'view_mode': 'form',
|
||||
'res_model': 'mail.mass_mailing.test',
|
||||
'res_model': 'mailing.mailing.test',
|
||||
'target': 'new',
|
||||
'context': ctx,
|
||||
}
|
||||
|
||||
def action_schedule_date(self):
|
||||
self.ensure_one()
|
||||
action = self.env.ref('mass_mailing.mass_mailing_schedule_date_action').read()[0]
|
||||
action = self.env.ref('mass_mailing.mailing_mailing_schedule_date_action').read()[0]
|
||||
action['context'] = dict(self.env.context, default_mass_mailing_id=self.id)
|
||||
return action
|
||||
|
||||
@@ -29,7 +29,7 @@ class MailingTrace(models.Model):
|
||||
model = fields.Char(string='Document model')
|
||||
res_id = fields.Integer(string='Document ID')
|
||||
# campaign / wave data
|
||||
mass_mailing_id = fields.Many2one('mail.mass_mailing', string='Mass Mailing', index=True)
|
||||
mass_mailing_id = fields.Many2one('mailing.mailing', string='Mass Mailing', index=True)
|
||||
mass_mailing_campaign_id = fields.Many2one(
|
||||
related='mass_mailing_id.mass_mailing_campaign_id',
|
||||
string='Mass Mailing Campaign',
|
||||
|
||||
@@ -24,7 +24,7 @@ class MailingTraceReport(models.Model):
|
||||
|
||||
def init(self):
|
||||
"""Mass Mail Statistical Report: based on mailing.trace that models the various
|
||||
statistics collected for each mailing, and mail.mass_mailing model that models the
|
||||
statistics collected for each mailing, and mailing.mailing model that models the
|
||||
various mailing performed. """
|
||||
tools.drop_view_if_exists(self.env.cr, 'mailing_trace_report')
|
||||
self.env.cr.execute("""
|
||||
@@ -44,7 +44,7 @@ class MailingTraceReport(models.Model):
|
||||
mm.email_from
|
||||
FROM
|
||||
mailing_trace as ms
|
||||
left join mail_mass_mailing as mm ON (ms.mass_mailing_id=mm.id)
|
||||
left join mailing_mailing as mm ON (ms.mass_mailing_id=mm.id)
|
||||
left join mail_mass_mailing_campaign as mc ON (ms.mass_mailing_campaign_id=mc.id)
|
||||
left join utm_campaign as utm_campaign ON (mc.campaign_id = utm_campaign.id)
|
||||
left join utm_source as utm_source ON (mm.source_id = utm_source.id)
|
||||
|
||||
@@ -6,8 +6,8 @@ access_mailing_list_mm_user,access.mailing.list.mm.user,model_mailing_list,mass_
|
||||
access_mailing_stage,access.mailing.stage.mm.user,model_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
|
||||
access_mass_mailing,mail.mass_mailing,model_mail_mass_mailing,mass_mailing.group_mass_mailing_user,1,1,1,1
|
||||
access_mass_mailing_system,mail.mass_mailing.system,model_mail_mass_mailing,base.group_system,1,1,1,1
|
||||
access_mailing_mailing_mm_user,access.mailing.mailing.mm.user,model_mailing_mailing,mass_mailing.group_mass_mailing_user,1,1,1,1
|
||||
access_mailing_mailing_system,access.mailing.mailing.system,model_mailing_mailing,base.group_system,1,1,1,1
|
||||
access_mailing_trace_user,mailing.trace.user,model_mailing_trace,base.group_user,1,1,1,1
|
||||
access_mailing_trace_mm_user,access.mailing.trace.mm.user,model_mailing_trace,mass_mailing.group_mass_mailing_user,1,1,1,1
|
||||
access_mailing_trace_report_mm_user,access.mailing.trace.report.mm.user,model_mailing_trace_report,mass_mailing.group_mass_mailing_user,1,1,1,1
|
||||
|
||||
|
@@ -28,7 +28,7 @@ KanbanRecord.include({
|
||||
KanbanColumn.include({
|
||||
init: function () {
|
||||
this._super.apply(this, arguments);
|
||||
if (this.modelName === 'mail.mass_mailing') {
|
||||
if (this.modelName === 'mailing.mailing') {
|
||||
this.draggable = false;
|
||||
}
|
||||
},
|
||||
|
||||
@@ -14,7 +14,7 @@ QUnit.module('mass_mailing', {}, function () {
|
||||
QUnit.module('field html', {
|
||||
beforeEach: function () {
|
||||
this.data = weTestUtils.wysiwygData({
|
||||
'mail.mass_mailing': {
|
||||
'mailing.mailing': {
|
||||
fields: {
|
||||
display_name: {
|
||||
string: "Displayed name",
|
||||
@@ -68,7 +68,7 @@ QUnit.test('save arch and html', async function (assert) {
|
||||
|
||||
var form = await testUtils.createView({
|
||||
View: FormView,
|
||||
model: 'mail.mass_mailing',
|
||||
model: 'mailing.mailing',
|
||||
data: this.data,
|
||||
arch: '<form>' +
|
||||
' <field name="body_html" class="oe_read_only" widget="html"'+
|
||||
@@ -152,7 +152,7 @@ QUnit.test('save and edit arch wysiwyg', async function (assert) {
|
||||
|
||||
var form = await testUtils.createView({
|
||||
View: FormView,
|
||||
model: 'mail.mass_mailing',
|
||||
model: 'mailing.mailing',
|
||||
data: this.data,
|
||||
arch: '<form>' +
|
||||
' <header style="min-height:31px;">' +
|
||||
|
||||
@@ -48,7 +48,7 @@ class TestMassMailingShortener(common.TransactionCase):
|
||||
'name': 'User 3', 'email': 'user3@example.com', 'list_ids': [(4, mailing_list_A.id)]
|
||||
})
|
||||
|
||||
mass_mailing = self.env['mail.mass_mailing'].create({
|
||||
mass_mailing = self.env['mailing.mailing'].create({
|
||||
"reply_to_mode": "email",
|
||||
"reply_to": "Administrator <admin@yourcompany.example.com>",
|
||||
"mailing_model_id": self.env.ref('mass_mailing.model_mailing_list').id,
|
||||
|
||||
+14
-14
@@ -2,8 +2,8 @@
|
||||
<odoo>
|
||||
<!-- MAILING !-->
|
||||
<record model="ir.ui.view" id="view_mail_mass_mailing_search">
|
||||
<field name="name">mail.mass_mailing.search</field>
|
||||
<field name="model">mail.mass_mailing</field>
|
||||
<field name="name">mailing.mailing.search</field>
|
||||
<field name="model">mailing.mailing</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Mailings">
|
||||
<field name="name" string="Mailings"/>
|
||||
@@ -26,8 +26,8 @@
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="view_mail_mass_mailing_tree">
|
||||
<field name="name">mail.mass_mailing.tree</field>
|
||||
<field name="model">mail.mass_mailing</field>
|
||||
<field name="name">mailing.mailing.tree</field>
|
||||
<field name="model">mailing.mailing</field>
|
||||
<field name="priority">10</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Mailings">
|
||||
@@ -43,8 +43,8 @@
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="view_mail_mass_mailing_form">
|
||||
<field name="name">mail.mass_mailing.form</field>
|
||||
<field name="model">mail.mass_mailing</field>
|
||||
<field name="name">mailing.mailing.form</field>
|
||||
<field name="model">mailing.mailing</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Mailing">
|
||||
<header style="min-height:31px;">
|
||||
@@ -230,8 +230,8 @@
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="view_mail_mass_mailing_kanban">
|
||||
<field name="name">mail.mass_mailing.kanban</field>
|
||||
<field name="model">mail.mass_mailing</field>
|
||||
<field name="name">mailing.mailing.kanban</field>
|
||||
<field name="model">mailing.mailing</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban default_group_by="state">
|
||||
<field name='state' readonly="1"/>
|
||||
@@ -315,8 +315,8 @@
|
||||
</record>
|
||||
|
||||
<record id="view_mail_mass_mailing_graph" model="ir.ui.view">
|
||||
<field name="name">mail.mass_mailing.graph</field>
|
||||
<field name="model">mail.mass_mailing</field>
|
||||
<field name="name">mailing.mailing.graph</field>
|
||||
<field name="model">mailing.mailing</field>
|
||||
<field name="arch" type="xml">
|
||||
<graph string="Mailing" type="bar">
|
||||
<field name="state" type="row"/>
|
||||
@@ -326,7 +326,7 @@
|
||||
|
||||
<record id="action_view_mass_mailings" model="ir.actions.act_window">
|
||||
<field name="name">Mailings</field>
|
||||
<field name="res_model">mail.mass_mailing</field>
|
||||
<field name="res_model">mailing.mailing</field>
|
||||
<field name="view_mode">kanban,tree,form,graph</field>
|
||||
<field name="context">{
|
||||
'search_default_assigned_to_me': 1,
|
||||
@@ -344,7 +344,7 @@
|
||||
|
||||
<record id="action_view_mass_mailings_from_campaign" model="ir.actions.act_window">
|
||||
<field name="name">Mailings</field>
|
||||
<field name="res_model">mail.mass_mailing</field>
|
||||
<field name="res_model">mailing.mailing</field>
|
||||
<field name="view_mode">kanban,tree,form</field>
|
||||
<field name="context">{
|
||||
'search_default_assigned_to_me': 1,
|
||||
@@ -365,7 +365,7 @@
|
||||
|
||||
<record id="action_create_mass_mailings_from_campaign" model="ir.actions.act_window">
|
||||
<field name="name">Mailings</field>
|
||||
<field name="res_model">mail.mass_mailing</field>
|
||||
<field name="res_model">mailing.mailing</field>
|
||||
<field name="view_mode">form,kanban,tree</field>
|
||||
<field name="context">{
|
||||
'search_default_assigned_to_me': 1,
|
||||
@@ -386,7 +386,7 @@
|
||||
|
||||
<record id="action_create_ab_mass_mailings_from_campaign" model="ir.actions.act_window">
|
||||
<field name="name">Mailings</field>
|
||||
<field name="res_model">mail.mass_mailing</field>
|
||||
<field name="res_model">mailing.mailing</field>
|
||||
<field name="view_mode">form,kanban,tree</field>
|
||||
<field name="context">{
|
||||
'search_default_assigned_to_me': 1,
|
||||
@@ -1,7 +1,7 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import test_mailing
|
||||
from . import mail_compose_message
|
||||
from . import mailing_list_merge
|
||||
from . import mass_mailing_schedule_date
|
||||
from . import mailing_mailing_schedule_date
|
||||
from . import mailing_mailing_test
|
||||
|
||||
@@ -9,7 +9,7 @@ class MailComposeMessage(models.TransientModel):
|
||||
_inherit = 'mail.compose.message'
|
||||
|
||||
mass_mailing_campaign_id = fields.Many2one('mail.mass_mailing.campaign', string='Mass Mailing Campaign')
|
||||
mass_mailing_id = fields.Many2one('mail.mass_mailing', string='Mass Mailing', ondelete='cascade')
|
||||
mass_mailing_id = fields.Many2one('mailing.mailing', string='Mass Mailing', ondelete='cascade')
|
||||
mass_mailing_name = fields.Char(string='Mass Mailing Name')
|
||||
mailing_list_ids = fields.Many2many('mailing.list', string='Mailing List')
|
||||
|
||||
@@ -27,7 +27,7 @@ class MailComposeMessage(models.TransientModel):
|
||||
if not mass_mailing:
|
||||
reply_to_mode = 'email' if self.no_auto_thread else 'thread'
|
||||
reply_to = self.reply_to if self.no_auto_thread else False
|
||||
mass_mailing = self.env['mail.mass_mailing'].create({
|
||||
mass_mailing = self.env['mailing.mailing'].create({
|
||||
'mass_mailing_campaign_id': self.mass_mailing_campaign_id.id,
|
||||
'name': self.mass_mailing_name,
|
||||
'template_id': self.template_id.id,
|
||||
|
||||
+3
-3
@@ -5,12 +5,12 @@ from odoo import api, fields, models, _
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
|
||||
class MassMailingScheduleDate(models.TransientModel):
|
||||
_name = 'mass.mailing.schedule.date'
|
||||
class MailingMailingScheduleDate(models.TransientModel):
|
||||
_name = 'mailing.mailing.schedule.date'
|
||||
_description = 'Mass Mailing Scheduling'
|
||||
|
||||
schedule_date = fields.Datetime(string='Schedule in the Future')
|
||||
mass_mailing_id = fields.Many2one('mail.mass_mailing', required=True)
|
||||
mass_mailing_id = fields.Many2one('mailing.mailing', required=True)
|
||||
|
||||
@api.constrains('schedule_date')
|
||||
def _check_schedule_date(self):
|
||||
+5
-5
@@ -1,8 +1,8 @@
|
||||
<?xml version="1.0"?>
|
||||
<odoo>
|
||||
<record id="mass_mailing_schedule_date_view_form" model="ir.ui.view">
|
||||
<field name="name">mass.mailing.schedule.date.view.form</field>
|
||||
<field name="model">mass.mailing.schedule.date</field>
|
||||
<record id="mailing_mailing_schedule_date_view_form" model="ir.ui.view">
|
||||
<field name="name">mailing.mailing.schedule.date.view.form</field>
|
||||
<field name="model">mailing.mailing.schedule.date</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Take Future Schedule Date">
|
||||
<group>
|
||||
@@ -18,9 +18,9 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="mass_mailing_schedule_date_action" model="ir.actions.act_window">
|
||||
<record id="mailing_mailing_schedule_date_action" model="ir.actions.act_window">
|
||||
<field name="name">When do you want to send your mailing?</field>
|
||||
<field name="res_model">mass.mailing.schedule.date</field>
|
||||
<field name="res_model">mailing.mailing.schedule.date</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
+2
-2
@@ -5,12 +5,12 @@ from odoo import api, fields, models, tools
|
||||
|
||||
|
||||
class TestMassMailing(models.TransientModel):
|
||||
_name = 'mail.mass_mailing.test'
|
||||
_name = 'mailing.mailing.test'
|
||||
_description = 'Sample Mail Wizard'
|
||||
|
||||
email_to = fields.Char(string='Recipients', required=True,
|
||||
help='Comma-separated list of email addresses.', default=lambda self: self.env['mail.message']._get_default_from())
|
||||
mass_mailing_id = fields.Many2one('mail.mass_mailing', string='Mailing', required=True, ondelete='cascade')
|
||||
mass_mailing_id = fields.Many2one('mailing.mailing', string='Mailing', required=True, ondelete='cascade')
|
||||
|
||||
def send_mail_test(self):
|
||||
self.ensure_one()
|
||||
+3
-3
@@ -2,8 +2,8 @@
|
||||
<odoo>
|
||||
|
||||
<record model="ir.ui.view" id="view_mail_mass_mailing_test_form">
|
||||
<field name="name">mail.mass_mailing.test.form</field>
|
||||
<field name="model">mail.mass_mailing.test</field>
|
||||
<field name="name">mailing.mailing.test.form</field>
|
||||
<field name="model">mailing.mailing.test</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Send a Sample Mail">
|
||||
<p class="text-muted">
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
<record id="action_mail_mass_mailing_test" model="ir.actions.act_window">
|
||||
<field name="name">Mailing Test</field>
|
||||
<field name="res_model">mail.mass_mailing.test</field>
|
||||
<field name="res_model">mailing.mailing.test</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
@@ -9,7 +9,7 @@
|
||||
'description': """UTM and mass mailing on lead / opportunities""",
|
||||
'depends': ['crm', 'mass_mailing'],
|
||||
'data': [
|
||||
'views/mass_mailing_views.xml',
|
||||
'views/mailing_mailing_views.xml',
|
||||
],
|
||||
'demo': [
|
||||
'data/mass_mailing_demo.xml',
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0"?>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
<record id="mass_mail_lead_0" model="mail.mass_mailing">
|
||||
<record id="mass_mail_lead_0" model="mailing.mailing">
|
||||
<field name="name">Lead Recall</field>
|
||||
<field name="subject">We want to hear form you !</field>
|
||||
<field name="state">in_queue</field>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import mass_mailing
|
||||
from . import mailing_mailing
|
||||
|
||||
+2
-2
@@ -7,8 +7,8 @@ from odoo.osv import expression
|
||||
|
||||
|
||||
class MassMailing(models.Model):
|
||||
_name = 'mail.mass_mailing'
|
||||
_inherit = 'mail.mass_mailing'
|
||||
_name = 'mailing.mailing'
|
||||
_inherit = 'mailing.mailing'
|
||||
|
||||
crm_lead_activated = fields.Boolean('Use Leads', compute='_compute_crm_lead_activated')
|
||||
crm_lead_count = fields.Integer('Lead Count', groups='sales_team.group_sale_salesman', compute='_compute_crm_lead_and_opportunities_count')
|
||||
+3
-3
@@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="mail_mass_mailing_view_form" model="ir.ui.view">
|
||||
<field name="name">mail.mass_mailing.view.form.inherit.crm</field>
|
||||
<field name="model">mail.mass_mailing</field>
|
||||
<record id="mailing_mailing_view_form" model="ir.ui.view">
|
||||
<field name="name">mailing.mailing.view.form.inherit.crm</field>
|
||||
<field name="model">mailing.mailing</field>
|
||||
<field name="inherit_id" ref="mass_mailing.view_mail_mass_mailing_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//button[hasclass('o_mass_mailing_button')]" position="before">
|
||||
@@ -2,4 +2,4 @@
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import event
|
||||
from . import mass_mailing
|
||||
from . import mailing_mailing
|
||||
|
||||
@@ -15,7 +15,7 @@ class Event(models.Model):
|
||||
mass_mailing_action = dict(
|
||||
name='Mass Mail Attendees',
|
||||
type='ir.actions.act_window',
|
||||
res_model='mail.mass_mailing',
|
||||
res_model='mailing.mailing',
|
||||
view_mode='form',
|
||||
target='current',
|
||||
context=dict(
|
||||
|
||||
+2
-1
@@ -2,10 +2,11 @@ from odoo import models, api
|
||||
|
||||
|
||||
class MassMailingCampaign(models.Model):
|
||||
_inherit = "mail.mass_mailing"
|
||||
_inherit = "mailing.mailing"
|
||||
|
||||
@api.onchange('mailing_model_id', 'contact_list_ids')
|
||||
def _onchange_model_and_list(self):
|
||||
# TDE FIXME: whuuut ?
|
||||
result = super(MassMailingCampaign, self)._onchange_model_and_list()
|
||||
if self.mailing_model_name == 'event.registration' and self.mailing_domain == '[]':
|
||||
self.mailing_domain = self.env.context.get('default_mailing_domain', '[]')
|
||||
@@ -11,7 +11,7 @@ class Event(models.Model):
|
||||
mass_mailing_action = dict(
|
||||
name='Mass Mail Attendees',
|
||||
type='ir.actions.act_window',
|
||||
res_model='mail.mass_mailing',
|
||||
res_model='mailing.mailing',
|
||||
view_mode='form',
|
||||
target='current',
|
||||
context=dict(
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
'description': """UTM and mass mailing on sale orders""",
|
||||
'depends': ['sale', 'mass_mailing'],
|
||||
'data': [
|
||||
'views/mass_mailing_views.xml',
|
||||
'views/mailing_mailing_views.xml',
|
||||
],
|
||||
'demo': [
|
||||
'data/mass_mailing_demo.xml',
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0"?>
|
||||
<odoo>
|
||||
<data noupdate="0">
|
||||
<record id="mass_mail_sale_order_0" model="mail.mass_mailing">
|
||||
<record id="mass_mail_sale_order_0" model="mailing.mailing">
|
||||
<field name="name">Sale Promotion 1</field>
|
||||
<field name="subject">Our last promotions, just for you !</field>
|
||||
<field name="state">in_queue</field>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import mass_mailing
|
||||
from . import mailing_mailing
|
||||
|
||||
+2
-2
@@ -6,8 +6,8 @@ from odoo import api, fields, models
|
||||
|
||||
|
||||
class MassMailing(models.Model):
|
||||
_name = 'mail.mass_mailing'
|
||||
_inherit = 'mail.mass_mailing'
|
||||
_name = 'mailing.mailing'
|
||||
_inherit = 'mailing.mailing'
|
||||
|
||||
sale_quotation_count = fields.Integer('Quotation Count', groups='sales_team.group_sale_salesman', compute='_compute_sale_quotation_count')
|
||||
sale_invoiced_amount = fields.Integer('Invoiced Amount', groups='sales_team.group_sale_salesman', compute='_compute_sale_invoiced_amount')
|
||||
+3
-3
@@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="mail_mass_mailing_view_form" model="ir.ui.view">
|
||||
<field name="name">mail.mass_mailing.view.form.inherit.sale</field>
|
||||
<field name="model">mail.mass_mailing</field>
|
||||
<record id="mailing_mailing_view_form" model="ir.ui.view">
|
||||
<field name="name">mailing.mailing.view.form.inherit.sale</field>
|
||||
<field name="model">mailing.mailing</field>
|
||||
<field name="inherit_id" ref="mass_mailing.view_mail_mass_mailing_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//button[hasclass('o_mass_mailing_button')]" position="before">
|
||||
@@ -15,7 +15,7 @@ class TestComposer(common.SavepointCase):
|
||||
)
|
||||
|
||||
test_record = self.env['res.partner'].create({'name': 'Mass Mail Partner'})
|
||||
mass_mail_record = self.env['mail.mass_mailing'].with_user(test_user).create({
|
||||
mass_mail_record = self.env['mailing.mailing'].with_user(test_user).create({
|
||||
'name': 'Test',
|
||||
'subject': 'Test',
|
||||
'state': 'draft',
|
||||
|
||||
@@ -45,7 +45,7 @@ class TestLinkTracker(common.MassMailingCase):
|
||||
|
||||
@users('marketing')
|
||||
def test_add_link_mail_stat(self):
|
||||
mailing = self.env['mail.mass_mailing'].create({'name': 'Test Mailing', "subject": "Hi!"})
|
||||
mailing = self.env['mailing.mailing'].create({'name': 'Test Mailing', "subject": "Hi!"})
|
||||
code = self.link.code
|
||||
self.assertEqual(self.link.count, 1)
|
||||
stat = self.env['mailing.trace'].create({'mass_mailing_id': mailing.id})
|
||||
|
||||
@@ -7,7 +7,7 @@ class TestAutoBlacklist(common.TransactionCase):
|
||||
|
||||
def test_mail_bounced_auto_blacklist(self):
|
||||
mass_mailing_contacts = self.env['mailing.contact']
|
||||
mass_mailing = self.env['mail.mass_mailing']
|
||||
mass_mailing = self.env['mailing.mailing']
|
||||
mail_blacklist = self.env['mail.blacklist']
|
||||
mail_statistics = self.env['mailing.trace']
|
||||
mail_thread = self.env['mail.thread']
|
||||
|
||||
@@ -32,7 +32,7 @@ class TestMassMail(MassMailingCase):
|
||||
@mute_logger('odoo.addons.mail.models.mail_mail', 'odoo.models.unlink')
|
||||
def test_link_tracker(self):
|
||||
_url = 'https://www.example.com/foo/bar?baz=qux'
|
||||
mailing = self.env['mail.mass_mailing'].create({
|
||||
mailing = self.env['mailing.mailing'].create({
|
||||
'name': 'TestMailing',
|
||||
'subject': 'Test',
|
||||
'medium_id': self.test_medium.id,
|
||||
@@ -69,7 +69,7 @@ class TestAccessRights(TransactionCase):
|
||||
|
||||
def test_01_mass_mail_blacklist(self):
|
||||
mass_mailing_contacts = self.env['mailing.contact']
|
||||
mass_mailing = self.env['mail.mass_mailing']
|
||||
mass_mailing = self.env['mailing.mailing']
|
||||
mail_blacklist = self.env['mail.blacklist']
|
||||
|
||||
# create mailing contact record
|
||||
@@ -113,7 +113,7 @@ class TestAccessRights(TransactionCase):
|
||||
mass_mailing_contacts = self.env['mailing.contact']
|
||||
mass_mailing_lists = self.env['mailing.list']
|
||||
mass_mailing_optout = self.env['mailing.contact.subscription']
|
||||
mass_mailing = self.env['mail.mass_mailing']
|
||||
mass_mailing = self.env['mailing.mailing']
|
||||
|
||||
# create mailing contact record
|
||||
mailing_contact_1 = mass_mailing_contacts.create({'name': 'test email 1', 'email': 'test1@email.com'})
|
||||
@@ -162,7 +162,7 @@ class TestAccessRights(TransactionCase):
|
||||
mass_mailing_contacts = self.env['mailing.contact']
|
||||
mass_mailing_lists = self.env['mailing.list']
|
||||
mass_mailing_optout = self.env['mailing.contact.subscription']
|
||||
mass_mailing = self.env['mail.mass_mailing']
|
||||
mass_mailing = self.env['mailing.mailing']
|
||||
|
||||
# create mailing contact record
|
||||
mailing_contact_1 = mass_mailing_contacts.create({'name': 'test email 1', 'email': 'test1@email.com'})
|
||||
@@ -219,7 +219,7 @@ class TestAccessRights(TransactionCase):
|
||||
mass_mailing_contacts = self.env['mailing.contact']
|
||||
mass_mailing_lists = self.env['mailing.list']
|
||||
mass_mailing_optout = self.env['mailing.contact.subscription']
|
||||
mass_mailing = self.env['mail.mass_mailing']
|
||||
mass_mailing = self.env['mailing.mailing']
|
||||
|
||||
# create mailing contact record
|
||||
mailing_contact_1 = mass_mailing_contacts.create({'name': 'test email (A)', 'email': 'test@email.com'})
|
||||
@@ -271,7 +271,7 @@ class TestOnResPartner(TransactionCase):
|
||||
|
||||
def test_mass_mail_on_res_partner(self):
|
||||
partners = self.env['res.partner']
|
||||
mass_mailing = self.env['mail.mass_mailing']
|
||||
mass_mailing = self.env['mailing.mailing']
|
||||
|
||||
# create mailing contact record
|
||||
partner_a = partners.create({
|
||||
|
||||
@@ -41,7 +41,7 @@ class TestMassMailPerformance(TestMassMailPerformanceBase):
|
||||
@warmup
|
||||
@mute_logger('odoo.addons.mail.models.mail_mail', 'odoo.models.unlink', 'odoo.tests')
|
||||
def test_send_mailing(self):
|
||||
mailing = self.env['mail.mass_mailing'].create({
|
||||
mailing = self.env['mailing.mailing'].create({
|
||||
'name': 'Test',
|
||||
'subject': 'Test',
|
||||
'body_html': '<p>Hello <a role="button" href="https://www.example.com/foo/bar?baz=qux">quux</a><a role="button" href="/unsubscribe_from_list">Unsubscribe</a></p>',
|
||||
@@ -79,7 +79,7 @@ class TestMassMailBlPerformance(TestMassMailPerformanceBase):
|
||||
@warmup
|
||||
@mute_logger('odoo.addons.mail.models.mail_mail', 'odoo.models.unlink', 'odoo.tests')
|
||||
def test_send_mailing_w_bl(self):
|
||||
mailing = self.env['mail.mass_mailing'].create({
|
||||
mailing = self.env['mailing.mailing'].create({
|
||||
'name': 'Test',
|
||||
'subject': 'Test',
|
||||
'body_html': '<p>Hello <a role="button" href="https://www.example.com/foo/bar?baz=qux">quux</a><a role="button" href="/unsubscribe_from_list">Unsubscribe</a></p>',
|
||||
|
||||
Reference in New Issue
Block a user