From 4e8a151851e7d38dba06e085136b11acff769d73 Mon Sep 17 00:00:00 2001 From: Ali <010109ali@gmail.com> Date: Thu, 11 Jun 2026 12:36:12 +0000 Subject: [PATCH] feat(setup): enable default settings checkboxes on wizard complete MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add set_default_settings() to the setup_wizard_complete hook so fresh installs get sane defaults after company creation: - Global Defaults.disable_rounded_total = 1 - Accounts Settings.delete_linked_ledger_entries = 1 Uses get_single().save() (not db.set_value) so each doctype's on_update/validate side effects run — disable_rounded_total in particular is read via frappe.db.get_default, only populated in on_update. Idempotent. Co-Authored-By: Claude Opus 4.8 (1M context) --- jey_erp/hooks.py | 1 + jey_erp/setup/setup_wizard_handler.py | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/jey_erp/hooks.py b/jey_erp/hooks.py index 2a37a4a..8294e12 100644 --- a/jey_erp/hooks.py +++ b/jey_erp/hooks.py @@ -124,6 +124,7 @@ setup_wizard_complete = [ "jey_erp.setup.setup_wizard_handler.create_default_salary_components", "jey_erp.setup.setup_wizard_handler.create_default_leave_types", "jey_erp.setup.setup_wizard_handler.create_default_company_accounts", + "jey_erp.setup.setup_wizard_handler.set_default_settings", "jey_erp.custom.rename_default_groups.rename_default_groups", ] diff --git a/jey_erp/setup/setup_wizard_handler.py b/jey_erp/setup/setup_wizard_handler.py index 8ff4e21..9ea0b7a 100644 --- a/jey_erp/setup/setup_wizard_handler.py +++ b/jey_erp/setup/setup_wizard_handler.py @@ -269,6 +269,28 @@ def create_default_company_accounts(args): frappe.db.commit() +def set_default_settings(args=None): + """Дефолтные галочки настроек после завершения визарда. + + Идём через get_single().save(), а НЕ db.set_value: у этих настроек есть + побочные действия в on_update/validate, без которых галочка не "сработает". + Идемпотентно — если уже включено, не трогаем. + """ + # Global Defaults.disable_rounded_total читается через frappe.db.get_default, + # который заполняется только в on_update (set_default + clear_cache). + gd = frappe.get_single("Global Defaults") + if not gd.disable_rounded_total: + gd.disable_rounded_total = 1 + gd.save(ignore_permissions=True) + + acc = frappe.get_single("Accounts Settings") + if not acc.delete_linked_ledger_entries: + acc.delete_linked_ledger_entries = 1 + acc.save(ignore_permissions=True) + + frappe.db.commit() + + def sync_company_defaults(): """Синхронизирует default-счета на ВСЕХ Company с default_data/company_defaults.json. Для каждого поля из JSON ищет Account по account_number в каждой компании