fix(minor): doctype layout loading for form

This commit is contained in:
Rushabh Mehta 2020-12-10 15:10:36 +05:30
parent b460de8202
commit 4141bad224
7 changed files with 40 additions and 47 deletions

View file

@ -16,7 +16,6 @@
"is_tree",
"editable_grid",
"quick_entry",
"route",
"cb01",
"track_changes",
"track_seen",
@ -72,6 +71,7 @@
"has_web_view",
"allow_guest_to_view",
"index_web_pages_for_search",
"route",
"is_published_field",
"advanced",
"engine"
@ -609,7 +609,7 @@
"link_fieldname": "reference_doctype"
}
],
"modified": "2020-12-07 11:48:57.395126",
"modified": "2020-12-10 15:10:09.227205",
"modified_by": "Administrator",
"module": "Core",
"name": "DocType",

View file

@ -42,7 +42,7 @@
],
"index_web_pages_for_search": 1,
"links": [],
"modified": "2020-12-04 12:29:12.838656",
"modified": "2020-12-10 15:01:04.352184",
"modified_by": "Administrator",
"module": "Custom",
"name": "DocType Layout",
@ -59,8 +59,13 @@
"role": "System Manager",
"share": 1,
"write": 1
},
{
"read": 1,
"role": "Guest"
}
],
"route": "doctype-layout",
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1

View file

@ -13,4 +13,3 @@ class DocTypeLayout(Document):
def validate(self):
if not self.route:
self.route = get_doctype_route(self.name)
frappe.cache().delete_value('doctype_name_map')

View file

@ -3,29 +3,5 @@
import frappe
@frappe.whitelist(allow_guest=True)
def get_doctype_name(name):
# translates the doctype name from url to name `sales-order` to `Sales Order`
# also supports document type layouts
# if with_layout is set: return the layout object too
def get_name_map():
name_map = {}
for d in frappe.get_all('DocType'):
name_map[get_doctype_route(d.name)] = frappe._dict(doctype = d.name)
for d in frappe.get_all('DocType Layout', fields = ['name', 'document_type']):
name_map[get_doctype_route(d.name)] = frappe._dict(doctype = d.document_type, doctype_layout = d.name)
return name_map
data = frappe._dict(name_map = frappe.cache().get_value('doctype_name_map', get_name_map).get(name, dict(doctype = name)))
if data.name_map.get('doctype_layout'):
# return the layout object
frappe.response.docs.append(frappe.get_doc('DocType Layout', data.name_map.get('doctype_layout')).as_dict())
return data
def get_doctype_route(name):
return name.lower().replace(' ', '-')

View file

@ -24,13 +24,10 @@ frappe.ui.form.Form = class FrappeForm {
this.docname = '';
this.doctype = doctype;
this.doctype_layout_name = doctype_layout_name;
if (doctype_layout_name) {
this.doctype_layout = frappe.get_doc('DocType Layout', doctype_layout_name);
}
this.in_form = in_form ? true : false;
this.hidden = false;
this.refresh_if_stale_for = 120;
var me = this;
this.opendocs = {};
this.custom_buttons = {};
this.sections = [];
@ -40,17 +37,8 @@ frappe.ui.form.Form = class FrappeForm {
this.pformat = {};
this.fetch_dict = {};
this.parent = parent;
this.doctype_layout = frappe.get_doc('DocType Layout', doctype_layout_name);
this.setup_meta(doctype);
// show in form instead of in dialog, when called using url (router.js)
this.in_form = in_form ? true : false;
// notify on rename
$(document).on('rename', function(event, dt, old_name, new_name) {
if(dt==me.doctype)
me.rename_notify(dt, old_name, new_name);
});
}
setup_meta() {
@ -118,6 +106,7 @@ frappe.ui.form.Form = class FrappeForm {
this.setup_file_drop();
this.setup_doctype_actions();
this.setup_docinfo_change_listener();
this.setup_notify_on_rename();
this.setup_done = true;
}
@ -224,6 +213,13 @@ frappe.ui.form.Form = class FrappeForm {
});
}
setup_notify_on_rename() {
$(document).on('rename', (ev, dt, old_name, new_name) => {
if(dt==this.doctype)
this.rename_notify(dt, old_name, new_name);
});
}
setup_file_drop() {
var me = this;
this.$wrapper.on('dragenter dragover', false)

View file

@ -12,8 +12,7 @@ frappe.views.FormFactory = class FormFactory extends frappe.views.Factory {
frappe.model.with_doctype(doctype, () => {
this.page = frappe.container.add_page("form/" + doctype_layout);
frappe.views.formview[doctype_layout] = this.page;
this.page.frm = new frappe.ui.form.Form(doctype, this.page, true, frappe.router.doctype_layout);
this.show_doc(route);
this.make_and_show(doctype, route);
});
} else {
this.show_doc(route);
@ -22,6 +21,22 @@ frappe.views.FormFactory = class FormFactory extends frappe.views.Factory {
this.setup_events();
}
make_and_show(doctype, route) {
if (frappe.router.doctype_layout) {
frappe.model.with_doc('DocType Layout', frappe.router.doctype_layout, () => {
this.make_form(doctype);
this.show_doc(route);
})
} else {
this.make_form(doctype);
this.show_doc(route);
}
}
make_form(doctype) {
this.page.frm = new frappe.ui.form.Form(doctype, this.page, true, frappe.router.doctype_layout);
}
setup_events() {
if (!this.initialized) {
$(document).on("page-change", function() {

View file

@ -25,8 +25,10 @@ def get_context(context):
redirect_to = get_home_page()
else:
redirect_to = "/app"
frappe.local.flags.redirect_location = redirect_to
raise frappe.Redirect
if redirect_to != 'login':
frappe.local.flags.redirect_location = redirect_to
raise frappe.Redirect
# get settings from site config
context.no_header = True