updated timeline report
This commit is contained in:
parent
ab52aa7ff4
commit
c7aa914c72
|
@ -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
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
<field name="name">project.timeline.report.graph</field>
|
||||
<field name="model">project.timeline.report</field>
|
||||
<field name="arch" type="xml">
|
||||
<graph string="Budget Analysis" type="bar" stacked="False" sample="1" disable_linking="1">
|
||||
<graph string="Budget Analysis" type="bar" stacked="True" sample="1" disable_linking="1">
|
||||
<field name="project_id" type="row"/>
|
||||
<field name="timeline_type" type="row"/>
|
||||
<field name="timeline" type="measure"/>
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue