Kanchan Chauhan | b3fe6a4 | 2016-03-16 18:01:22 +0530 | [diff] [blame] | 1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors |
| 2 | # License: GNU General Public License v3. See license.txt |
| 3 | |
| 4 | from __future__ import unicode_literals |
Chillar Anand | 915b343 | 2021-09-02 16:44:59 +0530 | [diff] [blame] | 5 | |
Kanchan Chauhan | b3fe6a4 | 2016-03-16 18:01:22 +0530 | [diff] [blame] | 6 | import frappe |
Chillar Anand | 915b343 | 2021-09-02 16:44:59 +0530 | [diff] [blame] | 7 | |
Kanchan Chauhan | b3fe6a4 | 2016-03-16 18:01:22 +0530 | [diff] [blame] | 8 | |
| 9 | def get_context(context): |
JodeQ | 10dfd4a | 2018-09-10 13:40:43 +0200 | [diff] [blame] | 10 | project_user = frappe.db.get_value("Project User", {"parent": frappe.form_dict.project, "user": frappe.session.user} , ["user", "view_attachments"], as_dict= True) |
Faris Ansari | 82770d9 | 2019-07-16 09:40:09 +0530 | [diff] [blame] | 11 | if frappe.session.user != 'Administrator' and (not project_user or frappe.session.user == 'Guest'): |
Kanchan Chauhan | a4ff5d3 | 2016-04-08 23:22:04 +0530 | [diff] [blame] | 12 | raise frappe.PermissionError |
Faris Ansari | 82770d9 | 2019-07-16 09:40:09 +0530 | [diff] [blame] | 13 | |
Kanchan Chauhan | b3fe6a4 | 2016-03-16 18:01:22 +0530 | [diff] [blame] | 14 | context.no_cache = 1 |
Kanchan Chauhan | 11638ba | 2016-04-20 16:20:49 +0530 | [diff] [blame] | 15 | context.show_sidebar = True |
Kanchan Chauhan | b3fe6a4 | 2016-03-16 18:01:22 +0530 | [diff] [blame] | 16 | project = frappe.get_doc('Project', frappe.form_dict.project) |
| 17 | |
| 18 | project.has_permission('read') |
Faris Ansari | 82770d9 | 2019-07-16 09:40:09 +0530 | [diff] [blame] | 19 | |
Rushabh Mehta | c20c536 | 2016-03-25 17:19:28 +0530 | [diff] [blame] | 20 | project.tasks = get_tasks(project.name, start=0, item_status='open', |
Kanchan Chauhan | 239b351 | 2016-05-02 11:43:44 +0530 | [diff] [blame] | 21 | search=frappe.form_dict.get("search")) |
Rushabh Mehta | b2269dd | 2016-03-23 18:28:50 +0530 | [diff] [blame] | 22 | |
Kanchan Chauhan | 6d76359c | 2016-07-05 12:12:39 +0530 | [diff] [blame] | 23 | project.timesheets = get_timesheets(project.name, start=0, |
| 24 | search=frappe.form_dict.get("search")) |
Rushabh Mehta | b2269dd | 2016-03-23 18:28:50 +0530 | [diff] [blame] | 25 | |
Faris Ansari | 82770d9 | 2019-07-16 09:40:09 +0530 | [diff] [blame] | 26 | if project_user and project_user.view_attachments: |
JodeQ | 10dfd4a | 2018-09-10 13:40:43 +0200 | [diff] [blame] | 27 | project.attachments = get_attachments(project.name) |
Kanchan Chauhan | b3fe6a4 | 2016-03-16 18:01:22 +0530 | [diff] [blame] | 28 | |
| 29 | context.doc = project |
Rushabh Mehta | b2269dd | 2016-03-23 18:28:50 +0530 | [diff] [blame] | 30 | |
| 31 | |
Kanchan Chauhan | 2ad801c | 2016-03-22 16:00:41 +0530 | [diff] [blame] | 32 | def get_tasks(project, start=0, search=None, item_status=None): |
Kanchan Chauhan | b3fe6a4 | 2016-03-16 18:01:22 +0530 | [diff] [blame] | 33 | filters = {"project": project} |
| 34 | if search: |
| 35 | filters["subject"] = ("like", "%{0}%".format(search)) |
Rushabh Mehta | b2269dd | 2016-03-23 18:28:50 +0530 | [diff] [blame] | 36 | tasks = frappe.get_all("Task", filters=filters, |
Jannat Patel | 5a42511 | 2021-07-01 17:17:34 +0530 | [diff] [blame] | 37 | fields=["name", "subject", "status", "modified", "_assign", "exp_end_date", "is_group", "parent_task"], |
Rushabh Mehta | b2269dd | 2016-03-23 18:28:50 +0530 | [diff] [blame] | 38 | limit_start=start, limit_page_length=10) |
Jannat Patel | 5a42511 | 2021-07-01 17:17:34 +0530 | [diff] [blame] | 39 | task_nest = [] |
Kanchan Chauhan | b3fe6a4 | 2016-03-16 18:01:22 +0530 | [diff] [blame] | 40 | for task in tasks: |
Jannat Patel | 5a42511 | 2021-07-01 17:17:34 +0530 | [diff] [blame] | 41 | if task.is_group: |
| 42 | child_tasks = list(filter(lambda x: x.parent_task == task.name, tasks)) |
| 43 | if len(child_tasks): |
| 44 | task.children = child_tasks |
| 45 | task_nest.append(task) |
| 46 | return list(filter(lambda x: not x.parent_task, tasks)) |
Kanchan Chauhan | b3fe6a4 | 2016-03-16 18:01:22 +0530 | [diff] [blame] | 47 | |
| 48 | @frappe.whitelist() |
Rushabh Mehta | c20c536 | 2016-03-25 17:19:28 +0530 | [diff] [blame] | 49 | def get_task_html(project, start=0, item_status=None): |
Rushabh Mehta | b2269dd | 2016-03-23 18:28:50 +0530 | [diff] [blame] | 50 | return frappe.render_template("erpnext/templates/includes/projects/project_tasks.html", |
Rushabh Mehta | c20c536 | 2016-03-25 17:19:28 +0530 | [diff] [blame] | 51 | {"doc": { |
| 52 | "name": project, |
| 53 | "project_name": project, |
| 54 | "tasks": get_tasks(project, start, item_status=item_status)} |
| 55 | }, is_path=True) |
| 56 | |
Kanchan Chauhan | 6d76359c | 2016-07-05 12:12:39 +0530 | [diff] [blame] | 57 | def get_timesheets(project, start=0, search=None): |
Kanchan Chauhan | b3fe6a4 | 2016-03-16 18:01:22 +0530 | [diff] [blame] | 58 | filters = {"project": project} |
| 59 | if search: |
Kanchan Chauhan | 6d76359c | 2016-07-05 12:12:39 +0530 | [diff] [blame] | 60 | filters["activity_type"] = ("like", "%{0}%".format(search)) |
Rushabh Mehta | b2269dd | 2016-03-23 18:28:50 +0530 | [diff] [blame] | 61 | |
Kanchan Chauhan | 6d76359c | 2016-07-05 12:12:39 +0530 | [diff] [blame] | 62 | timesheets = frappe.get_all('Timesheet Detail', filters=filters, |
| 63 | fields=['project','activity_type','from_time','to_time','parent'], |
Rushabh Mehta | b2269dd | 2016-03-23 18:28:50 +0530 | [diff] [blame] | 64 | limit_start=start, limit_page_length=10) |
Kanchan Chauhan | 6d76359c | 2016-07-05 12:12:39 +0530 | [diff] [blame] | 65 | for timesheet in timesheets: |
Jannat Patel | 5a42511 | 2021-07-01 17:17:34 +0530 | [diff] [blame] | 66 | info = frappe.get_all('Timesheet', filters={"name": timesheet.parent}, |
| 67 | fields=['name','status','modified','modified_by'], |
Kanchan Chauhan | 6d76359c | 2016-07-05 12:12:39 +0530 | [diff] [blame] | 68 | limit_start=start, limit_page_length=10) |
Jannat Patel | 5a42511 | 2021-07-01 17:17:34 +0530 | [diff] [blame] | 69 | if len(info): |
| 70 | timesheet.update(info[0]) |
Kanchan Chauhan | 6d76359c | 2016-07-05 12:12:39 +0530 | [diff] [blame] | 71 | return timesheets |
Kanchan Chauhan | b3fe6a4 | 2016-03-16 18:01:22 +0530 | [diff] [blame] | 72 | |
| 73 | @frappe.whitelist() |
Kanchan Chauhan | 6d76359c | 2016-07-05 12:12:39 +0530 | [diff] [blame] | 74 | def get_timesheet_html(project, start=0): |
| 75 | return frappe.render_template("erpnext/templates/includes/projects/project_timesheets.html", |
| 76 | {"doc": {"timesheets": get_timesheets(project, start)}}, is_path=True) |
Rushabh Mehta | b2269dd | 2016-03-23 18:28:50 +0530 | [diff] [blame] | 77 | |
JodeQ | 10dfd4a | 2018-09-10 13:40:43 +0200 | [diff] [blame] | 78 | def get_attachments(project): |
| 79 | return frappe.get_all('File', filters= {"attached_to_name": project, "attached_to_doctype": 'Project', "is_private":0}, |
| 80 | fields=['file_name','file_url', 'file_size']) |