Skip to content

Commit 1cf7476

Browse files
committed
project_workload: add view to see load, automatically set done load when the task is closed
1 parent 7955d70 commit 1cf7476

File tree

5 files changed

+100
-5
lines changed

5 files changed

+100
-5
lines changed

project_workload/__manifest__.py

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
"views/project_task_workload_view.xml",
2222
"views/project_task_view.xml",
2323
"views/project_project_view.xml",
24+
"views/project_task_workload_unit_view.xml",
2425
"views/menu_view.xml",
2526
],
2627
}

project_workload/models/project_workload_unit.py

+15-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# @author Florian Mounier <florian.mounier@akretion.com>
44
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
55

6-
from odoo import fields, models
6+
from odoo import api, fields, models
77

88

99
class ProjectWorkloadUnit(models.Model):
@@ -18,8 +18,21 @@ class ProjectWorkloadUnit(models.Model):
1818
)
1919
task_id = fields.Many2one("project.task", "Task", related="workload_id.task_id")
2020
project_id = fields.Many2one(
21-
"project.project", "Project", related="workload_id.project_id"
21+
"project.project",
22+
"Project",
23+
related="workload_id.project_id",
24+
store=True,
2225
)
26+
done = fields.Boolean(compute="_compute_done", store=True)
27+
28+
def is_done(self):
29+
self.ensure_one()
30+
return self.task_id.stage_id.is_closed
31+
32+
@api.depends("task_id.stage_id.is_closed")
33+
def _compute_done(self):
34+
for record in self:
35+
record.done = record.is_done()
2336

2437
def name_get(self):
2538
result = []

project_workload/views/menu_view.xml

+8
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,12 @@
99
groups="project_workload.group_project_workload"
1010
/>
1111

12+
<menuitem
13+
id="project_task_workload_menu"
14+
name="Workload"
15+
parent="project_workload.project_workload_menu"
16+
sequence="10"
17+
action="project_workload_unit_action"
18+
/>
19+
1220
</odoo>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
<?xml version="1.0" encoding="UTF-8" ?>
2+
<odoo>
3+
4+
<record id="project_workload_unit_view_tree" model="ir.ui.view">
5+
<field name="model">project.workload.unit</field>
6+
<field name="arch" type="xml">
7+
<tree string="Workload">
8+
<field name="week" />
9+
<field name="user_id" />
10+
<field name="hours" />
11+
<field name="project_id" />
12+
<field name="task_id" optional="hide" />
13+
<field name="workload_id" optional="hide" />
14+
</tree>
15+
</field>
16+
</record>
17+
18+
<record id="project_workload_unit_view_search" model="ir.ui.view">
19+
<field name="model">project.workload.unit</field>
20+
<field name="arch" type="xml">
21+
<search string="Workload">
22+
<field name="week" />
23+
<field name="user_id" />
24+
<field name="project_id" />
25+
<filter
26+
string="My load"
27+
name="my_load"
28+
domain="[('user_id', '=', uid), ('done', '=', False)]"
29+
/>
30+
<group expand="0" string="Group By">
31+
<filter
32+
string="Week"
33+
name="groupby_week"
34+
domain="[]"
35+
context="{'group_by': 'week'}"
36+
/>
37+
<filter
38+
string="User"
39+
name="groupby_user"
40+
domain="[]"
41+
context="{'group_by': 'user_id'}"
42+
/>
43+
<filter
44+
string="Project"
45+
name="groupby_project"
46+
domain="[]"
47+
context="{'group_by': 'project_id'}"
48+
/>
49+
</group>
50+
</search>
51+
</field>
52+
</record>
53+
54+
<record model="ir.actions.act_window" id="project_workload_unit_action">
55+
<field name="name">Workload</field>
56+
<field name="type">ir.actions.act_window</field>
57+
<field name="res_model">project.workload.unit</field>
58+
<field name="view_mode">tree</field>
59+
<field name="search_view_id" ref="project_workload_unit_view_search" />
60+
<field name="domain">[]</field>
61+
<field
62+
name="context"
63+
>{'search_default_my_load': 1, 'search_default_groupby_week': 1}</field>
64+
</record>
65+
66+
</odoo>

project_workload_timesheet/models/project_workload_unit.py

+10-3
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,20 @@ class ProjectWorkloadUnit(models.Model):
3131
compute="_compute_progress",
3232
help="The progress of the task",
3333
)
34-
done = fields.Boolean(
35-
"Done",
34+
force_done = fields.Boolean(
35+
"Force Done",
3636
)
3737
task_stage_id = fields.Many2one(
3838
related="task_id.stage_id", string="Task Stage", readonly=False
3939
)
4040

41+
@api.depends("force_done")
42+
def _compute_done(self):
43+
return super()._compute_done()
44+
45+
def is_done(self):
46+
return super().is_done() or self.force_done
47+
4148
@api.depends("timesheet_ids.unit_amount")
4249
def _compute_timesheeted_hours(self):
4350
for record in self:
@@ -82,7 +89,7 @@ def action_timesheet_time(self):
8289
return True
8390

8491
def action_timesheet_done(self):
85-
self.done = True
92+
self.force_done = True
8693

8794
def _get_timesheeting_task(self):
8895
# For overrides

0 commit comments

Comments
 (0)