Project Employee view
This commit is contained in:
parent
73a27d8921
commit
fa3833bac3
|
|
@ -0,0 +1 @@
|
|||
from . import models
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
'name': 'Project Employee View',
|
||||
'version': '1.0',
|
||||
'depends': [
|
||||
'project',
|
||||
'hr'
|
||||
],
|
||||
'data': [
|
||||
'security/ir.model.access.csv',
|
||||
'views/project_form_view.xml',
|
||||
],
|
||||
'installable': True,
|
||||
}
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
from . import project
|
||||
from . import employee_project_work_line
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
from odoo import models, fields
|
||||
|
||||
|
||||
class EmployeeProjectWorkLine(models.Model):
|
||||
_name = 'employee.project.work.line'
|
||||
_description = 'Employee Project Work Line'
|
||||
_rec_name = 'project_id'
|
||||
|
||||
# Back reference to project form
|
||||
project_parent_id = fields.Many2one(
|
||||
'project.project',
|
||||
ondelete='cascade'
|
||||
)
|
||||
|
||||
# Actual project
|
||||
project_id = fields.Many2one(
|
||||
'project.project',
|
||||
string='Project',
|
||||
readonly=True
|
||||
)
|
||||
|
||||
# Tasks of selected employee in this project
|
||||
task_ids = fields.Many2many(
|
||||
'project.task',
|
||||
readonly=True
|
||||
)
|
||||
|
||||
task_count = fields.Integer(
|
||||
string='Task Count',
|
||||
readonly=True
|
||||
)
|
||||
|
||||
def action_view_tasks(self):
|
||||
self.ensure_one()
|
||||
return {
|
||||
'type': 'ir.actions.act_window',
|
||||
'name': 'Tasks',
|
||||
'res_model': 'project.task',
|
||||
'view_mode': 'list,form',
|
||||
'domain': [('id', 'in', self.task_ids.ids)],
|
||||
'context': {'create': False},
|
||||
}
|
||||
|
||||
def action_view_timeline(self):
|
||||
self.ensure_one()
|
||||
return {
|
||||
'type': 'ir.actions.act_window',
|
||||
'name': 'Timeline',
|
||||
'res_model': 'mail.message',
|
||||
'view_mode': 'list',
|
||||
'domain': [
|
||||
('model', '=', 'project.project'),
|
||||
('res_id', '=', self.project_id.id),
|
||||
],
|
||||
}
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
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
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_employee_project_work_line_user,employee.project.work.line user,model_employee_project_work_line,base.group_user,1,0,0,0
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
<odoo>
|
||||
<record id="project_form_employee_work_overview" model="ir.ui.view">
|
||||
<field name="name">project.form.employee.work.overview</field>
|
||||
<field name="model">project.project</field>
|
||||
<field name="inherit_id" ref="project.edit_project"/>
|
||||
<field name="arch" type="xml">
|
||||
|
||||
<xpath expr="//notebook" position="inside">
|
||||
<page string="Employee Work">
|
||||
|
||||
<!-- Employee selector -->
|
||||
<group>
|
||||
<field name="selected_employee_id"/>
|
||||
</group>
|
||||
|
||||
<!-- Unified Employee Work Overview -->
|
||||
<group string="Employee Work Overview">
|
||||
<field name="employee_project_work_ids"
|
||||
readonly="1"
|
||||
invisible="not selected_employee_id">
|
||||
|
||||
<list>
|
||||
<field name="project_id"/>
|
||||
<field name="task_count"/>
|
||||
|
||||
<button name="action_view_tasks"
|
||||
string="Tasks"
|
||||
type="object"/>
|
||||
|
||||
<button name="action_view_timeline"
|
||||
string="Timeline"
|
||||
type="object"/>
|
||||
</list>
|
||||
|
||||
</field>
|
||||
</group>
|
||||
|
||||
</page>
|
||||
</xpath>
|
||||
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
Loading…
Reference in New Issue