fix: clear validation message when default groups/company aren't set

Creating customers/suppliers/bank accounts from unmapped rows fell back
to "All Customer Groups" / "All Territories" / "All Supplier Groups",
which don't exist on localized sites, producing ERPNext's cryptic
"Could not find Customer Group: All Customer Groups". Creation now
validates upfront and returns a clear message ("Set a Default Customer
Group on Kapital Bank Settings ...") before touching any records — also
for Territory, Supplier Group, and Company/Bank when creating Bank
Accounts from account/card mappings.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Ali 2026-05-12 10:31:40 +00:00
parent cc7dfbeda8
commit aae3dfacfb
1 changed files with 32 additions and 15 deletions

View File

@ -658,6 +658,16 @@ def create_unmapped_customers(settings_name=None):
if not unmapped: if not unmapped:
return {"success": True, "created_count": 0, "message": "No unmapped customers in table to create"} return {"success": True, "created_count": 0, "message": "No unmapped customers in table to create"}
# Validate config upfront — clearer than ERPNext's cryptic
# "Could not find Customer Group" thrown deep inside party creation.
for mapping, _kb_customer in unmapped:
group = mapping.customer_group or doc.default_customer_group
if not group or not frappe.db.exists("Customer Group", group):
return {"success": False, "message": "Set a Default Customer Group on Kapital Bank Settings (or a Customer Group on each customer mapping row) before creating customers."}
territory = mapping.territory or doc.default_territory
if not territory or not frappe.db.exists("Territory", territory):
return {"success": False, "message": "Set a Default Territory on Kapital Bank Settings (or a Territory on each customer mapping row) before creating customers."}
created = 0 created = 0
for mapping, kb_customer in unmapped: for mapping, kb_customer in unmapped:
try: try:
@ -668,16 +678,8 @@ def create_unmapped_customers(settings_name=None):
party = frappe.new_doc("Customer") party = frappe.new_doc("Customer")
party.customer_name = customer_name party.customer_name = customer_name
party.customer_type = "Company" party.customer_type = "Company"
party.customer_group = mapping.customer_group or doc.default_customer_group
customer_group = mapping.customer_group or doc.default_customer_group party.territory = mapping.territory or doc.default_territory
if not customer_group or not frappe.db.exists("Customer Group", customer_group):
customer_group = "All Customer Groups"
party.customer_group = customer_group
territory = mapping.territory or doc.default_territory or "All Territories"
if not frappe.db.exists("Territory", territory):
territory = "All Territories"
party.territory = territory
if kb_customer.tax_id: if kb_customer.tax_id:
party.tax_id = kb_customer.tax_id party.tax_id = kb_customer.tax_id
@ -733,6 +735,11 @@ def create_unmapped_suppliers(settings_name=None):
if not unmapped: if not unmapped:
return {"success": True, "created_count": 0, "message": "No unmapped suppliers in table to create"} return {"success": True, "created_count": 0, "message": "No unmapped suppliers in table to create"}
for mapping, _kb_supplier in unmapped:
group = mapping.supplier_group or doc.default_supplier_group
if not group or not frappe.db.exists("Supplier Group", group):
return {"success": False, "message": "Set a Default Supplier Group on Kapital Bank Settings (or a Supplier Group on each supplier mapping row) before creating suppliers."}
created = 0 created = 0
for mapping, kb_supplier in unmapped: for mapping, kb_supplier in unmapped:
try: try:
@ -743,11 +750,7 @@ def create_unmapped_suppliers(settings_name=None):
party = frappe.new_doc("Supplier") party = frappe.new_doc("Supplier")
party.supplier_name = supplier_name party.supplier_name = supplier_name
party.supplier_type = "Company" party.supplier_type = "Company"
party.supplier_group = mapping.supplier_group or doc.default_supplier_group
supplier_group = mapping.supplier_group or doc.default_supplier_group
if not supplier_group or not frappe.db.exists("Supplier Group", supplier_group):
supplier_group = "All Supplier Groups"
party.supplier_group = supplier_group
if kb_supplier.tax_id: if kb_supplier.tax_id:
party.tax_id = kb_supplier.tax_id party.tax_id = kb_supplier.tax_id
@ -859,6 +862,14 @@ def create_unmapped_accounts(settings_name=None):
default_bank = doc.default_bank default_bank = doc.default_bank
default_company = doc.default_company default_company = doc.default_company
# Bank Account requires both Company and Bank — surface a clear message
# instead of ERPNext's mandatory-field error mid-creation.
if any(not frappe.db.exists("Bank Account", {"bank_account_no": r.iban}) for r in unmapped):
if not default_company:
return {"success": False, "message": "Set a Default Company on Kapital Bank Settings before creating Bank Accounts."}
if not default_bank:
return {"success": False, "message": "Set a Default Bank on Kapital Bank Settings before creating Bank Accounts."}
created = 0 created = 0
for row in unmapped: for row in unmapped:
try: try:
@ -978,6 +989,12 @@ def create_unmapped_cards(settings_name=None):
default_bank = doc.default_bank default_bank = doc.default_bank
default_company = doc.default_company default_company = doc.default_company
if any(not frappe.db.exists("Bank Account", {"bank_account_no": r.account_number}) for r in unmapped):
if not default_company:
return {"success": False, "message": "Set a Default Company on Kapital Bank Settings before creating Bank Accounts."}
if not default_bank:
return {"success": False, "message": "Set a Default Bank on Kapital Bank Settings before creating Bank Accounts."}
created = 0 created = 0
for row in unmapped: for row in unmapped:
try: try: