mirror of
https://gitlab.com/flectra-hq/flectra.git
synced 2026-11-02 20:30:20 -06:00
[PATCH] Upstream patch - 27052023
This commit is contained in:
1 parent
50acfc7a79
commit
2a5f774eb0
14 files changed
+125
-63
No files matched your search
@@ -1,6 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo, Flectra. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from collections import defaultdict
|
||||
|
||||
from flectra import _, api, exceptions, fields, models, modules
|
||||
from flectra.addons.base.models.res_users import is_selection_groups
|
||||
|
||||
@@ -115,45 +117,43 @@ GROUP BY channel_moderator.res_users_id""", [tuple(self.ids)])
|
||||
|
||||
@api.model
|
||||
def systray_get_activities(self):
|
||||
query = """SELECT m.id, 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 ir_model AS m ON act.res_model_id = m.id
|
||||
WHERE user_id = %(user_id)s
|
||||
GROUP BY m.id, 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()
|
||||
model_ids = [a['id'] for a in activity_data]
|
||||
model_names = {n[0]: n[1] for n in self.env['ir.model'].browse(model_ids).name_get()}
|
||||
|
||||
activities = self.env["mail.activity"].search([("user_id", "=", self.env.uid)])
|
||||
activities_by_record_by_model_name = defaultdict(lambda: defaultdict(lambda: self.env["mail.activity"]))
|
||||
for activity in activities:
|
||||
record = self.env[activity.res_model].browse(activity.res_id)
|
||||
activities_by_record_by_model_name[activity.res_model][record] += activity
|
||||
model_ids = list({self.env["ir.model"]._get(name).id for name in activities_by_record_by_model_name.keys()})
|
||||
user_activities = {}
|
||||
for activity in activity_data:
|
||||
if not user_activities.get(activity['model']):
|
||||
module = self.env[activity['model']]._original_module
|
||||
icon = module and modules.module.get_module_icon(module)
|
||||
user_activities[activity['model']] = {
|
||||
'name': model_names[activity['id']],
|
||||
'model': activity['model'],
|
||||
'type': 'activity',
|
||||
'icon': icon,
|
||||
'total_count': 0, 'today_count': 0, 'overdue_count': 0, 'planned_count': 0,
|
||||
}
|
||||
user_activities[activity['model']]['%s_count' % activity['states']] += activity['count']
|
||||
if activity['states'] in ('today', 'overdue'):
|
||||
user_activities[activity['model']]['total_count'] += activity['count']
|
||||
|
||||
user_activities[activity['model']]['actions'] = [{
|
||||
'icon': 'fa-clock-o',
|
||||
'name': 'Summary',
|
||||
}]
|
||||
for model_name, activities_by_record in activities_by_record_by_model_name.items():
|
||||
domain = [("id", "in", list({r.id for r in activities_by_record.keys()}))]
|
||||
allowed_records = self.env[model_name].search(domain)
|
||||
if not allowed_records:
|
||||
continue
|
||||
module = self.env[model_name]._original_module
|
||||
icon = module and modules.module.get_module_icon(module)
|
||||
user_activities[model_name] = {
|
||||
"name": self.env["ir.model"]._get(model_name).with_prefetch(model_ids).name,
|
||||
"model": model_name,
|
||||
"type": "activity",
|
||||
"icon": icon,
|
||||
"total_count": 0,
|
||||
"today_count": 0,
|
||||
"overdue_count": 0,
|
||||
"planned_count": 0,
|
||||
"actions": [
|
||||
{
|
||||
"icon": "fa-clock-o",
|
||||
"name": "Summary",
|
||||
}
|
||||
],
|
||||
}
|
||||
for record, activities in activities_by_record.items():
|
||||
if record not in allowed_records:
|
||||
continue
|
||||
for activity in activities:
|
||||
user_activities[model_name]["%s_count" % activity.state] += 1
|
||||
if activity.state in ("today", "overdue"):
|
||||
user_activities[model_name]["total_count"] += 1
|
||||
return list(user_activities.values())
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user