diff --git a/frappe/desk/doctype/kanban_board/kanban_board.js b/frappe/desk/doctype/kanban_board/kanban_board.js index f7892c8ee6..9dde5f119e 100644 --- a/frappe/desk/doctype/kanban_board/kanban_board.js +++ b/frappe/desk/doctype/kanban_board/kanban_board.js @@ -32,7 +32,9 @@ frappe.ui.form.on('Kanban Board', { field_name: function(frm) { var field = frappe.meta.get_field(frm.doc.reference_doctype, frm.doc.field_name); frm.doc.columns = []; - field.options.split('\n').forEach(function(o, i) { + field.options && field.options.split('\n').forEach(function(o, i) { + o = o.trim(); + if(!o) return; d = frm.add_child('columns'); d.column_name = o; }); diff --git a/frappe/desk/doctype/kanban_board/kanban_board.py b/frappe/desk/doctype/kanban_board/kanban_board.py index 3ecaf9e2c6..6913377af5 100644 --- a/frappe/desk/doctype/kanban_board/kanban_board.py +++ b/frappe/desk/doctype/kanban_board/kanban_board.py @@ -109,6 +109,8 @@ def quick_kanban_board(doctype, board_name, field_name): columns = options.split('\n') for column in columns: + if not column: + continue doc.append("columns", dict( column_name=column )) diff --git a/frappe/public/js/frappe/views/kanban/kanban_view.js b/frappe/public/js/frappe/views/kanban/kanban_view.js index dd4c4518b0..d33956cac4 100644 --- a/frappe/public/js/frappe/views/kanban/kanban_view.js +++ b/frappe/public/js/frappe/views/kanban/kanban_view.js @@ -801,26 +801,19 @@ frappe.provide("frappe.views"); function get_card_meta(opts) { var meta = frappe.get_meta(opts.doctype); var doc = frappe.model.get_new_doc(opts.doctype); - var field = null; - var quick_entry = true; + var title_field = null; + var quick_entry = false; var description_field = null; var due_date_field = null; if(meta.title_field) { - field = frappe.meta.get_field(opts.doctype, meta.title_field); + title_field = frappe.meta.get_field(opts.doctype, meta.title_field); } meta.fields.forEach(function (df) { - if (df.reqd && !doc[df.fieldname]) { - // missing mandatory - if (in_list(['Data', 'Text', 'Small Text', 'Text Editor'], df.fieldtype) && !field) { - // can be mapped to textarea - field = df; - quick_entry = false; - } else { - // second mandatory missing, use quick_entry - quick_entry = true; - } + if (in_list(['Data', 'Text', 'Small Text', 'Text Editor'], df.fieldtype) && !title_field) { + // can be mapped to textarea + title_field = df; } if (df.fieldtype === "Text Editor" && !description_field) { description_field = df; @@ -830,13 +823,21 @@ frappe.provide("frappe.views"); } }); - if(!field) { - field = frappe.meta.get_field(opts.doctype, 'name'); + // quick entry + var mandatory = meta.fields.filter(function(df) { + return df.reqd && !doc[df.fieldname]; + }); + if(mandatory.length > 1) { + quick_entry = true; + } + + if(!title_field) { + title_field = frappe.meta.get_field(opts.doctype, 'name'); } return { quick_entry: quick_entry, - title_field: field, + title_field: title_field, description_field: description_field, due_date_field: due_date_field, }