blob: e3e26fc82a6fdc63eff85a75d9d5a31ce81e9dc7 [file] [log] [blame]
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +05301# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
2# License: GNU General Public License v3. See license.txt
3
Chillar Anand915b3432021-09-02 16:44:59 +05304
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +05305import frappe
Chillar Anand915b3432021-09-02 16:44:59 +05306
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +05307
8def get_context(context):
Ankush Menat494bd9e2022-03-28 18:52:46 +05309 project_user = frappe.db.get_value(
10 "Project User",
11 {"parent": frappe.form_dict.project, "user": frappe.session.user},
12 ["user", "view_attachments"],
13 as_dict=True,
14 )
Akhil Narang3effaf22024-03-27 11:37:26 +053015 if frappe.session.user != "Administrator" and (not project_user or frappe.session.user == "Guest"):
Kanchan Chauhana4ff5d32016-04-08 23:22:04 +053016 raise frappe.PermissionError
Faris Ansari82770d92019-07-16 09:40:09 +053017
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +053018 context.no_cache = 1
Kanchan Chauhan11638ba2016-04-20 16:20:49 +053019 context.show_sidebar = True
Ankush Menat494bd9e2022-03-28 18:52:46 +053020 project = frappe.get_doc("Project", frappe.form_dict.project)
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +053021
Ankush Menat494bd9e2022-03-28 18:52:46 +053022 project.has_permission("read")
Faris Ansari82770d92019-07-16 09:40:09 +053023
Ankush Menat494bd9e2022-03-28 18:52:46 +053024 project.tasks = get_tasks(
25 project.name, start=0, item_status="open", search=frappe.form_dict.get("search")
26 )
Rushabh Mehtab2269dd2016-03-23 18:28:50 +053027
Ankush Menat494bd9e2022-03-28 18:52:46 +053028 project.timesheets = get_timesheets(project.name, start=0, search=frappe.form_dict.get("search"))
Rushabh Mehtab2269dd2016-03-23 18:28:50 +053029
Faris Ansari82770d92019-07-16 09:40:09 +053030 if project_user and project_user.view_attachments:
JodeQ10dfd4a2018-09-10 13:40:43 +020031 project.attachments = get_attachments(project.name)
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +053032
33 context.doc = project
Rushabh Mehtab2269dd2016-03-23 18:28:50 +053034
35
Kanchan Chauhan2ad801c2016-03-22 16:00:41 +053036def get_tasks(project, start=0, search=None, item_status=None):
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +053037 filters = {"project": project}
38 if search:
Akhil Narang3effaf22024-03-27 11:37:26 +053039 filters["subject"] = ("like", f"%{search}%")
Ankush Menat494bd9e2022-03-28 18:52:46 +053040 tasks = frappe.get_all(
41 "Task",
42 filters=filters,
43 fields=[
44 "name",
45 "subject",
46 "status",
47 "modified",
48 "_assign",
49 "exp_end_date",
50 "is_group",
51 "parent_task",
52 ],
53 limit_start=start,
54 limit_page_length=10,
55 )
Jannat Patel5a425112021-07-01 17:17:34 +053056 task_nest = []
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +053057 for task in tasks:
Jannat Patel5a425112021-07-01 17:17:34 +053058 if task.is_group:
59 child_tasks = list(filter(lambda x: x.parent_task == task.name, tasks))
60 if len(child_tasks):
61 task.children = child_tasks
62 task_nest.append(task)
63 return list(filter(lambda x: not x.parent_task, tasks))
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +053064
Ankush Menat494bd9e2022-03-28 18:52:46 +053065
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +053066@frappe.whitelist()
Rushabh Mehtac20c5362016-03-25 17:19:28 +053067def get_task_html(project, start=0, item_status=None):
Ankush Menat494bd9e2022-03-28 18:52:46 +053068 return frappe.render_template(
69 "erpnext/templates/includes/projects/project_tasks.html",
70 {
71 "doc": {
72 "name": project,
73 "project_name": project,
74 "tasks": get_tasks(project, start, item_status=item_status),
75 }
76 },
77 is_path=True,
78 )
79
Rushabh Mehtac20c5362016-03-25 17:19:28 +053080
Kanchan Chauhan6d76359c2016-07-05 12:12:39 +053081def get_timesheets(project, start=0, search=None):
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +053082 filters = {"project": project}
83 if search:
Akhil Narang3effaf22024-03-27 11:37:26 +053084 filters["activity_type"] = ("like", f"%{search}%")
Rushabh Mehtab2269dd2016-03-23 18:28:50 +053085
Ankush Menat494bd9e2022-03-28 18:52:46 +053086 timesheets = frappe.get_all(
87 "Timesheet Detail",
88 filters=filters,
89 fields=["project", "activity_type", "from_time", "to_time", "parent"],
90 limit_start=start,
91 limit_page_length=10,
92 )
Kanchan Chauhan6d76359c2016-07-05 12:12:39 +053093 for timesheet in timesheets:
Ankush Menat494bd9e2022-03-28 18:52:46 +053094 info = frappe.get_all(
95 "Timesheet",
96 filters={"name": timesheet.parent},
97 fields=["name", "status", "modified", "modified_by"],
98 limit_start=start,
99 limit_page_length=10,
100 )
Jannat Patel5a425112021-07-01 17:17:34 +0530101 if len(info):
102 timesheet.update(info[0])
Kanchan Chauhan6d76359c2016-07-05 12:12:39 +0530103 return timesheets
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +0530104
Ankush Menat494bd9e2022-03-28 18:52:46 +0530105
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +0530106@frappe.whitelist()
Kanchan Chauhan6d76359c2016-07-05 12:12:39 +0530107def get_timesheet_html(project, start=0):
Ankush Menat494bd9e2022-03-28 18:52:46 +0530108 return frappe.render_template(
109 "erpnext/templates/includes/projects/project_timesheets.html",
110 {"doc": {"timesheets": get_timesheets(project, start)}},
111 is_path=True,
112 )
113
Rushabh Mehtab2269dd2016-03-23 18:28:50 +0530114
JodeQ10dfd4a2018-09-10 13:40:43 +0200115def get_attachments(project):
Ankush Menat494bd9e2022-03-28 18:52:46 +0530116 return frappe.get_all(
117 "File",
118 filters={"attached_to_name": project, "attached_to_doctype": "Project", "is_private": 0},
119 fields=["file_name", "file_url", "file_size"],
120 )