odoo18/addons_extensions/project_employee_view/models/project.py

56 lines
1.7 KiB
Python

from odoo import models, fields, api
class ProjectProject(models.Model):
_inherit = 'project.project'
# Employee selector
selected_employee_id = fields.Many2one(
'hr.employee',
string='Employee'
)
# Related user (used for task lookup)
selected_user_id = fields.Many2one(
'res.users',
related='selected_employee_id.user_id',
store=False
)
employee_project_work_ids = fields.One2many(
'employee.project.work.line',
'project_parent_id',
compute='_compute_employee_project_work',
store=True
)
@api.depends('selected_employee_id', 'selected_employee_id.user_id')
@api.onchange('selected_employee_id')
def _compute_employee_project_work(self):
for project in self:
project.employee_project_work_ids = [(5, 0, 0)]
if not project.selected_employee_id or not project.selected_employee_id.user_id:
continue
user = project.selected_employee_id.user_id
tasks = self.env['project.task'].search([
('user_ids', 'in', user.id),
('project_id.active', '=', True),
])
projects = tasks.mapped('project_id')
lines = []
for proj in projects:
proj_tasks = tasks.filtered(lambda t: t.project_id == proj)
lines.append((0, 0, {
'project_id': proj.id,
'task_ids': [(6, 0, proj_tasks.ids)],
'task_count': len(proj_tasks),
}))
project.employee_project_work_ids = lines