Quick Kanban Board

- dont create project implicitly, results in Deadlock most of the time
- add explicit field to set the project
This commit is contained in:
Faris Ansari 2018-05-14 12:43:28 +05:30
parent f717296a87
commit 4015238512
2 changed files with 25 additions and 28 deletions

View file

@ -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

View file

@ -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;