@@ -0,0 +1,8 @@ | |||||
// Copyright (c) 2019, Frappe Technologies and contributors | |||||
// For license information, please see license.txt | |||||
frappe.ui.form.on('List View Setting', { | |||||
// refresh: function(frm) { | |||||
// } | |||||
}); |
@@ -0,0 +1,160 @@ | |||||
{ | |||||
"allow_copy": 0, | |||||
"allow_events_in_timeline": 0, | |||||
"allow_guest_to_view": 0, | |||||
"allow_import": 0, | |||||
"allow_rename": 0, | |||||
"autoname": "Prompt", | |||||
"beta": 0, | |||||
"creation": "2019-03-06 13:29:21.101860", | |||||
"custom": 0, | |||||
"docstatus": 0, | |||||
"doctype": "DocType", | |||||
"document_type": "", | |||||
"editable_grid": 1, | |||||
"engine": "InnoDB", | |||||
"fields": [ | |||||
{ | |||||
"allow_bulk_edit": 0, | |||||
"allow_in_quick_entry": 0, | |||||
"allow_on_submit": 0, | |||||
"bold": 0, | |||||
"collapsible": 0, | |||||
"columns": 0, | |||||
"fieldname": "disable_count", | |||||
"fieldtype": "Check", | |||||
"hidden": 0, | |||||
"ignore_user_permissions": 0, | |||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | |||||
"in_global_search": 0, | |||||
"in_list_view": 0, | |||||
"in_standard_filter": 0, | |||||
"label": "Disable Count", | |||||
"length": 0, | |||||
"no_copy": 0, | |||||
"permlevel": 0, | |||||
"precision": "", | |||||
"print_hide": 0, | |||||
"print_hide_if_no_value": 0, | |||||
"read_only": 0, | |||||
"remember_last_selected_value": 0, | |||||
"report_hide": 0, | |||||
"reqd": 0, | |||||
"search_index": 0, | |||||
"set_only_once": 0, | |||||
"translatable": 0, | |||||
"unique": 0 | |||||
}, | |||||
{ | |||||
"allow_bulk_edit": 0, | |||||
"allow_in_quick_entry": 0, | |||||
"allow_on_submit": 0, | |||||
"bold": 0, | |||||
"collapsible": 0, | |||||
"columns": 0, | |||||
"fieldname": "disable_sidebar_stats", | |||||
"fieldtype": "Check", | |||||
"hidden": 0, | |||||
"ignore_user_permissions": 0, | |||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | |||||
"in_global_search": 0, | |||||
"in_list_view": 0, | |||||
"in_standard_filter": 0, | |||||
"label": "Disable Sidebar Stats", | |||||
"length": 0, | |||||
"no_copy": 0, | |||||
"permlevel": 0, | |||||
"precision": "", | |||||
"print_hide": 0, | |||||
"print_hide_if_no_value": 0, | |||||
"read_only": 0, | |||||
"remember_last_selected_value": 0, | |||||
"report_hide": 0, | |||||
"reqd": 0, | |||||
"search_index": 0, | |||||
"set_only_once": 0, | |||||
"translatable": 0, | |||||
"unique": 0 | |||||
}, | |||||
{ | |||||
"allow_bulk_edit": 0, | |||||
"allow_in_quick_entry": 0, | |||||
"allow_on_submit": 0, | |||||
"bold": 0, | |||||
"collapsible": 0, | |||||
"columns": 0, | |||||
"fieldname": "disable_auto_refresh", | |||||
"fieldtype": "Check", | |||||
"hidden": 0, | |||||
"ignore_user_permissions": 0, | |||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | |||||
"in_global_search": 0, | |||||
"in_list_view": 0, | |||||
"in_standard_filter": 0, | |||||
"label": "Disable Auto Refresh", | |||||
"length": 0, | |||||
"no_copy": 0, | |||||
"permlevel": 0, | |||||
"precision": "", | |||||
"print_hide": 0, | |||||
"print_hide_if_no_value": 0, | |||||
"read_only": 0, | |||||
"remember_last_selected_value": 0, | |||||
"report_hide": 0, | |||||
"reqd": 0, | |||||
"search_index": 0, | |||||
"set_only_once": 0, | |||||
"translatable": 0, | |||||
"unique": 0 | |||||
} | |||||
], | |||||
"has_web_view": 0, | |||||
"hide_heading": 0, | |||||
"hide_toolbar": 0, | |||||
"idx": 0, | |||||
"image_view": 0, | |||||
"in_create": 0, | |||||
"is_submittable": 0, | |||||
"issingle": 0, | |||||
"istable": 0, | |||||
"max_attachments": 0, | |||||
"modified": "2019-03-06 13:40:59.533586", | |||||
"modified_by": "Administrator", | |||||
"module": "Desk", | |||||
"name": "List View Setting", | |||||
"name_case": "", | |||||
"owner": "Administrator", | |||||
"permissions": [ | |||||
{ | |||||
"amend": 0, | |||||
"cancel": 0, | |||||
"create": 1, | |||||
"delete": 1, | |||||
"email": 1, | |||||
"export": 0, | |||||
"if_owner": 0, | |||||
"import": 0, | |||||
"permlevel": 0, | |||||
"print": 1, | |||||
"read": 1, | |||||
"report": 0, | |||||
"role": "System Manager", | |||||
"set_user_permissions": 0, | |||||
"share": 1, | |||||
"submit": 0, | |||||
"write": 1 | |||||
} | |||||
], | |||||
"quick_entry": 0, | |||||
"read_only": 0, | |||||
"read_only_onload": 0, | |||||
"show_name_in_global_search": 0, | |||||
"sort_field": "modified", | |||||
"sort_order": "DESC", | |||||
"track_changes": 1, | |||||
"track_seen": 0, | |||||
"track_views": 0 | |||||
} |
@@ -0,0 +1,10 @@ | |||||
# -*- coding: utf-8 -*- | |||||
# Copyright (c) 2019, Frappe Technologies and contributors | |||||
# For license information, please see license.txt | |||||
from __future__ import unicode_literals | |||||
# import frappe | |||||
from frappe.model.document import Document | |||||
class ListViewSetting(Document): | |||||
pass |
@@ -0,0 +1,9 @@ | |||||
# -*- coding: utf-8 -*- | |||||
# Copyright (c) 2019, Frappe Technologies and Contributors | |||||
# See license.txt | |||||
from __future__ import unicode_literals | |||||
import unittest | |||||
class TestListViewSetting(unittest.TestCase): | |||||
pass |
@@ -0,0 +1,26 @@ | |||||
# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors | |||||
# MIT License. See license.txt | |||||
from __future__ import unicode_literals | |||||
import frappe | |||||
import json | |||||
@frappe.whitelist() | |||||
def get_list_settings(doctype): | |||||
try: | |||||
return frappe.get_cached_doc("List View Setting", doctype) | |||||
except frappe.DoesNotExistError: | |||||
frappe.clear_messages() | |||||
@frappe.whitelist() | |||||
def set_list_settings(doctype, values): | |||||
try: | |||||
doc = frappe.get_doc("List View Setting", doctype) | |||||
except frappe.DoesNotExistError: | |||||
doc = frappe.new_doc("List View Setting") | |||||
doc.name = doctype | |||||
frappe.clear_messages() | |||||
doc.update(json.loads(values)) | |||||
doc.save() |
@@ -258,6 +258,9 @@ frappe.views.ListSidebar = class ListSidebar { | |||||
get_stats() { | get_stats() { | ||||
var me = this; | var me = this; | ||||
if (this.list_view.list_view_settings.disable_sidebar_stats) { | |||||
return; | |||||
} | |||||
frappe.call({ | frappe.call({ | ||||
method: 'frappe.desk.reportview.get_sidebar_stats', | method: 'frappe.desk.reportview.get_sidebar_stats', | ||||
type: 'GET', | type: 'GET', | ||||
@@ -87,6 +87,11 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList { | |||||
} | } | ||||
this.patch_refresh_and_load_lib(); | this.patch_refresh_and_load_lib(); | ||||
return this.get_list_view_settings(); | |||||
} | |||||
get_list_view_settings() { | |||||
return frappe.call("frappe.desk.listview.get_list_settings", {doctype: this.doctype}).then(doc => this.list_view_settings = doc.message || {}); | |||||
} | } | ||||
on_sort_change(sort_by, sort_order) { | on_sort_change(sort_by, sort_order) { | ||||
@@ -289,7 +294,9 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList { | |||||
} | } | ||||
freeze() { | freeze() { | ||||
this.$result.find('.list-count').html(`<span>${__('Refreshing')}...</span>`); | |||||
if (!this.list_view_settings.disable_count) { | |||||
this.$result.find('.list-count').html(`<span>${__('Refreshing')}...</span>`); | |||||
} | |||||
} | } | ||||
get_args() { | get_args() { | ||||
@@ -375,10 +382,11 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList { | |||||
} | } | ||||
render_count() { | render_count() { | ||||
this.get_count_str() | |||||
.then(str => { | |||||
if (!this.list_view_settings.disable_count) { | |||||
this.get_count_str().then(str => { | |||||
this.$result.find('.list-count').html(`<span>${str}</span>`); | this.$result.find('.list-count').html(`<span>${str}</span>`); | ||||
}); | }); | ||||
} | |||||
} | } | ||||
render_tags() { | render_tags() { | ||||
@@ -824,6 +832,9 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList { | |||||
} | } | ||||
setup_realtime_updates() { | setup_realtime_updates() { | ||||
if (this.list_view_settings.disable_auto_refresh) { | |||||
return; | |||||
} | |||||
frappe.realtime.on('list_update', data => { | frappe.realtime.on('list_update', data => { | ||||
if (this.filter_area.is_being_edited()) { | if (this.filter_area.is_being_edited()) { | ||||
return; | return; | ||||
@@ -1026,9 +1037,33 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList { | |||||
}); | }); | ||||
} | } | ||||
if (frappe.user.has_role('System Manager')) { | |||||
items.push({ | |||||
label: __('Settings'), | |||||
action: () => this.show_list_settings(), | |||||
standard: true | |||||
}); | |||||
} | |||||
return items; | return items; | ||||
} | } | ||||
show_list_settings() { | |||||
frappe.model.with_doctype("List View Setting", () => { | |||||
let d = new frappe.ui.Dialog({ | |||||
title: __("Settings"), | |||||
fields: frappe.get_meta("List View Setting").fields | |||||
}); | |||||
d.set_values(this.list_view_settings); | |||||
d.show(); | |||||
d.set_primary_action(__('Save'), () => { | |||||
let values = d.get_values(); | |||||
frappe.call("frappe.desk.listview.set_list_settings", {doctype: this.doctype, values: values}); | |||||
Object.assign(this.list_view_settings, values); | |||||
d.hide(); | |||||
}); | |||||
}); | |||||
} | |||||
get_actions_menu_items() { | get_actions_menu_items() { | ||||
const doctype = this.doctype; | const doctype = this.doctype; | ||||
const actions_menu_items = []; | const actions_menu_items = []; | ||||
@@ -0,0 +1,53 @@ | |||||
# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors | |||||
# MIT License. See license.txt | |||||
from __future__ import unicode_literals | |||||
import unittest | |||||
import frappe | |||||
import json | |||||
from frappe.desk.listview import get_list_settings, set_list_settings | |||||
class TestListView(unittest.TestCase): | |||||
def setUp(self): | |||||
if frappe.db.exists("List View Setting", "DocType"): | |||||
frappe.delete_doc("List View Setting", "DocType") | |||||
def test_get_list_settings_without_settings(self): | |||||
self.assertIsNone(get_list_settings("DocType"), None) | |||||
def test_get_list_settings_with_default_settings(self): | |||||
frappe.get_doc({"doctype": "List View Setting", "name": "DocType"}).insert() | |||||
settings = get_list_settings("DocType") | |||||
self.assertIsNotNone(settings) | |||||
self.assertEqual(settings.disable_auto_refresh, 0) | |||||
self.assertEqual(settings.disable_count, 0) | |||||
self.assertEqual(settings.disable_sidebar_stats, 0) | |||||
def test_get_list_settings_with_non_default_settings(self): | |||||
frappe.get_doc({"doctype": "List View Setting", "name": "DocType", "disable_count": 1}).insert() | |||||
settings = get_list_settings("DocType") | |||||
self.assertIsNotNone(settings) | |||||
self.assertEqual(settings.disable_auto_refresh, 0) | |||||
self.assertEqual(settings.disable_count, 1) | |||||
self.assertEqual(settings.disable_sidebar_stats, 0) | |||||
def test_set_list_settings_without_settings(self): | |||||
set_list_settings("DocType", json.dumps({})) | |||||
settings = frappe.get_doc("List View Setting","DocType") | |||||
self.assertEqual(settings.disable_auto_refresh, 0) | |||||
self.assertEqual(settings.disable_count, 0) | |||||
self.assertEqual(settings.disable_sidebar_stats, 0) | |||||
def test_set_list_settings_with_existing_settings(self): | |||||
frappe.get_doc({"doctype": "List View Setting", "name": "DocType", "disable_count": 1}).insert() | |||||
set_list_settings("DocType", json.dumps({"disable_count": 0, "disable_auto_refresh": 1})) | |||||
settings = frappe.get_doc("List View Setting","DocType") | |||||
self.assertEqual(settings.disable_auto_refresh, 1) | |||||
self.assertEqual(settings.disable_count, 0) | |||||
self.assertEqual(settings.disable_sidebar_stats, 0) | |||||