diff --git a/erpnext/manufacturing/number_card/manufactured_items_value/manufactured_items_value.json b/erpnext/manufacturing/number_card/manufactured_items_value/manufactured_items_value.json new file mode 100644 index 0000000000000000000000000000000000000000..dfc578780843cc45017c8f262528e8cf9913c37a --- /dev/null +++ b/erpnext/manufacturing/number_card/manufactured_items_value/manufactured_items_value.json @@ -0,0 +1,26 @@ +{ + "aggregate_function_based_on": "total_incoming_value", + "creation": "2025-12-18 14:27:28.423628", + "currency": "", + "docstatus": 0, + "doctype": "Number Card", + "document_type": "Stock Entry", + "dynamic_filters_json": "[[\"Stock Entry\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "filters_json": "[[\"Stock Entry\",\"posting_date\",\"Timespan\",\"this month\"],[\"Stock Entry\",\"purpose\",\"=\",\"Manufacture\"],[\"Stock Entry\",\"docstatus\",\"=\",\"1\"]]", + "function": "Sum", + "idx": 0, + "is_public": 1, + "is_standard": 1, + "label": "Manufactured Items Value", + "modified": "2025-12-18 21:38:25.074322", + "modified_by": "Administrator", + "module": "Manufacturing", + "name": "Manufactured Items Value", + "owner": "Administrator", + "parent_document_type": "", + "report_function": "Sum", + "show_full_number": 0, + "show_percentage_stats": 1, + "stats_time_interval": "Daily", + "type": "Document Type" +} diff --git a/erpnext/manufacturing/number_card/open_work_orders/open_work_orders.json b/erpnext/manufacturing/number_card/open_work_orders/open_work_orders.json new file mode 100644 index 0000000000000000000000000000000000000000..27d91ec2c8465e944cf8f1506f9ac27b21806bf6 --- /dev/null +++ b/erpnext/manufacturing/number_card/open_work_orders/open_work_orders.json @@ -0,0 +1,26 @@ +{ + "aggregate_function_based_on": "", + "creation": "2025-12-18 14:21:34.833085", + "currency": "", + "docstatus": 0, + "doctype": "Number Card", + "document_type": "Work Order", + "dynamic_filters_json": "[[\"Work Order\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "filters_json": "[[\"Work Order\",\"docstatus\",\"=\",\"1\"],[\"Work Order\",\"status\",\"=\",\"Not Started\"]]", + "function": "Count", + "idx": 1, + "is_public": 1, + "is_standard": 1, + "label": "Open Work Orders", + "modified": "2025-12-18 21:38:05.877071", + "modified_by": "Administrator", + "module": "Manufacturing", + "name": "Open Work Orders", + "owner": "Administrator", + "parent_document_type": "", + "report_function": "Sum", + "show_full_number": 0, + "show_percentage_stats": 1, + "stats_time_interval": "Daily", + "type": "Document Type" +} diff --git a/erpnext/manufacturing/number_card/wip_work_orders/wip_work_orders.json b/erpnext/manufacturing/number_card/wip_work_orders/wip_work_orders.json new file mode 100644 index 0000000000000000000000000000000000000000..81ca2b089e6e06c5d5f5051c9855d4ecd1b2d8b8 --- /dev/null +++ b/erpnext/manufacturing/number_card/wip_work_orders/wip_work_orders.json @@ -0,0 +1,26 @@ +{ + "aggregate_function_based_on": "", + "creation": "2025-12-18 14:25:51.197239", + "currency": "", + "docstatus": 0, + "doctype": "Number Card", + "document_type": "Work Order", + "dynamic_filters_json": "[[\"Work Order\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", + "filters_json": "[[\"Work Order\",\"docstatus\",\"=\",\"1\"],[\"Work Order\",\"status\",\"=\",\"In Process\"]]", + "function": "Count", + "idx": 0, + "is_public": 1, + "is_standard": 1, + "label": "WIP Work Orders", + "modified": "2025-12-18 21:38:17.043467", + "modified_by": "Administrator", + "module": "Manufacturing", + "name": "WIP Work Orders", + "owner": "Administrator", + "parent_document_type": "", + "report_function": "Sum", + "show_full_number": 0, + "show_percentage_stats": 1, + "stats_time_interval": "Daily", + "type": "Document Type" +} diff --git a/erpnext/manufacturing/workspace/manufacturing/manufacturing.json b/erpnext/manufacturing/workspace/manufacturing/manufacturing.json index 48837a6e51248c116a964c5d8fb47fbb1ca0b986..36b95a6414d2044573c07f069b5b4732706e60ed 100644 --- a/erpnext/manufacturing/workspace/manufacturing/manufacturing.json +++ b/erpnext/manufacturing/workspace/manufacturing/manufacturing.json @@ -1,12 +1,12 @@ { + "app": "erpnext", "charts": [ { "chart_name": "Produced Quantity", "label": "Produced Quantity" } ], - "color": "#c2831c", - "content": "[{\"id\":\"5_3d6Yv96u\",\"type\":\"chart\",\"data\":{\"chart_name\":\"Produced Quantity\",\"col\":12}},{\"id\":\"csBCiDglCE\",\"type\":\"header\",\"data\":{\"text\":\"Your Shortcuts\",\"col\":12}},{\"id\":\"iDFdO1XgoY\",\"type\":\"spacer\",\"data\":{\"col\":12}},{\"id\":\"YHCQG3wAGv\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"BOM Creator\",\"col\":3}},{\"id\":\"xit0dg7KvY\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"BOM\",\"col\":3}},{\"id\":\"LRhGV9GAov\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Production Plan\",\"col\":3}},{\"id\":\"69KKosI6Hg\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Work Order\",\"col\":3}},{\"id\":\"PwndxuIpB3\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Job Card\",\"col\":3}},{\"id\":\"Ubj6zXcmIQ\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Plant Floor\",\"col\":3}},{\"id\":\"OtMcArFRa5\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"BOM Stock Report\",\"col\":3}},{\"id\":\"76yYsI5imF\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Production Planning Report\",\"col\":3}},{\"id\":\"OaiDqTT03Y\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Forecasting\",\"col\":3}},{\"id\":\"bN_6tHS-Ct\",\"type\":\"spacer\",\"data\":{\"col\":12}},{\"id\":\"yVEFZMqVwd\",\"type\":\"header\",\"data\":{\"text\":\"Reports & Masters\",\"col\":12}},{\"id\":\"rwrmsTI58-\",\"type\":\"card\",\"data\":{\"card_name\":\"Production\",\"col\":4}},{\"id\":\"6dnsyX-siZ\",\"type\":\"card\",\"data\":{\"card_name\":\"Bill of Materials\",\"col\":4}},{\"id\":\"8RRiQeYr0G\",\"type\":\"card\",\"data\":{\"card_name\":\"Tools\",\"col\":4}},{\"id\":\"Pu8z7-82rT\",\"type\":\"card\",\"data\":{\"card_name\":\"Settings\",\"col\":4}},{\"id\":\"6xksdoH7CU\",\"type\":\"card\",\"data\":{\"card_name\":\"Quality & Downtimes\",\"col\":4}}]", + "content": "[{\"id\":\"csBCiDglCE\",\"type\":\"header\",\"data\":{\"text\":\"Your Shortcuts\",\"col\":12}},{\"id\":\"V1e9RbPfQ1\",\"type\":\"chart\",\"data\":{\"chart_name\":\"Produced Quantity\",\"col\":12}},{\"id\":\"WeKMsoeisv\",\"type\":\"number_card\",\"data\":{\"number_card_name\":\"Open Work Orders\",\"col\":4}},{\"id\":\"NPjL4YMLXd\",\"type\":\"number_card\",\"data\":{\"number_card_name\":\"WIP Work Orders\",\"col\":4}},{\"id\":\"TsAK7EGwg3\",\"type\":\"number_card\",\"data\":{\"number_card_name\":\"Manufactured Items Value\",\"col\":4}},{\"id\":\"xit0dg7KvY\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"BOM\",\"col\":3}},{\"id\":\"LRhGV9GAov\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Production Plan\",\"col\":3}},{\"id\":\"69KKosI6Hg\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Work Order\",\"col\":3}},{\"id\":\"PwndxuIpB3\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Job Card\",\"col\":3}},{\"id\":\"YHCQG3wAGv\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"BOM Creator\",\"col\":3}},{\"id\":\"Ubj6zXcmIQ\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Plant Floor\",\"col\":3}},{\"id\":\"OtMcArFRa5\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"BOM Stock Report\",\"col\":3}},{\"id\":\"76yYsI5imF\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Production Planning Report\",\"col\":3}},{\"id\":\"PIQJYZOMnD\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Learn Manufacturing\",\"col\":3}},{\"id\":\"OaiDqTT03Y\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Forecasting\",\"col\":3}},{\"id\":\"bN_6tHS-Ct\",\"type\":\"spacer\",\"data\":{\"col\":12}},{\"id\":\"yVEFZMqVwd\",\"type\":\"header\",\"data\":{\"text\":\"Reports & Masters\",\"col\":12}},{\"id\":\"rwrmsTI58-\",\"type\":\"card\",\"data\":{\"card_name\":\"Production\",\"col\":4}},{\"id\":\"6dnsyX-siZ\",\"type\":\"card\",\"data\":{\"card_name\":\"Bill of Materials\",\"col\":4}},{\"id\":\"m5puAHoHWB\",\"type\":\"card\",\"data\":{\"card_name\":\"Subcontracting\",\"col\":4}},{\"id\":\"CIq-v5f5KC\",\"type\":\"card\",\"data\":{\"card_name\":\"Reports\",\"col\":4}},{\"id\":\"8RRiQeYr0G\",\"type\":\"card\",\"data\":{\"card_name\":\"Tools\",\"col\":4}},{\"id\":\"Pu8z7-82rT\",\"type\":\"card\",\"data\":{\"card_name\":\"Settings\",\"col\":4}}]", "creation": "2020-03-02 17:11:37.032604", "custom_blocks": [], "docstatus": 0, @@ -14,7 +14,7 @@ "for_user": "", "hide_custom": 0, "icon": "organization", - "idx": 0, + "idx": 1, "is_hidden": 0, "is_standard": 1, "label": "Manufacturing", @@ -453,11 +453,24 @@ "type": "Link" } ], - "modified": "2025-11-03 17:02:26.882516", + "modified": "2025-12-18 14:30:15.596594", "modified_by": "Administrator", "module": "Manufacturing", "name": "Manufacturing", - "number_cards": [], + "number_cards": [ + { + "label": "Open Work Orders", + "number_card_name": "Open Work Orders" + }, + { + "label": "WIP Work Orders", + "number_card_name": "WIP Work Orders" + }, + { + "label": "Manufactured Items Value", + "number_card_name": "Manufactured Items Value" + } + ], "owner": "Administrator", "parent_page": "", "public": 1, diff --git a/erpnext/stock/dashboard_chart/stock_value_by_item_group/stock_value_by_item_group.json b/erpnext/stock/dashboard_chart/stock_value_by_item_group/stock_value_by_item_group.json new file mode 100644 index 0000000000000000000000000000000000000000..e65f5ea87498601665418b7dc64ae63795d9b096 --- /dev/null +++ b/erpnext/stock/dashboard_chart/stock_value_by_item_group/stock_value_by_item_group.json @@ -0,0 +1,33 @@ +{ + "based_on": "", + "chart_name": "Stock Value by Item Group", + "chart_type": "Custom", + "creation": "2025-12-18 21:58:41.928499", + "currency": "", + "docstatus": 0, + "doctype": "Dashboard Chart", + "document_type": "", + "dynamic_filters_json": "[]", + "filters_json": "[]", + "group_by_type": "Count", + "idx": 0, + "is_public": 0, + "is_standard": 1, + "modified": "2025-12-18 21:58:48.524847", + "modified_by": "Administrator", + "module": "Stock", + "name": "Stock Value by Item Group", + "number_of_groups": 0, + "owner": "Administrator", + "parent_document_type": "", + "roles": [], + "show_values_over_chart": 0, + "source": "Stock Value by Item Group", + "time_interval": "Yearly", + "timeseries": 0, + "timespan": "Last Year", + "type": "Bar", + "use_report_chart": 0, + "value_based_on": "", + "y_axis": [] +} diff --git a/erpnext/stock/dashboard_chart_source/stock_value_by_item_group/__init__.py b/erpnext/stock/dashboard_chart_source/stock_value_by_item_group/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/erpnext/stock/dashboard_chart_source/stock_value_by_item_group/stock_value_by_item_group.js b/erpnext/stock/dashboard_chart_source/stock_value_by_item_group/stock_value_by_item_group.js new file mode 100644 index 0000000000000000000000000000000000000000..1ee56684530a01317ed6e3b328a8b81f8cebc1b9 --- /dev/null +++ b/erpnext/stock/dashboard_chart_source/stock_value_by_item_group/stock_value_by_item_group.js @@ -0,0 +1,15 @@ +frappe.provide("frappe.dashboards.chart_sources"); + +frappe.dashboards.chart_sources["Stock Value by Item Group"] = { + method: "erpnext.stock.dashboard_chart_source.stock_value_by_item_group.stock_value_by_item_group.get", + filters: [ + { + fieldname: "company", + label: __("Company"), + fieldtype: "Link", + options: "Company", + default: frappe.defaults.get_user_default("Company"), + reqd: 1, + }, + ], +}; diff --git a/erpnext/stock/dashboard_chart_source/stock_value_by_item_group/stock_value_by_item_group.json b/erpnext/stock/dashboard_chart_source/stock_value_by_item_group/stock_value_by_item_group.json new file mode 100644 index 0000000000000000000000000000000000000000..0cef1e6359d5115ad682286cdb9c1b490a85661b --- /dev/null +++ b/erpnext/stock/dashboard_chart_source/stock_value_by_item_group/stock_value_by_item_group.json @@ -0,0 +1,13 @@ +{ + "creation": "2025-12-18 21:50:03.410111", + "docstatus": 0, + "doctype": "Dashboard Chart Source", + "idx": 0, + "modified": "2025-12-18 21:50:03.410111", + "modified_by": "Administrator", + "module": "Stock", + "name": "Stock Value by Item Group", + "owner": "Administrator", + "source_name": "Stock Value by Item Group", + "timeseries": 0 +} diff --git a/erpnext/stock/dashboard_chart_source/stock_value_by_item_group/stock_value_by_item_group.py b/erpnext/stock/dashboard_chart_source/stock_value_by_item_group/stock_value_by_item_group.py new file mode 100644 index 0000000000000000000000000000000000000000..68f64619e7b33e96d739a845f4a497eba4096966 --- /dev/null +++ b/erpnext/stock/dashboard_chart_source/stock_value_by_item_group/stock_value_by_item_group.py @@ -0,0 +1,74 @@ +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# License: GNU General Public License v3. See license.txt + + +import frappe +from frappe import _ +from frappe.query_builder.functions import Abs, Count, Date, Sum +from frappe.utils.dashboard import cache_source + + +@frappe.whitelist() +@cache_source +def get( + chart_name=None, + chart=None, + no_cache=None, + filters=None, + from_date=None, + to_date=None, + timespan=None, + time_interval=None, + heatmap_year=None, +): + if filters and isinstance(filters, str): + filters = frappe.parse_json(filters) + + company = filters.get("company") if filters else None + if not company: + company = frappe.defaults.get_defaults().company + + labels, datasets = get_stock_value_by_item_group(company) + + return { + "labels": labels, + "datasets": [{"name": _("Stock Value"), "values": datasets}], + } + + +def get_stock_value_by_item_group(company): + doctype = frappe.qb.DocType("Bin") + item_doctype = frappe.qb.DocType("Item") + + warehouse_filters = [["is_group", "=", 0]] + if company: + warehouse_filters.append(["company", "=", company]) + + warehouses = frappe.get_list("Warehouse", pluck="name", filters=warehouse_filters) + + stock_value = Sum(doctype.stock_value) + + query = ( + frappe.qb.from_(doctype) + .inner_join(item_doctype) + .on(doctype.item_code == item_doctype.name) + .select(item_doctype.item_group, stock_value.as_("stock_value")) + .where(doctype.warehouse.isin(warehouses)) + .groupby(item_doctype.item_group) + .orderby(stock_value, order=frappe.qb.desc) + .limit(10) + ) + + results = query.run(as_dict=True) + + labels = [] + datapoints = [] + + for row in results: + if not row.stock_value: + continue + + labels.append(_(row.item_group)) + datapoints.append(row.stock_value) + + return labels, datapoints diff --git a/erpnext/stock/workspace/stock/stock.json b/erpnext/stock/workspace/stock/stock.json index fabe2777b17c6436135513edaebc43cf6e3341da..2cd992ccfe5a667060031a8e5a8073817baa6ecd 100644 --- a/erpnext/stock/workspace/stock/stock.json +++ b/erpnext/stock/workspace/stock/stock.json @@ -2,11 +2,11 @@ "app": "erpnext", "charts": [ { - "chart_name": "Oldest Items", - "label": "Stock Average Age" + "chart_name": "Stock Value by Item Group", + "label": "Stock Value by Item Group" } ], - "content": "[{\"id\":\"WKeeHLcyXI\",\"type\":\"number_card\",\"data\":{\"number_card_name\":\"Total Stock Value\",\"col\":4}},{\"id\":\"6nVoOHuy5w\",\"type\":\"number_card\",\"data\":{\"number_card_name\":\"Total Warehouses\",\"col\":4}},{\"id\":\"OUex5VED7d\",\"type\":\"number_card\",\"data\":{\"number_card_name\":\"Total Active Items\",\"col\":4}},{\"id\":\"A3svBa974t\",\"type\":\"chart\",\"data\":{\"chart_name\":\"Warehouse wise Stock Value\",\"col\":12}},{\"id\":\"wwAoBx30p3\",\"type\":\"spacer\",\"data\":{\"col\":12}},{\"id\":\"LkqrpJHM9X\",\"type\":\"header\",\"data\":{\"text\":\"Quick Access\",\"col\":12}},{\"id\":\"OR8PYiYspy\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Item\",\"col\":3}},{\"id\":\"KP1A22WjDl\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Material Request\",\"col\":3}},{\"id\":\"0EYKOrx6U1\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Stock Entry\",\"col\":3}},{\"id\":\"cqotiphmhZ\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Purchase Receipt\",\"col\":3}},{\"id\":\"Xhjqnm-JxZ\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Delivery Note\",\"col\":3}},{\"id\":\"yxCx6Tay4Z\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Stock Ledger\",\"col\":3}},{\"id\":\"o3sdEnNy34\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Stock Balance\",\"col\":3}},{\"id\":\"m9O0HUUDS5\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Dashboard\",\"col\":3}},{\"id\":\"NwWcNC_xNj\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Learn Inventory Management\",\"col\":3}},{\"id\":\"9AmAh9LnPI\",\"type\":\"spacer\",\"data\":{\"col\":12}},{\"id\":\"3SmmwBbOER\",\"type\":\"header\",\"data\":{\"text\":\"Masters & Reports\",\"col\":12}},{\"id\":\"OAGNH9njt7\",\"type\":\"card\",\"data\":{\"card_name\":\"Items Catalogue\",\"col\":4}},{\"id\":\"jF9eKz0qr0\",\"type\":\"card\",\"data\":{\"card_name\":\"Stock Transactions\",\"col\":4}},{\"id\":\"tyTnQo-MIS\",\"type\":\"card\",\"data\":{\"card_name\":\"Stock Reports\",\"col\":4}},{\"id\":\"dJaJw6YNPU\",\"type\":\"card\",\"data\":{\"card_name\":\"Settings\",\"col\":4}},{\"id\":\"rQf5vK4N_T\",\"type\":\"card\",\"data\":{\"card_name\":\"Serial No and Batch\",\"col\":4}},{\"id\":\"7oM7hFL4v8\",\"type\":\"card\",\"data\":{\"card_name\":\"Tools\",\"col\":4}},{\"id\":\"ve3L6ZifkB\",\"type\":\"card\",\"data\":{\"card_name\":\"Key Reports\",\"col\":4}},{\"id\":\"8Kfvu3umw7\",\"type\":\"card\",\"data\":{\"card_name\":\"Other Reports\",\"col\":4}}]", + "content": "[{\"id\":\"1cdTNYy-TO\",\"type\":\"chart\",\"data\":{\"chart_name\":\"Stock Value by Item Group\",\"col\":12}},{\"id\":\"WKeeHLcyXI\",\"type\":\"number_card\",\"data\":{\"number_card_name\":\"Total Stock Value\",\"col\":4}},{\"id\":\"6nVoOHuy5w\",\"type\":\"number_card\",\"data\":{\"number_card_name\":\"Total Warehouses\",\"col\":4}},{\"id\":\"OUex5VED7d\",\"type\":\"number_card\",\"data\":{\"number_card_name\":\"Total Active Items\",\"col\":4}},{\"id\":\"wwAoBx30p3\",\"type\":\"spacer\",\"data\":{\"col\":12}},{\"id\":\"LkqrpJHM9X\",\"type\":\"header\",\"data\":{\"text\":\"Quick Access\",\"col\":12}},{\"id\":\"OR8PYiYspy\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Item\",\"col\":3}},{\"id\":\"KP1A22WjDl\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Material Request\",\"col\":3}},{\"id\":\"0EYKOrx6U1\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Stock Entry\",\"col\":3}},{\"id\":\"cqotiphmhZ\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Purchase Receipt\",\"col\":3}},{\"id\":\"Xhjqnm-JxZ\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Delivery Note\",\"col\":3}},{\"id\":\"yxCx6Tay4Z\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Stock Ledger\",\"col\":3}},{\"id\":\"o3sdEnNy34\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Stock Balance\",\"col\":3}},{\"id\":\"m9O0HUUDS5\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Dashboard\",\"col\":3}},{\"id\":\"NwWcNC_xNj\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Learn Inventory Management\",\"col\":3}},{\"id\":\"9AmAh9LnPI\",\"type\":\"spacer\",\"data\":{\"col\":12}},{\"id\":\"3SmmwBbOER\",\"type\":\"header\",\"data\":{\"text\":\"Masters & Reports\",\"col\":12}},{\"id\":\"OAGNH9njt7\",\"type\":\"card\",\"data\":{\"card_name\":\"Items Catalogue\",\"col\":4}},{\"id\":\"jF9eKz0qr0\",\"type\":\"card\",\"data\":{\"card_name\":\"Stock Transactions\",\"col\":4}},{\"id\":\"tyTnQo-MIS\",\"type\":\"card\",\"data\":{\"card_name\":\"Stock Reports\",\"col\":4}},{\"id\":\"dJaJw6YNPU\",\"type\":\"card\",\"data\":{\"card_name\":\"Settings\",\"col\":4}},{\"id\":\"rQf5vK4N_T\",\"type\":\"card\",\"data\":{\"card_name\":\"Serial No and Batch\",\"col\":4}},{\"id\":\"7oM7hFL4v8\",\"type\":\"card\",\"data\":{\"card_name\":\"Tools\",\"col\":4}},{\"id\":\"ve3L6ZifkB\",\"type\":\"card\",\"data\":{\"card_name\":\"Key Reports\",\"col\":4}},{\"id\":\"8Kfvu3umw7\",\"type\":\"card\",\"data\":{\"card_name\":\"Other Reports\",\"col\":4}}]", "creation": "2020-03-02 15:43:10.096528", "custom_blocks": [], "docstatus": 0, @@ -789,7 +789,7 @@ "type": "Link" } ], - "modified": "2025-08-06 13:22:35.414711", + "modified": "2025-12-18 22:05:46.679935", "modified_by": "Administrator", "module": "Stock", "name": "Stock",