mirror of
https://github.com/frappe/erpnext.git
synced 2026-08-27 05:45:19 +00:00
fix(manufacturing): keep MRP chart dates distinct
(cherry picked from commit 5ad085887d)
This commit is contained in:
@@ -277,7 +277,7 @@ class MaterialRequirementsPlanningReport:
|
|||||||
if getdate(row.delivery_date) < getdate(today()):
|
if getdate(row.delivery_date) < getdate(today()):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
delivery_date = formatdate(row.delivery_date, "dd MMM")
|
delivery_date = getdate(row.delivery_date)
|
||||||
if delivery_date not in chart_data:
|
if delivery_date not in chart_data:
|
||||||
chart_data[delivery_date] = frappe._dict(
|
chart_data[delivery_date] = frappe._dict(
|
||||||
{
|
{
|
||||||
@@ -294,6 +294,7 @@ class MaterialRequirementsPlanningReport:
|
|||||||
|
|
||||||
demand_data = []
|
demand_data = []
|
||||||
supply_data = []
|
supply_data = []
|
||||||
|
delivery_dates = list(chart_data)
|
||||||
for row in chart_data:
|
for row in chart_data:
|
||||||
value = chart_data[row]
|
value = chart_data[row]
|
||||||
|
|
||||||
@@ -302,7 +303,7 @@ class MaterialRequirementsPlanningReport:
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
"data": {
|
"data": {
|
||||||
"labels": list(chart_data.keys()),
|
"labels": self.get_detailed_chart_labels(delivery_dates),
|
||||||
"datasets": [
|
"datasets": [
|
||||||
{
|
{
|
||||||
"name": _("Demand"),
|
"name": _("Demand"),
|
||||||
@@ -320,6 +321,10 @@ class MaterialRequirementsPlanningReport:
|
|||||||
"title": _("Demand vs Supply"),
|
"title": _("Demand vs Supply"),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def get_detailed_chart_labels(self, delivery_dates):
|
||||||
|
date_format = "dd MMM yyyy" if len({date.year for date in delivery_dates}) > 1 else "dd MMM"
|
||||||
|
return [formatdate(date, date_format) for date in delivery_dates]
|
||||||
|
|
||||||
def get_bucket_view_chart_data(self, data):
|
def get_bucket_view_chart_data(self, data):
|
||||||
chart_data = frappe._dict({})
|
chart_data = frappe._dict({})
|
||||||
labels = []
|
labels = []
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
# See license.txt
|
# See license.txt
|
||||||
|
|
||||||
import frappe
|
import frappe
|
||||||
|
from frappe.tests.classes.context_managers import freeze_time
|
||||||
from frappe.utils import add_days, flt, formatdate, today
|
from frappe.utils import add_days, flt, formatdate, today
|
||||||
|
|
||||||
from erpnext.accounts.doctype.tax_rule.test_tax_rule import make_tax_rule
|
from erpnext.accounts.doctype.tax_rule.test_tax_rule import make_tax_rule
|
||||||
@@ -23,6 +24,7 @@ TAX_TEMPLATE = "_Test Purchase Taxes and Charges Template - _TC"
|
|||||||
|
|
||||||
class TestMaterialRequirementsPlanningReport(ERPNextTestSuite):
|
class TestMaterialRequirementsPlanningReport(ERPNextTestSuite):
|
||||||
def test_detailed_chart_includes_full_date_range(self):
|
def test_detailed_chart_includes_full_date_range(self):
|
||||||
|
with freeze_time("2026-08-12"):
|
||||||
start_date = add_days(today(), 1)
|
start_date = add_days(today(), 1)
|
||||||
delivery_dates = [add_days(start_date, offset) for offset in range(12)]
|
delivery_dates = [add_days(start_date, offset) for offset in range(12)]
|
||||||
rows = [make_chart_row(delivery_date) for delivery_date in delivery_dates]
|
rows = [make_chart_row(delivery_date) for delivery_date in delivery_dates]
|
||||||
@@ -36,7 +38,24 @@ class TestMaterialRequirementsPlanningReport(ERPNextTestSuite):
|
|||||||
)
|
)
|
||||||
self.assertEqual(chart["data"]["datasets"][0]["values"], [1] * 11 + [3])
|
self.assertEqual(chart["data"]["datasets"][0]["values"], [1] * 11 + [3])
|
||||||
|
|
||||||
|
def test_detailed_chart_distinguishes_delivery_dates_across_years(self):
|
||||||
|
with freeze_time("2026-08-12"):
|
||||||
|
delivery_dates = ["2026-08-15", "2027-08-15"]
|
||||||
|
rows = [
|
||||||
|
make_chart_row(delivery_dates[0]),
|
||||||
|
make_chart_row(delivery_dates[1], planned_qty=2),
|
||||||
|
]
|
||||||
|
|
||||||
|
chart = MaterialRequirementsPlanningReport(frappe._dict()).get_detailed_view_chart_data(rows)
|
||||||
|
|
||||||
|
self.assertEqual(
|
||||||
|
chart["data"]["labels"],
|
||||||
|
[formatdate(delivery_date, "dd MMM yyyy") for delivery_date in delivery_dates],
|
||||||
|
)
|
||||||
|
self.assertEqual(chart["data"]["datasets"][0]["values"], [1, 2])
|
||||||
|
|
||||||
def test_detailed_chart_excludes_past_and_empty_delivery_dates(self):
|
def test_detailed_chart_excludes_past_and_empty_delivery_dates(self):
|
||||||
|
with freeze_time("2026-08-12"):
|
||||||
delivery_dates = [today(), add_days(today(), 1)]
|
delivery_dates = [today(), add_days(today(), 1)]
|
||||||
rows = [
|
rows = [
|
||||||
make_chart_row(add_days(today(), -1)),
|
make_chart_row(add_days(today(), -1)),
|
||||||
|
|||||||
Reference in New Issue
Block a user