feat: add year field for heatmap charts
This commit is contained in:
parent
b045840228
commit
fe31522cf5
6 changed files with 59 additions and 24 deletions
|
|
@ -58,6 +58,7 @@ frappe.ui.form.on('Dashboard Chart', {
|
|||
}
|
||||
});
|
||||
frm.trigger('update_options');
|
||||
frm.trigger('set_heatmap_year_options');
|
||||
if (frm.doc.report_name) {
|
||||
frm.trigger('set_chart_report_filters');
|
||||
}
|
||||
|
|
@ -71,6 +72,15 @@ frappe.ui.form.on('Dashboard Chart', {
|
|||
frm.trigger("show_filters");
|
||||
},
|
||||
|
||||
set_heatmap_year_options: function(frm) {
|
||||
if (frm.doc.type == 'Heatmap') {
|
||||
frappe.db.get_doc('System Settings').then(doc => {
|
||||
const creation_date = doc.creation;
|
||||
frm.set_df_property('heatmap_year', 'options', frappe.dashboard_utils.get_years_since_creation(creation_date));
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
chart_type: function(frm) {
|
||||
frm.trigger('set_time_series');
|
||||
if (frm.doc.chart_type == 'Report') {
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@
|
|||
"number_of_groups",
|
||||
"column_break_6",
|
||||
"is_public",
|
||||
"heatmap_year",
|
||||
"timespan",
|
||||
"from_date",
|
||||
"to_date",
|
||||
|
|
@ -229,10 +230,16 @@
|
|||
"fieldname": "is_public",
|
||||
"fieldtype": "Check",
|
||||
"label": "Is Public"
|
||||
},
|
||||
{
|
||||
"depends_on": "eval: doc.type == 'Heatmap'",
|
||||
"fieldname": "heatmap_year",
|
||||
"fieldtype": "Select",
|
||||
"label": "Year"
|
||||
}
|
||||
],
|
||||
"links": [],
|
||||
"modified": "2020-04-23 13:01:07.178866",
|
||||
"modified": "2020-05-01 19:45:01.669384",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Desk",
|
||||
"name": "Dashboard Chart",
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ from frappe import _
|
|||
import datetime
|
||||
import json
|
||||
from frappe.utils.dashboard import cache_source, get_from_date_from_timespan
|
||||
from frappe.utils import nowdate, add_to_date, getdate, get_last_day, formatdate, get_datetime
|
||||
from frappe.utils import nowdate, add_to_date, getdate, get_last_day, formatdate, get_datetime, cint
|
||||
from frappe.model.naming import append_number_if_name_exists
|
||||
from frappe.boot import get_allowed_reports
|
||||
from frappe.model.document import Document
|
||||
|
|
@ -182,18 +182,28 @@ def get_heatmap_chart_config(chart, filters):
|
|||
value_field = chart.value_based_on or '1'
|
||||
doctype = chart.document_type
|
||||
datefield = chart.based_on
|
||||
filters.append([doctype, datefield, '>', 'subdate(curdate(), interval 1 year)', False])
|
||||
year = cint(chart.heatmap_year) if chart.heatmap_year else getdate(nowdate()).year
|
||||
year_start_date = datetime.date(year, 1, 1).strftime('%Y-%m-%d')
|
||||
next_year_start_date = datetime.date(year + 1, 1, 1).strftime('%Y-%m-%d')
|
||||
|
||||
filters.append([doctype, datefield, '>', "{date}".format(date=year_start_date), False])
|
||||
filters.append([doctype, datefield, '<', "{date}".format(date=next_year_start_date), False])
|
||||
|
||||
if frappe.db.db_type == 'mariadb':
|
||||
timestamp_field = 'unix_timestamp({datefield})'.format(datefield=datefield)
|
||||
else:
|
||||
timestamp_field = 'extract(epoch from timestamp {datefield})'.format(datefield=datefield)
|
||||
|
||||
data = dict(frappe.db.get_all(
|
||||
doctype,
|
||||
fields = [
|
||||
'unix_timestamp(date({datefield}))'.format(datefield=datefield),
|
||||
timestamp_field,
|
||||
'{aggregate_function}({value_field})'.format(aggregate_function=aggregate_function, value_field=value_field),
|
||||
],
|
||||
filters = filters,
|
||||
group_by = 'date(creation)',
|
||||
group_by = 'date({datefield})'.format(datefield=datefield),
|
||||
as_list = 1,
|
||||
order_by = 'creation asc',
|
||||
order_by = '{datefield} asc'.format(datefield=datefield),
|
||||
ignore_ifnull = True
|
||||
))
|
||||
|
||||
|
|
|
|||
|
|
@ -108,21 +108,6 @@ class UserProfile {
|
|||
});
|
||||
}
|
||||
|
||||
get_years_since_creation() {
|
||||
//Get years since user account created
|
||||
this.user_creation = frappe.boot.user.creation;
|
||||
let creation_year = this.get_year(this.user_creation);
|
||||
let current_year = this.get_year(frappe.datetime.now_date());
|
||||
let years_list = [];
|
||||
for (var year = current_year; year >= creation_year; year--) {
|
||||
years_list.push(year);
|
||||
}
|
||||
return years_list;
|
||||
}
|
||||
|
||||
get_year(date_str) {
|
||||
return date_str.substring(0, date_str.indexOf('-'));
|
||||
}
|
||||
|
||||
render_line_chart() {
|
||||
this.line_chart_filters = [['Energy Point Log', 'user', '=', this.user_id, false]];
|
||||
|
|
@ -246,8 +231,8 @@ class UserProfile {
|
|||
create_heatmap_chart_filters() {
|
||||
let filters = [
|
||||
{
|
||||
label: this.get_year(frappe.datetime.now_date()),
|
||||
options: this.get_years_since_creation(),
|
||||
label: frappe.dashboard_utils.get_year(frappe.datetime.now_date()),
|
||||
options: frappe.dashboard_utils.get_years_since_creation(frappe.boot.user.creation),
|
||||
action: (selected_item) => {
|
||||
this.update_heatmap_data(frappe.datetime.obj_to_str(selected_item));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -82,5 +82,21 @@ frappe.dashboard_utils = {
|
|||
).then(settings => {
|
||||
return settings;
|
||||
});
|
||||
},
|
||||
|
||||
get_years_since_creation(creation) {
|
||||
//Get years since user account created
|
||||
let creation_year = this.get_year(creation);
|
||||
let current_year = this.get_year(frappe.datetime.now_date());
|
||||
let years_list = [];
|
||||
for (var year = current_year; year >= creation_year; year--) {
|
||||
years_list.push(year);
|
||||
}
|
||||
return years_list;
|
||||
},
|
||||
|
||||
get_year(date_str) {
|
||||
return date_str.substring(0, date_str.indexOf('-'));
|
||||
}
|
||||
|
||||
};
|
||||
|
|
@ -61,6 +61,7 @@ export default class ChartWidget extends Widget {
|
|||
this.chart_wrapper = $(`<div></div>`);
|
||||
this.chart_wrapper.appendTo(this.body);
|
||||
|
||||
this.$heatmap_legend = null;
|
||||
this.set_chart_title();
|
||||
}
|
||||
|
||||
|
|
@ -288,7 +289,7 @@ export default class ChartWidget extends Widget {
|
|||
},
|
||||
{
|
||||
label: __("Reset Chart"),
|
||||
action: "action-list",
|
||||
action: "action-reset",
|
||||
handler: () => {
|
||||
this.reset_chart();
|
||||
delete this.dashboard_chart;
|
||||
|
|
@ -529,6 +530,12 @@ export default class ChartWidget extends Widget {
|
|||
}
|
||||
};
|
||||
|
||||
if (this.chart_doc.type == "Heatmap") {
|
||||
const heatmap_year = parseInt(this.chart_doc.heatmap_year || "2020");
|
||||
chart_args.data.start = new Date(`${heatmap_year}-01-01`);
|
||||
chart_args.data.end = new Date(`${heatmap_year+1}-01-01`);
|
||||
}
|
||||
|
||||
return chart_args;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue