feat: add year field for heatmap charts

This commit is contained in:
prssanna 2020-05-05 18:27:30 +05:30
parent b045840228
commit fe31522cf5
6 changed files with 59 additions and 24 deletions

View file

@ -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') {

View file

@ -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",

View file

@ -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
))

View file

@ -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));
}

View file

@ -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('-'));
}
};

View file

@ -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;
}