From 6da10b9f97555103e5e81e4ec1ee662ebccf9e99 Mon Sep 17 00:00:00 2001 From: Khushi Rawat <142375893+khushi8112@users.noreply.github.com> Date: Wed, 18 Jun 2025 01:04:51 +0530 Subject: [PATCH] fix: update validation and test cases --- .../accounts_settings/accounts_settings.py | 9 +-- .../regional/united_states.js | 17 ++-- .../fixed_asset_register.py | 77 +++++++++++++++++++ erpnext/setup/doctype/company/company.py | 8 ++ .../test_repost_item_valuation.py | 13 ++-- 5 files changed, 105 insertions(+), 19 deletions(-) diff --git a/erpnext/accounts/doctype/accounts_settings/accounts_settings.py b/erpnext/accounts/doctype/accounts_settings/accounts_settings.py index 5765d626a59..bf4c78b0c1f 100644 --- a/erpnext/accounts/doctype/accounts_settings/accounts_settings.py +++ b/erpnext/accounts/doctype/accounts_settings/accounts_settings.py @@ -11,7 +11,6 @@ from frappe.model.document import Document from frappe.utils import cint from erpnext.accounts.utils import sync_auto_reconcile_config -from erpnext.stock.utils import check_pending_reposting class AccountsSettings(Document): @@ -98,8 +97,8 @@ class AccountsSettings(Document): if old_doc.show_payment_schedule_in_print != self.show_payment_schedule_in_print: self.enable_payment_schedule_in_print() - if old_doc.acc_frozen_upto != self.acc_frozen_upto: - self.validate_pending_reposts() + if old_doc.use_sales_invoice_in_pos != self.use_sales_invoice_in_pos: + self.validate_invoice_mode_switch_in_pos() if clear_cache: frappe.clear_cache() @@ -127,10 +126,6 @@ class AccountsSettings(Document): validate_fields_for_doctype=False, ) - def validate_pending_reposts(self): - if self.acc_frozen_upto: - check_pending_reposting(self.acc_frozen_upto) - def validate_and_sync_auto_reconcile_config(self): if self.has_value_changed("auto_reconciliation_job_trigger"): if ( diff --git a/erpnext/accounts/doctype/accounts_settings/regional/united_states.js b/erpnext/accounts/doctype/accounts_settings/regional/united_states.js index a522de9da75..06e1e3ba3b8 100644 --- a/erpnext/accounts/doctype/accounts_settings/regional/united_states.js +++ b/erpnext/accounts/doctype/accounts_settings/regional/united_states.js @@ -1,11 +1,16 @@ frappe.ui.form.on("Accounts Settings", { refresh: function (frm) { - frm.set_df_property("acc_frozen_upto", "label", "Books Closed Through"); - frm.set_df_property( - "frozen_accounts_modifier", - "label", - "Role Allowed to Close Books & Make Changes to Closed Periods" - ); frm.set_df_property("credit_controller", "label", "Credit Manager"); }, }); + +frappe.ui.form.on("Company", { + refresh: function (frm) { + frm.set_df_property("accounts_frozen_till_date", "label", "Books Closed Through"); + frm.set_df_property( + "role_allowed_for_frozen_entries", + "label", + "Role Allowed to Close Books & Make Changes to Closed Periods" + ); + }, +}); diff --git a/erpnext/assets/report/fixed_asset_register/fixed_asset_register.py b/erpnext/assets/report/fixed_asset_register/fixed_asset_register.py index 2103379df93..f92ba266c74 100644 --- a/erpnext/assets/report/fixed_asset_register/fixed_asset_register.py +++ b/erpnext/assets/report/fixed_asset_register/fixed_asset_register.py @@ -161,6 +161,83 @@ def get_conditions(filters): return conditions +def get_data(filters): + data = [] + + conditions = get_conditions(filters) + pr_supplier_map = get_purchase_receipt_supplier_map() + pi_supplier_map = get_purchase_invoice_supplier_map() + + assets_linked_to_fb = get_assets_linked_to_fb(filters) + + company_fb = frappe.get_cached_value("Company", filters.company, "default_finance_book") + + if filters.include_default_book_assets and company_fb: + finance_book = company_fb + elif filters.finance_book: + finance_book = filters.finance_book + else: + finance_book = None + + depreciation_amount_map = get_asset_depreciation_amount_map(filters, finance_book) + + group_by = frappe.scrub(filters.get("group_by")) + + if group_by in ("asset_category", "location"): + data = get_group_by_data(group_by, conditions, assets_linked_to_fb, depreciation_amount_map) + return data + + fields = [ + "name as asset_id", + "asset_name", + "status", + "department", + "company", + "cost_center", + "calculate_depreciation", + "purchase_receipt", + "asset_category", + "purchase_date", + "gross_purchase_amount", + "location", + "available_for_use_date", + "purchase_invoice", + "opening_accumulated_depreciation", + ] + assets_record = frappe.db.get_all("Asset", filters=conditions, fields=fields, debug=1) + + for asset in assets_record: + if assets_linked_to_fb and asset.calculate_depreciation and asset.asset_id not in assets_linked_to_fb: + continue + + depreciation_amount = depreciation_amount_map.get(asset.asset_id) or 0.0 + asset_value = ( + asset.gross_purchase_amount - asset.opening_accumulated_depreciation - depreciation_amount + ) + + row = { + "asset_id": asset.asset_id, + "asset_name": asset.asset_name, + "status": asset.status, + "department": asset.department, + "cost_center": asset.cost_center, + "vendor_name": pr_supplier_map.get(asset.purchase_receipt) + or pi_supplier_map.get(asset.purchase_invoice), + "gross_purchase_amount": asset.gross_purchase_amount, + "opening_accumulated_depreciation": asset.opening_accumulated_depreciation, + "depreciated_amount": depreciation_amount, + "available_for_use_date": asset.available_for_use_date, + "location": asset.location, + "asset_category": asset.asset_category, + "purchase_date": asset.purchase_date, + "asset_value": asset_value, + "company": asset.company, + } + data.append(row) + + return data + + def prepare_chart_data(data, filters): if not data: return diff --git a/erpnext/setup/doctype/company/company.py b/erpnext/setup/doctype/company/company.py index a94a62bfba7..53759839c79 100644 --- a/erpnext/setup/doctype/company/company.py +++ b/erpnext/setup/doctype/company/company.py @@ -19,6 +19,7 @@ from erpnext.accounts.doctype.financial_report_template.financial_report_templat sync_financial_report_templates, ) from erpnext.setup.setup_wizard.operations.taxes_setup import setup_taxes_and_charges +from erpnext.stock.utils import check_pending_reposting class Company(NestedSet): @@ -153,6 +154,7 @@ class Company(NestedSet): return exists def validate(self): + old_doc = self.get_doc_before_save() self.update_default_account = False if self.is_new(): self.update_default_account = True @@ -171,6 +173,7 @@ class Company(NestedSet): self.set_reporting_currency() self.validate_inventory_account_settings() self.cant_change_valuation_method() + self.validate_pending_reposts(old_doc) def cant_change_valuation_method(self): doc_before_save = self.get_doc_before_save() @@ -599,6 +602,11 @@ class Company(NestedSet): ) self.reporting_currency = parent_reporting_currency + def validate_pending_reposts(self, old_doc): + if old_doc.accounts_frozen_till_date != self.accounts_frozen_till_date: + if self.accounts_frozen_till_date: + check_pending_reposting(self.accounts_frozen_till_date) + def set_default_accounts(self): default_accounts = { "default_cash_account": "Cash", diff --git a/erpnext/stock/doctype/repost_item_valuation/test_repost_item_valuation.py b/erpnext/stock/doctype/repost_item_valuation/test_repost_item_valuation.py index 285e9648fdd..d4a8dc24c52 100644 --- a/erpnext/stock/doctype/repost_item_valuation/test_repost_item_valuation.py +++ b/erpnext/stock/doctype/repost_item_valuation/test_repost_item_valuation.py @@ -356,6 +356,7 @@ class TestRepostItemValuation(IntegrationTestCase, StockTestMixin): riv = frappe.get_doc( doctype="Repost Item Valuation", item_code="_Test Item", + company="_Test Company", warehouse="_Test Warehouse - _TC", based_on="Item and Warehouse", posting_date=today, @@ -363,15 +364,15 @@ class TestRepostItemValuation(IntegrationTestCase, StockTestMixin): ) riv.flags.dont_run_in_test = True # keep it queued - accounts_settings = frappe.get_doc("Accounts Settings") - accounts_settings.acc_frozen_upto = today - accounts_settings.frozen_accounts_modifier = "" - accounts_settings.save() + company = frappe.get_doc("Company", "_Test Company") + company.accounts_frozen_till_date = today + company.role_allowed_for_frozen_entries = "" + company.save() self.assertRaises(frappe.ValidationError, riv.save) - accounts_settings.acc_frozen_upto = "" - accounts_settings.save() + company.accounts_frozen_till_date = "" + company.save() @IntegrationTestCase.change_settings("Stock Reposting Settings", {"item_based_reposting": 0}) def test_create_repost_entry_for_cancelled_document(self):