blob: 0b084b49776aaf0a95278ed2792d28918a12e3e1 [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
4from __future__ import unicode_literals
5import frappe
6
7from frappe import _
8
9def get_context(context):
10 context.no_cache = 1
11
12 project = frappe.get_doc('Project', frappe.form_dict.project)
13
14 project.has_permission('read')
15
16 context.issues = frappe.get_all('Issue', filters={'project': project.project_name},
17 fields=['subject', 'opening_date', 'resolution_date', 'status', 'name', 'resolution_details','modified','modified_by'])
18
19 project.tasks = get_tasks(project.name, start=0, search=frappe.form_dict.get("q"))
20
21 project.timelogs = get_timelogs(project.name, start=0, search=frappe.form_dict.get("q"))
22
23 project.issues = get_issues(project.name, start=0, search=frappe.form_dict.get("q"))
24
25 project.timelines = get_timeline(project.project_name, start=0)
26
27
28
29 context.doc = project
30
31
32def get_timeline(project, start=10):
33 issue_names = '({0})'.format(", ".join(["'{0}'".format(i.name) for i in get_issues(project)]))
34
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +053035
Kanchan Chauhan2ad801c2016-03-22 16:00:41 +053036 timelines = frappe.db.sql("""
37 select
38 sender_full_name,
39 subject, communication_date, comment_type, name, creation, modified_by, reference_doctype, reference_name,
40 _liked_by, comment_type, _comments
41 from
42 tabCommunication
43 where
44 (reference_doctype='Project' and reference_name=%s)
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +053045 or (timeline_doctype='Project' and timeline_name=%s)
46 or (reference_doctype='Issue' and reference_name IN {issue_names})
Kanchan Chauhan2ad801c2016-03-22 16:00:41 +053047 order by
48 modified DESC limit {start}, {limit}""".format(
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +053049 issue_names=issue_names, start=start, limit=10),
Kanchan Chauhan2ad801c2016-03-22 16:00:41 +053050 (project, project), as_dict=True);
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +053051 for timeline in timelines:
52 timeline.user_image = frappe.db.get_value('User', timeline.modified_by, 'user_image')
53 return timelines
54
55@frappe.whitelist()
Kanchan Chauhan2ad801c2016-03-22 16:00:41 +053056def get_timelines_html(project, start=0):
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +053057 return frappe.render_template("erpnext/templates/includes/projects/timeline.html",
58 {"doc": {"timelines": get_timeline(project, start)}}, is_path=True)
59
60def get_issue_list(project):
61 return [issue.name for issue in get_issues(project)]
62
Kanchan Chauhan2ad801c2016-03-22 16:00:41 +053063def get_tasks(project, start=0, search=None, item_status=None):
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +053064 filters = {"project": project}
65 if search:
66 filters["subject"] = ("like", "%{0}%".format(search))
Kanchan Chauhan2ad801c2016-03-22 16:00:41 +053067 if item_status:
68 filters = {"status": item_status}
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +053069 tasks = frappe.get_all("Task", filters=filters,
70 fields=["name", "subject", "status", "exp_start_date", "exp_end_date", "priority"],
Kanchan Chauhan2ad801c2016-03-22 16:00:41 +053071 limit_start=start, limit_page_length=10)
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +053072
73 for task in tasks:
Kanchan Chauhane14389e2016-03-23 14:14:38 +053074 print task._comments
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +053075 task.todo = frappe.get_all('ToDo',filters={'reference_name':task.name, 'reference_type':'Task'},
76 fields=["assigned_by", "owner", "modified", "modified_by"])
77 if task.todo:
78 task.todo=task.todo[0]
79 task.todo.user_image = frappe.db.get_value('User', task.todo.owner, 'user_image')
Kanchan Chauhane14389e2016-03-23 14:14:38 +053080 if task._comments:
81 task.comment_count = len(json.loads(_comments or "[]"))
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +053082 return tasks
83
84@frappe.whitelist()
Kanchan Chauhan2ad801c2016-03-22 16:00:41 +053085def get_tasks_html(project, start=0, item_status=None):
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +053086 return frappe.render_template("erpnext/templates/includes/projects/project_tasks.html",
Kanchan Chauhan2ad801c2016-03-22 16:00:41 +053087 {"doc": {"tasks": get_tasks(project, start, item_status=item_status)}}, is_path=True)
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +053088
89
Kanchan Chauhan2ad801c2016-03-22 16:00:41 +053090def get_issues(project, start=0, search=None, item_status=None):
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +053091 filters = {"project": project}
92 if search:
93 filters["subject"] = ("like", "%{0}%".format(search))
Kanchan Chauhan2ad801c2016-03-22 16:00:41 +053094 if item_status:
95 filters = {"status": item_status}
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +053096 issues = frappe.get_all("Issue", filters=filters,
97 fields=["name", "subject", "status", "opening_date", "resolution_date", "resolution_details"],
98 order_by='modified desc',
Kanchan Chauhan2ad801c2016-03-22 16:00:41 +053099 limit_start=start, limit_page_length=10)
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +0530100
101 for issue in issues:
102 issue.todo = frappe.get_all('ToDo',filters={'reference_name':issue.name, 'reference_type':'Issue'},
103 fields=["assigned_by", "owner", "modified", "modified_by"])
104 if issue.todo:
105 issue.todo=issue.todo[0]
106 issue.todo.user_image = frappe.db.get_value('User', issue.todo.owner, 'user_image')
107
108 return issues
109
110@frappe.whitelist()
Kanchan Chauhan2ad801c2016-03-22 16:00:41 +0530111def get_issues_html(project, start=0, item_status=None):
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +0530112 return frappe.render_template("erpnext/templates/includes/projects/project_issues.html",
Kanchan Chauhan2ad801c2016-03-22 16:00:41 +0530113 {"doc": {"issues": get_issues(project, start, item_status=item_status)}}, is_path=True)
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +0530114
115def get_timelogs(project, start=0, search=None):
116 filters = {"project": project}
117 if search:
118 filters["title"] = ("like", "%{0}%".format(search))
119
120 timelogs = frappe.get_all('Time Log', filters=filters,
121 fields=['name','title','task','activity_type','from_time','to_time','hours','status','modified','modified_by'],
Kanchan Chauhan2ad801c2016-03-22 16:00:41 +0530122 limit_start=start, limit_page_length=10)
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +0530123 for timelog in timelogs:
124 timelog.user_image = frappe.db.get_value('User', timelog.modified_by, 'user_image')
125 return timelogs
126
127@frappe.whitelist()
128def get_timelogs_html(project, start=0):
129 return frappe.render_template("erpnext/templates/includes/projects/project_timelogs.html",
130 {"doc": {"timelogs": get_timelogs(project, start)}}, is_path=True)
131
132@frappe.whitelist()
Kanchan Chauhan2ad801c2016-03-22 16:00:41 +0530133def set_task_status(project, item_name):
134 task = frappe.get_doc("Task", item_name)
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +0530135 task.status = 'Closed'
136 task.save(ignore_permissions=True)
137
138@frappe.whitelist()
Kanchan Chauhan2ad801c2016-03-22 16:00:41 +0530139def set_issue_status(project, item_name):
140 issue = frappe.get_doc("Issue", item_name)
Kanchan Chauhanb3fe6a42016-03-16 18:01:22 +0530141 issue.status = 'Closed'
142 issue.save(ignore_permissions=True)
143
144