From abaae1e46357f41905a5e20535576984023e7b5b Mon Sep 17 00:00:00 2001 From: "Tiffany Chang (tic)" <tic@odoo.com> Date: Mon, 13 Jan 2020 09:32:54 +0000 Subject: [PATCH] [IMP] mass_mailing_(sms): split systray activities Due to 'mass_mailing_sms' inheriting mailing.mailing from 'mass_mailing', activities for these two modules would show up as one "Mass Mailing" line in the systray. This commit adds additional logic to remove this "Mass Mailing" line and replace it with 2 lines: "Email Marketing" and "SMS Marketing" with their appropriately matching module icon. For consistency, when only the 'mass_mailing' module is installed, it will still display "Email Marketing". Task: 2169498 --- addons/mass_mailing/models/__init__.py | 1 + addons/mass_mailing/models/res_users.py | 21 +++++++ addons/mass_mailing_sms/models/__init__.py | 1 + addons/mass_mailing_sms/models/res_users.py | 67 +++++++++++++++++++++ 4 files changed, 90 insertions(+) create mode 100644 addons/mass_mailing/models/res_users.py create mode 100644 addons/mass_mailing_sms/models/res_users.py diff --git a/addons/mass_mailing/models/__init__.py b/addons/mass_mailing/models/__init__.py index 9797d43aeff2..64b451ac37b1 100644 --- a/addons/mass_mailing/models/__init__.py +++ b/addons/mass_mailing/models/__init__.py @@ -10,4 +10,5 @@ from . import mail_mail from . import mail_template from . import mail_thread from . import res_config_settings +from . import res_users from . import utm diff --git a/addons/mass_mailing/models/res_users.py b/addons/mass_mailing/models/res_users.py new file mode 100644 index 000000000000..04b1cb749104 --- /dev/null +++ b/addons/mass_mailing/models/res_users.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import api, models, _ + + +class Users(models.Model): + _name = 'res.users' + _inherit = ['res.users'] + + @api.model + def systray_get_activities(self): + """ Update systray name of mailing.mailing from "Mass Mailing" + to "Email Marketing". + """ + activities = super(Users, self).systray_get_activities() + for activity in activities: + if activity.get('model') == 'mailing.mailing': + activity['name'] = _('Email Marketing') + break + return activities diff --git a/addons/mass_mailing_sms/models/__init__.py b/addons/mass_mailing_sms/models/__init__.py index 76457e3bdf4c..1f0a7eb2c869 100644 --- a/addons/mass_mailing_sms/models/__init__.py +++ b/addons/mass_mailing_sms/models/__init__.py @@ -5,5 +5,6 @@ from . import mailing_contact from . import mailing_list from . import mailing_mailing from . import mailing_trace +from . import res_users from . import sms_sms from . import utm diff --git a/addons/mass_mailing_sms/models/res_users.py b/addons/mass_mailing_sms/models/res_users.py new file mode 100644 index 000000000000..cc095e7e3970 --- /dev/null +++ b/addons/mass_mailing_sms/models/res_users.py @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import api, fields, models, modules, _ + + +class Users(models.Model): + _name = 'res.users' + _inherit = ['res.users'] + + @api.model + def systray_get_activities(self): + """ Split mass_mailing and mass_mailing_sms activities in systray by + removing the single mailing.mailing activity represented and + doing a new query to split them by mailing_type. + """ + activities = super(Users, self).systray_get_activities() + for activity in activities: + if activity.get('model') == 'mailing.mailing': + activities.remove(activity) + query = """SELECT m.mailing_type, count(*), act.res_model as model, + CASE + WHEN %(today)s::date - act.date_deadline::date = 0 Then 'today' + WHEN %(today)s::date - act.date_deadline::date > 0 Then 'overdue' + WHEN %(today)s::date - act.date_deadline::date < 0 Then 'planned' + END AS states + FROM mail_activity AS act + JOIN mailing_mailing AS m ON act.res_id = m.id + WHERE act.res_model = 'mailing.mailing' AND act.user_id = %(user_id)s + GROUP BY m.mailing_type, states, act.res_model; + """ + self.env.cr.execute(query, { + 'today': fields.Date.context_today(self), + 'user_id': self.env.uid, + }) + activity_data = self.env.cr.dictfetchall() + + user_activities = {} + for act in activity_data: + if not user_activities.get(act['mailing_type']): + if act['mailing_type'] == 'sms': + module = 'mass_mailing_sms' + name = _('SMS Marketing') + else: + module = 'mass_mailing' + name = _('Email Marketing') + icon = module and modules.module.get_module_icon(module) + user_activities[act['mailing_type']] = { + 'name': name, + 'model': 'mailing.mailing', + 'type': 'activity', + 'icon': icon, + 'total_count': 0, 'today_count': 0, 'overdue_count': 0, 'planned_count': 0, + } + user_activities[act['mailing_type']]['%s_count' % act['states']] += act['count'] + if act['states'] in ('today', 'overdue'): + user_activities[act['mailing_type']]['total_count'] += act['count'] + + for mailing_type in user_activities.keys(): + user_activities[mailing_type].update({ + 'actions': [{'icon': 'fa-clock-o', 'name': 'Summary',}], + }) + + activities.extend(list(user_activities.values())) + break + + return activities -- GitLab