blob: 4b3089b29166cbd4ac820322a8718c4738333daa [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 )
15 if frappe.session.user != "Administrator" and (
16 not project_user or frappe.session.user == "Guest"
17 ):
Kanchan Chauhana4ff5d32016-04-08 23:22:04 +053018 raise frappe.PermissionError
Faris Ansari82770d92019-07-16 09:40:09 +053019
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +053020 context.no_cache = 1
Kanchan Chauhan11638ba2016-04-20 16:20:49 +053021 context.show_sidebar = True
Ankush Menat494bd9e2022-03-28 18:52:46 +053022 project = frappe.get_doc("Project", frappe.form_dict.project)
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +053023
Ankush Menat494bd9e2022-03-28 18:52:46 +053024 project.has_permission("read")
Faris Ansari82770d92019-07-16 09:40:09 +053025
Ankush Menat494bd9e2022-03-28 18:52:46 +053026 project.tasks = get_tasks(
27 project.name, start=0, item_status="open", search=frappe.form_dict.get("search")
28 )
Rushabh Mehtab2269dd2016-03-23 18:28:50 +053029
Ankush Menat494bd9e2022-03-28 18:52:46 +053030 project.timesheets = get_timesheets(project.name, start=0, search=frappe.form_dict.get("search"))
Rushabh Mehtab2269dd2016-03-23 18:28:50 +053031
Faris Ansari82770d92019-07-16 09:40:09 +053032 if project_user and project_user.view_attachments:
JodeQ10dfd4a2018-09-10 13:40:43 +020033 project.attachments = get_attachments(project.name)
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +053034
35 context.doc = project
Rushabh Mehtab2269dd2016-03-23 18:28:50 +053036
37
Kanchan Chauhan2ad801c2016-03-22 16:00:41 +053038def get_tasks(project, start=0, search=None, item_status=None):
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +053039 filters = {"project": project}
40 if search:
41 filters["subject"] = ("like", "%{0}%".format(search))
Ankush Menat494bd9e2022-03-28 18:52:46 +053042 tasks = frappe.get_all(
43 "Task",
44 filters=filters,
45 fields=[
46 "name",
47 "subject",
48 "status",
49 "modified",
50 "_assign",
51 "exp_end_date",
52 "is_group",
53 "parent_task",
54 ],
55 limit_start=start,
56 limit_page_length=10,
57 )
Jannat Patel5a425112021-07-01 17:17:34 +053058 task_nest = []
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +053059 for task in tasks:
Jannat Patel5a425112021-07-01 17:17:34 +053060 if task.is_group:
61 child_tasks = list(filter(lambda x: x.parent_task == task.name, tasks))
62 if len(child_tasks):
63 task.children = child_tasks
64 task_nest.append(task)
65 return list(filter(lambda x: not x.parent_task, tasks))
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +053066
Ankush Menat494bd9e2022-03-28 18:52:46 +053067
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +053068@frappe.whitelist()
Rushabh Mehtac20c5362016-03-25 17:19:28 +053069def get_task_html(project, start=0, item_status=None):
Ankush Menat494bd9e2022-03-28 18:52:46 +053070 return frappe.render_template(
71 "erpnext/templates/includes/projects/project_tasks.html",
72 {
73 "doc": {
74 "name": project,
75 "project_name": project,
76 "tasks": get_tasks(project, start, item_status=item_status),
77 }
78 },
79 is_path=True,
80 )
81
Rushabh Mehtac20c5362016-03-25 17:19:28 +053082
Kanchan Chauhan6d76359c2016-07-05 12:12:39 +053083def get_timesheets(project, start=0, search=None):
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +053084 filters = {"project": project}
85 if search:
Kanchan Chauhan6d76359c2016-07-05 12:12:39 +053086 filters["activity_type"] = ("like", "%{0}%".format(search))
Rushabh Mehtab2269dd2016-03-23 18:28:50 +053087
Ankush Menat494bd9e2022-03-28 18:52:46 +053088 timesheets = frappe.get_all(
89 "Timesheet Detail",
90 filters=filters,
91 fields=["project", "activity_type", "from_time", "to_time", "parent"],
92 limit_start=start,
93 limit_page_length=10,
94 )
Kanchan Chauhan6d76359c2016-07-05 12:12:39 +053095 for timesheet in timesheets:
Ankush Menat494bd9e2022-03-28 18:52:46 +053096 info = frappe.get_all(
97 "Timesheet",
98 filters={"name": timesheet.parent},
99 fields=["name", "status", "modified", "modified_by"],
100 limit_start=start,
101 limit_page_length=10,
102 )
Jannat Patel5a425112021-07-01 17:17:34 +0530103 if len(info):
104 timesheet.update(info[0])
Kanchan Chauhan6d76359c2016-07-05 12:12:39 +0530105 return timesheets
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +0530106
Ankush Menat494bd9e2022-03-28 18:52:46 +0530107
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +0530108@frappe.whitelist()
Kanchan Chauhan6d76359c2016-07-05 12:12:39 +0530109def get_timesheet_html(project, start=0):
Ankush Menat494bd9e2022-03-28 18:52:46 +0530110 return frappe.render_template(
111 "erpnext/templates/includes/projects/project_timesheets.html",
112 {"doc": {"timesheets": get_timesheets(project, start)}},
113 is_path=True,
114 )
115
Rushabh Mehtab2269dd2016-03-23 18:28:50 +0530116
JodeQ10dfd4a2018-09-10 13:40:43 +0200117def get_attachments(project):
Ankush Menat494bd9e2022-03-28 18:52:46 +0530118 return frappe.get_all(
119 "File",
120 filters={"attached_to_name": project, "attached_to_doctype": "Project", "is_private": 0},
121 fields=["file_name", "file_url", "file_size"],
122 )