diff --git a/tko_project_task_actions_assign/models/project_task.py b/tko_project_task_actions_assign/models/project_task.py index 9023cb7..ba2e883 100644 --- a/tko_project_task_actions_assign/models/project_task.py +++ b/tko_project_task_actions_assign/models/project_task.py @@ -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)))] diff --git a/tko_project_task_actions_assign_team/__manifest__.py b/tko_project_task_actions_assign_team/__manifest__.py index d249af6..223b3e9 100644 --- a/tko_project_task_actions_assign_team/__manifest__.py +++ b/tko_project_task_actions_assign_team/__manifest__.py @@ -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', diff --git a/tko_project_task_actions_assign_team/i18n/pt_BR.po b/tko_project_task_actions_assign_team/i18n/pt_BR.po new file mode 100644 index 0000000..3fd50cb --- /dev/null +++ b/tko_project_task_actions_assign_team/i18n/pt_BR.po @@ -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" diff --git a/tko_project_task_actions_assign_team/models/project.py b/tko_project_task_actions_assign_team/models/project.py index f38247a..60e9623 100644 --- a/tko_project_task_actions_assign_team/models/project.py +++ b/tko_project_task_actions_assign_team/models/project.py @@ -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): @@ -25,8 +48,23 @@ 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): @@ -34,7 +72,8 @@ def self_assign(self): 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 @@ -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: @@ -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 - diff --git a/tko_project_task_actions_assign_team/models/project_team.py b/tko_project_task_actions_assign_team/models/project_team.py index 2c74942..052cb69 100644 --- a/tko_project_task_actions_assign_team/models/project_team.py +++ b/tko_project_task_actions_assign_team/models/project_team.py @@ -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)) - - - diff --git a/tko_project_task_actions_assign_team/views/project_task_view.xml b/tko_project_task_actions_assign_team/views/project_task_view.xml index d0620a9..bbbe5d4 100644 --- a/tko_project_task_actions_assign_team/views/project_task_view.xml +++ b/tko_project_task_actions_assign_team/views/project_task_view.xml @@ -1,53 +1,73 @@ - - - project.project.form - project.project - - - - - + + + project.project.form + project.project + + + + - + + - - - task.type.form - task.type - - - - - - + + - - - project.task.action.form - project.task.action - - - - - + + + task.type.form + task.type + + + + - - - - project.task.form - project.task - - - - - - - - - + + + + + + project.task.action.form + project.task.action + + + + + + + + + + project.task.form + project.task + + + + + + + + [('id','in',user_ids and user_ids[0][2])] + + + + + + + project.task.form + project.task + + + + [('id','in',project_user_ids and project_user_ids[0][2])] + + + - + + +