53 lines
No EOL
1.6 KiB
Python
53 lines
No EOL
1.6 KiB
Python
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
|
# MIT License. See license.txt
|
|
from __future__ import unicode_literals
|
|
|
|
import frappe
|
|
import json
|
|
from frappe.desk.form.linked_with import get_linked_docs, get_linked_doctypes
|
|
|
|
@frappe.whitelist()
|
|
def get_document_completion_status(doctypes, frm_doctype, frm_docname):
|
|
if isinstance(doctypes, basestring):
|
|
doctypes = json.loads(doctypes)
|
|
|
|
doc = frappe.get_doc(frm_doctype, frm_docname)
|
|
linkinfo = get_linked_doctypes(frm_doctype)
|
|
|
|
flow_completion = {}
|
|
|
|
if hasattr(doc, "prev_link_mapper"):
|
|
for doctype in doc.prev_link_mapper:
|
|
fieldname = doc.prev_link_mapper[doctype]["fieldname"]
|
|
lookup_doctype = doc.prev_link_mapper[doctype]["doctype"]
|
|
limit = doc.prev_link_mapper[doctype].get("limit") or 1
|
|
condition = make_condition(doc.prev_link_mapper[doctype].get("filters"))
|
|
|
|
if condition:
|
|
condition = "where {condition}".format(condition=condition)
|
|
else:
|
|
condition = ""
|
|
|
|
result = frappe.db.sql_list("select {fieldname} from `tab{doctype}` \
|
|
{condition} limit {limit}".format(fieldname=fieldname, doctype=lookup_doctype,
|
|
condition=condition, limit=limit))
|
|
|
|
if result:
|
|
flow_completion[doctype] = True
|
|
|
|
for doctype in doctypes:
|
|
if doctype not in flow_completion:
|
|
links = get_linked_docs(frm_doctype, frm_docname, linkinfo, for_doctype=doctype)
|
|
if links:
|
|
flow_completion[doctype] = True
|
|
|
|
return flow_completion
|
|
|
|
def make_condition(filters=None):
|
|
condition = []
|
|
if filters and isinstance(filters, list):
|
|
for cond in filters:
|
|
condition.append("`tab{0}`.{1} {2} '{3}'".format(*cond))
|
|
|
|
return " and ".join(condition)
|
|
|