Skip to content

Commit

Permalink
Merge PR OCA#389 into 11.0
Browse files Browse the repository at this point in the history
Signed-off-by jbeficent
  • Loading branch information
OCA-git-bot committed Jul 16, 2019
2 parents 2d2518f + 29d57ba commit d532e0c
Show file tree
Hide file tree
Showing 14 changed files with 259 additions and 6 deletions.
7 changes: 6 additions & 1 deletion mail_activity_team/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
{
'name': 'Mail Activity Team',
'summary': 'Add Teams to Activities',
'version': '11.0.2.0.0',
'version': '11.0.2.1.0',
'development_status': 'Beta',
'category': 'Social Network',
'website': 'https://github.com/OCA/social',
Expand All @@ -14,10 +14,15 @@
'mail_activity_board',
],
'data': [
'views/assets_backend.xml',
'security/ir.model.access.csv',
'security/mail_activity_team_security.xml',
'views/mail_activity_team_views.xml',
'views/mail_activity_views.xml',
'views/res_users_views.xml',
],

'qweb': [
'static/src/xml/systray.xml',
],
}
28 changes: 27 additions & 1 deletion mail_activity_team/i18n/mail_activity_team.pot
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,11 @@ msgstr ""
msgid "Activity"
msgstr ""

#. module: mail_activity_team
#: model:ir.model,name:mail_activity_team.model_mail_activity_mixin
msgid "Activity Mixin"
msgstr ""

#. module: mail_activity_team
#: model:ir.ui.view,arch_db:mail_activity_team.mail_activity_team_view_form
msgid "Activity Team"
Expand Down Expand Up @@ -90,6 +95,13 @@ msgstr ""
msgid "Missing Activities"
msgstr ""

#. module: mail_activity_team
#. openerp-web
#: code:addons/mail_activity_team/static/src/xml/systray.xml:8
#, python-format
msgid "My Activities"
msgstr ""

#. module: mail_activity_team
#: model:ir.ui.view,arch_db:mail_activity_team.mail_activity_view_search
msgid "My Team Activities"
Expand All @@ -106,6 +118,13 @@ msgstr ""
msgid "Team"
msgstr ""

#. module: mail_activity_team
#. openerp-web
#: code:addons/mail_activity_team/static/src/xml/systray.xml:9
#, python-format
msgid "Team Activities"
msgstr ""

#. module: mail_activity_team
#: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity_team_user_id
msgid "Team Leader"
Expand All @@ -122,7 +141,7 @@ msgid "Team:"
msgstr ""

#. module: mail_activity_team
#: code:addons/mail_activity_team/models/mail_activity.py:65
#: code:addons/mail_activity_team/models/mail_activity.py:67
#, python-format
msgid "The assigned user is not member of the team."
msgstr ""
Expand All @@ -137,3 +156,10 @@ msgstr ""
msgid "Users"
msgstr ""

#. module: mail_activity_team
#: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity_mixin_activity_team_user_ids
#: model:ir.model.fields,field_description:mail_activity_team.field_res_partner_activity_team_user_ids
#: model:ir.model.fields,field_description:mail_activity_team.field_res_users_activity_team_user_ids
msgid "test field"
msgstr ""

1 change: 1 addition & 0 deletions mail_activity_team/models/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from . import mail_activity_team
from . import mail_activity
from . import res_users
from . import mail_activity_mixin
2 changes: 2 additions & 0 deletions mail_activity_team/models/mail_activity.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ def _get_default_team_id(self, user_id=None):
('res_model_ids', 'in', model.ids)])
return self.env['mail.activity.team'].search(domain, limit=1)

user_id = fields.Many2one(required=False)

team_id = fields.Many2one(
comodel_name='mail.activity.team',
default=lambda s: s._get_default_team_id(),
Expand Down
23 changes: 23 additions & 0 deletions mail_activity_team/models/mail_activity_mixin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Copyright 2018 Eficent Business and IT Consulting Services, S.L.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import api, models, fields


class MailActivityMixin(models.AbstractModel):
_inherit = 'mail.activity.mixin'

activity_team_user_ids = fields.Many2many(
comodel_name='res.users', string='test field',
compute="_compute_activity_team_user_ids",
search="_search_activity_team_user_ids",
)

@api.depends("activity_ids")
def _compute_activity_team_user_ids(self):
for rec in self:
rec.activity_team_user_ids = rec.activity_ids.mapped(
"team_id.member_ids")

@api.model
def _search_activity_team_user_ids(self, operator, operand):
return [('activity_ids.team_id.member_ids', operator, operand)]
57 changes: 56 additions & 1 deletion mail_activity_team/models/res_users.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Copyright 2018 Eficent Business and IT Consulting Services, S.L.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import models, fields
from odoo import api, models, fields, modules


class ResUsers(models.Model):
Expand All @@ -11,3 +11,58 @@ class ResUsers(models.Model):
relation='mail_activity_team_users_rel',
string="Activity Teams",
)

@api.model
def activity_user_count(self, user_id=False):
if not self._context.get('team_activities', False):
return super().activity_user_count()
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, act.user_id as user_id
FROM mail_activity AS act
JOIN ir_model AS m ON act.res_model_id = m.id
WHERE team_id in (
SELECT mail_activity_team_id
FROM mail_activity_team_users_rel
WHERE res_users_id = %(user_id)s
)
GROUP BY m.id, states, act.res_model, act.user_id;
"""
user = user_id if user_id else self.env.uid
self.env.cr.execute(query, {
'today': fields.Date.context_today(self),
'user_id': user,
})
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()}

user_activities = {}
for activity in activity_data:
if not user_activities.get(activity['model']):
user_activities[activity['model']] = {
'name': model_names[activity['id']],
'model': activity['model'],
'icon': modules.module.get_module_icon(
self.env[activity['model']]._original_module),
'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']
if activity['user_id'] == user:
user_activities[
activity['model']
]['total_count'] -= activity['count']

return list(user_activities.values())
99 changes: 99 additions & 0 deletions mail_activity_team/static/src/js/systray.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
odoo.define('mail_activity_team.systray', function (require) {
"use strict";

var systray = require('mail.systray');
var session = require("web.session");

systray.ActivityMenu.include({
events: _.extend({}, systray.ActivityMenu.prototype.events, {
'click .o_filter_button': 'on_click_filter_button',
}),
start: function () {
this._super.apply(this, arguments);
this.$filter_buttons = this.$('.o_filter_button');
this.$my_activities = this.$filter_buttons.first();
this.filter = 'my';
session.user_context = _.extend({}, session.user_context, {
'team_activities': false
});
},

_updateCounter: function (data) {
this._super.apply(this, arguments);
this.$('.o_new_notification_counter').text(this.activityCounter);
},

on_click_filter_button: function (event) {
var self = this;

event.stopPropagation();
self.$filter_buttons.removeClass('active');
var $target = $(event.currentTarget);
$target.addClass('active');
self.filter = $target.data('filter');

session.user_context = _.extend({}, session.user_context, {
'team_activities': self.filter === 'team'
});

self._updateActivityPreview();

},
_onActivityFilterClick: function (event) {
if (this.filter === 'my') {
this._super.apply(this, arguments);
}
if (this.filter === 'team') {
var data = _.extend(
{},
$(event.currentTarget).data(),
$(event.target).data()
);
var context = {};
if (data.filter === 'my') {
context.search_default_activities_overdue = 1;
context.search_default_activities_today = 1;
} else {
context['search_default_activities_' + data.filter] = 1;
}
this.do_action({
type: 'ir.actions.act_window',
name: data.model_name,
res_model: data.res_model,
views: [[false, 'kanban'], [false, 'form']],
search_view_id: [false],
domain: [
['activity_team_user_ids', 'in', session.uid]
],
context:context,
});
}
},
_getActivityData: function(){
var self = this;
return self._super.apply(self, arguments).then(function (data) {
session.user_context = _.extend({}, session.user_context, {
'team_activities': !session.user_context['team_activities'],
});

self._rpc({
model: 'res.users',
method: 'activity_user_count',
kwargs: {
context: session.user_context,
},
}).then(function (data) {
self.activityCounter += _.reduce(data, function(
total_count, p_data
){ return total_count + p_data.total_count; }, 0);
self.$('.o_new_notification_counter').text(self.activityCounter);
self.$el.toggleClass('o_no_notification', !self.activityCounter);
session.user_context = _.extend({}, session.user_context, {
'team_activities': !session.user_context['team_activities'],
});
});
});
}
});

});
7 changes: 7 additions & 0 deletions mail_activity_team/static/src/less/systray.less
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
.o_new_notification_counter {
.o-position-absolute(@top: 20%, @right: 1px);
background: @odoo-brand-optional;
color: white;
padding: 0em 0.3em;
font-size: 0.7em;
}
18 changes: 18 additions & 0 deletions mail_activity_team/static/src/xml/systray.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<templates>

<t t-extend="mail.chat.ActivityMenu">
<t t-jquery=".o_mail_navbar_dropdown_channels" t-operation="before">
<li class="o_mail_navbar_dropdown_top">
<div>
<button type="button" class="btn btn-sm o_filter_button active" data-filter='my'> My Activities </button>
<button type="button" class="btn btn-sm o_filter_button" data-filter='team'> Team Activities </button>
</div>
</li>
</t>
<t t-jquery=".o_notification_counter" t-operation="replace">
<span class="o_new_notification_counter badge"/>
</t>
</t>

</templates>
8 changes: 8 additions & 0 deletions mail_activity_team/tests/test_mail_activity_team.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,3 +116,11 @@ def test_team_onchanges(self):
self.team2.member_ids = [(3, self.employee.id)]
self.team2._onchange_member_ids()
self.assertFalse(self.team2.user_id)

def test_activity_count(self):
res = self.env['res.users'].with_context(
{'team_activities': True}
).activity_user_count(
user_id=self.employee.id
)
self.assertEqual(res[0]['total_count'], 0)
10 changes: 10 additions & 0 deletions mail_activity_team/views/assets_backend.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="assets_backend" name="mail assets"
inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript" src="/mail_activity_team/static/src/js/systray.js"/>
<link rel="stylesheet" href="/mail_activity_team/static/src/less/systray.less" type="text/less"/>
</xpath>
</template>
</odoo>
1 change: 0 additions & 1 deletion mail_activity_team/views/mail_activity_views.xml
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,5 @@
<filter name='team' string="Team" context="{'group_by': 'team_id'}"/>
</group>
</field>

</record>
</odoo>
2 changes: 1 addition & 1 deletion mass_mailing_custom_unsubscribe/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
'name': 'Customizable unsubscription process on mass mailing emails',
'summary': 'Know and track (un)subscription reasons, GDPR compliant',
'category': 'Marketing',
'version': '11.0.2.0.0',
'version': '11.0.2.1.0',
'depends': [
'website_mass_mailing',
],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ msgstr ""

#. module: mass_mailing_custom_unsubscribe
#: model:ir.model.fields,field_description:mass_mailing_custom_unsubscribe.field_mail_unsubscription_id
#: model:ir.model.fields,field_description:mass_mailing_custom_unsubscribe.field_mail_unsubscription_reason_id_2823
#: model:ir.model.fields,field_description:mass_mailing_custom_unsubscribe.field_mail_unsubscription_reason_id_2826
msgid "ID"
msgstr ""

Expand Down

0 comments on commit d532e0c

Please sign in to comment.