fix: calculate chart data from beginning of period
- show period as label
This commit is contained in:
parent
d54f223b4b
commit
969aa86e68
2 changed files with 30 additions and 5 deletions
|
|
@ -8,8 +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, cint, now_datetime
|
||||
from frappe.utils import *
|
||||
from frappe.model.naming import append_number_if_name_exists
|
||||
from frappe.boot import get_allowed_reports
|
||||
from frappe.model.document import Document
|
||||
|
|
@ -156,6 +155,7 @@ def add_chart_to_dashboard(args):
|
|||
def get_chart_config(chart, filters, timespan, timegrain, from_date, to_date):
|
||||
if not from_date:
|
||||
from_date = get_from_date_from_timespan(to_date, timespan)
|
||||
from_date = get_period_beginning(from_date, timegrain)
|
||||
if not to_date:
|
||||
to_date = now_datetime()
|
||||
|
||||
|
|
@ -163,7 +163,6 @@ def get_chart_config(chart, filters, timespan, timegrain, from_date, to_date):
|
|||
datefield = chart.based_on
|
||||
aggregate_function = get_aggregate_function(chart.chart_type)
|
||||
value_field = chart.value_based_on or '1'
|
||||
from_date = from_date.strftime('%Y-%m-%d')
|
||||
to_date = to_date
|
||||
|
||||
filters.append([doctype, datefield, '>=', from_date, False])
|
||||
|
|
@ -185,7 +184,7 @@ def get_chart_config(chart, filters, timespan, timegrain, from_date, to_date):
|
|||
result = get_result(data, timegrain, from_date, to_date)
|
||||
|
||||
chart_config = {
|
||||
"labels": [formatdate(r[0].strftime('%Y-%m-%d')) for r in result],
|
||||
"labels": [get_period(r[0], timegrain) for r in result],
|
||||
"datasets": [{
|
||||
"name": chart.name,
|
||||
"values": [r[1] for r in result]
|
||||
|
|
@ -282,7 +281,7 @@ def get_result(data, timegrain, from_date, to_date):
|
|||
start_date = getdate(from_date)
|
||||
end_date = getdate(to_date)
|
||||
|
||||
result = [[start_date, 0.0]]
|
||||
result = []
|
||||
|
||||
while start_date < end_date:
|
||||
next_date = get_next_expected_date(start_date, timegrain)
|
||||
|
|
@ -304,6 +303,21 @@ def get_next_expected_date(date, timegrain):
|
|||
next_date = get_period_ending(add_to_date(date, days=1), timegrain)
|
||||
return getdate(next_date)
|
||||
|
||||
def get_period_beginning(date, timegrain):
|
||||
as_str = True
|
||||
if timegrain == 'Daily':
|
||||
pass
|
||||
elif timegrain == 'Weekly':
|
||||
date = get_first_day_of_week(date, as_str=as_str)
|
||||
elif timegrain == 'Monthly':
|
||||
date = get_first_day(date, as_str=as_str)
|
||||
elif timegrain == 'Quarterly':
|
||||
date = get_quarter_start(date, as_str=as_str)
|
||||
elif timegrain == 'Yearly':
|
||||
date = get_year_start(date, as_str=as_str)
|
||||
|
||||
return date
|
||||
|
||||
def get_period_ending(date, timegrain):
|
||||
date = getdate(date)
|
||||
if timegrain == 'Daily':
|
||||
|
|
|
|||
|
|
@ -441,6 +441,17 @@ def get_timespan_date_range(timespan):
|
|||
|
||||
return date_range_map.get(timespan)
|
||||
|
||||
def get_period(date, interval='Monthly'):
|
||||
date = getdate(date)
|
||||
months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
|
||||
return {
|
||||
'Daily': date.strftime('%d-%m-%y'),
|
||||
'Weekly': date.strftime('%d-%m-%y'),
|
||||
'Monthly': str(months[date.month - 1]) + ' ' + str(date.year),
|
||||
'Quarterly': 'Quarter ' + str(((date.month-1)//3)+1) + ' ' + str(date.year),
|
||||
'Yearly': str(date.year)
|
||||
}[interval]
|
||||
|
||||
def global_date_format(date, format="long"):
|
||||
"""returns localized date in the form of January 1, 2012"""
|
||||
date = getdate(date)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue