Rushabh Mehta | 2dd0581 | 2016-05-11 15:13:44 +0530 | [diff] [blame] | 1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors |
| 2 | # See license.txt |
| 3 | |
| 4 | from __future__ import unicode_literals |
| 5 | import frappe |
| 6 | |
Rushabh Mehta | 20038ad | 2016-07-21 16:01:59 +0530 | [diff] [blame] | 7 | def get_domain(domain): |
Anand Doshi | 0e4119b | 2016-06-28 21:37:28 +0530 | [diff] [blame] | 8 | '''Written as a function to prevent data mutation effects''' |
Rushabh Mehta | 20038ad | 2016-07-21 16:01:59 +0530 | [diff] [blame] | 9 | data = { |
Anand Doshi | 0e4119b | 2016-06-28 21:37:28 +0530 | [diff] [blame] | 10 | 'Manufacturing': { |
| 11 | 'desktop_icons': ['Item', 'BOM', 'Customer', 'Supplier', 'Sales Order', |
| 12 | 'Production Order', 'Stock Entry', 'Purchase Order', 'Task', 'Buying', 'Selling', |
| 13 | 'Accounts', 'HR', 'ToDo'], |
Rushabh Mehta | 20038ad | 2016-07-21 16:01:59 +0530 | [diff] [blame] | 14 | 'remove_roles': ['Academics User'], |
Anand Doshi | 0e4119b | 2016-06-28 21:37:28 +0530 | [diff] [blame] | 15 | 'properties': [ |
| 16 | {'doctype': 'Item', 'fieldname': 'manufacturing', 'property': 'collapsible_depends_on', 'value': 'is_stock_item'}, |
| 17 | ], |
| 18 | 'set_value': [ |
| 19 | ['Stock Settings', None, 'show_barcode_field', 1] |
Rushabh Mehta | 20038ad | 2016-07-21 16:01:59 +0530 | [diff] [blame] | 20 | ], |
| 21 | 'remove_sidebar_items': ['/announcement', '/course', '/examination', '/fees'] |
Anand Doshi | 0e4119b | 2016-06-28 21:37:28 +0530 | [diff] [blame] | 22 | }, |
Rushabh Mehta | d0cee1b | 2016-05-20 12:54:44 +0530 | [diff] [blame] | 23 | |
Anand Doshi | 0e4119b | 2016-06-28 21:37:28 +0530 | [diff] [blame] | 24 | 'Retail': { |
| 25 | 'desktop_icons': ['POS', 'Item', 'Customer', 'Sales Invoice', 'Purchase Order', 'Warranty Claim', |
| 26 | 'Accounts', 'Buying', 'ToDo'], |
Rushabh Mehta | 20038ad | 2016-07-21 16:01:59 +0530 | [diff] [blame] | 27 | 'remove_roles': ['Manufacturing User', 'Manufacturing Manager', 'Academics User'], |
Anand Doshi | 0e4119b | 2016-06-28 21:37:28 +0530 | [diff] [blame] | 28 | 'properties': [ |
| 29 | {'doctype': 'Item', 'fieldname': 'manufacturing', 'property': 'hidden', 'value': 1}, |
| 30 | {'doctype': 'Customer', 'fieldname': 'credit_limit_section', 'property': 'hidden', 'value': 1}, |
| 31 | ], |
| 32 | 'set_value': [ |
| 33 | ['Stock Settings', None, 'show_barcode_field', 1] |
Rushabh Mehta | 20038ad | 2016-07-21 16:01:59 +0530 | [diff] [blame] | 34 | ], |
| 35 | 'remove_sidebar_items': ['/announcement', '/course', '/examination', '/fees'] |
Anand Doshi | 0e4119b | 2016-06-28 21:37:28 +0530 | [diff] [blame] | 36 | }, |
Rushabh Mehta | d0cee1b | 2016-05-20 12:54:44 +0530 | [diff] [blame] | 37 | |
Anand Doshi | 0e4119b | 2016-06-28 21:37:28 +0530 | [diff] [blame] | 38 | 'Distribution': { |
| 39 | 'desktop_icons': ['Item', 'Customer', 'Supplier', 'Lead', 'Sales Order', |
| 40 | 'Sales Invoice', 'CRM', 'Selling', 'Buying', 'Stock', 'Accounts', 'HR', 'ToDo'], |
Rushabh Mehta | 20038ad | 2016-07-21 16:01:59 +0530 | [diff] [blame] | 41 | 'remove_roles': ['Manufacturing User', 'Manufacturing Manager', 'Academics User'], |
Anand Doshi | 0e4119b | 2016-06-28 21:37:28 +0530 | [diff] [blame] | 42 | 'properties': [ |
| 43 | {'doctype': 'Item', 'fieldname': 'manufacturing', 'property': 'hidden', 'value': 1}, |
| 44 | ], |
| 45 | 'set_value': [ |
| 46 | ['Stock Settings', None, 'show_barcode_field', 1] |
Rushabh Mehta | 20038ad | 2016-07-21 16:01:59 +0530 | [diff] [blame] | 47 | ], |
| 48 | 'remove_sidebar_items': ['/announcement', '/course', '/examination', '/fees'] |
Anand Doshi | 0e4119b | 2016-06-28 21:37:28 +0530 | [diff] [blame] | 49 | }, |
Rushabh Mehta | d0cee1b | 2016-05-20 12:54:44 +0530 | [diff] [blame] | 50 | |
Anand Doshi | 0e4119b | 2016-06-28 21:37:28 +0530 | [diff] [blame] | 51 | 'Services': { |
Rohit Waghchaure | e94d18b | 2016-07-06 20:12:58 +0530 | [diff] [blame] | 52 | 'desktop_icons': ['Project', 'Timesheet', 'Customer', 'Sales Order', 'Sales Invoice', 'Lead', 'Opportunity', |
Anand Doshi | 0e4119b | 2016-06-28 21:37:28 +0530 | [diff] [blame] | 53 | 'Expense Claim', 'Employee', 'HR', 'ToDo'], |
Rushabh Mehta | 20038ad | 2016-07-21 16:01:59 +0530 | [diff] [blame] | 54 | 'remove_roles': ['Manufacturing User', 'Manufacturing Manager', 'Academics User'], |
Anand Doshi | 0e4119b | 2016-06-28 21:37:28 +0530 | [diff] [blame] | 55 | 'properties': [ |
| 56 | {'doctype': 'Item', 'fieldname': 'is_stock_item', 'property': 'default', 'value': 0}, |
| 57 | ], |
| 58 | 'set_value': [ |
| 59 | ['Stock Settings', None, 'show_barcode_field', 0] |
Rushabh Mehta | 20038ad | 2016-07-21 16:01:59 +0530 | [diff] [blame] | 60 | ], |
| 61 | 'remove_sidebar_items': ['/announcement', '/course', '/examination', '/fees'] |
| 62 | }, |
| 63 | 'Education': { |
| 64 | 'desktop_icons': ['Student', 'Program', 'Course', 'Student Group', 'Instructor', |
| 65 | 'Fees', 'ToDo', 'Schools'], |
| 66 | 'allow_roles': ['Academics User', 'Accounts User', 'Accounts Manager'], |
| 67 | 'allow_sidebar_items': ['/announcement', '/course', '/examination', '/fees'] |
| 68 | }, |
Rushabh Mehta | 2dd0581 | 2016-05-11 15:13:44 +0530 | [diff] [blame] | 69 | } |
Rushabh Mehta | 20038ad | 2016-07-21 16:01:59 +0530 | [diff] [blame] | 70 | if not domain in data: |
| 71 | raise 'Invalid Domain {0}'.format(domain) |
| 72 | return frappe._dict(data[domain]) |
Rushabh Mehta | 2dd0581 | 2016-05-11 15:13:44 +0530 | [diff] [blame] | 73 | |
| 74 | def setup_domain(domain): |
Rushabh Mehta | 20038ad | 2016-07-21 16:01:59 +0530 | [diff] [blame] | 75 | '''Setup roles, desktop icons, properties, values, portal sidebar menu based on domain''' |
| 76 | data = get_domain(domain) |
| 77 | setup_roles(data) |
| 78 | setup_desktop_icons(data) |
| 79 | setup_properties(data) |
| 80 | set_values(data) |
| 81 | setup_sidebar_items(data) |
| 82 | frappe.clear_cache() |
Anand Doshi | 0e4119b | 2016-06-28 21:37:28 +0530 | [diff] [blame] | 83 | |
Rushabh Mehta | 20038ad | 2016-07-21 16:01:59 +0530 | [diff] [blame] | 84 | def setup_desktop_icons(data): |
| 85 | '''set desktop icons form `data.desktop_icons`''' |
Rushabh Mehta | 2dd0581 | 2016-05-11 15:13:44 +0530 | [diff] [blame] | 86 | from frappe.desk.doctype.desktop_icon.desktop_icon import set_desktop_icons |
Rushabh Mehta | 2dd0581 | 2016-05-11 15:13:44 +0530 | [diff] [blame] | 87 | if data.desktop_icons: |
| 88 | set_desktop_icons(data.desktop_icons) |
| 89 | |
Rushabh Mehta | 20038ad | 2016-07-21 16:01:59 +0530 | [diff] [blame] | 90 | def setup_properties(data): |
Rushabh Mehta | 2dd0581 | 2016-05-11 15:13:44 +0530 | [diff] [blame] | 91 | if data.properties: |
| 92 | for args in data.properties: |
| 93 | frappe.make_property_setter(args) |
| 94 | |
Rushabh Mehta | 20038ad | 2016-07-21 16:01:59 +0530 | [diff] [blame] | 95 | def setup_roles(data): |
| 96 | '''Add, remove roles from `data.allow_roles` or `data.remove_roles`''' |
| 97 | def remove_role(role): |
| 98 | frappe.db.sql('delete from tabUserRole where role=%s', role) |
| 99 | |
| 100 | if data.remove_roles: |
| 101 | for role in data.remove_roles: |
| 102 | remove_role(role) |
| 103 | |
| 104 | if data.allow_roles: |
| 105 | # remove all roles other than allowed roles |
| 106 | data.allow_roles += ['Administrator', 'Guest', 'System Manager'] |
| 107 | for role in frappe.get_all('Role'): |
| 108 | if not (role.name in data.allow_roles): |
| 109 | remove_role(role.name) |
| 110 | |
| 111 | def set_values(data): |
| 112 | '''set values based on `data.set_value`''' |
Rushabh Mehta | 48c7658 | 2016-05-12 16:26:01 +0530 | [diff] [blame] | 113 | if data.set_value: |
| 114 | for args in data.set_value: |
| 115 | doc = frappe.get_doc(args[0], args[1] or args[0]) |
| 116 | doc.set(args[2], args[3]) |
| 117 | doc.save() |
| 118 | |
Rushabh Mehta | 20038ad | 2016-07-21 16:01:59 +0530 | [diff] [blame] | 119 | def setup_sidebar_items(data): |
| 120 | '''Enable / disable sidebar items''' |
| 121 | if data.allow_sidebar_items: |
| 122 | # disable all |
| 123 | frappe.db.sql('update `tabPortal Menu Item` set enabled=0') |
| 124 | |
| 125 | # enable |
| 126 | frappe.db.sql('''update `tabPortal Menu Item` set enabled=1 |
| 127 | where route in ({0})'''.format(', '.join(['"{0}"'.format(d) for d in data.allow_sidebar_items]))) |
| 128 | |
| 129 | if data.remove_sidebar_items: |
| 130 | # disable all |
| 131 | frappe.db.sql('update `tabPortal Menu Item` set enabled=1') |
| 132 | |
| 133 | # enable |
| 134 | frappe.db.sql('''update `tabPortal Menu Item` set enabled=0 |
| 135 | where route in ({0})'''.format(', '.join(['"{0}"'.format(d) for d in data.remove_sidebar_items]))) |
| 136 | |
Rushabh Mehta | 2dd0581 | 2016-05-11 15:13:44 +0530 | [diff] [blame] | 137 | |
| 138 | def reset(): |
| 139 | from frappe.desk.page.setup_wizard.setup_wizard import add_all_roles_to |
| 140 | add_all_roles_to('Administrator') |
| 141 | |
Anand Doshi | 0e4119b | 2016-06-28 21:37:28 +0530 | [diff] [blame] | 142 | frappe.db.sql('delete from `tabProperty Setter`') |