The license.txt file has been replaced with LICENSE for quite a while now. INAL but it didn't seem accurate to say "hey, checkout license.txt although there's no such file". Apart from this, there were inconsistencies in the headers altogether...this change brings consistency.
261 lines
7.5 KiB
Python
261 lines
7.5 KiB
Python
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
|
# License: MIT. See LICENSE
|
|
import frappe
|
|
import getpass
|
|
from frappe.utils.password import update_password
|
|
|
|
def before_install():
|
|
frappe.reload_doc("core", "doctype", "docfield")
|
|
frappe.reload_doc("core", "doctype", "docperm")
|
|
frappe.reload_doc("core", "doctype", "doctype_action")
|
|
frappe.reload_doc("core", "doctype", "doctype_link")
|
|
frappe.reload_doc("core", "doctype", "doctype")
|
|
|
|
def after_install():
|
|
# reset installed apps for re-install
|
|
frappe.db.set_global("installed_apps", '["frappe"]')
|
|
|
|
create_user_type()
|
|
install_basic_docs()
|
|
|
|
from frappe.core.doctype.file.file import make_home_folder
|
|
make_home_folder()
|
|
|
|
import_country_and_currency()
|
|
|
|
from frappe.core.doctype.language.language import sync_languages
|
|
sync_languages()
|
|
|
|
# save default print setting
|
|
print_settings = frappe.get_doc("Print Settings")
|
|
print_settings.save()
|
|
|
|
# all roles to admin
|
|
frappe.get_doc("User", "Administrator").add_roles(*frappe.db.sql_list("""select name from tabRole"""))
|
|
|
|
# update admin password
|
|
update_password("Administrator", get_admin_password())
|
|
|
|
if not frappe.conf.skip_setup_wizard:
|
|
frappe.db.set_default('desktop:home_page', 'setup-wizard')
|
|
|
|
# clear test log
|
|
with open(frappe.get_site_path('.test_log'), 'w') as f:
|
|
f.write('')
|
|
|
|
add_standard_navbar_items()
|
|
|
|
frappe.db.commit()
|
|
|
|
def create_user_type():
|
|
for user_type in ['System User', 'Website User']:
|
|
if not frappe.db.exists('User Type', user_type):
|
|
frappe.get_doc({
|
|
'doctype': 'User Type',
|
|
'name': user_type,
|
|
'is_standard': 1
|
|
}).insert(ignore_permissions=True)
|
|
|
|
def install_basic_docs():
|
|
# core users / roles
|
|
install_docs = [
|
|
{'doctype':'User', 'name':'Administrator', 'first_name':'Administrator',
|
|
'email':'admin@example.com', 'enabled':1, "is_admin": 1,
|
|
'roles': [{'role': 'Administrator'}],
|
|
'thread_notify': 0, 'send_me_a_copy': 0
|
|
},
|
|
{'doctype':'User', 'name':'Guest', 'first_name':'Guest',
|
|
'email':'guest@example.com', 'enabled':1, "is_guest": 1,
|
|
'roles': [{'role': 'Guest'}],
|
|
'thread_notify': 0, 'send_me_a_copy': 0
|
|
},
|
|
{'doctype': "Role", "role_name": "Report Manager"},
|
|
{'doctype': "Role", "role_name": "Translator"},
|
|
{'doctype': "Workflow State", "workflow_state_name": "Pending",
|
|
"icon": "question-sign", "style": ""},
|
|
{'doctype': "Workflow State", "workflow_state_name": "Approved",
|
|
"icon": "ok-sign", "style": "Success"},
|
|
{'doctype': "Workflow State", "workflow_state_name": "Rejected",
|
|
"icon": "remove", "style": "Danger"},
|
|
{'doctype': "Workflow Action Master", "workflow_action_name": "Approve"},
|
|
{'doctype': "Workflow Action Master", "workflow_action_name": "Reject"},
|
|
{'doctype': "Workflow Action Master", "workflow_action_name": "Review"},
|
|
{'doctype': "Email Domain", "domain_name":"example.com", "email_id": "account@example.com", "password": "pass", "email_server": "imap.example.com","use_imap": 1, "smtp_server": "smtp.example.com"},
|
|
{'doctype': "Email Account", "domain":"example.com", "email_id": "notifications@example.com", "default_outgoing": 1},
|
|
{'doctype': "Email Account", "domain":"example.com", "email_id": "replies@example.com", "default_incoming": 1}
|
|
]
|
|
|
|
for d in install_docs:
|
|
try:
|
|
frappe.get_doc(d).insert()
|
|
except frappe.NameError:
|
|
pass
|
|
|
|
def get_admin_password():
|
|
def ask_admin_password():
|
|
admin_password = getpass.getpass("Set Administrator password: ")
|
|
admin_password2 = getpass.getpass("Re-enter Administrator password: ")
|
|
if not admin_password == admin_password2:
|
|
print("\nPasswords do not match")
|
|
return ask_admin_password()
|
|
return admin_password
|
|
|
|
admin_password = frappe.conf.get("admin_password")
|
|
if not admin_password:
|
|
return ask_admin_password()
|
|
return admin_password
|
|
|
|
|
|
def before_tests():
|
|
if len(frappe.get_installed_apps()) > 1:
|
|
# don't run before tests if any other app is installed
|
|
return
|
|
|
|
frappe.db.truncate("Custom Field")
|
|
frappe.db.truncate("Event")
|
|
|
|
frappe.clear_cache()
|
|
|
|
# complete setup if missing
|
|
if not int(frappe.db.get_single_value('System Settings', 'setup_complete') or 0):
|
|
complete_setup_wizard()
|
|
|
|
frappe.db.commit()
|
|
frappe.clear_cache()
|
|
|
|
def complete_setup_wizard():
|
|
from frappe.desk.page.setup_wizard.setup_wizard import setup_complete
|
|
setup_complete({
|
|
"language" :"English",
|
|
"email" :"test@erpnext.com",
|
|
"full_name" :"Test User",
|
|
"password" :"test",
|
|
"country" :"United States",
|
|
"timezone" :"America/New_York",
|
|
"currency" :"USD"
|
|
})
|
|
|
|
def import_country_and_currency():
|
|
from frappe.geo.country_info import get_all
|
|
from frappe.utils import update_progress_bar
|
|
|
|
data = get_all()
|
|
|
|
for i, name in enumerate(data):
|
|
update_progress_bar("Updating country info", i, len(data))
|
|
country = frappe._dict(data[name])
|
|
add_country_and_currency(name, country)
|
|
|
|
print("")
|
|
|
|
# enable frequently used currencies
|
|
for currency in ("INR", "USD", "GBP", "EUR", "AED", "AUD", "JPY", "CNY", "CHF"):
|
|
frappe.db.set_value("Currency", currency, "enabled", 1)
|
|
|
|
def add_country_and_currency(name, country):
|
|
if not frappe.db.exists("Country", name):
|
|
frappe.get_doc({
|
|
"doctype": "Country",
|
|
"country_name": name,
|
|
"code": country.code,
|
|
"date_format": country.date_format or "dd-mm-yyyy",
|
|
"time_format": country.time_format or "HH:mm:ss",
|
|
"time_zones": "\n".join(country.timezones or []),
|
|
"docstatus": 0
|
|
}).db_insert()
|
|
|
|
if country.currency and not frappe.db.exists("Currency", country.currency):
|
|
frappe.get_doc({
|
|
"doctype": "Currency",
|
|
"currency_name": country.currency,
|
|
"fraction": country.currency_fraction,
|
|
"symbol": country.currency_symbol,
|
|
"fraction_units": country.currency_fraction_units,
|
|
"smallest_currency_fraction_value": country.smallest_currency_fraction_value,
|
|
"number_format": country.number_format,
|
|
"docstatus": 0
|
|
}).db_insert()
|
|
|
|
def add_standard_navbar_items():
|
|
navbar_settings = frappe.get_single("Navbar Settings")
|
|
|
|
standard_navbar_items = [
|
|
{
|
|
'item_label': 'My Profile',
|
|
'item_type': 'Route',
|
|
'route': '/app/user-profile',
|
|
'is_standard': 1
|
|
},
|
|
{
|
|
'item_label': 'My Settings',
|
|
'item_type': 'Action',
|
|
'action': 'frappe.ui.toolbar.route_to_user()',
|
|
'is_standard': 1
|
|
},
|
|
{
|
|
'item_label': 'Session Defaults',
|
|
'item_type': 'Action',
|
|
'action': 'frappe.ui.toolbar.setup_session_defaults()',
|
|
'is_standard': 1
|
|
},
|
|
{
|
|
'item_label': 'Reload',
|
|
'item_type': 'Action',
|
|
'action': 'frappe.ui.toolbar.clear_cache()',
|
|
'is_standard': 1
|
|
},
|
|
{
|
|
'item_label': 'View Website',
|
|
'item_type': 'Action',
|
|
'action': 'frappe.ui.toolbar.view_website()',
|
|
'is_standard': 1
|
|
},
|
|
{
|
|
'item_label': 'Toggle Full Width',
|
|
'item_type': 'Action',
|
|
'action': 'frappe.ui.toolbar.toggle_full_width()',
|
|
'is_standard': 1
|
|
},
|
|
{
|
|
'item_label': 'Background Jobs',
|
|
'item_type': 'Route',
|
|
'route': '/app/background_jobs',
|
|
'is_standard': 1
|
|
},
|
|
{
|
|
'item_type': 'Separator',
|
|
'is_standard': 1
|
|
},
|
|
{
|
|
'item_label': 'Logout',
|
|
'item_type': 'Action',
|
|
'action': 'frappe.app.logout()',
|
|
'is_standard': 1
|
|
}
|
|
]
|
|
|
|
standard_help_items = [
|
|
{
|
|
'item_label': 'About',
|
|
'item_type': 'Action',
|
|
'action': 'frappe.ui.toolbar.show_about()',
|
|
'is_standard': 1
|
|
},
|
|
{
|
|
'item_label': 'Keyboard Shortcuts',
|
|
'item_type': 'Action',
|
|
'action': 'frappe.ui.toolbar.show_shortcuts(event)',
|
|
'is_standard': 1
|
|
}
|
|
]
|
|
|
|
navbar_settings.settings_dropdown = []
|
|
navbar_settings.help_dropdown = []
|
|
|
|
for item in standard_navbar_items:
|
|
navbar_settings.append('settings_dropdown', item)
|
|
|
|
for item in standard_help_items:
|
|
navbar_settings.append('help_dropdown', item)
|
|
|
|
navbar_settings.save()
|