feat: allow addition of buttons in list
This commit is contained in:
parent
a11128c6d0
commit
3ab2850b74
4 changed files with 80 additions and 12 deletions
|
|
@ -21,6 +21,7 @@
|
|||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "description_and_status",
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
|
|
@ -53,6 +54,7 @@
|
|||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"default": "Open",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "status",
|
||||
"fieldtype": "Select",
|
||||
"hidden": 0,
|
||||
|
|
@ -86,6 +88,7 @@
|
|||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"default": "Medium",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "priority",
|
||||
"fieldtype": "Select",
|
||||
"hidden": 0,
|
||||
|
|
@ -120,6 +123,7 @@
|
|||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "column_break_2",
|
||||
"fieldtype": "Column Break",
|
||||
"hidden": 0,
|
||||
|
|
@ -150,6 +154,7 @@
|
|||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "color",
|
||||
"fieldtype": "Color",
|
||||
"hidden": 0,
|
||||
|
|
@ -157,7 +162,7 @@
|
|||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Color",
|
||||
"length": 0,
|
||||
|
|
@ -182,6 +187,7 @@
|
|||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "date",
|
||||
"fieldtype": "Date",
|
||||
"hidden": 0,
|
||||
|
|
@ -189,7 +195,7 @@
|
|||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 1,
|
||||
"label": "Due Date",
|
||||
"length": 0,
|
||||
|
|
@ -215,6 +221,7 @@
|
|||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "owner",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
|
|
@ -247,6 +254,7 @@
|
|||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "description_section",
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
|
|
@ -279,6 +287,7 @@
|
|||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "description",
|
||||
"fieldtype": "Text Editor",
|
||||
"hidden": 0,
|
||||
|
|
@ -314,6 +323,7 @@
|
|||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "section_break_6",
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
|
|
@ -345,6 +355,7 @@
|
|||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "reference_type",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
|
|
@ -352,7 +363,7 @@
|
|||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Reference Type",
|
||||
"length": 0,
|
||||
|
|
@ -379,6 +390,7 @@
|
|||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "reference_name",
|
||||
"fieldtype": "Dynamic Link",
|
||||
"hidden": 0,
|
||||
|
|
@ -413,6 +425,7 @@
|
|||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "column_break_10",
|
||||
"fieldtype": "Column Break",
|
||||
"hidden": 0,
|
||||
|
|
@ -443,6 +456,7 @@
|
|||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "role",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
|
|
@ -477,6 +491,7 @@
|
|||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "assigned_by",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
|
|
@ -510,6 +525,7 @@
|
|||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_from": "assigned_by.full_name",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "assigned_by_full_name",
|
||||
"fieldtype": "Read Only",
|
||||
"hidden": 0,
|
||||
|
|
@ -543,6 +559,7 @@
|
|||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "sender",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 1,
|
||||
|
|
@ -575,6 +592,7 @@
|
|||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "assignment_rule",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
|
|
@ -603,17 +621,16 @@
|
|||
}
|
||||
],
|
||||
"has_web_view": 0,
|
||||
"hide_heading": 0,
|
||||
"hide_toolbar": 0,
|
||||
"icon": "fa fa-check",
|
||||
"idx": 2,
|
||||
"image_view": 0,
|
||||
"in_create": 0,
|
||||
"is_submittable": 0,
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2019-03-07 16:11:25.764549",
|
||||
"menu_index": 0,
|
||||
"modified": "2019-04-24 15:45:23.290491",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Desk",
|
||||
"name": "ToDo",
|
||||
|
|
@ -660,7 +677,6 @@
|
|||
],
|
||||
"quick_entry": 1,
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0,
|
||||
"search_fields": "description, reference_type, reference_name",
|
||||
"show_name_in_global_search": 0,
|
||||
"sort_order": "DESC",
|
||||
|
|
|
|||
|
|
@ -1,4 +1,7 @@
|
|||
frappe.listview_settings['ToDo'] = {
|
||||
hide_name_column: true,
|
||||
add_fields: ["reference_type", "reference_name"],
|
||||
|
||||
onload: function(me) {
|
||||
if (!frappe.route_options) {
|
||||
frappe.route_options = {
|
||||
|
|
@ -8,7 +11,22 @@ frappe.listview_settings['ToDo'] = {
|
|||
}
|
||||
me.page.set_title(__("To Do"));
|
||||
},
|
||||
hide_name_column: true,
|
||||
|
||||
button: {
|
||||
show: function(doc) {
|
||||
return doc.reference_name;
|
||||
},
|
||||
get_label: function(doc) {
|
||||
return __('Open');
|
||||
},
|
||||
get_description: function(doc) {
|
||||
return __('Open {0}', [`${doc.reference_type} ${doc.reference_name}`])
|
||||
},
|
||||
action: function(doc) {
|
||||
frappe.set_route('Form', doc.reference_type, doc.reference_name);
|
||||
}
|
||||
},
|
||||
|
||||
refresh: function(me) {
|
||||
if (me.todo_sidebar_setup) return;
|
||||
|
||||
|
|
@ -19,5 +37,4 @@ frappe.listview_settings['ToDo'] = {
|
|||
|
||||
me.todo_sidebar_setup = true;
|
||||
},
|
||||
add_fields: ["reference_type", "reference_name"],
|
||||
}
|
||||
|
|
@ -373,7 +373,10 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList {
|
|||
if (this.data.length > 0) {
|
||||
// append rows
|
||||
this.$result.append(
|
||||
this.data.map(doc => this.get_list_row_html(doc)).join('')
|
||||
this.data.map((doc, i) => {
|
||||
doc._idx = i;
|
||||
return this.get_list_row_html(doc);
|
||||
}).join('')
|
||||
);
|
||||
}
|
||||
this.on_row_checked();
|
||||
|
|
@ -473,7 +476,8 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList {
|
|||
}
|
||||
|
||||
get_list_row_html(doc) {
|
||||
return this.get_list_row_html_skeleton(this.get_left_html(doc), this.get_right_html(doc));
|
||||
return this.get_list_row_html_skeleton(this.get_left_html(doc),
|
||||
this.get_right_html(doc));
|
||||
}
|
||||
|
||||
get_list_row_html_skeleton(left = '', right = '') {
|
||||
|
|
@ -580,7 +584,7 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList {
|
|||
|
||||
get_meta_html(doc) {
|
||||
let html = '';
|
||||
if (doc[this.meta.title_field || ''] !== doc.name) {
|
||||
if (!this.settings.hide_name_column && doc[this.meta.title_field || ''] !== doc.name) {
|
||||
html += `
|
||||
<div class="level-item hidden-xs hidden-sm ellipsis">
|
||||
<a class="text-muted ellipsis" href="${this.get_form_link(doc)}">
|
||||
|
|
@ -589,6 +593,19 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList {
|
|||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
if (this.settings.button && this.settings.button.show(doc)) {
|
||||
html += `
|
||||
<div class="level-item hidden-xs">
|
||||
<button class="btn btn-action btn-default btn-xs"
|
||||
data-name="${doc.name}" data-idx="${doc._idx}"
|
||||
title="${this.settings.button.get_description(doc)}">
|
||||
${this.settings.button.get_label(doc)}
|
||||
</a>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
const modified = comment_when(doc.modified, true);
|
||||
|
||||
const last_assignee = JSON.parse(doc._assign || '[]').slice(-1)[0];
|
||||
|
|
@ -710,6 +727,7 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList {
|
|||
this.setup_check_events();
|
||||
this.setup_like();
|
||||
this.setup_realtime_updates();
|
||||
this.setup_action_handler();
|
||||
}
|
||||
|
||||
setup_filterable() {
|
||||
|
|
@ -762,6 +780,16 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList {
|
|||
});
|
||||
}
|
||||
|
||||
setup_action_handler() {
|
||||
this.$result.on('click', '.btn-action', (e) => {
|
||||
const $button = $(e.currentTarget);
|
||||
const doc = this.data[$button.attr('data-idx')];
|
||||
this.settings.button.action(doc);
|
||||
e.stopPropagation();
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
setup_check_events() {
|
||||
this.$result.on('change', 'input[type=checkbox]', e => {
|
||||
const $target = $(e.currentTarget);
|
||||
|
|
|
|||
|
|
@ -11,9 +11,16 @@ from frappe.utils import cint, get_fullname, getdate
|
|||
|
||||
class EnergyPointLog(Document):
|
||||
def validate(self):
|
||||
self.map_milestone_reference()
|
||||
if self.type in ['Appreciation', 'Criticism'] and self.user == self.owner:
|
||||
frappe.throw(_('You cannot give review points to yourself'))
|
||||
|
||||
def map_milestone_reference(self):
|
||||
# link energy point to the original reference, if set by milestone
|
||||
if self.reference_doctype == 'Milestone':
|
||||
self.reference_doctype, self.reference_name = frappe.db.get_value('Milestone', self.reference_name,
|
||||
['reference_type', 'reference_name'])
|
||||
|
||||
def after_insert(self):
|
||||
alert_dict = get_alert_dict(self)
|
||||
if alert_dict:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue