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