103 lines
2.9 KiB
Python
103 lines
2.9 KiB
Python
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
|
# License: See license.txt
|
|
|
|
from __future__ import unicode_literals
|
|
|
|
import frappe, json, os
|
|
from frappe.utils import strip
|
|
from frappe.translate import (set_default_language, get_dict,
|
|
get_lang_dict, send_translations, get_language_from_code)
|
|
from frappe.geo.country_info import get_country_info
|
|
|
|
@frappe.whitelist()
|
|
def setup_complete(args):
|
|
"""Calls hooks for `setup_wizard_complete`, sets home page as `desktop`
|
|
and clears cache. If wizard breaks, calls `setup_wizard_exception` hook"""
|
|
args = process_args(args)
|
|
|
|
try:
|
|
if args.language and args.language != "english":
|
|
set_default_language(args.language)
|
|
|
|
frappe.clear_cache()
|
|
|
|
# update system settings
|
|
update_system_settings(args)
|
|
|
|
for method in frappe.get_hooks("setup_wizard_complete"):
|
|
frappe.get_attr(method)(args)
|
|
|
|
frappe.db.set_default('desktop:home_page', 'desktop')
|
|
frappe.db.commit()
|
|
frappe.clear_cache()
|
|
except:
|
|
if args:
|
|
traceback = frappe.get_traceback()
|
|
for hook in frappe.get_hooks("setup_wizard_exception"):
|
|
frappe.get_attr(hook)(traceback, args)
|
|
|
|
raise
|
|
|
|
else:
|
|
for hook in frappe.get_hooks("setup_wizard_success"):
|
|
frappe.get_attr(hook)(args)
|
|
|
|
def update_system_settings(args):
|
|
number_format = get_country_info(args.get("country")).get("number_format", "#,###.##")
|
|
|
|
# replace these as float number formats, as they have 0 precision
|
|
# and are currency number formats and not for floats
|
|
if number_format=="#.###":
|
|
number_format = "#.###,##"
|
|
elif number_format=="#,###":
|
|
number_format = "#,###.##"
|
|
|
|
system_settings = frappe.get_doc("System Settings", "System Settings")
|
|
system_settings.update({
|
|
"language": args.get("language"),
|
|
"time_zone": args.get("timezone"),
|
|
"float_precision": 3,
|
|
'date_format': frappe.db.get_value("Country", args.get("country"), "date_format"),
|
|
'number_format': number_format,
|
|
'enable_scheduler': 1 if not frappe.flags.in_test else 0
|
|
})
|
|
system_settings.save()
|
|
|
|
def process_args(args):
|
|
if not args:
|
|
args = frappe.local.form_dict
|
|
if isinstance(args, basestring):
|
|
args = json.loads(args)
|
|
|
|
args = frappe._dict(args)
|
|
|
|
# strip the whitespace
|
|
for key, value in args.items():
|
|
if isinstance(value, basestring):
|
|
args[key] = strip(value)
|
|
|
|
return args
|
|
|
|
@frappe.whitelist()
|
|
def load_messages(language):
|
|
"""Load translation messages for given langauge from all `setup_wizard_requires`
|
|
javascript files"""
|
|
frappe.clear_cache()
|
|
set_default_language(language)
|
|
m = get_dict("page", "setup-wizard")
|
|
|
|
for path in frappe.get_hooks("setup_wizard_requires"):
|
|
# common folder `assets` served from `sites/`
|
|
js_file_path = os.path.abspath(frappe.get_site_path("..", *path.strip("/").split("/")))
|
|
m.update(get_dict("jsfile", js_file_path))
|
|
|
|
m.update(get_dict("boot"))
|
|
send_translations(m)
|
|
return frappe.local.lang
|
|
|
|
@frappe.whitelist()
|
|
def load_languages():
|
|
return {
|
|
"default_language": get_language_from_code(frappe.local.lang),
|
|
"languages": sorted(get_lang_dict().keys())
|
|
}
|