feat: virtual doctype

Virtual Doctype's data souurce can be anything a file or a secondary database table or an api
This commit is contained in:
Shridhar 2020-12-14 14:05:15 +05:30 committed by Chinmay D. Pai
parent 0e96a0a1dc
commit feed7884e2
No known key found for this signature in database
GPG key ID: 75507BE256F40CED
4 changed files with 18 additions and 9 deletions

View file

@ -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",

View file

@ -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

View file

@ -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):

View file

@ -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)