[MIG] mail_activity_team: Migration to 14.0

pull/1321/head
Atchuthan Ubendran 2022-01-13 18:33:42 +05:30 committed by sonhd91
parent 739d46511c
commit e4ab8408f7
15 changed files with 326 additions and 215 deletions

View File

@ -7,26 +7,31 @@ Mail Activity Team
!! changes will be overwritten. !! !! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png .. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png
:target: https://odoo-community.org/page/development-status :target: https://odoo-community.org/page/development-status
:alt: Beta :alt: Alpha
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png .. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3 :alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fsocial-lightgray.png?logo=github .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fsocial-lightgray.png?logo=github
:target: https://github.com/OCA/social/tree/13.0/mail_activity_team :target: https://github.com/OCA/social/tree/14.0/mail_activity_team
:alt: OCA/social :alt: OCA/social
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/social-13-0/social-13-0-mail_activity_team :target: https://translation.odoo-community.org/projects/social-14-0/social-14-0-mail_activity_team
:alt: Translate me on Weblate :alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/205/13.0 :target: https://runbot.odoo-community.org/runbot/205/14.0
:alt: Try me on Runbot :alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5| |badge1| |badge2| |badge3| |badge4| |badge5|
This module adds the possibility to assign teams to activities. This module adds the possibility to assign teams to activities.
.. IMPORTANT::
This is an alpha version, the data model and design can change at any time without warning.
Only for development or testing purpose, do not use in production.
`More details on development status <https://odoo-community.org/page/development-status>`_
**Table of contents** **Table of contents**
.. contents:: .. contents::
@ -59,7 +64,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues <https://github.com/OCA/social/issues>`_. Bugs are tracked on `GitHub Issues <https://github.com/OCA/social/issues>`_.
In case of trouble, please check there if your issue has already been reported. In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed If you spotted it first, help us smashing it by providing a detailed and welcomed
`feedback <https://github.com/OCA/social/issues/new?body=module:%20mail_activity_team%0Aversion:%2013.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_. `feedback <https://github.com/OCA/social/issues/new?body=module:%20mail_activity_team%0Aversion:%2014.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues. Do not contact contributors directly about support or help with technical issues.
@ -69,15 +74,16 @@ Credits
Authors Authors
~~~~~~~ ~~~~~~~
* ForgeFlow * Eficent
* Sodexis
Contributors Contributors
~~~~~~~~~~~~ ~~~~~~~~~~~~
* `ForgeFlow <https://www.forgeflow.com>`_: * `Eficent <https://www.eficent.com>`_:
* Jordi Ballester Alomar (jordi.ballester@forgeflow.com) * Jordi Ballester Alomar (jordi.ballester@eficent.com)
* Miquel Raïch (miquel.raich@forgeflow.com) * Miquel Raïch (miquel.raich@eficent.com)
* Pedro Gonzalez (pedro.gonzalez@pesol.es) * Pedro Gonzalez (pedro.gonzalez@pesol.es)
* `Tecnativa <https://www.tecnativa.com>`_: * `Tecnativa <https://www.tecnativa.com>`_:
@ -96,6 +102,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and mission is to support the collaborative development of Odoo features and
promote its widespread use. promote its widespread use.
This module is part of the `OCA/social <https://github.com/OCA/social/tree/13.0/mail_activity_team>`_ project on GitHub. This module is part of the `OCA/social <https://github.com/OCA/social/tree/14.0/mail_activity_team>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View File

@ -1,21 +1,26 @@
# Copyright 2018 ForgeFlow, S.L. # Copyright 2018 Eficent Business and IT Consulting Services, S.L.
# Copyright 2021 Sodexis
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
{ {
"name": "Mail Activity Team", "name": "Mail Activity Team",
"summary": "Add Teams to Activities", "summary": "Add Teams to Activities",
"version": "13.0.1.0.2", "version": "14.0.1.0.0",
"development_status": "Beta", "development_status": "Alpha",
"category": "Social Network", "category": "Social Network",
"website": "https://github.com/OCA/social", "website": "https://github.com/OCA/social",
"author": "ForgeFlow, Odoo Community Association (OCA)", "author": "Eficent, Sodexis, Odoo Community Association (OCA)",
"license": "AGPL-3", "license": "AGPL-3",
"installable": True, "installable": True,
"depends": ["mail_activity_board"], "depends": ["mail_activity_board"],
"data": [ "data": [
"views/assets_backend.xml",
"security/ir.model.access.csv", "security/ir.model.access.csv",
"security/mail_activity_team_security.xml", "security/mail_activity_team_security.xml",
"views/mail_activity_team_views.xml", "views/mail_activity_team_views.xml",
"views/mail_activity_views.xml", "views/mail_activity_views.xml",
"views/res_users_views.xml", "views/res_users_views.xml",
], ],
"qweb": [
"static/src/xml/systray.xml",
],
} }

View File

@ -1,146 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mail_activity_team
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2022-01-13 12:40+0000\n"
"Last-Translator: tfo <fossoul.t@gmail.com>\n"
"Language-Team: none\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.3.2\n"
#. module: mail_activity_team
#: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity_team__active
msgid "Active"
msgstr "Actif"
#. module: mail_activity_team
#: model:ir.model,name:mail_activity_team.model_mail_activity
msgid "Activity"
msgstr "Activité"
#. module: mail_activity_team
#: model:ir.model,name:mail_activity_team.model_mail_activity_mixin
msgid "Activity Mixin"
msgstr "Combinaison d'activités"
#. module: mail_activity_team
#: model_terms:ir.ui.view,arch_db:mail_activity_team.mail_activity_team_view_form
msgid "Activity Team"
msgstr "Equipe d'activité"
#. module: mail_activity_team
#: model:ir.actions.act_window,name:mail_activity_team.mail_activity_team_action
#: model:ir.model.fields,field_description:mail_activity_team.field_res_users__activity_team_ids
#: model:ir.ui.menu,name:mail_activity_team.menu_mail_activity_team
msgid "Activity Teams"
msgstr "Equipes d'activité"
#. module: mail_activity_team
#: model_terms:ir.ui.view,arch_db:mail_activity_team.mail_activity_team_view_form
msgid "Assign to missing activities"
msgstr "Assigner une équipe aux activités manquantes"
#. module: mail_activity_team
#: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity_team__create_uid
msgid "Created by"
msgstr "Créé par"
#. module: mail_activity_team
#: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity_team__create_date
msgid "Created on"
msgstr "Créé le"
#. module: mail_activity_team
#: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity_team__display_name
msgid "Display Name"
msgstr ""
#. module: mail_activity_team
#: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity_team__id
msgid "ID"
msgstr ""
#. module: mail_activity_team
#: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity_team____last_update
msgid "Last Modified on"
msgstr ""
#. module: mail_activity_team
#: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity_team__write_uid
msgid "Last Updated by"
msgstr ""
#. module: mail_activity_team
#: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity_team__write_date
msgid "Last Updated on"
msgstr ""
#. module: mail_activity_team
#: model:ir.model,name:mail_activity_team.model_mail_activity_team
msgid "Mail Activity Team"
msgstr ""
#. module: mail_activity_team
#: model_terms:ir.ui.view,arch_db:mail_activity_team.mail_activity_team_view_form
msgid "Members"
msgstr ""
#. module: mail_activity_team
#: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity_team__count_missing_activities
msgid "Missing Activities"
msgstr ""
#. module: mail_activity_team
#: model_terms:ir.ui.view,arch_db:mail_activity_team.mail_activity_view_search
msgid "My Team Activities"
msgstr ""
#. module: mail_activity_team
#: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity_team__name
msgid "Name"
msgstr ""
#. module: mail_activity_team
#: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity__team_id
#: model_terms:ir.ui.view,arch_db:mail_activity_team.mail_activity_view_search
msgid "Team"
msgstr ""
#. module: mail_activity_team
#: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity_team__user_id
msgid "Team Leader"
msgstr ""
#. module: mail_activity_team
#: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity_team__member_ids
msgid "Team Members"
msgstr ""
#. module: mail_activity_team
#: model_terms:ir.ui.view,arch_db:mail_activity_team.mail_activity_view_kanban
msgid "Team:"
msgstr ""
#. module: mail_activity_team
#: code:addons/mail_activity_team/models/mail_activity.py:0
#, python-format
msgid "The assigned user is not member of the team."
msgstr ""
#. module: mail_activity_team
#: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity_team__res_model_ids
msgid "Used models"
msgstr ""
#. module: mail_activity_team
#: model:ir.model,name:mail_activity_team.model_res_users
msgid "Users"
msgstr ""

View File

@ -26,11 +26,6 @@ msgstr "Attivo"
msgid "Activity" msgid "Activity"
msgstr "Attività" msgstr "Attività"
#. module: mail_activity_team
#: model:ir.model,name:mail_activity_team.model_mail_activity_mixin
msgid "Activity Mixin"
msgstr ""
#. module: mail_activity_team #. module: mail_activity_team
#: model_terms:ir.ui.view,arch_db:mail_activity_team.mail_activity_team_view_form #: model_terms:ir.ui.view,arch_db:mail_activity_team.mail_activity_team_view_form
msgid "Activity Team" msgid "Activity Team"

View File

@ -4,7 +4,7 @@
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Odoo Server 13.0\n" "Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
@ -56,17 +56,26 @@ msgid "Created on"
msgstr "" msgstr ""
#. module: mail_activity_team #. module: mail_activity_team
#: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity__display_name
#: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity_mixin__display_name
#: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity_team__display_name #: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity_team__display_name
#: model:ir.model.fields,field_description:mail_activity_team.field_res_users__display_name
msgid "Display Name" msgid "Display Name"
msgstr "" msgstr ""
#. module: mail_activity_team #. module: mail_activity_team
#: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity__id
#: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity_mixin__id
#: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity_team__id #: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity_team__id
#: model:ir.model.fields,field_description:mail_activity_team.field_res_users__id
msgid "ID" msgid "ID"
msgstr "" msgstr ""
#. module: mail_activity_team #. module: mail_activity_team
#: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity____last_update
#: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity_mixin____last_update
#: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity_team____last_update #: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity_team____last_update
#: model:ir.model.fields,field_description:mail_activity_team.field_res_users____last_update
msgid "Last Modified on" msgid "Last Modified on"
msgstr "" msgstr ""
@ -95,6 +104,13 @@ msgstr ""
msgid "Missing Activities" msgid "Missing Activities"
msgstr "" msgstr ""
#. module: mail_activity_team
#. openerp-web
#: code:addons/mail_activity_team/static/src/xml/systray.xml:0
#, python-format
msgid "My Activities"
msgstr ""
#. module: mail_activity_team #. module: mail_activity_team
#: model_terms:ir.ui.view,arch_db:mail_activity_team.mail_activity_view_search #: model_terms:ir.ui.view,arch_db:mail_activity_team.mail_activity_view_search
msgid "My Team Activities" msgid "My Team Activities"
@ -111,6 +127,13 @@ msgstr ""
msgid "Team" msgid "Team"
msgstr "" msgstr ""
#. module: mail_activity_team
#. openerp-web
#: code:addons/mail_activity_team/static/src/xml/systray.xml:0
#, python-format
msgid "Team Activities"
msgstr ""
#. module: mail_activity_team #. module: mail_activity_team
#: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity_team__user_id #: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity_team__user_id
msgid "Team Leader" msgid "Team Leader"
@ -129,7 +152,7 @@ msgstr ""
#. module: mail_activity_team #. module: mail_activity_team
#: code:addons/mail_activity_team/models/mail_activity.py:0 #: code:addons/mail_activity_team/models/mail_activity.py:0
#, python-format #, python-format
msgid "The assigned user is not member of the team." msgid "The assigned user %s is not member of the team %s."
msgstr "" msgstr ""
#. module: mail_activity_team #. module: mail_activity_team
@ -141,3 +164,19 @@ msgstr ""
#: model:ir.model,name:mail_activity_team.model_res_users #: model:ir.model,name:mail_activity_team.model_res_users
msgid "Users" msgid "Users"
msgstr "" msgstr ""
#. module: mail_activity_team
#: model:ir.model.fields,field_description:mail_activity_team.field_account_bank_statement_line__activity_team_user_ids
#: model:ir.model.fields,field_description:mail_activity_team.field_account_journal__activity_team_user_ids
#: model:ir.model.fields,field_description:mail_activity_team.field_account_move__activity_team_user_ids
#: model:ir.model.fields,field_description:mail_activity_team.field_account_payment__activity_team_user_ids
#: model:ir.model.fields,field_description:mail_activity_team.field_event_event__activity_team_user_ids
#: model:ir.model.fields,field_description:mail_activity_team.field_event_registration__activity_team_user_ids
#: 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_mailing_mailing__activity_team_user_ids
#: model:ir.model.fields,field_description:mail_activity_team.field_product_product__activity_team_user_ids
#: model:ir.model.fields,field_description:mail_activity_team.field_product_template__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 ""

View File

@ -1,4 +1,4 @@
# Copyright 2018 ForgeFlow, S.L. # Copyright 2018 Eficent Business and IT Consulting Services, S.L.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import SUPERUSER_ID, _, api, fields, models from odoo import SUPERUSER_ID, _, api, fields, models
from odoo.exceptions import ValidationError from odoo.exceptions import ValidationError
@ -57,18 +57,23 @@ class MailActivity(models.Model):
@api.constrains("team_id", "user_id") @api.constrains("team_id", "user_id")
def _check_team_and_user(self): def _check_team_and_user(self):
# SUPERUSER is used to put mail.activity on some objects for activity in self:
# like sale.order coming from stock.picking # SUPERUSER is used to put mail.activity on some objects
# (for example with exception type activity, with no backorder). # like sale.order coming from stock.picking
# SUPERUSER is inactive and then even if you add it # (for example with exception type activity, with no backorder).
# to member_ids it's not taken account # SUPERUSER is inactive and then even if you add it
# To not be blocked we must add it to constraint condition # to member_ids it's not taken account
# We must consider also users that could be archived but come from # To not be blocked we must add it to constraint condition.
# an automatic scheduled activity # We must consider also users that could be archived but come from
for _activity in self.filtered( # an automatic scheduled activity
lambda a: a.user_id.id != SUPERUSER_ID if (
and a.team_id activity.user_id.id != SUPERUSER_ID
and a.user_id and activity.team_id
and a.user_id not in a.team_id.with_context(active_test=True).member_ids and activity.user_id
): and activity.user_id
raise ValidationError(_("The assigned user is not member of the team.")) not in activity.team_id.with_context(active_test=False).member_ids
):
raise ValidationError(
_("The assigned user %s is not member of the team %s.")
% (activity.user_id.name, activity.team_id.name)
)

View File

@ -1,11 +1,27 @@
# Copyright 2021 Tecnativa - David Vidal # Copyright 2021 Tecnativa - David Vidal
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import models from odoo import api, fields, models
class MailActivityMixin(models.AbstractModel): class MailActivityMixin(models.AbstractModel):
_inherit = "mail.activity.mixin" _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)]
def activity_schedule( def activity_schedule(
self, act_type_xmlid="", date_deadline=None, summary="", note="", **act_values self, act_type_xmlid="", date_deadline=None, summary="", note="", **act_values
): ):
@ -23,7 +39,6 @@ class MailActivityMixin(models.AbstractModel):
) )
._get_default_team_id(user_id=user_id) ._get_default_team_id(user_id=user_id)
) )
# Even if it comes empty, we don't want to mismatch the user's team
act_values.update({"team_id": team.id}) act_values.update({"team_id": team.id})
return super().activity_schedule( return super().activity_schedule(
act_type_xmlid=act_type_xmlid, act_type_xmlid=act_type_xmlid,

View File

@ -1,4 +1,5 @@
# Copyright 2018 ForgeFlow, S.L. # Copyright 2018 Eficent Business and IT Consulting Services, S.L.
# Copyright 2021 Sodexis
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import api, fields, models from odoo import api, fields, models
@ -48,12 +49,6 @@ class MailActivityTeam(models.Model):
string="Missing Activities", compute="_compute_missing_activities", default=0 string="Missing Activities", compute="_compute_missing_activities", default=0
) )
@api.onchange("member_ids")
def _onchange_member_ids(self):
"""Remove team leader in case is not a member anymore"""
if self.user_id and self.user_id not in self.member_ids:
self.user_id = False
@api.onchange("user_id") @api.onchange("user_id")
def _onchange_user_id(self): def _onchange_user_id(self):
if self.user_id and self.user_id not in self.member_ids: if self.user_id and self.user_id not in self.member_ids:

View File

@ -1,6 +1,6 @@
# Copyright 2018 ForgeFlow, S.L. # Copyright 2018 Eficent Business and IT Consulting Services, S.L.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import fields, models from odoo import api, fields, models, modules
class ResUsers(models.Model): class ResUsers(models.Model):
@ -11,3 +11,64 @@ class ResUsers(models.Model):
relation="mail_activity_team_users_rel", relation="mail_activity_team_users_rel",
string="Activity Teams", string="Activity Teams",
) )
@api.model
def systray_get_activities(self):
if not self._context.get("team_activities", False):
return super().systray_get_activities()
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 = 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"],
"type": "activity",
"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 and activity["states"] in (
"today",
"overdue",
):
user_activities[activity["model"]]["total_count"] -= activity["count"]
return list(user_activities.values())

View File

@ -1,7 +1,7 @@
* `ForgeFlow <https://www.forgeflow.com>`_: * `Eficent <https://www.eficent.com>`_:
* Jordi Ballester Alomar (jordi.ballester@forgeflow.com) * Jordi Ballester Alomar (jordi.ballester@eficent.com)
* Miquel Raïch (miquel.raich@forgeflow.com) * Miquel Raïch (miquel.raich@eficent.com)
* Pedro Gonzalez (pedro.gonzalez@pesol.es) * Pedro Gonzalez (pedro.gonzalez@pesol.es)
* `Tecnativa <https://www.tecnativa.com>`_: * `Tecnativa <https://www.tecnativa.com>`_:

View File

@ -367,8 +367,14 @@ ul.auto-toc {
!! This file is generated by oca-gen-addon-readme !! !! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !! !! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/social/tree/13.0/mail_activity_team"><img alt="OCA/social" src="https://img.shields.io/badge/github-OCA%2Fsocial-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/social-13-0/social-13-0-mail_activity_team"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/205/13.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p> <p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Alpha" src="https://img.shields.io/badge/maturity-Alpha-red.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/social/tree/14.0/mail_activity_team"><img alt="OCA/social" src="https://img.shields.io/badge/github-OCA%2Fsocial-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/social-14-0/social-14-0-mail_activity_team"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/205/14.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
<p>This module adds the possibility to assign teams to activities.</p> <p>This module adds the possibility to assign teams to activities.</p>
<div class="admonition important">
<p class="first admonition-title">Important</p>
<p class="last">This is an alpha version, the data model and design can change at any time without warning.
Only for development or testing purpose, do not use in production.
<a class="reference external" href="https://odoo-community.org/page/development-status">More details on development status</a></p>
</div>
<p><strong>Table of contents</strong></p> <p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents"> <div class="contents local topic" id="contents">
<ul class="simple"> <ul class="simple">
@ -405,7 +411,7 @@ teams.</p>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/social/issues">GitHub Issues</a>. <p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/social/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported. In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed If you spotted it first, help us smashing it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/social/issues/new?body=module:%20mail_activity_team%0Aversion:%2013.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p> <a class="reference external" href="https://github.com/OCA/social/issues/new?body=module:%20mail_activity_team%0Aversion:%2014.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p> <p>Do not contact contributors directly about support or help with technical issues.</p>
</div> </div>
<div class="section" id="credits"> <div class="section" id="credits">
@ -413,15 +419,16 @@ If you spotted it first, help us smashing it by providing a detailed and welcome
<div class="section" id="authors"> <div class="section" id="authors">
<h2><a class="toc-backref" href="#id4">Authors</a></h2> <h2><a class="toc-backref" href="#id4">Authors</a></h2>
<ul class="simple"> <ul class="simple">
<li>ForgeFlow</li> <li>Eficent</li>
<li>Sodexis</li>
</ul> </ul>
</div> </div>
<div class="section" id="contributors"> <div class="section" id="contributors">
<h2><a class="toc-backref" href="#id5">Contributors</a></h2> <h2><a class="toc-backref" href="#id5">Contributors</a></h2>
<ul class="simple"> <ul class="simple">
<li><a class="reference external" href="https://www.forgeflow.com">ForgeFlow</a>:<ul> <li><a class="reference external" href="https://www.eficent.com">Eficent</a>:<ul>
<li>Jordi Ballester Alomar (<a class="reference external" href="mailto:jordi.ballester&#64;forgeflow.com">jordi.ballester&#64;forgeflow.com</a>)</li> <li>Jordi Ballester Alomar (<a class="reference external" href="mailto:jordi.ballester&#64;eficent.com">jordi.ballester&#64;eficent.com</a>)</li>
<li>Miquel Raïch (<a class="reference external" href="mailto:miquel.raich&#64;forgeflow.com">miquel.raich&#64;forgeflow.com</a>)</li> <li>Miquel Raïch (<a class="reference external" href="mailto:miquel.raich&#64;eficent.com">miquel.raich&#64;eficent.com</a>)</li>
<li>Pedro Gonzalez (<a class="reference external" href="mailto:pedro.gonzalez&#64;pesol.es">pedro.gonzalez&#64;pesol.es</a>)</li> <li>Pedro Gonzalez (<a class="reference external" href="mailto:pedro.gonzalez&#64;pesol.es">pedro.gonzalez&#64;pesol.es</a>)</li>
</ul> </ul>
</li> </li>
@ -438,7 +445,7 @@ If you spotted it first, help us smashing it by providing a detailed and welcome
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose <p>OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and mission is to support the collaborative development of Odoo features and
promote its widespread use.</p> promote its widespread use.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/social/tree/13.0/mail_activity_team">OCA/social</a> project on GitHub.</p> <p>This module is part of the <a class="reference external" href="https://github.com/OCA/social/tree/14.0/mail_activity_team">OCA/social</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p> <p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div> </div>
</div> </div>

View File

@ -0,0 +1,102 @@
odoo.define("mail_activity_team.systray.ActivityMenu", function (require) {
"use strict";
var ActivityMenu = require("mail.systray.ActivityMenu");
var session = require("web.session");
ActivityMenu.include({
events: _.extend({}, ActivityMenu.prototype.events, {
"click .o_filter_button": "_onClickFilterButton",
}),
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 () {
this._super.apply(this, arguments);
this.$(".o_notification_counter").text(this.activityCounter);
},
_onClickFilterButton: 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 () {
session.user_context = _.extend({}, session.user_context, {
team_activities: !session.user_context.team_activities,
});
self._rpc({
model: "res.users",
method: "systray_get_activities",
args: [],
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;
},
0
);
self.$(".o_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,
});
});
});
},
});
});

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8" ?>
<templates>
<t t-extend="mail.systray.ActivityMenu">
<t t-jquery=".o_mail_systray_dropdown_items" t-operation="before">
<div class="o_mail_systray_dropdown_top">
<div>
<button
type="button"
class="btn btn-link o_filter_button active"
data-filter='my'
role="tab"
> My Activities </button>
<button
type="button"
class="btn btn-link o_filter_button"
data-filter='team'
role="tab"
> Team Activities </button>
</div>
</div>
</t>
</t>
</templates>

View File

@ -1,4 +1,4 @@
# Copyright 2018 ForgeFlow, S.L. # Copyright 2018 Eficent Business and IT Consulting Services, S.L.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo.exceptions import ValidationError from odoo.exceptions import ValidationError
from odoo.tests.common import TransactionCase from odoo.tests.common import TransactionCase
@ -139,15 +139,6 @@ class TestMailActivityTeam(TransactionCase):
self.assertEqual(self.team1.count_missing_activities, 0) self.assertEqual(self.team1.count_missing_activities, 0)
self.assertEqual(self.act1.team_id, self.team1) self.assertEqual(self.act1.team_id, self.team1)
def test_team_onchanges(self):
self.assertFalse(
self.team2.user_id, "Error: Team 2 should not have a Team Leader yet."
)
self.team2.user_id = self.employee
self.team2.member_ids = [(3, self.employee.id)]
self.team2._onchange_member_ids()
self.assertFalse(self.team2.user_id)
def test_leader_onchange(self): def test_leader_onchange(self):
self.team2.user_id = self.employee3 self.team2.user_id = self.employee3
self.team2._onchange_user_id() self.team2._onchange_user_id()

View File

@ -0,0 +1,11 @@
<?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"
/>
</xpath>
</template>
</odoo>