diff --git a/addons/mass_mailing_slides/__init__.py b/addons/mass_mailing_slides/__init__.py
new file mode 100644
index 00000000000..dc5e6b693d1
--- /dev/null
+++ b/addons/mass_mailing_slides/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from . import models
diff --git a/addons/mass_mailing_slides/__manifest__.py b/addons/mass_mailing_slides/__manifest__.py
new file mode 100644
index 00000000000..f313de6d64a
--- /dev/null
+++ b/addons/mass_mailing_slides/__manifest__.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+{
+ 'name': 'Mass mailing on course members',
+ 'category': 'Hidden',
+ 'version': '1.0',
+ 'description':
+ """
+Mass mail course members
+========================
+
+Bridge module adding UX requirements to ease mass mailing of course members.
+ """,
+ 'depends': ['website_slides', 'mass_mailing'],
+ 'data': [
+ 'views/slide_channel_views.xml'
+ ],
+ 'auto_install': True,
+}
diff --git a/addons/mass_mailing_slides/models/__init__.py b/addons/mass_mailing_slides/models/__init__.py
new file mode 100644
index 00000000000..c9c3eb273a8
--- /dev/null
+++ b/addons/mass_mailing_slides/models/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from . import slide_channel
diff --git a/addons/mass_mailing_slides/models/slide_channel.py b/addons/mass_mailing_slides/models/slide_channel.py
new file mode 100644
index 00000000000..7822dc8113d
--- /dev/null
+++ b/addons/mass_mailing_slides/models/slide_channel.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import models, _
+
+
+class Course(models.Model):
+ _inherit = "slide.channel"
+
+ def action_mass_mailing_attendees(self):
+ domain = [('slide_channel_ids', 'in', self.ids)]
+ mass_mailing_action = dict(
+ name=_('Mass Mail Course Members'),
+ type='ir.actions.act_window',
+ res_model='mailing.mailing',
+ view_mode='form',
+ target='current',
+ context=dict(
+ default_mailing_model_id=self.env.ref('base.model_res_partner').id,
+ default_mailing_domain=domain,
+ ),
+ )
+ return mass_mailing_action
diff --git a/addons/mass_mailing_slides/views/slide_channel_views.xml b/addons/mass_mailing_slides/views/slide_channel_views.xml
new file mode 100644
index 00000000000..ddc7c38af22
--- /dev/null
+++ b/addons/mass_mailing_slides/views/slide_channel_views.xml
@@ -0,0 +1,33 @@
+
+
+
+ slide.channel.view.form.inherit.mass.mailing
+ slide.channel
+
+
+
+
+
+
+
+
+
+ slide.channel.view.kanban.inherit.mass.mailing
+ slide.channel
+
+
+
+
+ Mail Attendees
+
+
+
+
+
diff --git a/addons/website_slides/models/__init__.py b/addons/website_slides/models/__init__.py
index b8b6868cc0a..4fb9318f4da 100644
--- a/addons/website_slides/models/__init__.py
+++ b/addons/website_slides/models/__init__.py
@@ -10,4 +10,4 @@ from . import res_config_settings
from . import website
from . import res_users
from . import res_groups
-from . import res_partner
+from . import res_partner
\ No newline at end of file
diff --git a/addons/website_slides/models/res_config_settings.py b/addons/website_slides/models/res_config_settings.py
index 8085cd407c8..9e886766a7c 100644
--- a/addons/website_slides/models/res_config_settings.py
+++ b/addons/website_slides/models/res_config_settings.py
@@ -11,3 +11,4 @@ class ResConfigSettings(models.TransientModel):
module_website_sale_slides = fields.Boolean(string="Sell on eCommerce")
module_website_slides_forum = fields.Boolean(string="Forum")
module_website_slides_survey = fields.Boolean(string="Certifications")
+ module_mass_mailing_slides = fields.Boolean(string="Mailing")
diff --git a/addons/website_slides/models/res_partner.py b/addons/website_slides/models/res_partner.py
index 6ee87be909d..fb2aff8dc9e 100644
--- a/addons/website_slides/models/res_partner.py
+++ b/addons/website_slides/models/res_partner.py
@@ -1,38 +1,40 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo import api, fields, models
+from odoo import api, fields, models, _
class ResPartner(models.Model):
_inherit = 'res.partner'
- slide_channels_count = fields.Integer('Course Count', compute='_compute_slide_channels_count')
- slide_channels_company_count = fields.Integer('Company Course Count', compute='_compute_slide_channels_company_count')
+ slide_channel_ids = fields.Many2many(
+ 'slide.channel', 'slide_channel_partner', 'partner_id', 'channel_id',
+ string='eLearning Courses')
+ slide_channel_count = fields.Integer('Course Count', compute='_compute_slide_channel_count')
+ slide_channel_company_count = fields.Integer('Company Course Count', compute='_compute_slide_channel_company_count')
@api.depends('is_company')
- def _compute_slide_channels_count(self):
+ def _compute_slide_channel_count(self):
read_group_res = self.env['slide.channel.partner'].sudo().read_group(
[('partner_id', 'in', self.ids)],
['partner_id'], 'partner_id'
)
data = dict((res['partner_id'][0], res['partner_id_count']) for res in read_group_res)
for partner in self:
- partner.slide_channels_count = data.get(partner.id, 0)
+ partner.slide_channel_count = data.get(partner.id, 0)
- @api.depends('is_company', 'child_ids.slide_channels_count')
- def _compute_slide_channels_company_count(self):
+ @api.depends('is_company', 'child_ids.slide_channel_count')
+ def _compute_slide_channel_company_count(self):
for partner in self:
if partner.is_company:
- partner.slide_channels_company_count = self.env['slide.channel'].sudo().search_count(
+ partner.slide_channel_company_count = self.env['slide.channel'].sudo().search_count(
[('partner_ids', 'in', partner.child_ids.ids)]
)
else:
- partner.slide_channels_company_count = 0
+ partner.slide_channel_company_count = 0
def action_view_courses(self):
- action = self.env.ref('website_slides.res_partner_action_courses').read()[0]
- action['view_mode'] = 'tree'
+ action = self.env.ref('website_slides.slide_channel_action_overview').read()[0]
+ action['name'] = _('Followed Courses')
action['domain'] = ['|', ('partner_ids', 'in', self.ids), ('partner_ids', 'in', self.child_ids.ids)]
-
return action
diff --git a/addons/website_slides/views/res_config_settings_views.xml b/addons/website_slides/views/res_config_settings_views.xml
index 3e5a64010f0..0271a58c9e9 100644
--- a/addons/website_slides/views/res_config_settings_views.xml
+++ b/addons/website_slides/views/res_config_settings_views.xml
@@ -43,6 +43,18 @@
+
+
+
+
+
+
+
+ Contact all the members of a course via mass mailing
+
+
+
+
diff --git a/addons/website_slides/views/res_partner_views.xml b/addons/website_slides/views/res_partner_views.xml
index 5455a0195f5..8a202cb0311 100644
--- a/addons/website_slides/views/res_partner_views.xml
+++ b/addons/website_slides/views/res_partner_views.xml
@@ -1,12 +1,6 @@
-
- Followed Courses
- slide.channel
- tree
-
-
res.partner.view.form.inherit.slides
res.partner
@@ -16,20 +10,18 @@