Просмотр исходного кода

Merge pull request #16509 from gavindsouza/kanban-fixes

fix: new Kanban Dialog
version-14
gavin 3 лет назад
committed by GitHub
Родитель
Сommit
8ffbef08ae
Не найден GPG ключ соответствующий данной подписи Идентификатор GPG ключа: 4AEE18F83AFDEB23
3 измененных файлов: 44 добавлений и 42 удалений
  1. +2
    -7
      frappe/desk/doctype/kanban_board/kanban_board.py
  2. +17
    -9
      frappe/public/js/frappe/list/list_view_select.js
  3. +25
    -26
      frappe/public/js/frappe/views/kanban/kanban_view.js

+ 2
- 7
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)

+ 17
- 9
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() {


+ 25
- 26
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) {
<p class="text-medium">
${__('No fields found that can be used as a Kanban Column. Use the Customize Form to add a Custom Field of type "Select".')}
</p>
<a class="btn btn-xs btn-default" href="/app/customize-form?doc_type=${doctype}">
${__('Customize Form')}
</a>
</div>
`
}];


Загрузка…
Отмена
Сохранить