56 lines
1.7 KiB
Python
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
|