mirror of
https://github.com/frappe/erpnext.git
synced 2026-06-06 21:59:13 +00:00
fix: Add search field in project query
This commit is contained in:
@@ -34,6 +34,7 @@ class Task(NestedSet):
|
|||||||
self.validate_progress()
|
self.validate_progress()
|
||||||
self.validate_status()
|
self.validate_status()
|
||||||
self.update_depends_on()
|
self.update_depends_on()
|
||||||
|
self.validate_dependencies_for_template_task()
|
||||||
|
|
||||||
def validate_dates(self):
|
def validate_dates(self):
|
||||||
if self.exp_start_date and self.exp_end_date and getdate(self.exp_start_date) > getdate(self.exp_end_date):
|
if self.exp_start_date and self.exp_end_date and getdate(self.exp_start_date) > getdate(self.exp_end_date):
|
||||||
@@ -55,6 +56,9 @@ class Task(NestedSet):
|
|||||||
validate_project_dates(getdate(expected_end_date), self, "act_start_date", "act_end_date", "Actual")
|
validate_project_dates(getdate(expected_end_date), self, "act_start_date", "act_end_date", "Actual")
|
||||||
|
|
||||||
def validate_status(self):
|
def validate_status(self):
|
||||||
|
if self.is_template and self.status != "Template":
|
||||||
|
self.status = "Template"
|
||||||
|
|
||||||
if self.status!=self.get_db_value("status") and self.status == "Completed":
|
if self.status!=self.get_db_value("status") and self.status == "Completed":
|
||||||
for d in self.depends_on:
|
for d in self.depends_on:
|
||||||
if frappe.db.get_value("Task", d.task, "status") not in ("Completed", "Cancelled"):
|
if frappe.db.get_value("Task", d.task, "status") not in ("Completed", "Cancelled"):
|
||||||
@@ -72,10 +76,28 @@ class Task(NestedSet):
|
|||||||
if self.status == 'Completed':
|
if self.status == 'Completed':
|
||||||
self.progress = 100
|
self.progress = 100
|
||||||
|
|
||||||
|
def validate_dependencies_for_template_task(self):
|
||||||
|
if self.is_template:
|
||||||
|
self.validate_parent_template_task()
|
||||||
|
self.validate_depends_on_tasks()
|
||||||
|
|
||||||
|
def validate_parent_template_task(self):
|
||||||
|
if self.parent_task:
|
||||||
|
if not frappe.db.get_value("Task", self.parent_task, "is_template"):
|
||||||
|
parent_task_format = """<a href="#Form/Task/{0}">{0}</a>""".format(self.parent_task)
|
||||||
|
frappe.throw(_("Parent Task {0} is not a Template Task").format(parent_task_format))
|
||||||
|
|
||||||
|
def validate_depends_on_tasks(self):
|
||||||
|
if self.depends_on:
|
||||||
|
for task in self.depends_on:
|
||||||
|
if not frappe.db.get_value("Task", task.task, "is_template"):
|
||||||
|
dependent_task_format = """<a href="#Form/Task/{0}">{0}</a>""".format(task.task)
|
||||||
|
frappe.throw(_("Dependent Task {0} is not a Template Task").format(dependent_task_format))
|
||||||
|
|
||||||
def update_depends_on(self):
|
def update_depends_on(self):
|
||||||
depends_on_tasks = self.depends_on_tasks or ""
|
depends_on_tasks = self.depends_on_tasks or ""
|
||||||
for d in self.depends_on:
|
for d in self.depends_on:
|
||||||
if d.task and not d.task in depends_on_tasks:
|
if d.task and d.task not in depends_on_tasks:
|
||||||
depends_on_tasks += d.task + ","
|
depends_on_tasks += d.task + ","
|
||||||
self.depends_on_tasks = depends_on_tasks
|
self.depends_on_tasks = depends_on_tasks
|
||||||
|
|
||||||
@@ -161,7 +183,7 @@ class Task(NestedSet):
|
|||||||
def populate_depends_on(self):
|
def populate_depends_on(self):
|
||||||
if self.parent_task:
|
if self.parent_task:
|
||||||
parent = frappe.get_doc('Task', self.parent_task)
|
parent = frappe.get_doc('Task', self.parent_task)
|
||||||
if not self.name in [row.task for row in parent.depends_on]:
|
if self.name not in [row.task for row in parent.depends_on]:
|
||||||
parent.append("depends_on", {
|
parent.append("depends_on", {
|
||||||
"doctype": "Task Depends On",
|
"doctype": "Task Depends On",
|
||||||
"task": self.name,
|
"task": self.name,
|
||||||
@@ -196,17 +218,24 @@ def check_if_child_exists(name):
|
|||||||
@frappe.validate_and_sanitize_search_inputs
|
@frappe.validate_and_sanitize_search_inputs
|
||||||
def get_project(doctype, txt, searchfield, start, page_len, filters):
|
def get_project(doctype, txt, searchfield, start, page_len, filters):
|
||||||
from erpnext.controllers.queries import get_match_cond
|
from erpnext.controllers.queries import get_match_cond
|
||||||
return frappe.db.sql(""" select name from `tabProject`
|
meta = frappe.get_meta(doctype)
|
||||||
where %(key)s like %(txt)s
|
searchfields = meta.get_search_fields()
|
||||||
%(mcond)s
|
search_columns = ", " + ", ".join(searchfields) if searchfields else ''
|
||||||
order by name
|
search_cond = " or " + " or ".join([field + " like %(txt)s" for field in searchfields])
|
||||||
limit %(start)s, %(page_len)s""" % {
|
|
||||||
'key': searchfield,
|
return frappe.db.sql(""" select name {search_columns} from `tabProject`
|
||||||
'txt': frappe.db.escape('%' + txt + '%'),
|
where %(key)s like %(txt)s
|
||||||
'mcond':get_match_cond(doctype),
|
%(mcond)s
|
||||||
'start': start,
|
{search_condition}
|
||||||
'page_len': page_len
|
order by name
|
||||||
})
|
limit %(start)s, %(page_len)s""".format(search_columns = search_columns,
|
||||||
|
search_condition=search_cond), {
|
||||||
|
'key': searchfield,
|
||||||
|
'txt': '%' + txt + '%',
|
||||||
|
'mcond':get_match_cond(doctype),
|
||||||
|
'start': start,
|
||||||
|
'page_len': page_len
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
|
|||||||
Reference in New Issue
Block a user