浏览代码

fix: Chart date format on x-axis is inaccurate (#18191) (#18207)

(cherry picked from commit 5cfcc4a075)

Co-authored-by: Shariq Ansari <30859809+shariquerik@users.noreply.github.com>
version-14
mergify[bot] 2 年前
committed by GitHub
父节点
当前提交
f940c7b1a9
找不到此签名对应的密钥 GPG 密钥 ID: 4AEE18F83AFDEB23
共有 3 个文件被更改,包括 14 次插入10 次删除
  1. +1
    -1
      frappe/desk/doctype/dashboard_chart/dashboard_chart.py
  2. +5
    -5
      frappe/desk/doctype/dashboard_chart/test_dashboard_chart.py
  3. +8
    -4
      frappe/utils/data.py

+ 1
- 1
frappe/desk/doctype/dashboard_chart/dashboard_chart.py 查看文件

@@ -222,7 +222,7 @@ def get_chart_config(chart, filters, timespan, timegrain, from_date, to_date):

return {
"labels": [
format_date(get_period(r[0], timegrain))
format_date(get_period(r[0], timegrain), parse_day_first=True)
if timegrain in ("Daily", "Weekly")
else get_period(r[0], timegrain)
for r in result


+ 5
- 5
frappe/desk/doctype/dashboard_chart/test_dashboard_chart.py 查看文件

@@ -173,7 +173,7 @@ class TestDashboardChart(FrappeTestCase):
self.assertEqual(result.get("datasets")[0].get("values"), [200.0, 400.0, 300.0, 0.0, 100.0, 0.0])
self.assertEqual(
result.get("labels"),
["06-01-2019", "07-01-2019", "08-01-2019", "09-01-2019", "10-01-2019", "11-01-2019"],
["01-06-2019", "01-07-2019", "01-08-2019", "01-09-2019", "01-10-2019", "01-11-2019"],
)

def test_weekly_dashboard_chart(self):
@@ -203,7 +203,7 @@ class TestDashboardChart(FrappeTestCase):
result = get(chart_name="Test Weekly Dashboard Chart", refresh=1)

self.assertEqual(result.get("datasets")[0].get("values"), [50.0, 300.0, 800.0, 0.0])
self.assertEqual(result.get("labels"), ["12-30-2018", "06-01-2019", "01-13-2019", "01-20-2019"])
self.assertEqual(result.get("labels"), ["12-30-2018", "01-06-2019", "01-13-2019", "01-20-2019"])

def test_avg_dashboard_chart(self):
insert_test_records()
@@ -230,7 +230,7 @@ class TestDashboardChart(FrappeTestCase):

with patch.object(frappe.utils.data, "get_first_day_of_the_week", return_value="Monday"):
result = get(chart_name="Test Average Dashboard Chart", refresh=1)
self.assertEqual(result.get("labels"), ["12-30-2018", "06-01-2019", "01-13-2019", "01-20-2019"])
self.assertEqual(result.get("labels"), ["12-30-2018", "01-06-2019", "01-13-2019", "01-20-2019"])
self.assertEqual(result.get("datasets")[0].get("values"), [50.0, 150.0, 266.6666666666667, 0.0])

def test_user_date_label_dashboard_chart(self):
@@ -255,13 +255,13 @@ class TestDashboardChart(FrappeTestCase):
with patch.object(frappe.utils.data, "get_user_date_format", return_value="dd.mm.yyyy"):
result = get(chart_name="Test Dashboard Chart Date Label")
self.assertEqual(
sorted(result.get("labels")), sorted(["01.05.2019", "01.12.2019", "19.01.2019"])
sorted(result.get("labels")), sorted(["05.01.2019", "12.01.2019", "19.01.2019"])
)

with patch.object(frappe.utils.data, "get_user_date_format", return_value="mm-dd-yyyy"):
result = get(chart_name="Test Dashboard Chart Date Label")
self.assertEqual(
sorted(result.get("labels")), sorted(["01-19-2019", "05-01-2019", "12-01-2019"])
sorted(result.get("labels")), sorted(["01-19-2019", "01-05-2019", "01-12-2019"])
)




+ 8
- 4
frappe/utils/data.py 查看文件

@@ -73,7 +73,9 @@ def is_invalid_date_string(date_string: str) -> bool:
)


def getdate(string_date: Optional["DateTimeLikeObject"] = None) -> datetime.date | None:
def getdate(
string_date: Optional["DateTimeLikeObject"] = None, parse_day_first: bool = False
) -> datetime.date | None:
"""
Converts string date (yyyy-mm-dd) to datetime.date object.
If no input is provided, current date is returned.
@@ -92,7 +94,7 @@ def getdate(string_date: Optional["DateTimeLikeObject"] = None) -> datetime.date
if is_invalid_date_string(string_date):
return None
try:
return parser.parse(string_date).date()
return parser.parse(string_date, dayfirst=parse_day_first).date()
except ParserError:
frappe.throw(
frappe._("{} is not a valid date string.").format(frappe.bold(string_date)),
@@ -551,7 +553,9 @@ def get_user_time_format() -> str:
return frappe.local.user_time_format or "HH:mm:ss"


def format_date(string_date=None, format_string: str | None = None) -> str:
def format_date(
string_date=None, format_string: str | None = None, parse_day_first: bool = False
) -> str:
"""Converts the given string date to :data:`user_date_format`
User format specified in defaults

@@ -567,7 +571,7 @@ def format_date(string_date=None, format_string: str | None = None) -> str:
if not string_date:
return ""

date = getdate(string_date)
date = getdate(string_date, parse_day_first)
if not format_string:
format_string = get_user_date_format()
format_string = format_string.replace("mm", "MM").replace("Y", "y")


正在加载...
取消
保存