[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
This commit is contained in:
Tiffany Chang (tic)
2020-01-21 12:37:58 +00:00
parent 1d13928764
commit abaae1e463
4 changed files with 90 additions and 0 deletions
+1
View File
@@ -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
+21
View File
@@ -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
@@ -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
@@ -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