diff --git a/erpnext/hooks.py b/erpnext/hooks.py index ff120a52926..d798137616a 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -382,6 +382,7 @@ doc_events = { "validate": [ "erpnext.regional.india.utils.validate_document_name", "erpnext.regional.india.utils.update_taxable_values", + "erpnext.regional.india.utils.validate_sez_and_export_invoices", ], }, "POS Invoice": {"on_submit": ["erpnext.regional.saudi_arabia.utils.create_qr_code"]}, diff --git a/erpnext/regional/india/utils.py b/erpnext/regional/india/utils.py index 45104b09681..07a2ecdf619 100644 --- a/erpnext/regional/india/utils.py +++ b/erpnext/regional/india/utils.py @@ -841,6 +841,30 @@ def get_gst_accounts( return gst_accounts +def validate_sez_and_export_invoices(doc, method): + country = frappe.get_cached_value("Company", doc.company, "country") + + if country != "India": + return + + if ( + doc.get("gst_category") in ("SEZ", "Overseas") + and doc.get("export_type") == "Without Payment of Tax" + ): + gst_accounts = get_gst_accounts(doc.company) + + for tax in doc.get("taxes"): + for tax in doc.get("taxes"): + if ( + tax.account_head + in gst_accounts.get("igst_account", []) + + gst_accounts.get("sgst_account", []) + + gst_accounts.get("cgst_account", []) + and tax.tax_amount_after_discount_amount + ): + frappe.throw(_("GST cannot be applied on SEZ or Export invoices without payment of tax")) + + def validate_reverse_charge_transaction(doc, method): country = frappe.get_cached_value("Company", doc.company, "country") @@ -888,6 +912,8 @@ def validate_reverse_charge_transaction(doc, method): frappe.throw(msg) + doc.eligibility_for_itc = "ITC on Reverse Charge" + def update_itc_availed_fields(doc, method): country = frappe.get_cached_value("Company", doc.company, "country")