blob: e3e26fc82a6fdc63eff85a75d9d5a31ce81e9dc7 [file] [log] [blame]
# 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", f"%{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", f"%{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"],
)