Updated timeline measure report
This commit is contained in:
parent
613b4d2a58
commit
61a50a1582
|
@ -22,6 +22,7 @@ class BudgetHrsAnalysis(models.Model):
|
|||
employee_id = fields.Many2one('hr.employee', string='Consultant', readonly=True)
|
||||
hours_type = fields.Char(string="Hours Type", readonly=True)
|
||||
hours = fields.Float("Number of Hours", digits=(16, 2), readonly=True, group_operator="sum")
|
||||
timeline = fields.Float("Timeline", digits=(16, 2), readonly=True, group_operator="sum")
|
||||
pricing_type = fields.Selection([
|
||||
('fixed_rate', 'Fixed rate'),
|
||||
('employee_rate', 'Consultant rate')
|
||||
|
@ -57,15 +58,18 @@ class BudgetHrsAnalysis(models.Model):
|
|||
partner_id,
|
||||
employee_id,
|
||||
hours_type,
|
||||
hours from (
|
||||
hours,
|
||||
timeline
|
||||
from (
|
||||
SELECT
|
||||
pro.id AS project_id,
|
||||
(select project_id from project_subproject_rel as par where pro.id=par.id limit 1) as parentproject,
|
||||
pro_emp.employee_id AS employee_id,
|
||||
date_start AS startdate,
|
||||
date AS enddate,
|
||||
'Budgeted Hours' as hours_type,
|
||||
'Budgeted' as hours_type,
|
||||
pro_emp.budgeted_qty as hours,
|
||||
(date - date_start) as timeline,
|
||||
pro.*
|
||||
FROM
|
||||
project_project PRO
|
||||
|
@ -80,8 +84,9 @@ class BudgetHrsAnalysis(models.Model):
|
|||
null::int AS employee_id,
|
||||
date_start AS startdate,
|
||||
date AS enddate,
|
||||
'Budgeted Hours' as hours_type,
|
||||
'Budgeted' as hours_type,
|
||||
pro.budgeted_hours2 as hours,
|
||||
(date - date_start) as timeline,
|
||||
pro.*
|
||||
FROM
|
||||
project_project PRO
|
||||
|
@ -96,8 +101,10 @@ class BudgetHrsAnalysis(models.Model):
|
|||
AAL.employee_id AS employee_id,
|
||||
coalesce(pro.date_start, (select min(al.start_datetime::date) from account_analytic_line as al where pro.id=al.project_id)) AS startdate,
|
||||
(select max(al.end_datetime::date) from account_analytic_line as al) as enddate,
|
||||
'Actual Hours' as hours_type,
|
||||
'Actual' as hours_type,
|
||||
unit_amount as hours,
|
||||
(select max(al.end_datetime::date) from account_analytic_line as al) -
|
||||
coalesce(pro.date_start, (select min(al.start_datetime::date) from account_analytic_line as al where pro.id=al.project_id)) AS timeline,
|
||||
pro.*
|
||||
FROM project_project PRO
|
||||
Left JOIN project_sale_line_employee_map pro_emp ON pro_emp.project_id = pro.id
|
||||
|
@ -113,8 +120,10 @@ class BudgetHrsAnalysis(models.Model):
|
|||
AAL.employee_id AS employee_id,
|
||||
coalesce(pro.date_start, (select min(al.start_datetime::date) from account_analytic_line as al where pro.id=al.project_id)) AS startdate,
|
||||
(select max(al.end_datetime::date) from account_analytic_line as al) as enddate,
|
||||
'Actual Hours' as hours_type,
|
||||
'Actual' as hours_type,
|
||||
unit_amount as hours,
|
||||
(select max(al.end_datetime::date) from account_analytic_line as al) -
|
||||
(select min(al.start_datetime::date) from account_analytic_line as al where pro.id=al.project_id) AS timeline,
|
||||
pro.*
|
||||
FROM project_project PRO
|
||||
LEFT JOIN account_analytic_account AA ON PRO.analytic_account_id = AA.id
|
||||
|
@ -129,8 +138,10 @@ class BudgetHrsAnalysis(models.Model):
|
|||
AAL.employee_id AS employee_id,
|
||||
pro.date_start AS startdate,
|
||||
(select max(al.end_datetime::date) from account_analytic_line as al) as enddate,
|
||||
'Actual Hours' as hours_type,
|
||||
'Actual' as hours_type,
|
||||
unit_amount as hours,
|
||||
(select max(al.end_datetime::date) from account_analytic_line as al) - pro.date_start AS timeline,
|
||||
--DATE_PART('day', AGE(select max(al.end_datetime::date) from account_analytic_line, pro.date_start)) AS timeline,
|
||||
pro.*
|
||||
FROM project_project PRO
|
||||
LEFT JOIN account_analytic_account AA ON PRO.analytic_account_id = AA.id
|
||||
|
|
|
@ -37,6 +37,7 @@
|
|||
<!--<field name="timesheet_date" optional="hide"/>-->
|
||||
<field name="hours_type"/>
|
||||
<field name="hours"/>
|
||||
<field name="timeline"/>
|
||||
<field name="parent_project" optional="hide"/>
|
||||
</tree>
|
||||
</field>
|
||||
|
|
|
@ -220,9 +220,14 @@ var MAX_LEGEND_LENGTH = 25 * (1 + config.device.size_class);
|
|||
dataset[referenceColor] = dataset[referenceColor][0]
|
||||
} */
|
||||
}
|
||||
var label_res = dataset.label;
|
||||
if (self.resModel == 'project.budget.hrs.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);
|
||||
}
|
||||
return {
|
||||
text: self._shortenLabel(dataset.label),
|
||||
fullText: dataset.label,
|
||||
text: self._shortenLabel(label_res),
|
||||
fullText: label_res,
|
||||
fillStyle: r,
|
||||
hidden: !chart.isDatasetVisible(i),
|
||||
lineCap: dataset.borderCapStyle,
|
||||
|
@ -291,6 +296,10 @@ var MAX_LEGEND_LENGTH = 25 * (1 + config.device.size_class);
|
|||
}
|
||||
value = this._formatValue(item.yLabel);
|
||||
boxColor = dataset.backgroundColor;
|
||||
var r = dataset.backgroundColor;
|
||||
if ((dataset.backgroundColor instanceof Array) && (dataset.backgroundColor.length>=1)) {
|
||||
boxColor = dataset.backgroundColor[item.index]
|
||||
}
|
||||
} else if (this.state.mode === 'horizontalBar') {
|
||||
label = this._relabelling(label, dataset.originIndex);
|
||||
if (this.state.processedGroupBy.length > 1 || this.state.origins.length > 1) {
|
||||
|
@ -298,6 +307,9 @@ var MAX_LEGEND_LENGTH = 25 * (1 + config.device.size_class);
|
|||
}
|
||||
value = this._formatValue(item.xLabel);
|
||||
boxColor = dataset.backgroundColor;
|
||||
if ((dataset.backgroundColor instanceof Array) && (dataset.backgroundColor.length>=1)) {
|
||||
boxColor = dataset.backgroundColor[item.index]
|
||||
}
|
||||
}
|
||||
else if (this.state.mode === 'line') {
|
||||
label = this._relabelling(label, dataset.originIndex);
|
||||
|
@ -569,9 +581,8 @@ 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') {
|
||||
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]);
|
||||
//var groupedData = _.groupBy(data.datasets, x => x.label.replace('Actual Hours', '').replace('Budgeted Hours', ''));
|
||||
_.map(groupedData, (y) => {
|
||||
if (y.length > 1) {
|
||||
|
@ -648,7 +659,8 @@ var MAX_LEGEND_LENGTH = 25 * (1 + config.device.size_class);
|
|||
dataset.stack = self.state.stacked ? self.state.origins[dataset.originIndex] : undefined;
|
||||
// set dataset color
|
||||
if (self.resModel == 'project.budget.hrs.report') {
|
||||
if (dataset.label.indexOf("Actual Hours") === -1 && dataset.label.toLowerCase().indexOf("Budgeted Hours") === -1) {
|
||||
//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);
|
||||
dataset.backgroundColor = color;
|
||||
}
|
||||
|
@ -670,7 +682,6 @@ var MAX_LEGEND_LENGTH = 25 * (1 + config.device.size_class);
|
|||
dataset.backgroundColor = color;
|
||||
}
|
||||
});
|
||||
|
||||
// prepare options
|
||||
var options = this._prepareOptions(data.datasets.length);
|
||||
// create chart
|
||||
|
@ -705,7 +716,8 @@ var MAX_LEGEND_LENGTH = 25 * (1 + config.device.size_class);
|
|||
var data = this._prepareData(dataPoints);
|
||||
|
||||
if (self.resModel == 'project.budget.hrs.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 Hours', '').replace('Budgeted Hours', '').split("/")[0]);
|
||||
var groupedData = _.groupBy(data.datasets, x => x.label.replace('Actual', '').replace('Budgeted', '').split("/")[0]);
|
||||
_.map(groupedData, (y) => {
|
||||
if (y.length > 1) {
|
||||
var zipped_1 = _.zip.apply(null, [y[0].data, y[1].data]);
|
||||
|
|
Loading…
Reference in New Issue