From 0f53cc1922ff24730c87f8b146abecf10cf1fd0f Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Tue, 27 May 2025 14:44:12 +0530 Subject: [PATCH] feat: specify expense account and cost center for raw materials in Subcontracting Receipt for GL entries --- .../subcontracting_receipt.py | 23 ++++++++++++ .../subcontracting_receipt_supplied_item.json | 37 +++++++++++++++++-- .../subcontracting_receipt_supplied_item.py | 2 + 3 files changed, 58 insertions(+), 4 deletions(-) diff --git a/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py index 25882d35920..2fdb0f6d47b 100644 --- a/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py +++ b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py @@ -11,6 +11,10 @@ import erpnext from erpnext.accounts.utils import get_account_currency from erpnext.buying.utils import check_on_hold_or_closed_status from erpnext.controllers.subcontracting_controller import SubcontractingController +from erpnext.setup.doctype.brand.brand import get_brand_defaults +from erpnext.setup.doctype.item_group.item_group import get_item_group_defaults +from erpnext.stock.doctype.item.item import get_item_defaults +from erpnext.stock.get_item_details import get_default_cost_center, get_default_expense_account from erpnext.stock.stock_ledger import get_valuation_rate @@ -244,6 +248,16 @@ class SubcontractingReceipt(SubcontractingController): if not item.cost_center: item.cost_center = cost_center + for item in self.supplied_items: + if not item.cost_center: + item.cost_center = get_default_cost_center( + {"project": self.project}, + get_item_defaults(item.rm_item_code, self.company), + get_item_group_defaults(item.rm_item_code, self.company), + get_brand_defaults(item.rm_item_code, self.company), + self.company, + ) + def set_items_expense_account(self): if self.company: expense_account = self.get_company_default("default_expense_account", ignore_validation=True) @@ -252,6 +266,15 @@ class SubcontractingReceipt(SubcontractingController): if not item.expense_account: item.expense_account = expense_account + for item in self.supplied_items: + if not item.expense_account: + item.expense_account = get_default_expense_account( + frappe._dict({"expense_account": expense_account}), + get_item_defaults(item.rm_item_code, self.company), + get_item_group_defaults(item.rm_item_code, self.company), + get_brand_defaults(item.rm_item_code, self.company), + ) + def reset_supplied_items(self): if ( frappe.db.get_single_value("Buying Settings", "backflush_raw_materials_of_subcontract_based_on") diff --git a/erpnext/subcontracting/doctype/subcontracting_receipt_supplied_item/subcontracting_receipt_supplied_item.json b/erpnext/subcontracting/doctype/subcontracting_receipt_supplied_item/subcontracting_receipt_supplied_item.json index 3bc7217bddc..ce3494e879d 100644 --- a/erpnext/subcontracting/doctype/subcontracting_receipt_supplied_item/subcontracting_receipt_supplied_item.json +++ b/erpnext/subcontracting/doctype/subcontracting_receipt_supplied_item/subcontracting_receipt_supplied_item.json @@ -33,7 +33,11 @@ "section_break_zwnh", "serial_no", "column_break_qibi", - "batch_no" + "batch_no", + "accounting_details_section", + "expense_account", + "accounting_dimensions_section", + "cost_center" ], "fields": [ { @@ -103,7 +107,7 @@ { "fieldname": "stock_uom", "fieldtype": "Link", - "label": "Stock Uom", + "label": "Stock UOM", "options": "UOM", "read_only": 1 }, @@ -231,20 +235,45 @@ "fieldname": "add_serial_batch_bundle", "fieldtype": "Button", "label": "Add Serial / Batch Bundle" + }, + { + "fieldname": "accounting_details_section", + "fieldtype": "Section Break", + "label": "Accounting Details" + }, + { + "fieldname": "expense_account", + "fieldtype": "Link", + "label": "Expense Account", + "options": "Account" + }, + { + "fieldname": "accounting_dimensions_section", + "fieldtype": "Section Break", + "label": "Accounting Dimensions" + }, + { + "depends_on": "eval:cint(erpnext.is_perpetual_inventory_enabled(parent.company))", + "fieldname": "cost_center", + "fieldtype": "Link", + "label": "Cost Center", + "options": "Cost Center", + "print_hide": 1 } ], "idx": 1, "istable": 1, "links": [], - "modified": "2024-03-30 10:26:27.237371", + "modified": "2025-05-27 12:33:58.772638", "modified_by": "Administrator", "module": "Subcontracting", "name": "Subcontracting Receipt Supplied Item", "naming_rule": "Autoincrement", "owner": "Administrator", "permissions": [], + "row_format": "Dynamic", "sort_field": "modified", "sort_order": "DESC", "states": [], "track_changes": 1 -} \ No newline at end of file +} diff --git a/erpnext/subcontracting/doctype/subcontracting_receipt_supplied_item/subcontracting_receipt_supplied_item.py b/erpnext/subcontracting/doctype/subcontracting_receipt_supplied_item/subcontracting_receipt_supplied_item.py index 8f09197aa83..1c6ae80969a 100644 --- a/erpnext/subcontracting/doctype/subcontracting_receipt_supplied_item/subcontracting_receipt_supplied_item.py +++ b/erpnext/subcontracting/doctype/subcontracting_receipt_supplied_item/subcontracting_receipt_supplied_item.py @@ -20,8 +20,10 @@ class SubcontractingReceiptSuppliedItem(Document): bom_detail_no: DF.Data | None consumed_qty: DF.Float conversion_factor: DF.Float + cost_center: DF.Link | None current_stock: DF.Float description: DF.TextEditor | None + expense_account: DF.Link | None item_name: DF.Data | None main_item_code: DF.Link | None parent: DF.Data