Installing india_compliance…
Updating DocTypes for india_compliance: [========================================] 100%
Setting up Income Tax…
Setting up GST…
Patching Existing Data…
Installation for India Compliance failed due to an error. Please try re-installing the app or report the issue on Sign in to GitHub · GitHub if not resolved.
An error occurred while installing india_compliance: You must select at least one company to which e-Invoice is Applicable
Traceback with variables (most recent call last):
File “apps/frappe/frappe/commands/site.py”, line 484, in install_app
_install_app(app, verbose=context.verbose, force=force)
context = {‘sites’: [‘erpuat.transafeservices.com’], ‘force’: False, ‘verbose’: False, ‘profile’: False}
apps = (‘india_compliance’,)
force = False
_install_app = <function install_app at 0x79ad11c69940>
filelock = <function filelock at 0x79ad11c4f7e0>
exit_code = 0
site = ‘erpuat.transafeservices.com’
app = ‘india_compliance’
err = ValidationError(‘You must select at least one company to which e-Invoice is Applicable’)
File “apps/frappe/frappe/installer.py”, line 326, in install_app
frappe.get_attr(after_install)()
name = ‘india_compliance’
verbose = False
set_as_patched = True
force = False
sync_jobs = <function sync_jobs at 0x79ad1115a700>
sync_for = <function sync_for at 0x79ad1115b600>
sync_customizations = <function sync_customizations at 0x79ad127ad800>
sync_fixtures = <function sync_fixtures at 0x79ad1115b9c0>
app_hooks = {‘accounting_dimension_doctypes’: [‘Bill of Entry’, ‘Bill of Entry Item’], ‘after_app_install’: [‘india_compliance.install.after_app_install’], ‘after_install’: [‘india_compliance.install.after_install’], ‘after_migrate’: [‘india_compliance.audit_trail.setup.after_migrate’], ‘app_color’: [‘grey’], ‘app_description’: [‘ERPNext app to simplify compliance with Indian Rules and Regulations’], ‘app_email’: [‘hello@indiacompliance.app’], ‘app_icon’: [‘octicon octicon-file-directory’], ‘app_include_js’: [‘india_compliance.bundle.js’], ‘app_license’: [‘GNU General Public License (v3)’], ‘app_name’: [‘india_compliance’], ‘app_publisher’: [‘Resilient Tech’], ‘app_title’: [‘India Compliance’], ‘audit_trail_doctypes’: [‘Accounts Settings’, ‘Dunning’, ‘Invoice Discounting’, ‘Journal Entry’, ‘Payment Entry’, ‘Period Closing Voucher’, ‘Process Deferred Accounting’, ‘Purchase Invoice’, ‘Sales Invoice’, ‘Asset’, ‘Asset Capitalization’, ‘Asset Repair’, ‘Delivery Note’, ‘Landed Cost Voucher’, ‘Purchase R…
installed_apps = [‘frappe’, ‘erpnext’, ‘hrms’, ‘om_logistics’, ‘cleartax_integration’, ‘cleartax’, ‘ecollection_icici’, ‘om_hrms’, ‘payments’]
app = ‘frappe/erpnext’
required_app = ‘erpnext’
before_install = ‘india_compliance.patches.check_version_compatibility.execute’
out = None
after_install = ‘india_compliance.install.after_install’
File “apps/india_compliance/india_compliance/install.py”, line 78, in after_install
raise e
File “apps/india_compliance/india_compliance/install.py”, line 67, in after_install
run_post_install_patches()
File “apps/india_compliance/india_compliance/install.py”, line 91, in run_post_install_patches
frappe.get_attr(f"india_compliance.patches.post_install.{patch}.execute")()
patch = ‘update_company_fixtures’
File “apps/india_compliance/india_compliance/patches/post_install/update_company_fixtures.py”, line 30, in execute
make_default_tax_templates(company)
company_list = [‘OM Logistics’, ‘Transafe Services Limited’, ‘OM Logistics Demo’]
company = ‘OM Logistics’
File “apps/frappe/frappe/utils/typing_validations.py”, line 31, in wrapper
return func(args, **kwargs)
args = (‘OM Logistics’,)
kwargs = {}
apply_condition = <function whitelist..innerfn.. at 0x79ad0efa3380>
func = <function make_default_tax_templates at 0x79ad0efa32e0>
File “apps/india_compliance/india_compliance/gst_india/overrides/company.py”, line 69, in make_default_tax_templates
update_gst_settings(company)
company = ‘OM Logistics’
gst_rate = None
default_taxes = {‘tax_categories’: [{‘title’: ‘In-State’, ‘is_inter_state’: 0, ‘gst_state’: ‘’, ‘doctype’: ‘Tax Category’}, {‘title’: ‘Out-State’, ‘is_inter_state’: 1, ‘gst_state’: ‘’, ‘doctype’: ‘Tax Category’}, {‘title’: ‘Reverse Charge In-State’, ‘is_inter_state’: 0, ‘is_reverse_charge’: 1, ‘gst_state’: ‘’, ‘doctype’: ‘Tax Category’}, {‘title’: ‘Reverse Charge Out-State’, ‘is_inter_state’: 1, ‘is_reverse_charge’: 1, ‘gst_state’: ‘’, ‘doctype’: ‘Tax Category’}, {‘title’: ‘Registered Composition’, ‘is_inter_state’: 0, ‘gst_state’: ‘’, ‘doctype’: ‘Tax Category’}], ‘chart_of_accounts’: {'’: {‘item_tax_templates’: [{‘title’: ‘GST 18%’, ‘gst_rate’: 18, ‘gst_treatment’: ‘Taxable’, ‘taxes’: [{‘tax_type’: {‘account_name’: ‘Output Tax SGST’, ‘tax_rate’: 9.0}}, {‘tax_type’: {‘account_name’: ‘Output Tax CGST’, ‘tax_rate’: 9.0}}, {‘tax_type’: {‘account_name’: ‘Output Tax IGST’, ‘tax_rate’: 18.0}}, {‘tax_type’: {‘account_name’: ‘Output Tax SGST RCM’, ‘tax_rate’: -9.0}}, {‘tax_type’: {‘account_name’: ‘Output Tax…
File “apps/india_compliance/india_compliance/gst_india/overrides/company.py”, line 178, in update_gst_settings
gst_settings.save()
company = ‘OM Logistics’
input_account_names = [‘Input Tax CGST’, ‘Input Tax SGST’, ‘Input Tax IGST’]
output_account_names = [‘Output Tax CGST’, ‘Output Tax SGST’, ‘Output Tax IGST’]
purchase_rcm_accounts = [‘Input Tax CGST RCM’, ‘Input Tax SGST RCM’, ‘Input Tax IGST RCM’]
sales_rcm_accounts = [‘Output Tax CGST RCM’, ‘Output Tax SGST RCM’, ‘Output Tax IGST RCM’]
gst_settings = <GSTSettings: GST Settings>
existing_account_list =
gst_accounts = {‘Input Tax CGST’: ‘Input Tax CGST - OL’, ‘Input Tax IGST’: ‘Input Tax IGST - OL’, ‘Input Tax SGST’: ‘Input Tax SGST - OL’, ‘Input Tax CGST RCM’: ‘Input Tax CGST RCM - OL’, ‘Input Tax IGST RCM’: ‘Input Tax IGST RCM - OL’, ‘Input Tax SGST RCM’: ‘Input Tax SGST RCM - OL’, ‘Output Tax SGST’: ‘Output Tax SGST - OL’, ‘Output Tax CGST’: ‘Output Tax CGST - OL’, ‘Output Tax IGST’: ‘Output Tax IGST - OL’, ‘Output Tax SGST RCM’: ‘Output Tax SGST RCM - OL’, ‘Output Tax CGST RCM’: ‘Output Tax CGST RCM - OL’, ‘Output Tax IGST RCM’: ‘Output Tax IGST RCM - OL’}
File “apps/frappe/frappe/model/document.py”, line 342, in save
return self._save(*args, **kwargs)
self = <GSTSettings: GST Settings>
args = ()
kwargs = {}
File “apps/frappe/frappe/model/document.py”, line 378, in _save
self.run_before_save_methods()
self = <GSTSettings: GST Settings>
ignore_permissions = None
ignore_version = None
File “apps/frappe/frappe/model/document.py”, line 1103, in run_before_save_methods
self.run_method(“validate”)
self = <GSTSettings: GST Settings>
File “apps/frappe/frappe/model/document.py”, line 974, in run_method
out = Document.hook(fn)(self, *args, **kwargs)
self = <GSTSettings: GST Settings>
method = ‘validate’
args = ()
kwargs = {}
fn = <function Document.run_method..fn at 0x79ad0ea43f60>
File “apps/frappe/frappe/model/document.py”, line 1334, in composer
return composed(self, method, args, **kwargs)
self = <GSTSettings: GST Settings>
args = ()
kwargs = {}
hooks = [<function apply at 0x79ad0fbd4680>, <function check_for_running_deletion_job at 0x79ad0fbd6340>]
method = ‘validate’
doc_events = {'’: {‘on_update’: [‘frappe.desk.notifications.clear_doctype_notifications’, ‘frappe.workflow.doctype.workflow_action.workflow_action.process_workflow_actions’, ‘frappe.core.doctype.file.utils.attach_files_to_document’, ‘frappe.automation.doctype.assignment_rule.assignment_rule.apply’, ‘frappe.automation.doctype.assignment_rule.assignment_rule.update_due_date’, ‘frappe.core.doctype.user_type.user_type.apply_permissions_for_non_standard_user_type’], ‘after_rename’: [‘frappe.desk.notifications.clear_doctype_notifications’], ‘on_cancel’: [‘frappe.desk.notifications.clear_doctype_notifications’, ‘frappe.workflow.doctype.workflow_action.workflow_action.process_workflow_actions’, ‘frappe.automation.doctype.assignment_rule.assignment_rule.apply’], ‘on_trash’: [‘frappe.desk.notifications.clear_doctype_notifications’, ‘frappe.workflow.doctype.workflow_action.workflow_action.process_workflow_actions’], ‘on_update_after_submit’: ['frappe.workflow.doctype.workflow_action.workflow_action.process_w…
handler = ‘erpnext.setup.doctype.transaction_deletion_record.transaction_deletion_record.check_for_running_deletion_job’
composed = <function Document.hook..compose..runner at 0x79ad0e8db380>
compose = <function Document.hook..compose at 0x79ad0e8db740>
f = <function Document.run_method..fn at 0x79ad0ea43f60>
File “apps/frappe/frappe/model/document.py”, line 1316, in runner
add_to_return_value(self, fn(self, *args, **kwargs))
self = <GSTSettings: GST Settings>
method = ‘validate’
args = ()
kwargs = {}
add_to_return_value = <function Document.hook..add_to_return_value at 0x79ad0e8db920>
fn = <function Document.run_method..fn at 0x79ad0ea43f60>
hooks = (<function apply at 0x79ad0fbd4680>, <function check_for_running_deletion_job at 0x79ad0fbd6340>)
File “apps/frappe/frappe/model/document.py”, line 971, in fn
return method_object(*args, **kwargs)
self = <GSTSettings: GST Settings>
args = ()
kwargs = {}
method_object = <bound method GSTSettings.validate of <GSTSettings: GST Settings>>
method = ‘validate’
File “apps/india_compliance/india_compliance/gst_india/doctype/gst_settings/gst_settings.py”, line 44, in validate
self.validate_e_invoice_applicability_date()
self = <GSTSettings: GST Settings>
File “apps/india_compliance/india_compliance/gst_india/doctype/gst_settings/gst_settings.py”, line 206, in validate_e_invoice_applicability_date
self.validate_e_invoice_applicable_companies()
self = <GSTSettings: GST Settings>
File “apps/india_compliance/india_compliance/gst_india/doctype/gst_settings/gst_settings.py”, line 284, in validate_e_invoice_applicable_companies
frappe.throw(
self = <GSTSettings: GST Settings>
File “apps/frappe/frappe/init.py”, line 603, in throw
msgprint(
msg = ‘You must select at least one company to which e-Invoice is Applicable’
exc = <class ‘frappe.exceptions.ValidationError’>
title = None
is_minimizable = False
wide = False
as_list = False
primary_action = None
File “apps/frappe/frappe/init.py”, line 568, in msgprint
_raise_exception()
msg = ‘You must select at least one company to which e-Invoice is Applicable’
title = None
raise_exception = <class ‘frappe.exceptions.ValidationError’>
as_table = False
as_list = False
indicator = ‘red’
alert = False
primary_action = None
is_minimizable = False
wide = False
realtime = False
sys = <module ‘sys’ (built-in)>
_raise_exception = <function msgprint.._raise_exception at 0x79ad0e8db600>
inspect = <module ‘inspect’ from ‘/usr/lib/python3.12/inspect.py’>
out = {‘message’: ‘You must select at least one company to which e-Invoice is Applicable’, ‘title’: ‘Message’, ‘indicator’: ‘red’, ‘raise_exception’: 1, ‘__frappe_exc_id’: ‘618294ad308778ba6371d629c356b617524033d178e47a0e696720f3’}
File “apps/frappe/frappe/init.py”, line 519, in _raise_exception
raise exc
exc = ValidationError(‘You must select at least one company to which e-Invoice is Applicable’)
inspect = <module ‘inspect’ from ‘/usr/lib/python3.12/inspect.py’>
msg = ‘You must select at least one company to which e-Invoice is Applicable’
out = {‘message’: ‘You must select at least one company to which e-Invoice is Applicable’, ‘title’: ‘Message’, ‘indicator’: ‘red’, ‘raise_exception’: 1, ‘__frappe_exc_id’: ‘618294ad308778ba6371d629c356b617524033d178e47a0e696720f3’}
raise_exception = <class ‘frappe.exceptions.ValidationError’>
frappe.exceptions.ValidationError: You must select at least one company to which e-Invoice is Applicable
Thanks for the full traceback.
This PR should resolve the issue: