From f368a5b64ebab10ed59787c838ba5d67a96ee1ff Mon Sep 17 00:00:00 2001 From: Krishna Pramod Shirsath <91021227+krishna-254@users.noreply.github.com> Date: Fri, 4 Sep 2026 11:34:29 +0530 Subject: [PATCH] fix(timesheet): handle empty allowed projects (#58745) --- erpnext/projects/doctype/timesheet/test_timesheet.py | 11 ++++++++++- erpnext/projects/doctype/timesheet/timesheet.py | 6 +++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/erpnext/projects/doctype/timesheet/test_timesheet.py b/erpnext/projects/doctype/timesheet/test_timesheet.py index ddc70c7df68..ef66e982053 100644 --- a/erpnext/projects/doctype/timesheet/test_timesheet.py +++ b/erpnext/projects/doctype/timesheet/test_timesheet.py @@ -1,6 +1,7 @@ # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors # See license.txt import datetime +from unittest.mock import patch import frappe from frappe.utils import add_to_date, now_datetime, nowdate @@ -8,12 +9,20 @@ from frappe.utils import add_to_date, now_datetime, nowdate from erpnext.accounts.doctype.sales_invoice.mapper import make_sales_return from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice from erpnext.projects.doctype.task.test_task import create_task -from erpnext.projects.doctype.timesheet.timesheet import OverlapError, make_sales_invoice +from erpnext.projects.doctype.timesheet.timesheet import ( + OverlapError, + get_projectwise_timesheet_data, + make_sales_invoice, +) from erpnext.setup.doctype.employee.test_employee import make_employee from erpnext.tests.utils import ERPNextTestSuite class TestTimesheet(ERPNextTestSuite): + def test_get_projectwise_timesheet_data_without_allowed_projects(self): + with patch("frappe.get_list", side_effect=[["TS-0001"], []]): + self.assertEqual(get_projectwise_timesheet_data(), []) + def test_timesheet_post_update(self): frappe.get_doc( { diff --git a/erpnext/projects/doctype/timesheet/timesheet.py b/erpnext/projects/doctype/timesheet/timesheet.py index a91e1c1b042..416ae017cf0 100644 --- a/erpnext/projects/doctype/timesheet/timesheet.py +++ b/erpnext/projects/doctype/timesheet/timesheet.py @@ -339,10 +339,14 @@ def get_projectwise_timesheet_data( & (tsd.is_billable == 1) & tsd.sales_invoice.isnull() & (tsd.parent.isin(allowed_timesheets)) - & ((tsd.project.isin(allowed_projects)) | (tsd.project.isnull())) ) ) + if allowed_projects: + query = query.where((tsd.project.isin(allowed_projects)) | (tsd.project.isnull())) + else: + query = query.where(tsd.project.isnull()) + if project: query = query.where(tsd.project == project) if parent: