From 610b98ca6925587229a94d8090d56b667b02d917 Mon Sep 17 00:00:00 2001 From: Ali <010109ali@gmail.com> Date: Mon, 15 Jun 2026 11:20:11 +0000 Subject: [PATCH] feat(e-taxes-settings): auto-fill Default Item Group & UOM on install MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The required Link fields default_item_group / default_uom had no field-level default and nothing ever populated them, so every fresh base started with them empty (had to be filled by hand). Add setup_defaults.ensure_settings_defaults() that sets default_item_group="All Item Groups" and default_uom="Nos" — but only when the field is blank AND the target record exists. Idempotent; wired into after_install and after_migrate so it never overwrites an admin's choice. Co-Authored-By: Claude Opus 4.8 (1M context) --- invoice_az/hooks.py | 4 ++++ invoice_az/setup_defaults.py | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 invoice_az/setup_defaults.py diff --git a/invoice_az/hooks.py b/invoice_az/hooks.py index 8761efa..7af745f 100644 --- a/invoice_az/hooks.py +++ b/invoice_az/hooks.py @@ -73,18 +73,22 @@ def after_install(): """Run installation tasks""" from invoice_az.auth import setup_token_renewal from invoice_az.master_data.sync import sync_all + from invoice_az.setup_defaults import ensure_settings_defaults setup_token_renewal() sync_all() + ensure_settings_defaults() def after_migrate(): """Run migration tasks""" from invoice_az.auth import setup_token_renewal from invoice_az.master_data.sync import sync_all + from invoice_az.setup_defaults import ensure_settings_defaults setup_token_renewal() sync_all() + ensure_settings_defaults() fixtures = [] diff --git a/invoice_az/setup_defaults.py b/invoice_az/setup_defaults.py new file mode 100644 index 0000000..d7dbf00 --- /dev/null +++ b/invoice_az/setup_defaults.py @@ -0,0 +1,33 @@ +import frappe + +# Sensible out-of-the-box defaults for E-Taxes Settings on a fresh base. +# These are required Link fields with no field-level default, so without this +# they start empty on every new install and have to be filled by hand. +SETTINGS_DEFAULTS = { + "default_item_group": ("Item Group", "All Item Groups"), + "default_uom": ("UOM", "Nos"), +} + + +def ensure_settings_defaults(): + """Populate E-Taxes Settings defaults if they are empty. + + Idempotent: only writes a field when it is currently blank AND the target + record exists. Safe to run on every after_install / after_migrate — it + never overwrites a value an admin has already chosen. + """ + settings = frappe.get_single("E-Taxes Settings") + + changed = False + for fieldname, (doctype, value) in SETTINGS_DEFAULTS.items(): + if settings.get(fieldname): + continue + if not frappe.db.exists(doctype, value): + continue + settings.set(fieldname, value) + changed = True + + if changed: + settings.flags.ignore_permissions = True + settings.save(ignore_permissions=True) + frappe.db.commit()