diff --git a/frappe/desk/doctype/kanban_board/kanban_board.py b/frappe/desk/doctype/kanban_board/kanban_board.py index aa43d747e6..cc544c9f68 100644 --- a/frappe/desk/doctype/kanban_board/kanban_board.py +++ b/frappe/desk/doctype/kanban_board/kanban_board.py @@ -13,7 +13,7 @@ from six import iteritems class KanbanBoard(Document): def validate(self): self.validate_column_name() - + def validate_column_name(self): for column in self.columns: if not column.column_name: @@ -116,7 +116,7 @@ def update_order(board_name, order): @frappe.whitelist() -def quick_kanban_board(doctype, board_name, field_name): +def quick_kanban_board(doctype, board_name, field_name, project=None): '''Create new KanbanBoard quickly with default options''' doc = frappe.new_doc('Kanban Board') @@ -142,13 +142,8 @@ def quick_kanban_board(doctype, board_name, field_name): doc.reference_doctype = doctype doc.field_name = field_name - if doctype == 'Task': - project = frappe.new_doc('Project') - project.project_name = board_name - project.status = 'Open' - project.save() - - doc.filters = '[["Task","project","=","{0}"]]'.format(board_name) + if project: + doc.filters = '[["Task","project","=","{0}"]]'.format(project) if doctype in ['Note', 'ToDo']: doc.private = 1 @@ -193,7 +188,7 @@ def set_indicator(board_name, column_name, indicator): for column in board.columns: if column.column_name == column_name: column.indicator = indicator - + board.save() return board diff --git a/frappe/public/js/frappe/list/list_sidebar.js b/frappe/public/js/frappe/list/list_sidebar.js index f0a08ce190..963ac57b5e 100644 --- a/frappe/public/js/frappe/list/list_sidebar.js +++ b/frappe/public/js/frappe/list/list_sidebar.js @@ -162,34 +162,32 @@ frappe.views.ListSidebar = Class.extend({ } ]; + if(me.doctype === 'Task') { + fields.push({ + fieldtype: 'Link', + fieldname: 'project', + label: __('Project'), + options: 'Project' + }) + } + if(select_fields.length > 0) { fields = fields.concat([{ fieldtype: 'Select', fieldname: 'field_name', label: __('Columns based on'), options: select_fields.map(df => df.label).join('\n'), - default: select_fields[0] + default: select_fields[0], + depends_on: 'eval:doc.custom_column===0' }, { fieldtype: 'Check', fieldname: 'custom_column', label: __('Custom Column'), - default: 0, - onchange: function(e) { - var checked = d.get_value('custom_column'); - if(checked) { - $(d.body).find('.frappe-control[data-fieldname="field_name"]').hide(); - } else { - $(d.body).find('.frappe-control[data-fieldname="field_name"]').show(); - } - } + default: 0 }]); } - if(me.doctype === 'Task') { - fields[0].description = __('A new Project with this name will be created'); - } - if(['Note', 'ToDo'].includes(me.doctype)) { fields[0].description = __('This Kanban Board will be private'); } @@ -206,6 +204,9 @@ frappe.views.ListSidebar = Class.extend({ if(custom_column) { var field_name = 'kanban_column'; } else { + if (!values.field_name) { + frappe.throw(__('Please select Columns Based On')) + } var field_name = select_fields .find(df => df.label === values.field_name) @@ -214,7 +215,7 @@ frappe.views.ListSidebar = Class.extend({ me.add_custom_column_field(custom_column) .then(function(custom_column) { - return me.make_kanban_board(values.board_name, field_name) + return me.make_kanban_board(values.board_name, field_name, values.project) }) .then(function() { d.hide(); @@ -248,14 +249,15 @@ frappe.views.ListSidebar = Class.extend({ }); }); }, - make_kanban_board: function(board_name, field_name) { + make_kanban_board: function(board_name, field_name, project) { var me = this; return frappe.call({ method: 'frappe.desk.doctype.kanban_board.kanban_board.quick_kanban_board', args: { doctype: me.doctype, - board_name: board_name, - field_name: field_name + board_name, + field_name, + project }, callback: function(r) { var kb = r.message;