From a612e6e0b53d0eaa6e986918fc684b898485c671 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 11 May 2016 14:49:54 +0530 Subject: [PATCH] [added] set_desktop_icons in desktop.py --- frappe/commands.py | 5 +- frappe/core/page/desktop/desktop.js | 3 +- .../desk/doctype/desktop_icon/desktop_icon.py | 50 ++++++++++++++++--- .../doctype/desktop_icon/test_desktop_icon.py | 2 +- 4 files changed, 49 insertions(+), 11 deletions(-) diff --git a/frappe/commands.py b/frappe/commands.py index ca76ef1bc3..76729b8e67 100755 --- a/frappe/commands.py +++ b/frappe/commands.py @@ -467,7 +467,10 @@ def execute(context, method, args=None, kwargs=None): frappe.connect() if args: - args = eval(args) + try: + args = eval(args) + except NameError: + args = [args] else: args = () diff --git a/frappe/core/page/desktop/desktop.js b/frappe/core/page/desktop/desktop.js index 9672c1bd97..a9db0b6b5b 100644 --- a/frappe/core/page/desktop/desktop.js +++ b/frappe/core/page/desktop/desktop.js @@ -115,7 +115,8 @@ $.extend(frappe.desktop, { frappe.call({ method: 'frappe.desk.doctype.desktop_icon.desktop_icon.set_order', args: { - 'new_order': new_order + 'new_order': new_order, + 'user': frappe.session.user }, quiet: true }); diff --git a/frappe/desk/doctype/desktop_icon/desktop_icon.py b/frappe/desk/doctype/desktop_icon/desktop_icon.py index 70cc329998..1cc9bc4a3d 100644 --- a/frappe/desk/doctype/desktop_icon/desktop_icon.py +++ b/frappe/desk/doctype/desktop_icon/desktop_icon.py @@ -88,8 +88,12 @@ def get_desktop_icons(user=None): return user_icons @frappe.whitelist() -def add_user_icon(label, link, type, _doctype): +def add_user_icon(_doctype, label=None, link=None, type='link'): '''Add a new user desktop icon to the desktop''' + + if not label: label = frappe._(_doctype) + if not link: link = 'List/{0}'.format(_doctype) + icon_name = frappe.db.exists('Desktop Icon', {'standard': 0, 'link': link, 'owner': frappe.session.user}) if icon_name and frappe.db.get_value('Desktop Icon', icon_name, 'hidden'): frappe.db.set_value('Desktop Icon', icon_name, 'hidden', 0) @@ -102,7 +106,7 @@ def add_user_icon(label, link, type, _doctype): module = frappe.db.get_value('DocType', _doctype, 'module') module_icon = frappe.get_value('Desktop Icon', {'standard':1, 'module_name':module}, - ['icon', 'color', 'reverse'], as_dict=True) + ['name', 'icon', 'color', 'reverse'], as_dict=True) if not module_icon: module_icon = frappe._dict() @@ -111,7 +115,7 @@ def add_user_icon(label, link, type, _doctype): module_icon.reverse = 0 if (len(opts) > 1) else 1 try: - frappe.get_doc({ + new_icon = frappe.get_doc({ 'doctype': 'Desktop Icon', 'label': label, 'module_name': label, @@ -127,25 +131,55 @@ def add_user_icon(label, link, type, _doctype): }).insert(ignore_permissions=True) clear_desktop_icons_cache() - return 1 + return new_icon.name except Exception, e: raise e else: - return 1 + return icon_name @frappe.whitelist() -def set_order(new_order): - '''set new order by duplicating user icons''' +def set_order(new_order, user=None): + '''set new order by duplicating user icons (if user is set) or set global order''' if isinstance(new_order, basestring): new_order = json.loads(new_order) for i, module_name in enumerate(new_order): if module_name not in ('Explore',): - icon = get_user_copy(module_name, frappe.session.user) + if user: + icon = get_user_copy(module_name, user) + else: + icon = frappe.get_doc('Desktop Icon', {'module_name': module_name, 'standard': 1}) icon.db_set('idx', i) clear_desktop_icons_cache() +def set_desktop_icons(visible_list): + '''Resets all lists and makes only the given one standard, + if the desktop icon does not exist and the name is a DocType, then will create + an icon for the doctype''' + + # clear all custom + frappe.db.sql('delete from `tabDesktop Icon` where standard=0') + + # set all as blocked + frappe.db.sql('update `tabDesktop Icon` set blocked=1, hidden=0') + + # set as visible if present, or add icon + for module_name in visible_list: + if frappe.db.get_value('Desktop Icon', {'module_name': module_name}): + set_hidden(module_name, None, 0) + else: + if frappe.db.exists('DocType', module_name): + icon_name = add_user_icon(module_name) + + # make it standard + frappe.db.set_value('Desktop Icon', icon_name, 'standard', 1) + + # set the order + set_order(visible_list) + + clear_desktop_icons_cache() + def set_hidden_list(hidden_list, user=None): '''Sets property `hidden`=1 in **Desktop Icon** for given user. If user is None then it will set global values. diff --git a/frappe/desk/doctype/desktop_icon/test_desktop_icon.py b/frappe/desk/doctype/desktop_icon/test_desktop_icon.py index b0eed0bdaa..67b74d7cd3 100644 --- a/frappe/desk/doctype/desktop_icon/test_desktop_icon.py +++ b/frappe/desk/doctype/desktop_icon/test_desktop_icon.py @@ -74,7 +74,7 @@ class TestDesktopIcon(unittest.TestCase): def test_re_order_desktop_icons(self): icons = [d.module_name for d in get_desktop_icons()] m0, m1 = icons[0], icons[1] - set_order([m1, m0] + icons[2:]) + set_order([m1, m0] + icons[2:], frappe.session.user) # reload icons = [d.module_name for d in get_desktop_icons()]