diff --git a/addons/project/report/project_task_burndown_chart_report.py b/addons/project/report/project_task_burndown_chart_report.py
index 839fd551c13..f2a42a39d26 100644
--- a/addons/project/report/project_task_burndown_chart_report.py
+++ b/addons/project/report/project_task_burndown_chart_report.py
@@ -25,7 +25,6 @@ class ReportProjectTaskBurndownChart(models.Model):
date_assign = fields.Datetime(string='Assignment Date', readonly=True)
date_deadline = fields.Date(string='Deadline', readonly=True)
partner_id = fields.Many2one('res.partner', string='Customer', readonly=True)
- nb_tasks = fields.Integer('# of Tasks', readonly=True, group_operator="sum")
date_group_by = fields.Selection(
(
('day', 'By Day'),
@@ -115,8 +114,7 @@ SELECT (task_id*10^7 + 10^6 + to_char(d, 'YYMMDD')::integer)::bigint as id,
date_assign,
date_deadline,
partner_id,
- 'day' AS date_group_by,
- 1 AS nb_tasks
+ 'day' AS date_group_by
FROM all_moves_stage_task t
JOIN LATERAL generate_series(t.date_begin, t.date_end-interval '1 day', '1 day') d ON TRUE
@@ -132,8 +130,7 @@ SELECT (task_id*10^7 + 2*10^6 + to_char(d, 'YYMMDD')::integer)::bigint as id,
date_assign,
date_deadline,
partner_id,
- 'week' AS date_group_by,
- 1 AS nb_tasks
+ 'week' AS date_group_by
FROM all_moves_stage_task t
JOIN LATERAL generate_series(t.date_begin, t.date_end, '1 week') d ON TRUE
WHERE date_trunc('week', t.date_begin) <= date_trunc('week', d)
@@ -151,8 +148,7 @@ SELECT (task_id*10^7 + 3*10^6 + to_char(d, 'YYMMDD')::integer)::bigint as id,
date_assign,
date_deadline,
partner_id,
- 'month' AS date_group_by,
- 1 AS nb_tasks
+ 'month' AS date_group_by
FROM all_moves_stage_task t
JOIN LATERAL generate_series(t.date_begin, t.date_end, '1 month') d ON TRUE
WHERE date_trunc('month', t.date_begin) <= date_trunc('month', d)
@@ -170,8 +166,7 @@ SELECT (task_id*10^7 + 4*10^6 + to_char(d, 'YYMMDD')::integer)::bigint as id,
date_assign,
date_deadline,
partner_id,
- 'quarter' AS date_group_by,
- 1 AS nb_tasks
+ 'quarter' AS date_group_by
FROM all_moves_stage_task t
JOIN LATERAL generate_series(t.date_begin, t.date_end, '3 month') d ON TRUE
WHERE date_trunc('quarter', t.date_begin) <= date_trunc('quarter', d)
@@ -189,8 +184,7 @@ SELECT (task_id*10^7 + 5*10^6 + to_char(d, 'YYMMDD')::integer)::bigint as id,
date_assign,
date_deadline,
partner_id,
- 'year' AS date_group_by,
- 1 AS nb_tasks
+ 'year' AS date_group_by
FROM all_moves_stage_task t
JOIN LATERAL generate_series(t.date_begin, t.date_end, '1 year') d ON TRUE
WHERE date_trunc('year', t.date_begin) <= date_trunc('year', d)
diff --git a/addons/project/report/project_task_burndown_chart_report_views.xml b/addons/project/report/project_task_burndown_chart_report_views.xml
index b1456d69e8c..48548bb7de8 100644
--- a/addons/project/report/project_task_burndown_chart_report_views.xml
+++ b/addons/project/report/project_task_burndown_chart_report_views.xml
@@ -33,7 +33,6 @@
-
@@ -42,7 +41,7 @@
project.task.burndown.chart.report.view.pivot
project.task.burndown.chart.report
-
+
diff --git a/addons/project/static/src/burndown_chart/burndown_chart_model.js b/addons/project/static/src/burndown_chart/burndown_chart_model.js
new file mode 100644
index 00000000000..769a1c52c1a
--- /dev/null
+++ b/addons/project/static/src/burndown_chart/burndown_chart_model.js
@@ -0,0 +1,14 @@
+/** @odoo-module **/
+
+import { GraphModel } from "@web/views/graph/graph_model";
+
+export class BurndownChartModel extends GraphModel {
+ /**
+ * @protected
+ * @override
+ */
+ async _loadDataPoints(metaData) {
+ metaData.measures.__count.string = '# of Tasks';
+ return super._loadDataPoints(metaData);
+ }
+}
diff --git a/addons/project/static/src/burndown_chart/burndown_chart_pivot_model.js b/addons/project/static/src/burndown_chart/burndown_chart_pivot_model.js
new file mode 100644
index 00000000000..928b265eeb0
--- /dev/null
+++ b/addons/project/static/src/burndown_chart/burndown_chart_pivot_model.js
@@ -0,0 +1,14 @@
+/** @odoo-module **/
+
+import { PivotModel } from "@web/views/pivot/pivot_model";
+
+export class BurndownChartPivotModel extends PivotModel {
+ /**
+ * @protected
+ * @override
+ */
+ async _loadData(config, prune = true) {
+ config.metaData.measures.__count.string = '# of Tasks';
+ await super._loadData(config, prune);
+ }
+}
diff --git a/addons/project/static/src/burndown_chart/burndown_chart_pivot_view.js b/addons/project/static/src/burndown_chart/burndown_chart_pivot_view.js
new file mode 100644
index 00000000000..99d70fbab7a
--- /dev/null
+++ b/addons/project/static/src/burndown_chart/burndown_chart_pivot_view.js
@@ -0,0 +1,12 @@
+/** @odoo-module **/
+
+import { BurndownChartPivotModel } from "./burndown_chart_pivot_model";
+import { PivotView } from "@web/views/pivot/pivot_view";
+import { registry } from "@web/core/registry";
+
+const viewRegistry = registry.category("views");
+
+class BurndownChartPivotView extends PivotView {}
+BurndownChartPivotView.Model = BurndownChartPivotModel;
+
+viewRegistry.add("burndown_chart_pivot", BurndownChartPivotView);
diff --git a/addons/project/static/src/burndown_chart/burndown_chart_view.js b/addons/project/static/src/burndown_chart/burndown_chart_view.js
index ccda4998d83..a3f727a29a5 100644
--- a/addons/project/static/src/burndown_chart/burndown_chart_view.js
+++ b/addons/project/static/src/burndown_chart/burndown_chart_view.js
@@ -1,5 +1,6 @@
/** @odoo-module **/
+import { BurndownChartModel } from "./burndown_chart_model";
import { BurndownChartRenderer } from "./burndown_chart_renderer";
import { GraphView } from "@web/views/graph/graph_view";
import { registry } from "@web/core/registry";
@@ -9,5 +10,6 @@ const viewRegistry = registry.category("views");
class BurndownChartView extends GraphView {}
BurndownChartView.components = { ...GraphView.components, Renderer: BurndownChartRenderer };
BurndownChartView.buttonTemplate = "project.BurndownChartView.Buttons";
+BurndownChartView.Model = BurndownChartModel;
viewRegistry.add("burndown_chart", BurndownChartView);
diff --git a/addons/project/tests/test_burndown_chart.py b/addons/project/tests/test_burndown_chart.py
index c564f3e3298..16399327139 100644
--- a/addons/project/tests/test_burndown_chart.py
+++ b/addons/project/tests/test_burndown_chart.py
@@ -138,8 +138,8 @@ class TestBurndownChart(TransactionCase):
task_e.write({'stage_id': done_stage.id})
self.env.cr.flush()
- read_group_result = self.env['project.task.burndown.chart.report'].with_context(fill_temporal=True).read_group([('project_id', '=', project.id), ('display_project_id', '!=', False)], ['date', 'stage_id', 'nb_tasks'], ['date:month', 'stage_id'], lazy=False)
- read_group_result_dict = {(res['date:month'], res['stage_id'][0]): res['nb_tasks'] for res in read_group_result}
+ read_group_result = self.env['project.task.burndown.chart.report'].with_context(fill_temporal=True).read_group([('project_id', '=', project.id), ('display_project_id', '!=', False)], ['date', 'stage_id'], ['date:month', 'stage_id'], lazy=False)
+ read_group_result_dict = {(res['date:month'], res['stage_id'][0]): res['__count'] for res in read_group_result}
stages_dict = {stage.id: stage.name for stage in stages}
expected_dict = {
('January %s' % (current_year - 1), todo_stage.id): 5,
@@ -166,13 +166,13 @@ class TestBurndownChart(TransactionCase):
('January %s' % (current_year), done_stage.id): 5,
('January %s' % (current_year), todo_stage.id): 1,
}
- for (month, stage_id), nb_tasks in read_group_result_dict.items():
+ for (month, stage_id), __count in read_group_result_dict.items():
# when we don't found any record in the dict then we are in the current_year
# and the number of tasks should always be 5 in Done stage and 1 in Todo Stage
# since we have created the last task without changing its stage.
- expected_nb_tasks = expected_dict.get((month, stage_id), 5 if stage_id != todo_stage.id else 1)
+ expected_count = expected_dict.get((month, stage_id), 5 if stage_id != todo_stage.id else 1)
self.assertEqual(
- nb_tasks,
- expected_nb_tasks,
- 'In %s, the number of tasks should be equal to %s in %s stage.' % (month, expected_nb_tasks, stages_dict.get(stage_id, 'Unknown'))
+ __count,
+ expected_count,
+ 'In %s, the number of tasks should be equal to %s in %s stage.' % (month, expected_count, stages_dict.get(stage_id, 'Unknown'))
)