diff --git a/kapital_bank/bank_api.py b/kapital_bank/bank_api.py index b0ad19f..625ee3a 100644 --- a/kapital_bank/bank_api.py +++ b/kapital_bank/bank_api.py @@ -658,6 +658,16 @@ def create_unmapped_customers(settings_name=None): if not unmapped: 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 for mapping, kb_customer in unmapped: try: @@ -668,16 +678,8 @@ def create_unmapped_customers(settings_name=None): party = frappe.new_doc("Customer") party.customer_name = customer_name party.customer_type = "Company" - - customer_group = mapping.customer_group or doc.default_customer_group - 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 + party.customer_group = mapping.customer_group or doc.default_customer_group + party.territory = mapping.territory or doc.default_territory if 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: 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 for mapping, kb_supplier in unmapped: try: @@ -743,11 +750,7 @@ def create_unmapped_suppliers(settings_name=None): party = frappe.new_doc("Supplier") party.supplier_name = supplier_name party.supplier_type = "Company" - - 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 + party.supplier_group = mapping.supplier_group or doc.default_supplier_group if 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_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 for row in unmapped: try: @@ -978,6 +989,12 @@ def create_unmapped_cards(settings_name=None): default_bank = doc.default_bank 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 for row in unmapped: try: