diff --git a/frappe/model/document.py b/frappe/model/document.py index 0993c19008..8449afe181 100644 --- a/frappe/model/document.py +++ b/frappe/model/document.py @@ -80,7 +80,12 @@ class Document(BaseDocument): def load_from_db(self): if not getattr(self, "_metaclass", False) and self.meta.issingle: - self.update(frappe.db.get_singles_dict(self.doctype)) + single_doc = frappe.db.get_singles_dict(self.doctype) + if not single_doc: + single_doc = frappe.new_doc(self.doctype).as_dict() + single_doc["name"] = self.doctype + + self.update(single_doc) self.init_valid_columns() self._fix_numeric_types() diff --git a/frappe/public/build.json b/frappe/public/build.json index 6c4b1acf11..f79dd07d7b 100644 --- a/frappe/public/build.json +++ b/frappe/public/build.json @@ -107,6 +107,7 @@ "public/js/frappe/ui/tags.js", "public/js/frappe/views/container.js", + "public/js/frappe/views/factory.js", "public/js/frappe/views/pageview.js", "public/js/frappe/views/doclistview.js", "public/js/frappe/views/sidebar_stats.js", diff --git a/frappe/public/js/frappe/views/container.js b/frappe/public/js/frappe/views/container.js index b391097e6a..363692a7e3 100644 --- a/frappe/public/js/frappe/views/container.js +++ b/frappe/public/js/frappe/views/container.js @@ -73,34 +73,3 @@ frappe.views.Container = Class.extend({ return this.page; } }); - -frappe.views.Factory = Class.extend({ - init: function(opts) { - $.extend(this, opts); - }, - show: function() { - var page_name = frappe.get_route_str(), - me = this; - if(frappe.pages[page_name]) { - frappe.container.change_to(frappe.pages[page_name]); - } else { - var route = frappe.get_route(); - if(route[1]) { - me.make(route); - } else { - frappe.show_not_found(route); - } - } - }, - make_page: function(double_column) { - var page_name = frappe.get_route_str(), - page = frappe.container.add_page(page_name); - - frappe.ui.make_app_page({ - parent: page, - single_column: !double_column - }); - frappe.container.change_to(page_name); - return page; - } -}) diff --git a/frappe/public/js/frappe/views/factory.js b/frappe/public/js/frappe/views/factory.js new file mode 100644 index 0000000000..73fa87ba11 --- /dev/null +++ b/frappe/public/js/frappe/views/factory.js @@ -0,0 +1,36 @@ +// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors +// MIT License. See license.txt + +frappe.provide('frappe.pages'); +frappe.provide('frappe.views'); + +frappe.views.Factory = Class.extend({ + init: function(opts) { + $.extend(this, opts); + }, + show: function() { + var page_name = frappe.get_route_str(), + me = this; + if(frappe.pages[page_name] && page_name.indexOf("Form/")===-1) { + frappe.container.change_to(frappe.pages[page_name]); + } else { + var route = frappe.get_route(); + if(route[1]) { + me.make(route); + } else { + frappe.show_not_found(route); + } + } + }, + make_page: function(double_column) { + var page_name = frappe.get_route_str(), + page = frappe.container.add_page(page_name); + + frappe.ui.make_app_page({ + parent: page, + single_column: !double_column + }); + frappe.container.change_to(page_name); + return page; + } +});