mirror of
https://github.com/frappe/erpnext.git
synced 2026-09-03 16:40:19 +00:00
[fixes] setup wizard and domainify for schools;
This commit is contained in:
@@ -4,86 +4,136 @@
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
|
||||
def get_domains():
|
||||
def get_domain(domain):
|
||||
'''Written as a function to prevent data mutation effects'''
|
||||
return {
|
||||
data = {
|
||||
'Manufacturing': {
|
||||
'desktop_icons': ['Item', 'BOM', 'Customer', 'Supplier', 'Sales Order',
|
||||
'Production Order', 'Stock Entry', 'Purchase Order', 'Task', 'Buying', 'Selling',
|
||||
'Accounts', 'HR', 'ToDo'],
|
||||
'remove_roles': ['Academics User'],
|
||||
'properties': [
|
||||
{'doctype': 'Item', 'fieldname': 'manufacturing', 'property': 'collapsible_depends_on', 'value': 'is_stock_item'},
|
||||
],
|
||||
'set_value': [
|
||||
['Stock Settings', None, 'show_barcode_field', 1]
|
||||
]
|
||||
],
|
||||
'remove_sidebar_items': ['/announcement', '/course', '/examination', '/fees']
|
||||
},
|
||||
|
||||
'Retail': {
|
||||
'desktop_icons': ['POS', 'Item', 'Customer', 'Sales Invoice', 'Purchase Order', 'Warranty Claim',
|
||||
'Accounts', 'Buying', 'ToDo'],
|
||||
'remove_roles': ['Manufacturing User', 'Manufacturing Manager'],
|
||||
'remove_roles': ['Manufacturing User', 'Manufacturing Manager', 'Academics User'],
|
||||
'properties': [
|
||||
{'doctype': 'Item', 'fieldname': 'manufacturing', 'property': 'hidden', 'value': 1},
|
||||
{'doctype': 'Customer', 'fieldname': 'credit_limit_section', 'property': 'hidden', 'value': 1},
|
||||
],
|
||||
'set_value': [
|
||||
['Stock Settings', None, 'show_barcode_field', 1]
|
||||
]
|
||||
],
|
||||
'remove_sidebar_items': ['/announcement', '/course', '/examination', '/fees']
|
||||
},
|
||||
|
||||
'Distribution': {
|
||||
'desktop_icons': ['Item', 'Customer', 'Supplier', 'Lead', 'Sales Order',
|
||||
'Sales Invoice', 'CRM', 'Selling', 'Buying', 'Stock', 'Accounts', 'HR', 'ToDo'],
|
||||
'remove_roles': ['Manufacturing User', 'Manufacturing Manager'],
|
||||
'remove_roles': ['Manufacturing User', 'Manufacturing Manager', 'Academics User'],
|
||||
'properties': [
|
||||
{'doctype': 'Item', 'fieldname': 'manufacturing', 'property': 'hidden', 'value': 1},
|
||||
],
|
||||
'set_value': [
|
||||
['Stock Settings', None, 'show_barcode_field', 1]
|
||||
]
|
||||
],
|
||||
'remove_sidebar_items': ['/announcement', '/course', '/examination', '/fees']
|
||||
},
|
||||
|
||||
'Services': {
|
||||
'desktop_icons': ['Project', 'Timesheet', 'Customer', 'Sales Order', 'Sales Invoice', 'Lead', 'Opportunity',
|
||||
'Expense Claim', 'Employee', 'HR', 'ToDo'],
|
||||
'remove_roles': ['Manufacturing User', 'Manufacturing Manager'],
|
||||
'remove_roles': ['Manufacturing User', 'Manufacturing Manager', 'Academics User'],
|
||||
'properties': [
|
||||
{'doctype': 'Item', 'fieldname': 'is_stock_item', 'property': 'default', 'value': 0},
|
||||
],
|
||||
'set_value': [
|
||||
['Stock Settings', None, 'show_barcode_field', 0]
|
||||
]
|
||||
}
|
||||
],
|
||||
'remove_sidebar_items': ['/announcement', '/course', '/examination', '/fees']
|
||||
},
|
||||
'Education': {
|
||||
'desktop_icons': ['Student', 'Program', 'Course', 'Student Group', 'Instructor',
|
||||
'Fees', 'ToDo', 'Schools'],
|
||||
'allow_roles': ['Academics User', 'Accounts User', 'Accounts Manager'],
|
||||
'allow_sidebar_items': ['/announcement', '/course', '/examination', '/fees']
|
||||
},
|
||||
}
|
||||
if not domain in data:
|
||||
raise 'Invalid Domain {0}'.format(domain)
|
||||
return frappe._dict(data[domain])
|
||||
|
||||
def setup_domain(domain):
|
||||
domains = get_domains()
|
||||
|
||||
if not domain in domains:
|
||||
return
|
||||
'''Setup roles, desktop icons, properties, values, portal sidebar menu based on domain'''
|
||||
data = get_domain(domain)
|
||||
setup_roles(data)
|
||||
setup_desktop_icons(data)
|
||||
setup_properties(data)
|
||||
set_values(data)
|
||||
setup_sidebar_items(data)
|
||||
frappe.clear_cache()
|
||||
|
||||
def setup_desktop_icons(data):
|
||||
'''set desktop icons form `data.desktop_icons`'''
|
||||
from frappe.desk.doctype.desktop_icon.desktop_icon import set_desktop_icons
|
||||
data = frappe._dict(domains[domain])
|
||||
|
||||
if data.remove_roles:
|
||||
for role in data.remove_roles:
|
||||
frappe.db.sql('delete from tabUserRole where role=%s', role)
|
||||
|
||||
if data.desktop_icons:
|
||||
set_desktop_icons(data.desktop_icons)
|
||||
|
||||
def setup_properties(data):
|
||||
if data.properties:
|
||||
for args in data.properties:
|
||||
frappe.make_property_setter(args)
|
||||
|
||||
def setup_roles(data):
|
||||
'''Add, remove roles from `data.allow_roles` or `data.remove_roles`'''
|
||||
def remove_role(role):
|
||||
frappe.db.sql('delete from tabUserRole where role=%s', role)
|
||||
|
||||
if data.remove_roles:
|
||||
for role in data.remove_roles:
|
||||
remove_role(role)
|
||||
|
||||
if data.allow_roles:
|
||||
# remove all roles other than allowed roles
|
||||
data.allow_roles += ['Administrator', 'Guest', 'System Manager']
|
||||
for role in frappe.get_all('Role'):
|
||||
if not (role.name in data.allow_roles):
|
||||
remove_role(role.name)
|
||||
|
||||
def set_values(data):
|
||||
'''set values based on `data.set_value`'''
|
||||
if data.set_value:
|
||||
for args in data.set_value:
|
||||
doc = frappe.get_doc(args[0], args[1] or args[0])
|
||||
doc.set(args[2], args[3])
|
||||
doc.save()
|
||||
|
||||
frappe.clear_cache()
|
||||
def setup_sidebar_items(data):
|
||||
'''Enable / disable sidebar items'''
|
||||
if data.allow_sidebar_items:
|
||||
# disable all
|
||||
frappe.db.sql('update `tabPortal Menu Item` set enabled=0')
|
||||
|
||||
# enable
|
||||
frappe.db.sql('''update `tabPortal Menu Item` set enabled=1
|
||||
where route in ({0})'''.format(', '.join(['"{0}"'.format(d) for d in data.allow_sidebar_items])))
|
||||
|
||||
if data.remove_sidebar_items:
|
||||
# disable all
|
||||
frappe.db.sql('update `tabPortal Menu Item` set enabled=1')
|
||||
|
||||
# enable
|
||||
frappe.db.sql('''update `tabPortal Menu Item` set enabled=0
|
||||
where route in ({0})'''.format(', '.join(['"{0}"'.format(d) for d in data.remove_sidebar_items])))
|
||||
|
||||
|
||||
def reset():
|
||||
from frappe.desk.page.setup_wizard.setup_wizard import add_all_roles_to
|
||||
|
||||
@@ -32,6 +32,15 @@ def setup_complete(args=None):
|
||||
create_items(args)
|
||||
create_customers(args)
|
||||
create_suppliers(args)
|
||||
|
||||
if args.domain.lower() == 'education':
|
||||
create_academic_term()
|
||||
create_academic_year()
|
||||
create_program(args)
|
||||
create_course(args)
|
||||
create_instructor(args)
|
||||
create_room(args)
|
||||
|
||||
frappe.local.message_log = []
|
||||
setup_domain(args.get('domain'))
|
||||
|
||||
@@ -493,3 +502,47 @@ def create_users(args):
|
||||
emp.flags.ignore_mandatory = True
|
||||
emp.insert(ignore_permissions = True)
|
||||
|
||||
def create_academic_term():
|
||||
at = ["Semester 1", "Semester 2", "Semester 3"]
|
||||
for d in at:
|
||||
academic_term = frappe.new_doc("Academic Term")
|
||||
academic_term.term_name = d
|
||||
academic_term.save()
|
||||
|
||||
def create_academic_year():
|
||||
ac = ["2013-14", "2014-15", "2015-16", "2016-17", "2017-18"]
|
||||
for d in ac:
|
||||
academic_year = frappe.new_doc("Academic Year")
|
||||
academic_year.academic_year_name = d
|
||||
academic_year.save()
|
||||
|
||||
def create_program(args):
|
||||
for i in xrange(1,6):
|
||||
if args.get("program_" + str(i)):
|
||||
program = frappe.new_doc("Program")
|
||||
program.program_name = args.get("program_" + str(i))
|
||||
program.save()
|
||||
|
||||
def create_course(args):
|
||||
for i in xrange(1,6):
|
||||
if args.get("course_" + str(i)):
|
||||
course = frappe.new_doc("Course")
|
||||
course.course_name = args.get("course_" + str(i))
|
||||
course.save()
|
||||
|
||||
def create_instructor(args):
|
||||
for i in xrange(1,6):
|
||||
if args.get("instructor_" + str(i)):
|
||||
instructor = frappe.new_doc("Instructor")
|
||||
instructor.instructor_name = args.get("instructor_" + str(i))
|
||||
instructor.save()
|
||||
|
||||
def create_room(args):
|
||||
for i in xrange(1,6):
|
||||
if args.get("room_" + str(i)):
|
||||
room = frappe.new_doc("Room")
|
||||
room.room_name = args.get("room_" + str(i))
|
||||
room.seating_capacity = args.get("room_capacity_" + str(i))
|
||||
room.save()
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user