feat(e-taxes-settings): auto-fill Default Item Group & UOM on install

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) <noreply@anthropic.com>
This commit is contained in:
Ali 2026-06-15 11:20:11 +00:00
parent f5b7e56577
commit 610b98ca69
2 changed files with 37 additions and 0 deletions

View File

@ -73,18 +73,22 @@ def after_install():
"""Run installation tasks""" """Run installation tasks"""
from invoice_az.auth import setup_token_renewal from invoice_az.auth import setup_token_renewal
from invoice_az.master_data.sync import sync_all from invoice_az.master_data.sync import sync_all
from invoice_az.setup_defaults import ensure_settings_defaults
setup_token_renewal() setup_token_renewal()
sync_all() sync_all()
ensure_settings_defaults()
def after_migrate(): def after_migrate():
"""Run migration tasks""" """Run migration tasks"""
from invoice_az.auth import setup_token_renewal from invoice_az.auth import setup_token_renewal
from invoice_az.master_data.sync import sync_all from invoice_az.master_data.sync import sync_all
from invoice_az.setup_defaults import ensure_settings_defaults
setup_token_renewal() setup_token_renewal()
sync_all() sync_all()
ensure_settings_defaults()
fixtures = [] fixtures = []

View File

@ -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()