diff --git a/frappe/core/doctype/doctype/doctype.json b/frappe/core/doctype/doctype/doctype.json index 215ef8cd62..622ca94db8 100644 --- a/frappe/core/doctype/doctype/doctype.json +++ b/frappe/core/doctype/doctype/doctype.json @@ -22,6 +22,7 @@ "track_views", "custom", "beta", + "virtual_doctype", "fields_section_break", "fields", "sb1", @@ -528,6 +529,12 @@ "fieldname": "index_web_pages_for_search", "fieldtype": "Check", "label": "Index Web Pages for Search" + }, + { + "default": "0", + "fieldname": "virtual_doctype", + "fieldtype": "Check", + "label": "Virtual DocType" } ], "icon": "fa fa-bolt", @@ -609,7 +616,7 @@ "link_fieldname": "reference_doctype" } ], - "modified": "2020-09-24 13:13:58.227153", + "modified": "2020-12-14 12:48:33.752219", "modified_by": "Administrator", "module": "Core", "name": "DocType", diff --git a/frappe/desk/form/load.py b/frappe/desk/form/load.py index cacbd3c633..e045a22c91 100644 --- a/frappe/desk/form/load.py +++ b/frappe/desk/form/load.py @@ -27,9 +27,6 @@ def getdoc(doctype, name, user=None): if not name: name = doctype - if not frappe.db.exists(doctype, name): - return [] - try: doc = frappe.get_doc(doctype, name) run_onload(doc) @@ -43,7 +40,8 @@ def getdoc(doctype, name, user=None): # add file list doc.add_viewed() get_docinfo(doc) - + except frappe.DoesNotExistError: + return [] except Exception: frappe.errprint(frappe.utils.get_traceback()) raise diff --git a/frappe/desk/reportview.py b/frappe/desk/reportview.py index 9f5a5d84c8..6562e46a2b 100644 --- a/frappe/desk/reportview.py +++ b/frappe/desk/reportview.py @@ -12,15 +12,19 @@ from frappe import _ from six import string_types, StringIO from frappe.core.doctype.access_log.access_log import make_access_log from frappe.utils import cstr, format_duration +from frappe.model.base_document import get_controller @frappe.whitelist() @frappe.read_only() def get(): args = get_form_params() - - data = compress(execute(**args), args = args) - + # If virtual doctype get data from controller het_list method + if frappe.db.get_value("DocType", filters={"name": args.doctype}, fieldname="virtual_doctype"): + controller = get_controller(args.doctype) + data = compress(controller(args.doctype).get_list(args)) + else: + data = compress(execute(**args), args = args) return data def execute(doctype, *args, **kwargs): diff --git a/frappe/model/document.py b/frappe/model/document.py index 3789e20b19..8e7645153c 100644 --- a/frappe/model/document.py +++ b/frappe/model/document.py @@ -687,7 +687,7 @@ class Document(BaseDocument): `self.check_docstatus_transition`.""" conflict = False self._action = "save" - if not self.get('__islocal'): + if not self.get('__islocal') and not self.meta.virtual_doctype: if self.meta.issingle: modified = frappe.db.sql("""select value from tabSingles where doctype=%s and field='modified' for update""", self.doctype)