From c7aa914c72e48a713352462dc32d87c477c9eb9c Mon Sep 17 00:00:00 2001 From: projectsodoo Date: Sat, 27 Feb 2021 22:05:35 +0530 Subject: [PATCH] updated timeline report --- project_report/report/project_timeline_report.py | 14 ++++++++++---- .../report/project_timeline_report_views.xml | 2 +- project_report/static/src/js/graph_renderer.js | 16 ++++++++++------ 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/project_report/report/project_timeline_report.py b/project_report/report/project_timeline_report.py index 616208b..c71baea 100755 --- a/project_report/report/project_timeline_report.py +++ b/project_report/report/project_timeline_report.py @@ -22,6 +22,7 @@ class ProjectTimelineReport(models.Model): employee_id = fields.Many2one('hr.employee', string='Consultant', readonly=True) timeline_type = fields.Char(string="Timeline Type", readonly=True) timeline = fields.Float("Timeline", digits=(16, 2), readonly=True, group_operator="sum") + hours = fields.Float("Number of Hours", digits=(16, 2), readonly=True, group_operator="sum") pricing_type = fields.Selection([ ('fixed_rate', 'Fixed rate'), ('employee_rate', 'Consultant rate') @@ -47,6 +48,7 @@ class ProjectTimelineReport(models.Model): partner_id, employee_id, timeline_type, + hours, timeline from ( SELECT pro.id AS project_id, @@ -56,7 +58,8 @@ class ProjectTimelineReport(models.Model): date AS enddate, 'Budgeted' as timeline_type, --DATE_PART('day', AGE(date, date_start)) AS timeline, - pro_emp.budgeted_qty as timeline, + pro_emp.budgeted_qty as hours, + pro_emp.budgeted_qty/8 as timeline, pro.* FROM project_project PRO @@ -73,7 +76,8 @@ class ProjectTimelineReport(models.Model): date AS enddate, 'Budgeted' as timeline_type, --DATE_PART('day', AGE(date, date_start)) AS timeline, - pro.budgeted_hours2 as timeline, + pro.budgeted_hours2 as hours, + pro.budgeted_hours2/8 as timeline, pro.* FROM project_project PRO @@ -89,7 +93,8 @@ class ProjectTimelineReport(models.Model): end_datetime::DATE AS enddate, 'Actual' as timeline_type, --DATE_PART('day', AGE(end_datetime, start_datetime)) AS timeline, - unit_amount as timeline, + unit_amount as hours, + unit_amount/8 as timeline, pro.* FROM project_project PRO Left JOIN project_sale_line_employee_map pro_emp ON pro_emp.project_id = pro.id @@ -106,7 +111,8 @@ class ProjectTimelineReport(models.Model): end_datetime::DATE AS enddate, 'Actual' as timeline_type, --DATE_PART('day', AGE(end_datetime, start_datetime)) AS timeline, - unit_amount as timeline, + unit_amount as hours, + unit_amount/8 as timeline, pro.* FROM project_project PRO LEFT JOIN account_analytic_account AA ON PRO.analytic_account_id = AA.id diff --git a/project_report/report/project_timeline_report_views.xml b/project_report/report/project_timeline_report_views.xml index 34e81c4..9c75452 100755 --- a/project_report/report/project_timeline_report_views.xml +++ b/project_report/report/project_timeline_report_views.xml @@ -17,7 +17,7 @@ project.timeline.report.graph project.timeline.report - + diff --git a/project_report/static/src/js/graph_renderer.js b/project_report/static/src/js/graph_renderer.js index 493f860..305c45e 100755 --- a/project_report/static/src/js/graph_renderer.js +++ b/project_report/static/src/js/graph_renderer.js @@ -221,7 +221,7 @@ var MAX_LEGEND_LENGTH = 25 * (1 + config.device.size_class); } */ } var label_res = dataset.label; - if (self.resModel == 'project.budget.hrs.report') { + if ((self.resModel == 'project.budget.hrs.report') || (self.resModel == 'project.timeline.report')) { var measure_value = self.fields[self.state.measure].string.split(" ").splice(-1); label_res = label_res.replace("Actual", "Actual " + measure_value).replace("Budgeted", "Budgeted " + measure_value); } @@ -544,11 +544,15 @@ var MAX_LEGEND_LENGTH = 25 * (1 + config.device.size_class); var meta = chartInstance.controller.getDatasetMeta(i); meta.data.forEach(function(bar, index) { var data = dataset.data[index]; + var barWidth = bar._model.x - bar._model.base; + var centerX = bar._model.base + barWidth / 2; //console.log("data", JSON.stringify(data), chartInstance.isDatasetVisible(i), !chartInstance.isDatasetVisible(i)) var value; if(!!data && chartInstance.isDatasetVisible(i)){ value = GraphVal._formatValue(data); - ctx.fillText(value, bar._model.x, bar._model.y + 5); + ctx.fillStyle = '#FFF'; + //ctx.fillText(value, bar._model.x, bar._model.y + 5); + ctx.fillText(value, centerX, bar._model.y + 4); } }); }); @@ -581,7 +585,7 @@ var MAX_LEGEND_LENGTH = 25 * (1 + config.device.size_class); var data = this._prepareData(dataPoints); // this.title = 'Time Line'; - if (self.resModel == 'project.budget.hrs.report') { + if ((self.resModel == 'project.budget.hrs.report') || (self.resModel == 'project.timeline.report')) { var groupedData = _.groupBy(data.datasets, x => x.label.replace('Actual', '').replace('Budgeted', '').split("/")[0]); //var groupedData = _.groupBy(data.datasets, x => x.label.replace('Actual Hours', '').replace('Budgeted Hours', '')); _.map(groupedData, (y) => { @@ -661,7 +665,7 @@ var MAX_LEGEND_LENGTH = 25 * (1 + config.device.size_class); if (self.state.stacked && dataset.label.includes("Actual")) { dataset.stack = 1; } - if (self.resModel == 'project.budget.hrs.report') { + if ((self.resModel == 'project.budget.hrs.report') || (self.resModel == 'project.timeline.report')) { //if (dataset.label.indexOf("Actual Hours") === -1 && dataset.label.toLowerCase().indexOf("Budgeted Hours") === -1) { if (dataset.label.indexOf("Actual") === -1 && dataset.label.toLowerCase().indexOf("Budgeted") === -1) { var color = self._getColor(index); @@ -720,7 +724,7 @@ var MAX_LEGEND_LENGTH = 25 * (1 + config.device.size_class); //console.log("datappppppppppp", dataPoints); - if (self.resModel == 'project.budget.hrs.report') { + if ((self.resModel == 'project.budget.hrs.report') || (self.resModel == 'project.timeline.report')) { //var groupedData = _.groupBy(data.datasets, x => x.label.replace('Actual Hours', '').replace('Budgeted Hours', '').split("/")[0]); var groupedData = _.groupBy(data.datasets, x => x.label.replace('Actual', '').replace('Budgeted', '').split("/")[0]); _.map(groupedData, (y) => { @@ -793,7 +797,7 @@ var MAX_LEGEND_LENGTH = 25 * (1 + config.device.size_class); if (self.state.stacked && dataset.label.includes("Actual")) { dataset.stack = 1; } - if (self.resModel == 'project.budget.hrs.report') { + if ((self.resModel == 'project.budget.hrs.report') || (self.resModel == 'project.timeline.report')) { if (dataset.label.indexOf("Actual") === -1 && dataset.label.toLowerCase().indexOf("Budgeted") === -1) { var color = self._getColor(index); dataset.backgroundColor = color;