123 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 | |
| # License: GNU General Public License v3. See license.txt
 | |
| 
 | |
| 
 | |
| import frappe
 | |
| 
 | |
| 
 | |
| def get_context(context):
 | |
| 	project_user = frappe.db.get_value(
 | |
| 		"Project User",
 | |
| 		{"parent": frappe.form_dict.project, "user": frappe.session.user},
 | |
| 		["user", "view_attachments"],
 | |
| 		as_dict=True,
 | |
| 	)
 | |
| 	if frappe.session.user != "Administrator" and (
 | |
| 		not project_user or frappe.session.user == "Guest"
 | |
| 	):
 | |
| 		raise frappe.PermissionError
 | |
| 
 | |
| 	context.no_cache = 1
 | |
| 	context.show_sidebar = True
 | |
| 	project = frappe.get_doc("Project", frappe.form_dict.project)
 | |
| 
 | |
| 	project.has_permission("read")
 | |
| 
 | |
| 	project.tasks = get_tasks(
 | |
| 		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 project_user.view_attachments:
 | |
| 		project.attachments = get_attachments(project.name)
 | |
| 
 | |
| 	context.doc = project
 | |
| 
 | |
| 
 | |
| def get_tasks(project, start=0, search=None, item_status=None):
 | |
| 	filters = {"project": project}
 | |
| 	if search:
 | |
| 		filters["subject"] = ("like", "%{0}%".format(search))
 | |
| 	tasks = frappe.get_all(
 | |
| 		"Task",
 | |
| 		filters=filters,
 | |
| 		fields=[
 | |
| 			"name",
 | |
| 			"subject",
 | |
| 			"status",
 | |
| 			"modified",
 | |
| 			"_assign",
 | |
| 			"exp_end_date",
 | |
| 			"is_group",
 | |
| 			"parent_task",
 | |
| 		],
 | |
| 		limit_start=start,
 | |
| 		limit_page_length=10,
 | |
| 	)
 | |
| 	task_nest = []
 | |
| 	for task in tasks:
 | |
| 		if task.is_group:
 | |
| 			child_tasks = list(filter(lambda x: x.parent_task == task.name, tasks))
 | |
| 			if len(child_tasks):
 | |
| 				task.children = child_tasks
 | |
| 		task_nest.append(task)
 | |
| 	return list(filter(lambda x: not x.parent_task, tasks))
 | |
| 
 | |
| 
 | |
| @frappe.whitelist()
 | |
| def get_task_html(project, start=0, item_status=None):
 | |
| 	return frappe.render_template(
 | |
| 		"erpnext/templates/includes/projects/project_tasks.html",
 | |
| 		{
 | |
| 			"doc": {
 | |
| 				"name": project,
 | |
| 				"project_name": project,
 | |
| 				"tasks": get_tasks(project, start, item_status=item_status),
 | |
| 			}
 | |
| 		},
 | |
| 		is_path=True,
 | |
| 	)
 | |
| 
 | |
| 
 | |
| def get_timesheets(project, start=0, search=None):
 | |
| 	filters = {"project": project}
 | |
| 	if search:
 | |
| 		filters["activity_type"] = ("like", "%{0}%".format(search))
 | |
| 
 | |
| 	timesheets = frappe.get_all(
 | |
| 		"Timesheet Detail",
 | |
| 		filters=filters,
 | |
| 		fields=["project", "activity_type", "from_time", "to_time", "parent"],
 | |
| 		limit_start=start,
 | |
| 		limit_page_length=10,
 | |
| 	)
 | |
| 	for timesheet in timesheets:
 | |
| 		info = frappe.get_all(
 | |
| 			"Timesheet",
 | |
| 			filters={"name": timesheet.parent},
 | |
| 			fields=["name", "status", "modified", "modified_by"],
 | |
| 			limit_start=start,
 | |
| 			limit_page_length=10,
 | |
| 		)
 | |
| 		if len(info):
 | |
| 			timesheet.update(info[0])
 | |
| 	return timesheets
 | |
| 
 | |
| 
 | |
| @frappe.whitelist()
 | |
| def get_timesheet_html(project, start=0):
 | |
| 	return frappe.render_template(
 | |
| 		"erpnext/templates/includes/projects/project_timesheets.html",
 | |
| 		{"doc": {"timesheets": get_timesheets(project, start)}},
 | |
| 		is_path=True,
 | |
| 	)
 | |
| 
 | |
| 
 | |
| def get_attachments(project):
 | |
| 	return frappe.get_all(
 | |
| 		"File",
 | |
| 		filters={"attached_to_name": project, "attached_to_doctype": "Project", "is_private": 0},
 | |
| 		fields=["file_name", "file_url", "file_size"],
 | |
| 	)
 |