From ff2b9a99e75ff3504de73ea67d7c8b757c528a0a Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Fri, 5 Jun 2026 14:41:42 +0530 Subject: [PATCH] fix: missing fields issue --- erpnext/manufacturing/doctype/bom/bom.py | 64 ++++++------- .../production_plan/production_plan.py | 86 +++++++++-------- .../doctype/work_order/work_order.py | 96 +++++++++---------- 3 files changed, 126 insertions(+), 120 deletions(-) diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py index 723e7eba560..95f3aae57a1 100644 --- a/erpnext/manufacturing/doctype/bom/bom.py +++ b/erpnext/manufacturing/doctype/bom/bom.py @@ -975,11 +975,11 @@ class BOM(WebsiteGenerator): d.get("secondary_item_type") == "Scrap" or d.get("is_legacy") for d in self.get("secondary_items") ) - def validate_bom_currency(self, *args, **kwargs): - return BOMCostingService(self).validate_bom_currency(*args, **kwargs) + def validate_bom_currency(self, item): + return BOMCostingService(self).validate_bom_currency(item) - def get_rm_rate(self, *args, **kwargs): - return BOMCostingService(self).get_rm_rate(*args, **kwargs) + def get_rm_rate(self, arg, notify=True): + return BOMCostingService(self).get_rm_rate(arg, notify) @frappe.whitelist() def update_cost( @@ -996,47 +996,47 @@ class BOM(WebsiteGenerator): save=save, ) - def update_parent_cost(self, *args, **kwargs): - return BOMCostingService(self).update_parent_cost(*args, **kwargs) + def update_parent_cost(self): + return BOMCostingService(self).update_parent_cost() - def get_bom_unitcost(self, *args, **kwargs): - return BOMCostingService(self).get_bom_unitcost(*args, **kwargs) + def get_bom_unitcost(self, bom_no): + return BOMCostingService(self).get_bom_unitcost(bom_no) - def calculate_cost(self, *args, **kwargs): - return BOMCostingService(self).calculate_cost(*args, **kwargs) + def calculate_cost(self, save_updates=False, update_hour_rate=False): + return BOMCostingService(self).calculate_cost(save_updates, update_hour_rate) - def calculate_op_cost(self, *args, **kwargs): - return BOMCostingService(self).calculate_op_cost(*args, **kwargs) + def calculate_op_cost(self, update_hour_rate=False): + return BOMCostingService(self).calculate_op_cost(update_hour_rate) - def update_rate_and_time(self, *args, **kwargs): - return BOMCostingService(self).update_rate_and_time(*args, **kwargs) + def update_rate_and_time(self, row, update_hour_rate=False): + return BOMCostingService(self).update_rate_and_time(row, update_hour_rate) - def calculate_rm_cost(self, *args, **kwargs): - return BOMCostingService(self).calculate_rm_cost(*args, **kwargs) + def calculate_rm_cost(self, save=False): + return BOMCostingService(self).calculate_rm_cost(save) - def calculate_secondary_items_costs(self, *args, **kwargs): - return BOMCostingService(self).calculate_secondary_items_costs(*args, **kwargs) + def calculate_secondary_items_costs(self, save=False): + return BOMCostingService(self).calculate_secondary_items_costs(save) - def calculate_exploded_cost(self, *args, **kwargs): - return BOMCostingService(self).calculate_exploded_cost(*args, **kwargs) + def calculate_exploded_cost(self): + return BOMCostingService(self).calculate_exploded_cost() - def get_rm_rate_map(self, *args, **kwargs): - return BOMCostingService(self).get_rm_rate_map(*args, **kwargs) + def get_rm_rate_map(self): + return BOMCostingService(self).get_rm_rate_map() - def update_exploded_items(self, *args, **kwargs): - return BOMExplodedItemsService(self).update_exploded_items(*args, **kwargs) + def update_exploded_items(self, save=True): + return BOMExplodedItemsService(self).update_exploded_items(save) - def get_exploded_items(self, *args, **kwargs): - return BOMExplodedItemsService(self).get_exploded_items(*args, **kwargs) + def get_exploded_items(self): + return BOMExplodedItemsService(self).get_exploded_items() - def add_to_cur_exploded_items(self, *args, **kwargs): - return BOMExplodedItemsService(self).add_to_cur_exploded_items(*args, **kwargs) + def add_to_cur_exploded_items(self, args): + return BOMExplodedItemsService(self).add_to_cur_exploded_items(args) - def get_child_exploded_items(self, *args, **kwargs): - return BOMExplodedItemsService(self).get_child_exploded_items(*args, **kwargs) + def get_child_exploded_items(self, bom_no, stock_qty, operation=None): + return BOMExplodedItemsService(self).get_child_exploded_items(bom_no, stock_qty, operation) - def add_exploded_items(self, *args, **kwargs): - return BOMExplodedItemsService(self).add_exploded_items(*args, **kwargs) + def add_exploded_items(self, save=True): + return BOMExplodedItemsService(self).add_exploded_items(save) def _get_bom_children(bom_no): diff --git a/erpnext/manufacturing/doctype/production_plan/production_plan.py b/erpnext/manufacturing/doctype/production_plan/production_plan.py index 4e8ff017fae..054f817d7f7 100644 --- a/erpnext/manufacturing/doctype/production_plan/production_plan.py +++ b/erpnext/manufacturing/doctype/production_plan/production_plan.py @@ -373,44 +373,48 @@ class ProductionPlan(Document): self.status = "Material Requested" break - def get_production_items(self, *args, **kwargs): - return WorkOrderCreationService(self).get_production_items(*args, **kwargs) + def get_production_items(self): + return WorkOrderCreationService(self).get_production_items() @frappe.whitelist() def make_work_order(self): return WorkOrderCreationService(self).make_work_order() - def make_work_order_for_finished_goods(self, *args, **kwargs): - return WorkOrderCreationService(self).make_work_order_for_finished_goods(*args, **kwargs) + def make_work_order_for_finished_goods(self, wo_list, default_warehouses): + return WorkOrderCreationService(self).make_work_order_for_finished_goods(wo_list, default_warehouses) - def make_work_order_for_subassembly_items(self, *args, **kwargs): - return WorkOrderCreationService(self).make_work_order_for_subassembly_items(*args, **kwargs) + def make_work_order_for_subassembly_items(self, wo_list, subcontracted_po, default_warehouses): + return WorkOrderCreationService(self).make_work_order_for_subassembly_items( + wo_list, subcontracted_po, default_warehouses + ) - def prepare_data_for_sub_assembly_items(self, *args, **kwargs): - return WorkOrderCreationService(self).prepare_data_for_sub_assembly_items(*args, **kwargs) + def prepare_data_for_sub_assembly_items(self, row, wo_data): + return WorkOrderCreationService(self).prepare_data_for_sub_assembly_items(row, wo_data) - def make_subcontracted_purchase_order(self, *args, **kwargs): - return WorkOrderCreationService(self).make_subcontracted_purchase_order(*args, **kwargs) + def make_subcontracted_purchase_order(self, subcontracted_po, purchase_orders): + return WorkOrderCreationService(self).make_subcontracted_purchase_order( + subcontracted_po, purchase_orders + ) - def show_list_created_message(self, *args, **kwargs): - return WorkOrderCreationService(self).show_list_created_message(*args, **kwargs) + def show_list_created_message(self, doctype, doc_list=None): + return WorkOrderCreationService(self).show_list_created_message(doctype, doc_list) - def create_work_order(self, *args, **kwargs): - return WorkOrderCreationService(self).create_work_order(*args, **kwargs) + def create_work_order(self, item): + return WorkOrderCreationService(self).create_work_order(item) @frappe.whitelist() def get_open_sales_orders(self): return SalesOrderSourcingService(self).get_open_sales_orders() - def add_so_in_table(self, *args, **kwargs): - return SalesOrderSourcingService(self).add_so_in_table(*args, **kwargs) + def add_so_in_table(self, open_so): + return SalesOrderSourcingService(self).add_so_in_table(open_so) @frappe.whitelist() def get_pending_material_requests(self): return SalesOrderSourcingService(self).get_pending_material_requests() - def add_mr_in_table(self, *args, **kwargs): - return SalesOrderSourcingService(self).add_mr_in_table(*args, **kwargs) + def add_mr_in_table(self, pending_mr): + return SalesOrderSourcingService(self).add_mr_in_table(pending_mr) @frappe.whitelist() def combine_so_items(self): @@ -420,26 +424,26 @@ class ProductionPlan(Document): def get_items(self): return SalesOrderSourcingService(self).get_items() - def get_so_mr_list(self, *args, **kwargs): - return SalesOrderSourcingService(self).get_so_mr_list(*args, **kwargs) + def get_so_mr_list(self, field, table): + return SalesOrderSourcingService(self).get_so_mr_list(field, table) - def get_bom_item_condition(self, *args, **kwargs): - return SalesOrderSourcingService(self).get_bom_item_condition(*args, **kwargs) + def get_bom_item_condition(self): + return SalesOrderSourcingService(self).get_bom_item_condition() - def get_so_items(self, *args, **kwargs): - return SalesOrderSourcingService(self).get_so_items(*args, **kwargs) + def get_so_items(self): + return SalesOrderSourcingService(self).get_so_items() - def get_mr_items(self, *args, **kwargs): - return SalesOrderSourcingService(self).get_mr_items(*args, **kwargs) + def get_mr_items(self): + return SalesOrderSourcingService(self).get_mr_items() - def add_items(self, *args, **kwargs): - return SalesOrderSourcingService(self).add_items(*args, **kwargs) + def add_items(self, items): + return SalesOrderSourcingService(self).add_items(items) - def add_pp_ref(self, *args, **kwargs): - return SalesOrderSourcingService(self).add_pp_ref(*args, **kwargs) + def add_pp_ref(self, refs): + return SalesOrderSourcingService(self).add_pp_ref(refs) - def validate_mr_subcontracted(self, *args, **kwargs): - return MaterialRequestService(self).validate_mr_subcontracted(*args, **kwargs) + def validate_mr_subcontracted(self): + return MaterialRequestService(self).validate_mr_subcontracted() @frappe.whitelist() def make_material_request(self): @@ -449,14 +453,16 @@ class ProductionPlan(Document): def get_sub_assembly_items(self, manufacturing_type: str | None = None): return SubAssemblyService(self).get_sub_assembly_items(manufacturing_type=manufacturing_type) - def set_sub_assembly_items_based_on_level(self, *args, **kwargs): - return SubAssemblyService(self).set_sub_assembly_items_based_on_level(*args, **kwargs) + def set_sub_assembly_items_based_on_level(self, row, bom_data, manufacturing_type=None): + return SubAssemblyService(self).set_sub_assembly_items_based_on_level( + row, bom_data, manufacturing_type + ) - def set_default_supplier_for_subcontracting_order(self, *args, **kwargs): - return SubAssemblyService(self).set_default_supplier_for_subcontracting_order(*args, **kwargs) + def set_default_supplier_for_subcontracting_order(self): + return SubAssemblyService(self).set_default_supplier_for_subcontracting_order() - def combine_subassembly_items(self, *args, **kwargs): - return SubAssemblyService(self).combine_subassembly_items(*args, **kwargs) + def combine_subassembly_items(self, sub_assembly_items_store): + return SubAssemblyService(self).combine_subassembly_items(sub_assembly_items_store) - def all_items_completed(self, *args, **kwargs): - return SubAssemblyService(self).all_items_completed(*args, **kwargs) + def all_items_completed(self): + return SubAssemblyService(self).all_items_completed() diff --git a/erpnext/manufacturing/doctype/work_order/work_order.py b/erpnext/manufacturing/doctype/work_order/work_order.py index af0b1a58b98..e8bc3ac32e1 100644 --- a/erpnext/manufacturing/doctype/work_order/work_order.py +++ b/erpnext/manufacturing/doctype/work_order/work_order.py @@ -981,78 +981,78 @@ class WorkOrder(Document): def create_job_card_from_wo(self): return OperationsService(self).create_job_card() - def update_required_items(self, *args, **kwargs): - return RequiredItemsService(self).update_required_items(*args, **kwargs) + def update_required_items(self): + return RequiredItemsService(self).update_required_items() - def update_reserved_qty_for_production(self, *args, **kwargs): - return RequiredItemsService(self).update_reserved_qty_for_production(*args, **kwargs) + def update_reserved_qty_for_production(self, items=None): + return RequiredItemsService(self).update_reserved_qty_for_production(items) @frappe.whitelist() - def get_items_and_operations_from_bom(self, *args, **kwargs): - return RequiredItemsService(self).get_items_and_operations_from_bom(*args, **kwargs) + def get_items_and_operations_from_bom(self): + return RequiredItemsService(self).get_items_and_operations_from_bom() - def set_available_qty(self, *args, **kwargs): - return RequiredItemsService(self).set_available_qty(*args, **kwargs) + def set_available_qty(self): + return RequiredItemsService(self).set_available_qty() - def set_required_items(self, *args, **kwargs): - return RequiredItemsService(self).set_required_items(*args, **kwargs) + def set_required_items(self, reset_only_qty=False, reset_source_warehouse=False): + return RequiredItemsService(self).set_required_items(reset_only_qty, reset_source_warehouse) - def update_transferred_qty_for_required_items(self, *args, **kwargs): - return RequiredItemsService(self).update_transferred_qty_for_required_items(*args, **kwargs) + def update_transferred_qty_for_required_items(self): + return RequiredItemsService(self).update_transferred_qty_for_required_items() - def update_returned_qty(self, *args, **kwargs): - return RequiredItemsService(self).update_returned_qty(*args, **kwargs) + def update_returned_qty(self): + return RequiredItemsService(self).update_returned_qty() - def update_consumed_qty_for_required_items(self, *args, **kwargs): - return RequiredItemsService(self).update_consumed_qty_for_required_items(*args, **kwargs) + def update_consumed_qty_for_required_items(self): + return RequiredItemsService(self).update_consumed_qty_for_required_items() - def remove_additional_items(self, *args, **kwargs): - return RequiredItemsService(self).remove_additional_items(*args, **kwargs) + def remove_additional_items(self, stock_entry): + return RequiredItemsService(self).remove_additional_items(stock_entry) - def add_additional_items(self, *args, **kwargs): - return RequiredItemsService(self).add_additional_items(*args, **kwargs) + def add_additional_items(self, stock_entry): + return RequiredItemsService(self).add_additional_items(stock_entry) - def validate_work_order_against_so(self, *args, **kwargs): - return StatusService(self).validate_work_order_against_so(*args, **kwargs) + def validate_work_order_against_so(self): + return StatusService(self).validate_work_order_against_so() - def update_status(self, *args, **kwargs): - return StatusService(self).update_status(*args, **kwargs) + def update_status(self, status=None): + return StatusService(self).update_status(status) - def get_status(self, *args, **kwargs): - return StatusService(self).get_status(*args, **kwargs) + def get_status(self, status=None): + return StatusService(self).get_status(status) - def update_work_order_qty(self, *args, **kwargs): - return StatusService(self).update_work_order_qty(*args, **kwargs) + def update_work_order_qty(self): + return StatusService(self).update_work_order_qty() - def update_disassembled_qty(self, *args, **kwargs): - return StatusService(self).update_disassembled_qty(*args, **kwargs) + def update_disassembled_qty(self, qty, is_cancel=False): + return StatusService(self).update_disassembled_qty(qty, is_cancel) - def get_transferred_or_manufactured_qty(self, *args, **kwargs): - return StatusService(self).get_transferred_or_manufactured_qty(*args, **kwargs) + def get_transferred_or_manufactured_qty(self, purpose, fieldname): + return StatusService(self).get_transferred_or_manufactured_qty(purpose, fieldname) - def set_process_loss_qty(self, *args, **kwargs): - return StatusService(self).set_process_loss_qty(*args, **kwargs) + def set_process_loss_qty(self): + return StatusService(self).set_process_loss_qty() - def update_production_plan_status(self, *args, **kwargs): - return StatusService(self).update_production_plan_status(*args, **kwargs) + def update_production_plan_status(self): + return StatusService(self).update_production_plan_status() - def update_planned_qty(self, *args, **kwargs): - return StatusService(self).update_planned_qty(*args, **kwargs) + def update_planned_qty(self): + return StatusService(self).update_planned_qty() - def set_produced_qty_for_sub_assembly_item(self, *args, **kwargs): - return StatusService(self).set_produced_qty_for_sub_assembly_item(*args, **kwargs) + def set_produced_qty_for_sub_assembly_item(self): + return StatusService(self).set_produced_qty_for_sub_assembly_item() - def update_ordered_qty(self, *args, **kwargs): - return StatusService(self).update_ordered_qty(*args, **kwargs) + def update_ordered_qty(self): + return StatusService(self).update_ordered_qty() - def update_work_order_qty_in_so(self, *args, **kwargs): - return StatusService(self).update_work_order_qty_in_so(*args, **kwargs) + def update_work_order_qty_in_so(self): + return StatusService(self).update_work_order_qty_in_so() - def update_work_order_qty_in_combined_so(self, *args, **kwargs): - return StatusService(self).update_work_order_qty_in_combined_so(*args, **kwargs) + def update_work_order_qty_in_combined_so(self): + return StatusService(self).update_work_order_qty_in_combined_so() - def update_completed_qty_in_material_request(self, *args, **kwargs): - return StatusService(self).update_completed_qty_in_material_request(*args, **kwargs) + def update_completed_qty_in_material_request(self): + return StatusService(self).update_completed_qty_in_material_request() @frappe.whitelist()