diff --git a/frappe/desk/doctype/kanban_board/kanban_board.py b/frappe/desk/doctype/kanban_board/kanban_board.py index ed936bb79e..e864f68728 100644 --- a/frappe/desk/doctype/kanban_board/kanban_board.py +++ b/frappe/desk/doctype/kanban_board/kanban_board.py @@ -13,8 +13,9 @@ class KanbanBoard(Document): def validate(self): self.validate_column_name() - def on_update(self): + def on_change(self): frappe.clear_cache(doctype=self.reference_doctype) + frappe.cache().delete_keys("_user_settings") def before_insert(self): for column in self.columns: @@ -245,9 +246,3 @@ def set_indicator(board_name, column_name, indicator): board.save() return board - - -@frappe.whitelist() -def save_filters(board_name, filters): - """Save filters silently""" - frappe.db.set_value("Kanban Board", board_name, "filters", filters, update_modified=False) diff --git a/frappe/public/js/frappe/list/list_view_select.js b/frappe/public/js/frappe/list/list_view_select.js index 54e88ea05b..475019d6c1 100644 --- a/frappe/public/js/frappe/list/list_view_select.js +++ b/frappe/public/js/frappe/list/list_view_select.js @@ -262,19 +262,27 @@ frappe.views.ListViewSelect = class ListViewSelect { setup_kanban_boards() { const last_opened_kanban = - frappe.model.user_settings[this.doctype]["Kanban"] && frappe.model.user_settings[this.doctype]["Kanban"] - .last_kanban_board; - if (last_opened_kanban) { - frappe.set_route( - "list", + ?.last_kanban_board; + + if (!last_opened_kanban) { + return frappe.views.KanbanView.show_kanban_dialog( this.doctype, - "kanban", - last_opened_kanban + true ); - } else { - frappe.views.KanbanView.show_kanban_dialog(this.doctype, true); } + frappe.db.exists("Kanban Board", last_opened_kanban).then(exists => { + if (exists) { + frappe.set_route( + "list", + this.doctype, + "kanban", + last_opened_kanban + ); + } else { + frappe.views.KanbanView.show_kanban_dialog(this.doctype, true); + } + }); } get_calendars() { diff --git a/frappe/public/js/frappe/views/kanban/kanban_view.js b/frappe/public/js/frappe/views/kanban/kanban_view.js index 89d1d41836..3bf3a16189 100644 --- a/frappe/public/js/frappe/views/kanban/kanban_view.js +++ b/frappe/public/js/frappe/views/kanban/kanban_view.js @@ -107,13 +107,7 @@ frappe.views.KanbanView = class KanbanView extends frappe.views.ListView { save_kanban_board_filters() { const filters = this.filter_area.get(); - frappe.call({ - method: 'frappe.desk.doctype.kanban_board.kanban_board.save_filters', - args: { - board_name: this.board_name, - filters: filters - } - }).then(r => { + frappe.db.set_value("Kanban Board", this.board_name, "filters", filters).then(r => { if (r.exc) { frappe.show_alert({ indicator: 'red', @@ -253,25 +247,36 @@ frappe.views.KanbanView.show_kanban_dialog = function (doctype, show_existing) { } function new_kanban_dialog(kanbans, show_existing) { + /* Kanban dialog can show either "Save" or "Customize Form" option depending if any Select fields exist in the DocType for Kanban creation + */ if (dialog) return dialog; - const fields = get_fields_for_dialog(kanbans.map(kanban => kanban.name), show_existing); - - let primary_action_label = __('Save'); + const dialog_fields = get_fields_for_dialog(kanbans.map(kanban => kanban.name), show_existing); + const select_fields = frappe.get_meta(doctype).fields.filter(df => { + return (df.fieldtype === 'Select') && (df.fieldname !== 'kanban_column') + }); + const to_save = select_fields.length > 0; + const primary_action_label = to_save ? __('Save') : __('Customize Form'); let primary_action = () => { - const values = dialog.get_values(); - if (!values.selected_kanban || values.selected_kanban == 'Create New Board') { - make_kanban_board(values.board_name, values.field_name, values.project) - .then(() => dialog.hide(), (err) => frappe.msgprint(err)); + if (to_save) { + const values = dialog.get_values(); + if (!values.selected_kanban || values.selected_kanban == 'Create New Board') { + make_kanban_board(values.board_name, values.field_name, values.project).then( + () => dialog.hide(), + (err) => frappe.msgprint(err) + ); + } else { + frappe.set_route(kanbans.find(kanban => kanban.name == values.selected_kanban).route); + } } else { - frappe.set_route(kanbans.find(kanban => kanban.name == values.selected_kanban).route); + frappe.set_route("Form", "Customize Form", {"doc_type": doctype}); } }; dialog = new frappe.ui.Dialog({ title: __('New Kanban Board'), - fields, + fields: dialog_fields, primary_action_label, primary_action }); @@ -280,6 +285,9 @@ frappe.views.KanbanView.show_kanban_dialog = function (doctype, show_existing) { function get_fields_for_dialog(kanban_options, show_existing = false) { kanban_options.push('Create New Board'); + const select_fields = frappe.get_meta(doctype).fields.filter(df => { + return df.fieldtype === 'Select' && df.fieldname !== 'kanban_column'; + }); let fields = [ { @@ -290,6 +298,7 @@ frappe.views.KanbanView.show_kanban_dialog = function (doctype, show_existing) { depends_on: `eval: ${show_existing}`, mandatory_depends_on: `eval: ${show_existing}`, options: kanban_options, + default: kanban_options[0] }, { fieldname: 'new_kanban_board_sb', @@ -315,13 +324,6 @@ frappe.views.KanbanView.show_kanban_dialog = function (doctype, show_existing) { }); } - const select_fields = - frappe.get_meta(doctype).fields - .filter(df => { - return df.fieldtype === 'Select' && - df.fieldname !== 'kanban_column'; - }); - if (select_fields.length > 0) { fields.push({ fieldtype: 'Select', @@ -339,9 +341,6 @@ frappe.views.KanbanView.show_kanban_dialog = function (doctype, show_existing) {
${__('No fields found that can be used as a Kanban Column. Use the Customize Form to add a Custom Field of type "Select".')}
- - ${__('Customize Form')} - ` }];