Merge pull request #52508 from rohitwaghchaure/form-cleanup-stock-manufacturing

refactor: form cleanup for stock and manufacturing doctypes
This commit is contained in:
rohitwaghchaure
2026-02-08 20:21:46 +05:30
committed by GitHub
12 changed files with 294 additions and 149 deletions

View File

@@ -9,6 +9,7 @@
"engine": "InnoDB",
"field_order": [
"supplier_section",
"company",
"title",
"naming_series",
"supplier",
@@ -19,7 +20,6 @@
"transaction_date",
"schedule_date",
"column_break1",
"company",
"is_subcontracted",
"has_unit_price_items",
"supplier_warehouse",
@@ -1318,7 +1318,7 @@
"idx": 105,
"is_submittable": 1,
"links": [],
"modified": "2026-02-04 13:01:36.628472",
"modified": "2026-02-06 17:07:24.249692",
"modified_by": "Administrator",
"module": "Buying",
"name": "Purchase Order",

View File

@@ -7,9 +7,8 @@
"engine": "InnoDB",
"field_order": [
"production_item_tab",
"item",
"company",
"uom",
"item",
"quantity",
"cb0",
"is_active",
@@ -17,8 +16,6 @@
"allow_alternative_item",
"set_rate_of_sub_assembly_item_based_on_bom",
"is_phantom_bom",
"project",
"image",
"currency_detail",
"rm_cost_as_per",
"buying_price_list",
@@ -33,11 +30,9 @@
"column_break_23",
"transfer_material_against",
"routing",
"fg_based_operating_cost",
"column_break_joxb",
"default_source_warehouse",
"default_target_warehouse",
"fg_based_section_section",
"fg_based_operating_cost",
"column_break_omye",
"operating_cost_per_bom_quantity",
"operations_section",
"operations",
@@ -61,15 +56,25 @@
"column_break_26",
"total_cost",
"base_total_cost",
"more_info_tab",
"item_name",
"column_break_27",
"description",
"has_variants",
"quality_inspection_tab",
"quality_inspection_section_break",
"inspection_required",
"column_break_dxp7",
"quality_inspection_template",
"more_info_tab",
"production_item_info_section",
"item_name",
"uom",
"image",
"column_break_27",
"description",
"has_variants",
"default_warehouse_section",
"default_source_warehouse",
"column_break_inep",
"default_target_warehouse",
"section_break_ouuf",
"project",
"section_break0",
"exploded_items",
"website_section",
@@ -451,7 +456,8 @@
"allow_on_submit": 1,
"fieldname": "route",
"fieldtype": "Small Text",
"label": "Route"
"label": "Route",
"read_only": 1
},
{
"allow_on_submit": 1,
@@ -651,15 +657,11 @@
{
"default": "0",
"depends_on": "with_operations",
"description": "Users can consume raw materials and add semi-finished goods or final finished goods against the operation using job cards.",
"description": "Users can make manufacture entry against Job Cards",
"fieldname": "track_semi_finished_goods",
"fieldtype": "Check",
"label": "Track Semi Finished Goods"
},
{
"fieldname": "column_break_joxb",
"fieldtype": "Column Break"
},
{
"fieldname": "default_source_warehouse",
"fieldtype": "Link",
@@ -677,6 +679,33 @@
"fieldname": "is_phantom_bom",
"fieldtype": "Check",
"label": "Is Phantom BOM"
},
{
"fieldname": "default_warehouse_section",
"fieldtype": "Section Break",
"label": "Default Warehouse"
},
{
"fieldname": "column_break_inep",
"fieldtype": "Column Break"
},
{
"fieldname": "column_break_omye",
"fieldtype": "Column Break"
},
{
"fieldname": "production_item_info_section",
"fieldtype": "Section Break",
"label": "Production Item Info"
},
{
"fieldname": "section_break_ouuf",
"fieldtype": "Section Break"
},
{
"fieldname": "quality_inspection_tab",
"fieldtype": "Tab Break",
"label": "Quality Inspection"
}
],
"icon": "fa fa-sitemap",
@@ -684,7 +713,7 @@
"image_field": "image",
"is_submittable": 1,
"links": [],
"modified": "2025-11-19 16:17:15.925156",
"modified": "2026-02-06 17:23:15.255301",
"modified_by": "Administrator",
"module": "Manufacturing",
"name": "BOM",

View File

@@ -633,16 +633,6 @@ frappe.ui.form.on("Job Card", {
}
},
validate: function (frm) {
if ((!frm.doc.time_logs || !frm.doc.time_logs.length) && frm.doc.started_time) {
frm.trigger("reset_timer");
}
},
reset_timer: function (frm) {
frm.set_value("started_time", "");
},
make_dashboard: function (frm) {
if (frm.doc.__islocal) return;
var section = "";
@@ -797,10 +787,6 @@ frappe.ui.form.on("Job Card Time Log", {
frm.events.set_total_completed_qty(frm);
},
to_time: function (frm) {
frm.set_value("started_time", "");
},
time_in_mins(frm, cdt, cdn) {
let d = locals[cdt][cdn];
if (d.time_in_mins) {

View File

@@ -6,15 +6,15 @@
"editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"company",
"naming_series",
"work_order",
"employee",
"is_subcontracted",
"column_break_4",
"posting_date",
"company",
"project",
"bom_no",
"is_subcontracted",
"semi_finished_good__finished_good_section",
"finished_good",
"production_item",
@@ -70,22 +70,24 @@
"more_information",
"item_name",
"requested_qty",
"status",
"operation_row_id",
"is_paused",
"track_semi_finished_goods",
"column_break_20",
"remarks",
"section_break_dfoc",
"status",
"operation_row_id",
"amended_from",
"column_break_xhzg",
"operation_row_number",
"operation_id",
"sequence_id",
"remarks",
"serial_and_batch_bundle",
"batch_no",
"section_break_jcmx",
"serial_no",
"serial_and_batch_bundle",
"column_break_swqr",
"barcode",
"started_time",
"current_time",
"amended_from",
"batch_no",
"connections_tab"
],
"fields": [
@@ -210,7 +212,7 @@
"collapsible": 1,
"fieldname": "more_information",
"fieldtype": "Tab Break",
"label": "More Information"
"label": "More Info"
},
{
"fieldname": "operation_id",
@@ -259,16 +261,6 @@
"options": "Open\nWork In Progress\nMaterial Transferred\nOn Hold\nSubmitted\nCancelled\nCompleted",
"read_only": 1
},
{
"allow_on_submit": 1,
"fieldname": "started_time",
"fieldtype": "Datetime",
"hidden": 1,
"label": "Started Time",
"no_copy": 1,
"print_hide": 1,
"read_only": 1
},
{
"fieldname": "amended_from",
"fieldtype": "Link",
@@ -315,16 +307,7 @@
"fetch_if_empty": 1,
"fieldname": "item_name",
"fieldtype": "Read Only",
"label": "Item Name"
},
{
"allow_on_submit": 1,
"fieldname": "current_time",
"fieldtype": "Int",
"hidden": 1,
"label": "Current Time",
"no_copy": 1,
"print_hide": 1,
"label": "Item Name",
"read_only": 1
},
{
@@ -466,7 +449,8 @@
"label": "Serial and Batch Bundle",
"no_copy": 1,
"options": "Serial and Batch Bundle",
"print_hide": 1
"print_hide": 1,
"read_only": 1
},
{
"depends_on": "process_loss_qty",
@@ -621,12 +605,30 @@
"fieldname": "track_semi_finished_goods",
"fieldtype": "Check",
"label": "Track Semi Finished Goods"
},
{
"fieldname": "section_break_jcmx",
"fieldtype": "Section Break",
"label": "Serial / Batch"
},
{
"fieldname": "column_break_swqr",
"fieldtype": "Column Break"
},
{
"fieldname": "section_break_dfoc",
"fieldtype": "Section Break",
"label": "Status and Reference"
},
{
"fieldname": "column_break_xhzg",
"fieldtype": "Column Break"
}
],
"grid_page_length": 50,
"is_submittable": 1,
"links": [],
"modified": "2025-12-22 14:20:07.817118",
"modified": "2026-02-06 18:27:03.178783",
"modified_by": "Administrator",
"module": "Manufacturing",
"name": "Job Card",

View File

@@ -82,7 +82,6 @@ class JobCard(Document):
batch_no: DF.Link | None
bom_no: DF.Link | None
company: DF.Link
current_time: DF.Int
employee: DF.TableMultiSelect[JobCardTimeLog]
expected_end_date: DF.Datetime | None
expected_start_date: DF.Datetime | None
@@ -118,7 +117,6 @@ class JobCard(Document):
serial_no: DF.SmallText | None
skip_material_transfer: DF.Check
source_warehouse: DF.Link | None
started_time: DF.Datetime | None
status: DF.Literal[
"Open",
"Work In Progress",

View File

@@ -8,29 +8,23 @@
"engine": "InnoDB",
"field_order": [
"item",
"naming_series",
"status",
"production_item",
"item_name",
"image",
"bom_no",
"mps",
"subcontracting_inward_order",
"subcontracting_inward_order_item",
"sales_order",
"column_break1",
"company",
"naming_series",
"production_item",
"bom_no",
"column_break1",
"qty",
"project",
"sales_order",
"track_semi_finished_goods",
"reserve_stock",
"column_break_agjv",
"section_break_vrpa",
"max_producible_qty",
"material_transferred_for_manufacturing",
"additional_transferred_qty",
"column_break_ezmq",
"produced_qty",
"disassembled_qty",
"process_loss_qty",
"disassembled_qty",
"warehouses",
"source_warehouse",
"wip_warehouse",
@@ -65,22 +59,34 @@
"column_break_24",
"corrective_operation_cost",
"total_operating_cost",
"more_info",
"production_item_info_section",
"image",
"item_name",
"stock_uom",
"column_break2",
"description",
"serial_no_and_batch_for_finished_good_section",
"has_serial_no",
"has_batch_no",
"column_break_18",
"batch_size",
"more_info",
"description",
"stock_uom",
"column_break2",
"material_request",
"material_request_item",
"sales_order_item",
"reference_section",
"project",
"subcontracting_inward_order",
"production_plan",
"production_plan_item",
"mps",
"material_request",
"column_break_xbhk",
"material_request_item",
"subcontracting_inward_order_item",
"sales_order_item",
"production_plan_sub_assembly_item",
"production_plan_item",
"product_bundle_item",
"section_break_ynih",
"status",
"column_break_cvuw",
"amended_from",
"connections_tab"
],
@@ -149,6 +155,7 @@
{
"fieldname": "bom_no",
"fieldtype": "Link",
"in_list_view": 1,
"label": "BOM No",
"oldfieldname": "bom_no",
"oldfieldtype": "Link",
@@ -198,6 +205,7 @@
"default": "1.0",
"fieldname": "qty",
"fieldtype": "Float",
"in_list_view": 1,
"label": "Qty To Manufacture",
"oldfieldname": "qty",
"oldfieldtype": "Currency",
@@ -431,7 +439,8 @@
"fieldname": "material_request",
"fieldtype": "Link",
"label": "Material Request",
"options": "Material Request"
"options": "Material Request",
"read_only": 1
},
{
"fieldname": "material_request_item",
@@ -516,7 +525,7 @@
},
{
"collapsible": 1,
"depends_on": "eval:!doc.__islocal",
"depends_on": "eval:!doc.__islocal && doc.track_semi_finished_goods === 0 && (doc.has_serial_no === 1 || doc.has_batch_no === 1)",
"fieldname": "serial_no_and_batch_for_finished_good_section",
"fieldtype": "Section Break",
"label": "Finished Good Serial / Batch"
@@ -624,10 +633,8 @@
"read_only": 1
},
{
"fieldname": "column_break_agjv",
"fieldtype": "Column Break"
},
{
"default": "0",
"depends_on": "eval:doc.docstatus==1 && doc.skip_transfer==0",
"fieldname": "additional_transferred_qty",
"fieldtype": "Float",
"label": "Additional Transferred Qty",
@@ -659,6 +666,36 @@
"no_copy": 1,
"non_negative": 1,
"read_only": 1
},
{
"fieldname": "section_break_vrpa",
"fieldtype": "Section Break"
},
{
"fieldname": "column_break_ezmq",
"fieldtype": "Column Break"
},
{
"fieldname": "section_break_ynih",
"fieldtype": "Section Break"
},
{
"fieldname": "reference_section",
"fieldtype": "Section Break",
"label": "Reference"
},
{
"fieldname": "column_break_cvuw",
"fieldtype": "Column Break"
},
{
"fieldname": "column_break_xbhk",
"fieldtype": "Column Break"
},
{
"fieldname": "production_item_info_section",
"fieldtype": "Section Break",
"label": "Production Item Info"
}
],
"grid_page_length": 50,
@@ -667,7 +704,7 @@
"image_field": "image",
"is_submittable": 1,
"links": [],
"modified": "2025-10-12 14:24:57.699749",
"modified": "2026-02-06 17:53:11.295600",
"modified_by": "Administrator",
"module": "Manufacturing",
"name": "Work Order",

View File

@@ -869,6 +869,9 @@ class WorkOrder(Document):
).run()
def create_serial_no_batch_no(self):
if self.track_semi_finished_goods:
return
if not (self.has_serial_no or self.has_batch_no):
return
@@ -2351,7 +2354,11 @@ def set_work_order_ops(name):
@frappe.whitelist()
def make_stock_entry(
work_order_id, purpose, qty=None, target_warehouse=None, is_additional_transfer_entry=False
work_order_id: str,
purpose: str,
qty: float | None = None,
target_warehouse: str | None = None,
is_additional_transfer_entry: bool = False,
):
work_order = frappe.get_doc("Work Order", work_order_id)
if not frappe.db.get_value("Warehouse", work_order.wip_warehouse, "is_group"):
@@ -2373,9 +2380,6 @@ def make_stock_entry(
qty if qty is not None else (flt(work_order.qty) - flt(work_order.produced_qty))
)
if work_order.bom_no:
stock_entry.inspection_required = frappe.db.get_value("BOM", work_order.bom_no, "inspection_required")
if purpose == "Material Transfer for Manufacture":
stock_entry.to_warehouse = wip_warehouse
stock_entry.project = work_order.project
@@ -2387,6 +2391,10 @@ def make_stock_entry(
)
stock_entry.to_warehouse = work_order.fg_warehouse
stock_entry.project = work_order.project
if work_order.bom_no:
stock_entry.inspection_required = frappe.db.get_value(
"BOM", work_order.bom_no, "inspection_required"
)
if purpose == "Disassemble":
stock_entry.from_warehouse = work_order.fg_warehouse

View File

@@ -233,7 +233,7 @@ class Workstation(Document):
@frappe.whitelist()
def get_job_cards(workstation, job_card=None):
def get_job_cards(workstation: str):
if frappe.has_permission("Job Card", "read"):
jc_data = frappe.get_all(
"Job Card",
@@ -264,6 +264,7 @@ def get_job_cards(workstation, job_card=None):
"status": ["not in", ["Completed", "Stopped"]],
},
order_by="expected_start_date, expected_end_date",
limit=10,
)
job_cards = [row.name for row in jc_data]
@@ -517,7 +518,7 @@ def get_color_map():
@frappe.whitelist()
def update_job_card(job_card, method, **kwargs):
def update_job_card(job_card: str, method: str, **kwargs):
if isinstance(kwargs, dict):
kwargs = frappe._dict(kwargs)
@@ -527,7 +528,6 @@ def update_job_card(job_card, method, **kwargs):
if kwargs.qty and isinstance(kwargs.qty, str):
kwargs.qty = flt(kwargs.qty)
print(method)
doc = frappe.get_doc("Job Card", job_card)
doc.run_method(method, **kwargs)

View File

@@ -6,19 +6,18 @@
"editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"naming_series",
"company",
"naming_series",
"purpose",
"customer",
"customer_name",
"work_order",
"material_request",
"for_qty",
"column_break_4",
"for_qty",
"parent_warehouse",
"consider_rejected_warehouses",
"get_item_locations",
"section_break_cfiw",
"pick_manually",
"column_break_nwpf",
"ignore_pricing_rule",
"section_break_6",
"scan_barcode",
@@ -27,14 +26,21 @@
"prompt_qty",
"section_break_15",
"locations",
"amended_from",
"other_info_tab",
"print_settings_section",
"group_same_items",
"status_section",
"status",
"column_break_qyam",
"per_delivered",
"delivery_status",
"per_delivered"
"column_break_refl",
"status",
"reference_section",
"work_order",
"customer_name",
"column_break_feoy",
"material_request",
"amended_from",
"connections_tab"
],
"fields": [
{
@@ -213,11 +219,9 @@
"label": "Ignore Pricing Rule"
},
{
"collapsible": 1,
"fieldname": "status_section",
"fieldtype": "Section Break",
"label": "Status",
"print_hide": 1
"label": "Status"
},
{
"fieldname": "delivery_status",
@@ -240,13 +244,41 @@
"read_only": 1
},
{
"fieldname": "column_break_qyam",
"fieldname": "section_break_cfiw",
"fieldtype": "Section Break"
},
{
"fieldname": "column_break_nwpf",
"fieldtype": "Column Break"
},
{
"fieldname": "other_info_tab",
"fieldtype": "Tab Break",
"label": "More Info"
},
{
"fieldname": "column_break_refl",
"fieldtype": "Column Break"
},
{
"fieldname": "reference_section",
"fieldtype": "Section Break",
"label": "Reference"
},
{
"fieldname": "column_break_feoy",
"fieldtype": "Column Break"
},
{
"fieldname": "connections_tab",
"fieldtype": "Tab Break",
"label": "Connections",
"show_dashboard": 1
}
],
"is_submittable": 1,
"links": [],
"modified": "2025-10-03 18:36:52.282355",
"modified": "2026-02-06 18:14:18.361039",
"modified_by": "Administrator",
"module": "Stock",
"name": "Pick List",

View File

@@ -1,3 +1,6 @@
from frappe import _
def get_data():
return {
"fieldname": "pick_list",
@@ -9,6 +12,17 @@ def get_data():
"Sales Order": ["locations", "sales_order"],
},
"transactions": [
{"items": ["Stock Entry", "Sales Order", "Delivery Note", "Stock Reservation Entry"]},
{
"label": _("Sales"),
"items": ["Sales Order", "Delivery Note"],
},
{
"label": _("Manufacturing"),
"items": ["Stock Entry"],
},
{
"label": _("Reference"),
"items": ["Stock Reservation Entry"],
},
],
}

View File

@@ -156,7 +156,6 @@ frappe.ui.form.on("Stock Entry", {
};
});
frm.add_fetch("bom_no", "inspection_required", "inspection_required");
erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype);
frappe.db.get_single_value("Stock Settings", "disable_serial_no_and_batch_selector").then((value) => {
@@ -245,6 +244,7 @@ frappe.ui.form.on("Stock Entry", {
refresh: function (frm) {
frm.trigger("get_items_from_transit_entry");
frm.trigger("toggle_warehouse_fields");
if (!frm.doc.docstatus && !frm.doc.subcontracting_inward_order) {
frm.trigger("validate_purpose_consumption");
@@ -534,6 +534,7 @@ frappe.ui.form.on("Stock Entry", {
frm.remove_custom_button("Bill of Materials", "Get Items From");
frm.events.show_bom_custom_button(frm);
frm.trigger("add_to_transit");
frm.trigger("toggle_warehouse_fields");
frm.fields_dict.items.grid.update_docfield_property(
"basic_rate",
@@ -542,6 +543,22 @@ frappe.ui.form.on("Stock Entry", {
);
},
toggle_warehouse_fields(frm) {
frm.fields_dict["items"].grid.update_docfield_property(
"s_warehouse",
"in_list_view",
!["Material Receipt", "Receive from Customer"].includes(frm.doc.purpose)
);
frm.fields_dict["items"].grid.update_docfield_property(
"t_warehouse",
"in_list_view",
!["Material Issue"].includes(frm.doc.purpose)
);
frm.fields_dict["items"].grid.reset_grid();
},
purpose: function (frm) {
frm.trigger("validate_purpose_consumption");
frm.fields_dict.items.grid.refresh();

View File

@@ -8,30 +8,22 @@
"engine": "InnoDB",
"field_order": [
"stock_entry_details_tab",
"company",
"naming_series",
"stock_entry_type",
"outgoing_stock_entry",
"purpose",
"add_to_transit",
"work_order",
"job_card",
"purchase_order",
"subcontracting_order",
"subcontracting_inward_order",
"delivery_note_no",
"sales_invoice_no",
"pick_list",
"purchase_receipt_no",
"asset_repair",
"col2",
"company",
"set_posting_time",
"posting_date",
"posting_time",
"column_break_eaoa",
"set_posting_time",
"inspection_required",
"reference_section",
"add_to_transit",
"apply_putaway_rule",
"is_additional_transfer_entry",
"inspection_required",
"column_break_jabv",
"work_order",
"subcontracting_order",
"outgoing_stock_entry",
"bom_info_section",
"from_bom",
"use_multi_level_bom",
@@ -78,6 +70,17 @@
"select_print_heading",
"print_settings_col_break",
"letter_head",
"reference_details_section",
"delivery_note_no",
"sales_invoice_no",
"job_card",
"pick_list",
"column_break_qpvo",
"asset_repair",
"purchase_receipt_no",
"purchase_order",
"subcontracting_inward_order",
"is_additional_transfer_entry",
"more_info",
"is_opening",
"remarks",
@@ -168,7 +171,8 @@
"fieldname": "subcontracting_order",
"fieldtype": "Link",
"label": "Subcontracting Order",
"options": "Subcontracting Order"
"options": "Subcontracting Order",
"read_only": 1
},
{
"depends_on": "eval:doc.purpose==\"Sales Return\"",
@@ -180,6 +184,7 @@
"oldfieldtype": "Link",
"options": "Delivery Note",
"print_hide": 1,
"read_only": 1,
"search_index": 1
},
{
@@ -189,7 +194,8 @@
"label": "Sales Invoice No",
"no_copy": 1,
"options": "Sales Invoice",
"print_hide": 1
"print_hide": 1,
"read_only": 1
},
{
"depends_on": "eval:doc.purpose==\"Purchase Return\"",
@@ -201,6 +207,7 @@
"oldfieldtype": "Link",
"options": "Purchase Receipt",
"print_hide": 1,
"read_only": 1,
"search_index": 1
},
{
@@ -240,13 +247,14 @@
},
{
"default": "0",
"depends_on": "eval: doc.purpose === \"Manufacture\"",
"fieldname": "inspection_required",
"fieldtype": "Check",
"label": "Inspection Required"
},
{
"default": "0",
"depends_on": "eval:in_list([\"Material Issue\", \"Material Transfer\", \"Manufacture\", \"Repack\", \"Send to Subcontractor\", \"Material Transfer for Manufacture\", \"Material Consumption for Manufacture\", \"Disassemble\"], doc.purpose)",
"depends_on": "eval:in_list([\"Material Issue\", \"Manufacture\", \"Repack\", \"Send to Subcontractor\", \"Material Transfer for Manufacture\", \"Material Consumption for Manufacture\", \"Disassemble\"], doc.purpose)",
"fieldname": "from_bom",
"fieldtype": "Check",
"label": "From BOM",
@@ -623,6 +631,7 @@
},
{
"collapsible": 1,
"depends_on": "eval:in_list([\"Material Issue\", \"Manufacture\", \"Repack\", \"Send to Subcontractor\", \"Material Transfer for Manufacture\", \"Material Consumption for Manufacture\", \"Disassemble\"], doc.purpose)",
"fieldname": "bom_info_section",
"fieldtype": "Section Break",
"label": "BOM Info"
@@ -677,10 +686,6 @@
"fieldtype": "Section Break",
"label": "Items"
},
{
"fieldname": "column_break_eaoa",
"fieldtype": "Column Break"
},
{
"depends_on": "eval:doc.asset_repair",
"fieldname": "asset_repair",
@@ -704,9 +709,9 @@
},
{
"default": "0",
"depends_on": "eval:doc.purpose == \"Material Transfer for Manufacture\"",
"fieldname": "is_additional_transfer_entry",
"fieldtype": "Check",
"hidden": 1,
"label": "Is Additional Transfer Entry",
"read_only": 1
},
@@ -717,6 +722,23 @@
"label": "Subcontracting Inward Order",
"options": "Subcontracting Inward Order",
"read_only": 1
},
{
"fieldname": "reference_section",
"fieldtype": "Section Break"
},
{
"fieldname": "column_break_jabv",
"fieldtype": "Column Break"
},
{
"fieldname": "reference_details_section",
"fieldtype": "Section Break",
"label": "Reference"
},
{
"fieldname": "column_break_qpvo",
"fieldtype": "Column Break"
}
],
"grid_page_length": 50,
@@ -725,7 +747,7 @@
"index_web_pages_for_search": 1,
"is_submittable": 1,
"links": [],
"modified": "2025-10-13 15:09:23.905118",
"modified": "2026-02-06 19:26:59.518312",
"modified_by": "Administrator",
"module": "Stock",
"name": "Stock Entry",