mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-26 00:14:50 +00:00
fix: update validation and test cases
This commit is contained in:
@@ -11,7 +11,6 @@ from frappe.model.document import Document
|
|||||||
from frappe.utils import cint
|
from frappe.utils import cint
|
||||||
|
|
||||||
from erpnext.accounts.utils import sync_auto_reconcile_config
|
from erpnext.accounts.utils import sync_auto_reconcile_config
|
||||||
from erpnext.stock.utils import check_pending_reposting
|
|
||||||
|
|
||||||
|
|
||||||
class AccountsSettings(Document):
|
class AccountsSettings(Document):
|
||||||
@@ -98,8 +97,8 @@ class AccountsSettings(Document):
|
|||||||
if old_doc.show_payment_schedule_in_print != self.show_payment_schedule_in_print:
|
if old_doc.show_payment_schedule_in_print != self.show_payment_schedule_in_print:
|
||||||
self.enable_payment_schedule_in_print()
|
self.enable_payment_schedule_in_print()
|
||||||
|
|
||||||
if old_doc.acc_frozen_upto != self.acc_frozen_upto:
|
if old_doc.use_sales_invoice_in_pos != self.use_sales_invoice_in_pos:
|
||||||
self.validate_pending_reposts()
|
self.validate_invoice_mode_switch_in_pos()
|
||||||
|
|
||||||
if clear_cache:
|
if clear_cache:
|
||||||
frappe.clear_cache()
|
frappe.clear_cache()
|
||||||
@@ -127,10 +126,6 @@ class AccountsSettings(Document):
|
|||||||
validate_fields_for_doctype=False,
|
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):
|
def validate_and_sync_auto_reconcile_config(self):
|
||||||
if self.has_value_changed("auto_reconciliation_job_trigger"):
|
if self.has_value_changed("auto_reconciliation_job_trigger"):
|
||||||
if (
|
if (
|
||||||
|
|||||||
@@ -1,11 +1,16 @@
|
|||||||
frappe.ui.form.on("Accounts Settings", {
|
frappe.ui.form.on("Accounts Settings", {
|
||||||
refresh: function (frm) {
|
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");
|
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"
|
||||||
|
);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|||||||
@@ -161,6 +161,83 @@ def get_conditions(filters):
|
|||||||
return conditions
|
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):
|
def prepare_chart_data(data, filters):
|
||||||
if not data:
|
if not data:
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ from erpnext.accounts.doctype.financial_report_template.financial_report_templat
|
|||||||
sync_financial_report_templates,
|
sync_financial_report_templates,
|
||||||
)
|
)
|
||||||
from erpnext.setup.setup_wizard.operations.taxes_setup import setup_taxes_and_charges
|
from erpnext.setup.setup_wizard.operations.taxes_setup import setup_taxes_and_charges
|
||||||
|
from erpnext.stock.utils import check_pending_reposting
|
||||||
|
|
||||||
|
|
||||||
class Company(NestedSet):
|
class Company(NestedSet):
|
||||||
@@ -153,6 +154,7 @@ class Company(NestedSet):
|
|||||||
return exists
|
return exists
|
||||||
|
|
||||||
def validate(self):
|
def validate(self):
|
||||||
|
old_doc = self.get_doc_before_save()
|
||||||
self.update_default_account = False
|
self.update_default_account = False
|
||||||
if self.is_new():
|
if self.is_new():
|
||||||
self.update_default_account = True
|
self.update_default_account = True
|
||||||
@@ -171,6 +173,7 @@ class Company(NestedSet):
|
|||||||
self.set_reporting_currency()
|
self.set_reporting_currency()
|
||||||
self.validate_inventory_account_settings()
|
self.validate_inventory_account_settings()
|
||||||
self.cant_change_valuation_method()
|
self.cant_change_valuation_method()
|
||||||
|
self.validate_pending_reposts(old_doc)
|
||||||
|
|
||||||
def cant_change_valuation_method(self):
|
def cant_change_valuation_method(self):
|
||||||
doc_before_save = self.get_doc_before_save()
|
doc_before_save = self.get_doc_before_save()
|
||||||
@@ -599,6 +602,11 @@ class Company(NestedSet):
|
|||||||
)
|
)
|
||||||
self.reporting_currency = parent_reporting_currency
|
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):
|
def set_default_accounts(self):
|
||||||
default_accounts = {
|
default_accounts = {
|
||||||
"default_cash_account": "Cash",
|
"default_cash_account": "Cash",
|
||||||
|
|||||||
@@ -356,6 +356,7 @@ class TestRepostItemValuation(IntegrationTestCase, StockTestMixin):
|
|||||||
riv = frappe.get_doc(
|
riv = frappe.get_doc(
|
||||||
doctype="Repost Item Valuation",
|
doctype="Repost Item Valuation",
|
||||||
item_code="_Test Item",
|
item_code="_Test Item",
|
||||||
|
company="_Test Company",
|
||||||
warehouse="_Test Warehouse - _TC",
|
warehouse="_Test Warehouse - _TC",
|
||||||
based_on="Item and Warehouse",
|
based_on="Item and Warehouse",
|
||||||
posting_date=today,
|
posting_date=today,
|
||||||
@@ -363,15 +364,15 @@ class TestRepostItemValuation(IntegrationTestCase, StockTestMixin):
|
|||||||
)
|
)
|
||||||
riv.flags.dont_run_in_test = True # keep it queued
|
riv.flags.dont_run_in_test = True # keep it queued
|
||||||
|
|
||||||
accounts_settings = frappe.get_doc("Accounts Settings")
|
company = frappe.get_doc("Company", "_Test Company")
|
||||||
accounts_settings.acc_frozen_upto = today
|
company.accounts_frozen_till_date = today
|
||||||
accounts_settings.frozen_accounts_modifier = ""
|
company.role_allowed_for_frozen_entries = ""
|
||||||
accounts_settings.save()
|
company.save()
|
||||||
|
|
||||||
self.assertRaises(frappe.ValidationError, riv.save)
|
self.assertRaises(frappe.ValidationError, riv.save)
|
||||||
|
|
||||||
accounts_settings.acc_frozen_upto = ""
|
company.accounts_frozen_till_date = ""
|
||||||
accounts_settings.save()
|
company.save()
|
||||||
|
|
||||||
@IntegrationTestCase.change_settings("Stock Reposting Settings", {"item_based_reposting": 0})
|
@IntegrationTestCase.change_settings("Stock Reposting Settings", {"item_based_reposting": 0})
|
||||||
def test_create_repost_entry_for_cancelled_document(self):
|
def test_create_repost_entry_for_cancelled_document(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user