From f9a3802f26b2ccdc0d3d94102a325b1e953867ba Mon Sep 17 00:00:00 2001 From: Marc Ramser Date: Wed, 19 Mar 2025 09:04:15 +0100 Subject: [PATCH] feat(projects): add option to hide timesheets for project users (#46173) * feat: add option to hide timesheets for project users * Added a new "Hide timesheets" checkbox field to Project User doctype that allows to control timesheet visibility for specific users. When enabled, the timesheets section will not be displayed on the project page for that user. * Update projects.html --- .../doctype/project_user/project_user.json | 183 +++++++++--------- erpnext/templates/pages/projects.html | 6 +- erpnext/templates/pages/projects.py | 5 +- 3 files changed, 101 insertions(+), 93 deletions(-) diff --git a/erpnext/projects/doctype/project_user/project_user.json b/erpnext/projects/doctype/project_user/project_user.json index 9e64d28f04..35217c3f5a 100644 --- a/erpnext/projects/doctype/project_user/project_user.json +++ b/erpnext/projects/doctype/project_user/project_user.json @@ -1,88 +1,97 @@ { - "actions": [], - "creation": "2016-03-25 02:52:19.283003", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "user", - "email", - "image", - "column_break_2", - "full_name", - "welcome_email_sent", - "view_attachments", - "section_break_5", - "project_status" - ], - "fields": [ - { - "fieldname": "user", - "fieldtype": "Link", - "in_list_view": 1, - "label": "User", - "options": "User", - "reqd": 1, - "search_index": 1 - }, - { - "fetch_from": "user.email", - "fieldname": "email", - "fieldtype": "Read Only", - "label": "Email" - }, - { - "fetch_from": "user.user_image", - "fieldname": "image", - "fieldtype": "Read Only", - "hidden": 1, - "in_global_search": 1, - "label": "Image" - }, - { - "fieldname": "column_break_2", - "fieldtype": "Column Break" - }, - { - "fetch_from": "user.full_name", - "fieldname": "full_name", - "fieldtype": "Read Only", - "in_list_view": 1, - "label": "Full Name" - }, - { - "default": "0", - "fieldname": "welcome_email_sent", - "fieldtype": "Check", - "label": "Welcome email sent" - }, - { - "columns": 2, - "default": "0", - "fieldname": "view_attachments", - "fieldtype": "Check", - "in_list_view": 1, - "label": "View attachments" - }, - { - "fieldname": "section_break_5", - "fieldtype": "Section Break" - }, - { - "depends_on": "eval:parent.doctype == 'Project Update'", - "fieldname": "project_status", - "fieldtype": "Text", - "label": "Project Status" - } - ], - "istable": 1, - "links": [], - "modified": "2020-02-09 23:26:50.321417", - "modified_by": "Administrator", - "module": "Projects", - "name": "Project User", - "owner": "Administrator", - "permissions": [], - "sort_field": "modified", - "sort_order": "DESC" - } \ No newline at end of file + "actions": [], + "creation": "2016-03-25 02:52:19.283003", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "user", + "email", + "image", + "column_break_2", + "full_name", + "welcome_email_sent", + "view_attachments", + "hide_timesheets", + "section_break_5", + "project_status" + ], + "fields": [ + { + "fieldname": "user", + "fieldtype": "Link", + "in_list_view": 1, + "label": "User", + "options": "User", + "reqd": 1, + "search_index": 1 + }, + { + "fetch_from": "user.email", + "fieldname": "email", + "fieldtype": "Read Only", + "label": "Email" + }, + { + "fetch_from": "user.user_image", + "fieldname": "image", + "fieldtype": "Read Only", + "hidden": 1, + "in_global_search": 1, + "label": "Image" + }, + { + "fieldname": "column_break_2", + "fieldtype": "Column Break" + }, + { + "fetch_from": "user.full_name", + "fieldname": "full_name", + "fieldtype": "Read Only", + "in_list_view": 1, + "label": "Full Name" + }, + { + "default": "0", + "fieldname": "welcome_email_sent", + "fieldtype": "Check", + "label": "Welcome email sent" + }, + { + "columns": 2, + "default": "0", + "fieldname": "view_attachments", + "fieldtype": "Check", + "in_list_view": 1, + "label": "View attachments" + }, + { + "columns": 2, + "default": "0", + "fieldname": "hide_timesheets", + "fieldtype": "Check", + "label": "Hide timesheets" + }, + { + "fieldname": "section_break_5", + "fieldtype": "Section Break" + }, + { + "depends_on": "eval:parent.doctype == 'Project Update'", + "fieldname": "project_status", + "fieldtype": "Text", + "label": "Project Status" + } + ], + "istable": 1, + "links": [], + "modified": "2024-03-27 13:10:21.859474", + "modified_by": "Administrator", + "module": "Projects", + "name": "Project User", + "owner": "Administrator", + "permissions": [], + "sort_field": "creation", + "sort_order": "DESC", + "states": [] +} diff --git a/erpnext/templates/pages/projects.html b/erpnext/templates/pages/projects.html index 67854f484b..0bccb27e62 100644 --- a/erpnext/templates/pages/projects.html +++ b/erpnext/templates/pages/projects.html @@ -57,8 +57,8 @@ {{ empty_state(_("Task")) }} {% endif %} -

{{ _("Timesheets") }}

{% if doc.timesheets %} +

{{ _("Timesheets") }}

@@ -74,8 +74,6 @@ {% include "erpnext/templates/includes/projects/project_timesheets.html" %}
- {% else %} - {{ empty_state(_("Timesheet")) }} {% endif %} {% if doc.attachments %} @@ -136,4 +134,4 @@
-{% endmacro %} \ No newline at end of file +{% endmacro %} diff --git a/erpnext/templates/pages/projects.py b/erpnext/templates/pages/projects.py index 56c9cfd39c..b931d2d3e8 100644 --- a/erpnext/templates/pages/projects.py +++ b/erpnext/templates/pages/projects.py @@ -12,7 +12,7 @@ def get_context(context): project_user = frappe.db.get_value( "Project User", {"parent": frappe.form_dict.project, "user": frappe.session.user}, - ["user", "view_attachments"], + ["user", "view_attachments", "hide_timesheets"], as_dict=True, ) @@ -29,7 +29,8 @@ def get_context(context): project.name, start=0, item_status="open", search=frappe.form_dict.get("search") ) - project.timesheets = get_timesheets(project.name, start=0, search=frappe.form_dict.get("search")) + if project_user and not project_user.hide_timesheets: + project.timesheets = get_timesheets(project.name, start=0, search=frappe.form_dict.get("search")) if project_user and project_user.view_attachments: project.attachments = get_attachments(project.name) -- GitLab