Skip to content

Commit cc248fa

Browse files
author
Clément Mombereau
committed
[ADD] new module project_task_report
1 parent 5af6c89 commit cc248fa

File tree

7 files changed

+188
-0
lines changed

7 files changed

+188
-0
lines changed

project_task_report/README.rst

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
===================
2+
Project Task Report
3+
===================
4+
5+
Task wizard to sum up the progress between two dates
6+
7+
Purpose
8+
=======
9+
10+
This module does this and that...
11+
12+
Explain the use case.
13+
14+
Configuration
15+
=============
16+
17+
To configure this module, you need to:
18+
19+
#. Go to ...
20+
21+
Usage
22+
=====
23+
24+
To use this module, you need to:
25+
26+
#. Go to ...
27+
28+
29+
How to test
30+
===========
31+
32+
...

project_task_report/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from . import wizards

project_task_report/__manifest__.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Copyright 2024 Akretion
2+
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3+
4+
{
5+
"name": "Project Task Report",
6+
"summary": """Task wizard to sum up the progress between two dates""",
7+
"version": "16.0.1.0.0",
8+
"license": "AGPL-3",
9+
"author": "Akretion",
10+
"website": "http://akretion.com",
11+
"depends": ["project", "hr_timesheet"],
12+
"data": [
13+
"security/ir.model.access.csv",
14+
"wizards/project_task_report.xml",
15+
],
16+
"demo": [],
17+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
2+
project_task_report.access_project_task_report,access_project_task_report,project_task_report.model_project_task_report,base.group_user,1,1,1,1
3+
project_task_report.access_project_task_report_line,access_project_task_report_line,project_task_report.model_project_task_report_line,base.group_user,1,1,1,1
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from . import project_task_report
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# Copyright 2024 Akretion
2+
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3+
4+
from odoo import _, api, fields, models
5+
6+
7+
class ProjectTaskReport(models.TransientModel):
8+
_name = "project.task.report"
9+
_description = "Task Report"
10+
11+
start_date = fields.Date()
12+
end_date = fields.Date()
13+
project_ids = fields.Many2many("project.project", string="Projects")
14+
15+
def _create_line_ids(self):
16+
line_vals = []
17+
task_ids = self.env["project.task"].search(
18+
[("project_id", "in", self.project_ids.ids)]
19+
)
20+
21+
# Catch the tasks which have timesheets between the start and end dates
22+
# with their timesheets between these two dates.
23+
for task_id in task_ids:
24+
line_val = {"task_id": task_id.id, "timesheet_ids": []}
25+
for timesheet_id in task_id.timesheet_ids:
26+
if self.start_date < timesheet_id.date < self.end_date:
27+
line_val["timesheet_ids"].append(timesheet_id.id)
28+
if line_val["timesheet_ids"]:
29+
line_vals.append(line_val)
30+
31+
return self.env["project.task.report.line"].create(line_vals)
32+
33+
def action_view_task_report(self):
34+
self.ensure_one()
35+
36+
line_ids = self._create_line_ids()
37+
38+
action_xml_id = "project_task_report.project_task_report_line_act_window"
39+
action = self.env["ir.actions.act_window"]._for_xml_id(action_xml_id)
40+
action.update({"domain": [("id", "in", line_ids.ids)]})
41+
return action
42+
43+
44+
class ProjectTaskReportLine(models.TransientModel):
45+
_name = "project.task.report.line"
46+
_description = "Task Report Line"
47+
48+
task_id = fields.Many2one("project.task")
49+
start_stage_id = fields.Many2one("project.task.type")
50+
end_stage_id = fields.Many2one("project.task.type")
51+
52+
timesheet_ids = fields.Many2many("account.analytic.line")
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<!-- Copyright 2024 Akretion
3+
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
4+
5+
<odoo>
6+
7+
<record id="project_task_report_form_view" model="ir.ui.view">
8+
<field name="model">project.task.report</field>
9+
<field name="arch" type="xml">
10+
<form string="Project Task Report">
11+
<group>
12+
<field name="start_date"/>
13+
<field name="end_date"/>
14+
<field name="project_ids" widget="many2many_tags"/>
15+
</group>
16+
<footer>
17+
<button name="action_view_task_report"
18+
string="Create Task Report"
19+
class="btn-primary"
20+
type="object"/>
21+
<button string="Cancel"
22+
class="btn-default"
23+
special="cancel"/>
24+
</footer>
25+
</form>
26+
</field>
27+
</record>
28+
29+
<record model="ir.actions.act_window" id="project_task_report_act_window">
30+
<field name="name">Task Report</field>
31+
<field name="res_model">project.task.report</field>
32+
<field name="view_mode">form</field>
33+
<field name="target">new</field>
34+
</record>
35+
36+
<record id="project_task_report_line_tree_view" model="ir.ui.view">
37+
<field name="name">project.task.report.line.tree</field>
38+
<field name="model">project.task.report.line</field>
39+
<field name="arch" type="xml">
40+
<tree string="Task Report" create="false" delete="false" edit="false">
41+
<field name="task_id"/>
42+
<field name="start_stage_id"/>
43+
<field name="end_stage_id"/>
44+
</tree>
45+
</field>
46+
</record>
47+
48+
<record id="project_task_report_line_form_view" model="ir.ui.view">
49+
<field name="model">project.task.report.line</field>
50+
<field name="arch" type="xml">
51+
<form string="Project Task Report Line">
52+
<div class="oe_title">
53+
<label for="task_id"/>
54+
<h1><field name="task_id"/></h1>
55+
</div>
56+
<group>
57+
<group>
58+
<field name="start_stage_id"/>
59+
<field name="end_stage_id"/>
60+
</group>
61+
<group>
62+
<field name="timesheet_ids"/>
63+
</group>
64+
</group>
65+
66+
</form>
67+
</field>
68+
</record>
69+
70+
<record model="ir.actions.act_window" id="project_task_report_line_act_window">
71+
<field name="name">Task Report Line</field>
72+
<field name="res_model">project.task.report.line</field>
73+
<field name="view_mode">tree,form</field>
74+
</record>
75+
76+
<record model="ir.ui.menu" id="project_task_report_menu">
77+
<field name="name">Task Report</field>
78+
<field name="parent_id" ref="project.menu_project_report"/>
79+
<field name="action" ref="project_task_report_act_window"/>
80+
<field name="sequence" eval="10"/>
81+
</record>
82+
</odoo>

0 commit comments

Comments
 (0)