Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions tko_project_task_actions_assign/models/project_task.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,13 +80,13 @@ def set_cancel(self):
class ProjectTask(models.Model):
_inherit = 'project.task'

user_ids = fields.Many2many('res.users',string='Team',compute='get_users')
user_ids = fields.Many2many('res.users','project_task_team_rel', 'task_id', 'team_id', string='Team')

@api.multi
def get_users(self):
for task in self:
user_ids = []
for action_line in task.action_line_ids:
if action_line.user_id:
user_ids.append(action_line.user_id.id)
task.user_ids = [(6, 0 , list(set(user_ids)))]
# @api.multi
# def get_users(self):
# for task in self:
# user_ids = []
# for action_line in task.action_line_ids:
# if action_line.user_id:
# user_ids.append(action_line.user_id.id)
# task.user_ids = [(6, 0 , list(set(user_ids)))]
5 changes: 3 additions & 2 deletions tko_project_task_actions_assign_team/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

{
'name': 'Project Task Actions Assign',
'name': 'Project Task Actions Assign Teams',
'summary': '',
'description': 'Assign users to actions. In configuration set task_id.user_id or task_id.project_id.user_id to get dynamic assigned users.',
'description': 'Manage teams on projects, tasks, and actions, '
'set assigned to on action lines',
'author': 'TKO',
'category': 'Project',
'license': 'AGPL-3',
Expand Down
183 changes: 183 additions & 0 deletions tko_project_task_actions_assign_team/i18n/pt_BR.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * tko_project_task_actions_assign_team
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0+pro\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-14 19:04+0000\n"
"PO-Revision-Date: 2018-06-14 19:04+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"

#. module: tko_project_task_actions_assign_team
#: model:ir.model.fields,field_description:tko_project_task_actions_assign_team.field_project_project_user_id_domain
msgid "Assigned To Restriction"
msgstr "Restrição do responsável"

#. module: tko_project_task_actions_assign_team
#: model:ir.model.fields,field_description:tko_project_task_actions_assign_team.field_project_team_type
msgid "Assigned to seleciton on action lines"
msgstr "Seleção de responsável nas linhas de ações"

#. module: tko_project_task_actions_assign_team
#: selection:project.team,type:0
msgid "Auto"
msgstr "Automática"

#. module: tko_project_task_actions_assign_team
#: model:ir.model.fields,field_description:tko_project_task_actions_assign_team.field_project_team_create_uid
msgid "Created by"
msgstr "Criado por"

#. module: tko_project_task_actions_assign_team
#: model:ir.model.fields,field_description:tko_project_task_actions_assign_team.field_project_team_create_date
msgid "Created on"
msgstr "Criado em"

#. module: tko_project_task_actions_assign_team
#: model:ir.model.fields,field_description:tko_project_task_actions_assign_team.field_project_team_display_name
msgid "Display Name"
msgstr "Nome para Exibição"

#. module: tko_project_task_actions_assign_team
#: model:ir.model.fields,field_description:tko_project_task_actions_assign_team.field_project_team_id
msgid "ID"
msgstr "ID"

#. module: tko_project_task_actions_assign_team
#: model:ir.model.fields,field_description:tko_project_task_actions_assign_team.field_project_team___last_update
msgid "Last Modified on"
msgstr "Última Modificação em"

#. module: tko_project_task_actions_assign_team
#: model:ir.model.fields,field_description:tko_project_task_actions_assign_team.field_project_team_write_uid
msgid "Last Updated by"
msgstr "Última atualização por"

#. module: tko_project_task_actions_assign_team
#: model:ir.model.fields,field_description:tko_project_task_actions_assign_team.field_project_team_write_date
msgid "Last Updated on"
msgstr "Última atualização em"

#. module: tko_project_task_actions_assign_team
#: model:ir.model.fields,field_description:tko_project_task_actions_assign_team.field_project_team_manager_id
msgid "Manager"
msgstr "Manager"

#. module: tko_project_task_actions_assign_team
#: selection:project.team,type:0
msgid "Mannual"
msgstr "Manual"

#. module: tko_project_task_actions_assign_team
#: model:ir.model.fields,field_description:tko_project_task_actions_assign_team.field_project_team_name
msgid "Name"
msgstr "Nome"

#. module: tko_project_task_actions_assign_team
#: code:addons/tko_project_task_actions_assign_team/models/project.py:10
#: selection:project.project,user_id_domain:0
#, python-format
msgid "No Restriction"
msgstr "Sem restrição"

#. module: tko_project_task_actions_assign_team
#: model:ir.model.fields,field_description:tko_project_task_actions_assign_team.field_project_team_parent_id
msgid "Parent"
msgstr "Superior (Conta-pai)"

#. module: tko_project_task_actions_assign_team
#: model:ir.model,name:tko_project_task_actions_assign_team.model_project_project
msgid "Project"
msgstr "Projeto"

#. module: tko_project_task_actions_assign_team
#: model:ir.actions.act_window,name:tko_project_task_actions_assign_team.project_team_action
#: model:ir.ui.view,arch_db:tko_project_task_actions_assign_team.project_team_form
#: model:ir.ui.view,arch_db:tko_project_task_actions_assign_team.project_team_tree
msgid "Project Team"
msgstr "Projeto Time"

#. module: tko_project_task_actions_assign_team
#: model:ir.ui.menu,name:tko_project_task_actions_assign_team.project_team_action_menu
msgid "Project Teams"
msgstr "Project Teams"

#. module: tko_project_task_actions_assign_team
#: model:ir.model,name:tko_project_task_actions_assign_team.model_project_task
msgid "Task"
msgstr "Tarefa"

#. module: tko_project_task_actions_assign_team
#: model:ir.model.fields,field_description:tko_project_task_actions_assign_team.field_action_line_wizard_team_id
#: model:ir.model.fields,field_description:tko_project_task_actions_assign_team.field_project_project_team_id
#: model:ir.model.fields,field_description:tko_project_task_actions_assign_team.field_project_task_action_line_team_id
#: model:ir.model.fields,field_description:tko_project_task_actions_assign_team.field_project_task_action_team_id
#: model:ir.model.fields,field_description:tko_project_task_actions_assign_team.field_project_task_project_user_ids
#: model:ir.model.fields,field_description:tko_project_task_actions_assign_team.field_task_type_team_id
msgid "Team"
msgstr "Time"

#. module: tko_project_task_actions_assign_team
#: model:ir.model.fields,help:tko_project_task_actions_assign_team.field_project_project_user_id_domain
msgid "This will restrict Assigned To in action lines basedon selection"
msgstr "This will restrict Assigned To in action lines basedon selection"

#. module: tko_project_task_actions_assign_team
#: code:addons/tko_project_task_actions_assign_team/models/project.py:12
#: selection:project.project,user_id_domain:0
#, python-format
msgid "User's from Action Line Team"
msgstr "User's from Action Line Team"

#. module: tko_project_task_actions_assign_team
#: code:addons/tko_project_task_actions_assign_team/models/project.py:11
#: selection:project.project,user_id_domain:0
#, python-format
msgid "User's from Project Team"
msgstr "Time do projeto"

#. module: tko_project_task_actions_assign_team
#: code:addons/tko_project_task_actions_assign_team/models/project.py:13
#: selection:project.project,user_id_domain:0
#, python-format
msgid "User's from Task Team"
msgstr "Time da tarefa"

#. module: tko_project_task_actions_assign_team
#: model:ir.model.fields,field_description:tko_project_task_actions_assign_team.field_project_task_action_line_user_ids
#: model:ir.model.fields,field_description:tko_project_task_actions_assign_team.field_project_team_user_ids
#: model:ir.ui.view,arch_db:tko_project_task_actions_assign_team.project_team_form
msgid "Users"
msgstr "Usuários"

#. module: tko_project_task_actions_assign_team
#: model:ir.model,name:tko_project_task_actions_assign_team.model_action_line_wizard
msgid "action.line.wizard"
msgstr "action.line.wizard"

#. module: tko_project_task_actions_assign_team
#: model:ir.model,name:tko_project_task_actions_assign_team.model_project_task_action
msgid "project.task.action"
msgstr "project.task.action"

#. module: tko_project_task_actions_assign_team
#: model:ir.model,name:tko_project_task_actions_assign_team.model_project_task_action_line
msgid "project.task.action.line"
msgstr "project.task.action.line"

#. module: tko_project_task_actions_assign_team
#: model:ir.model,name:tko_project_task_actions_assign_team.model_project_team
msgid "project.team"
msgstr "project.team"

#. module: tko_project_task_actions_assign_team
#: model:ir.model,name:tko_project_task_actions_assign_team.model_task_type
msgid "task.type"
msgstr "task.type"
60 changes: 52 additions & 8 deletions tko_project_task_actions_assign_team/models/project.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,29 @@ class ProjectProject(models.Model):
_inherit = 'project.project'

team_id = fields.Many2one('project.team', u'Team')
user_id_domain = fields.Selection([('nr', _('No Restriction')),
('pt', _(u"User's from Project Team")),
('at', _(u"User's from Action Line Team")),
('tt', _(u"User's from Task Team")),
], default='nr',
string=u'Assigned To Restriction',
help=u'This will restrict Assigned To in action lines basedon selection')


class ProjectTask(models.Model):
_inherit = 'project.task'

project_user_ids = fields.Many2many('res.users', 'project_task_team_rel', 'task_id', 'team_id', compute='get_users', string='Team')

# set domain if project has team
@api.one
@api.depends('project_id','project_id.team_id')
def get_users(self):
if self.project_id and self.project_id.team_id:
users = self.project_id.team_id.user_ids
else:
users = self.env['res.users'].search([])
self.project_user_ids = [(6, 0, users.ids)]


class ProjectTaskType(models.Model):
Expand All @@ -25,16 +48,32 @@ class ProjectTaskActionLine(models.Model):
_inherit = 'project.task.action.line'

team_id = fields.Many2one('project.team', string=u'Team', compute='onchange_team', store=True)
# user_ids = fields.Many2many('res.users', 'task_action_line_project_team_users_rel',
# 'team_id', 'line_id', related='team_id.user_ids', string=u'Users')
user_ids = fields.Many2many('res.users', 'task_action_line_project_team_users_rel',
'team_id', 'line_id', compute='get_authorized_users', store=True, string=u'Users')

@api.one
@api.depends('action_id', 'user_id', 'task_id.user_ids', 'project_id.user_id_domain', 'project_id.team_id')
def get_authorized_users(self):

domain = self.project_id.user_id_domain
if domain == 'nr' or not self.project_id:
users = self.env['res.users'].search([])
elif domain == 'pt':
users = self.project_id.team_id.user_ids
elif domain == 'at':
users = self.action_id.team_id.user_ids
else:
users = self.task_id.user_ids
self.user_ids = [(6, 0, users.ids)]

@api.one
def self_assign(self):
users = self.team_id.get_team_users()
if self.env.uid in users:
self.user_id = self.env.uid
else:
raise Warning(u"User %s doesn't belong to team %s or it's preant teams" %(self.env.user.name, self.team_id.name))
raise Warning(
u"User %s doesn't belong to team %s or it's preant teams" % (self.env.user.name, self.team_id.name))

# use separate method to get team_id
# so that other modules which do not have fixed team
Expand Down Expand Up @@ -62,10 +101,16 @@ def onchange_action(self):
self.onchange_team()

@api.one
@api.depends('team_id','action_id')
@api.depends('action_id')
def onchange_team(self):
team_id = self.get_team_id()
if not team_id:
team_id = self.task_id and self.task_id.task_type_id and self.task_id.task_type_id.team_id \
and self.task_id.task_type_id.team_id.id or False
if not team_id:
team_id = self.task_id and self.task_id.project_id and self.task_id.project_id.team_id or False
if self.team_id:
#self.team_id = self.team_id.id
self.team_id = self.team_id.id
if self.team_id.type == 'b':
self.user_id = False
else:
Expand All @@ -75,10 +120,9 @@ def onchange_team(self):
# assign new line to the user which has min length of tasks
if len(users):
for user in users:
users_task_length[user.id] = len(self.search([('state','not in',['d','c']),('user_id','=',user.id)]))

users_task_length[user.id] = len(
self.search([('state', 'not in', ['d', 'c']), ('user_id', '=', user.id)]))

# get user with min length()
user_id = min(users_task_length, key=users_task_length.get)
self.user_id = user_id

9 changes: 3 additions & 6 deletions tko_project_task_actions_assign_team/models/project_team.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,16 @@ class ProjectTeam(models.Model):
_name = 'project.team'

name = fields.Char('Name', required=True)
type = fields.Selection([('b', u'Bucket'), ('p', u'Prorate')], default='p', required=True)
type = fields.Selection([('b', u'Manual'), ('p', u'Auto')], default='p',
string='Assigned to seleciton on action lines', required=True)
parent_id = fields.Many2one('project.team', u'Parent')
manager_id = fields.Many2one('res.users', u'Manager')
user_ids = fields.Many2many('res.users', 'project_team_users_rel', 'team_id', 'user_id', string=u'Users')


def get_team_users(self, users= []):
def get_team_users(self, users=[]):
users += self.user_ids.ids
if self.manager_id:
users.append(self.manager_id.id)
if self.parent_id:
self.parent_id.get_team_users(users)
return list(set(users))



Loading