seitime-frappe/frappe/desk/form/document_flow.py
2016-06-27 14:47:18 +05:30

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)