Hi there,
I’m currently working on an integration involving ERPNext, Frappe CRM, and Lending. In older versions of Frappe, we were able to switch between apps directly from the sidebar. However, in the newer versions, this behavior seems to have changed — instead of app switching, the desk now shows icons based on modules (as I understand it).
Since the CRM portal uses a separate Vue-based frontend, it still displays the older-style app switcher and allows switching between apps (as shown in Image 1).
The issue arises when I select the Lending app from this list — I get redirected to the Lending app, but it immediately throws an error (as shown in Image 2).
I’d appreciate some insight into whether this is:
an expected behavior due to changes in how app/module navigation works in newer Frappe versions,
a configuration issue on my side, or
a known bug on the Frappe/Lending side.
Any guidance on how to properly handle app switching in this setup, or how to resolve this error, would be greatly appreciated.
Error Message:
App Versions
{
"frappe": "16.0.0-dev",
"crm": "2.0.0-dev",
"erpnext": "16.0.0-dev",
"lending": "0.0.1",
"dreamlink": "0.0.1"
}
Route
Workspaces/Lending
Traceback
Traceback (most recent call last):
File "apps/frappe/frappe/app.py", line 121, in application
response = frappe.api.handle(request)
File "apps/frappe/frappe/api/__init__.py", line 63, in handle
data = endpoint(**arguments)
File "apps/frappe/frappe/api/v1.py", line 40, in handle_rpc_call
return frappe.handler.handle()
File "apps/frappe/frappe/handler.py", line 53, in handle
data = execute_cmd(cmd)
File "apps/frappe/frappe/handler.py", line 86, in execute_cmd
return frappe.call(method, **frappe.form_dict)
File "apps/frappe/frappe/__init__.py", line 1126, in call
return fn(*args, **newargs)
File "apps/frappe/frappe/utils/typing_validations.py", line 36, in wrapper
return func(*args, **kwargs)
File "apps/frappe/frappe/utils/dashboard.py", line 26, in wrapper
results = generate_and_cache_results(kwargs, function, cache_key, chart)
File "apps/frappe/frappe/utils/dashboard.py", line 41, in generate_and_cache_results
results = function(
File "apps/frappe/frappe/desk/doctype/dashboard_chart/dashboard_chart.py", line 136, in get
chart_config = get_chart_config(chart, filters, timespan, timegrain, from_date, to_date)
File "apps/frappe/frappe/desk/doctype/dashboard_chart/dashboard_chart.py", line 202, in get_chart_config
data = frappe.get_list(
File "apps/frappe/frappe/__init__.py", line 1359, in get_list
return frappe.model.qb_query.DatabaseQuery(doctype).execute(*args, **kwargs)
File "apps/frappe/frappe/model/qb_query.py", line 203, in execute
query = frappe.qb.get_query(**kwargs)
File "apps/frappe/frappe/query_builder/utils.py", line 65, in get_query
return Engine().get_query(*args, **kwargs)
File "apps/frappe/frappe/database/query.py", line 294, in get_query
self.apply_filters(filters)
File "apps/frappe/frappe/database/query.py", line 442, in apply_filters
self.apply_list_filters(
File "apps/frappe/frappe/database/query.py", line 496, in apply_list_filters
raise ValueError(f"Unknown filter format: {filter}")
ValueError: Unknown filter format: ['Loan', 'docstatus', '=', '1', False]
Request Data
{
"type": "POST",
"args": {
"chart_name": "New Loans",
"refresh": 1,
"time_interval": null,
"timespan": null,
"from_date": null,
"to_date": null,
"heatmap_year": null
},
"headers": {},
"error_handlers": {},
"url": "/api/method/frappe.desk.doctype.dashboard_chart.dashboard_chart.get",
"request_id": null
}
Response Data
{
"exception": "ValueError: Unknown filter format: ['Loan', 'docstatus', '=', '1', False]",
"exc_type": "ValueError"
}
Thank you
Heshan K

