Create tax template based on country
diff --git a/erpnext/setup/setup_wizard/setup_wizard.py b/erpnext/setup/setup_wizard/setup_wizard.py
index 2c0c85c..7c65f88 100644
--- a/erpnext/setup/setup_wizard/setup_wizard.py
+++ b/erpnext/setup/setup_wizard/setup_wizard.py
@@ -68,48 +68,189 @@
 				frappe.message_log.pop()
 
 			pass
+ 
+def create_fiscal_year_and_company(args):
+	if (args.get('fy_start_date')):
+		curr_fiscal_year = get_fy_details(args.get('fy_start_date'), args.get('fy_end_date'))
+		frappe.get_doc({
+		"doctype":"Fiscal Year",
+		'year': curr_fiscal_year,
+		'year_start_date': args.get('fy_start_date'),
+		'year_end_date': args.get('fy_end_date'),
+		}).insert()
+		args["curr_fiscal_year"] = curr_fiscal_year
 
+	# Company
+	if (args.get('company_name')):
+		frappe.get_doc({
+			"doctype":"Company",
+			'company_name':args.get('company_name').strip(),
+			'abbr':args.get('company_abbr'),
+			'default_currency':args.get('currency'),
+			'country': args.get('country'),
+			'chart_of_accounts': args.get(('chart_of_accounts')),
+			'domain': args.get('domain')
+		}).insert()
+
+		#Enable shopping cart
+		enable_shopping_cart(args)
+
+		# Bank Account
+		create_bank_account(args)
+
+def enable_shopping_cart(args):
+	frappe.get_doc({
+		"doctype": "Shopping Cart Settings",
+		"enabled": 1,
+		'company': args.get('company_name').strip(),
+		'price_list': frappe.db.get_value("Price List", {"selling": 1}),
+		'default_customer_group': _("Individual"),
+		'quotation_series': "QTN-",
+	}).insert()
+
+def create_bank_account(args):
+	if args.get("bank_account"):
+		company_name = args.get('company_name').strip()
+		bank_account_group =  frappe.db.get_value("Account",
+			{"account_type": "Bank", "is_group": 1, "root_type": "Asset",
+				"company": company_name})
+		if bank_account_group:
+			bank_account = frappe.get_doc({
+				"doctype": "Account",
+				'account_name': args.get("bank_account"),
+				'parent_account': bank_account_group,
+				'is_group':0,
+				'company': company_name,
+				"account_type": "Bank",
+			})
+			try:
+				return bank_account.insert()
+			except RootNotEditable:
+				frappe.throw(_("Bank account cannot be named as {0}").format(args.get("bank_account")))
+			except frappe.DuplicateEntryError:
+				# bank account same as a CoA entry
+				pass
+
+def create_price_lists(args):
+	for pl_type, pl_name in (("Selling", _("Standard Selling")), ("Buying", _("Standard Buying"))):
+		frappe.get_doc({
+			"doctype": "Price List",
+			"price_list_name": pl_name,
+			"enabled": 1,
+			"buying": 1 if pl_type == "Buying" else 0,
+			"selling": 1 if pl_type == "Selling" else 0,
+			"currency": args["currency"]
+		}).insert()
+
+def set_defaults(args):
+	# enable default currency
+	frappe.db.set_value("Currency", args.get("currency"), "enabled", 1)
+
+	global_defaults = frappe.get_doc("Global Defaults", "Global Defaults")
+	global_defaults.update({
+		'current_fiscal_year': args.curr_fiscal_year,
+		'default_currency': args.get('currency'),
+		'default_company':args.get('company_name').strip(),
+		"country": args.get("country"),
+	})
+
+	global_defaults.save()
+
+	frappe.db.set_value("System Settings", None, "email_footer_address", args.get("company"))
+
+	accounts_settings = frappe.get_doc("Accounts Settings")
+	accounts_settings.auto_accounting_for_stock = 1
+	accounts_settings.save()
+
+	stock_settings = frappe.get_doc("Stock Settings")
+	stock_settings.item_naming_by = "Item Code"
+	stock_settings.valuation_method = "FIFO"
+	stock_settings.default_warehouse = frappe.db.get_value('Warehouse', {'warehouse_name': _('Stores')})
+	stock_settings.stock_uom = _("Nos")
+	stock_settings.auto_indent = 1
+	stock_settings.auto_insert_price_list_rate_if_missing = 1
+	stock_settings.automatically_set_serial_nos_based_on_fifo = 1
+	stock_settings.save()
+
+	selling_settings = frappe.get_doc("Selling Settings")
+	selling_settings.cust_master_name = "Customer Name"
+	selling_settings.so_required = "No"
+	selling_settings.dn_required = "No"
+	selling_settings.save()
+
+	buying_settings = frappe.get_doc("Buying Settings")
+	buying_settings.supp_master_name = "Supplier Name"
+	buying_settings.po_required = "No"
+	buying_settings.pr_required = "No"
+	buying_settings.maintain_same_rate = 1
+	buying_settings.save()
+
+	notification_control = frappe.get_doc("Notification Control")
+	notification_control.quotation = 1
+	notification_control.sales_invoice = 1
+	notification_control.purchase_order = 1
+	notification_control.save()
+
+	hr_settings = frappe.get_doc("HR Settings")
+	hr_settings.emp_created_by = "Naming Series"
+	hr_settings.save()
+
+def create_feed_and_todo():
+	"""update Activity feed and create todo for creation of item, customer, vendor"""
+	add_info_comment(**{
+		"subject": _("ERPNext Setup Complete!")
+	})
+
+def create_email_digest():
+	from frappe.utils.user import get_system_managers
+	system_managers = get_system_managers(only_name=True)
+	if not system_managers:
+		return
+
+	companies = frappe.db.sql_list("select name FROM `tabCompany`")
+	for company in companies:
+		if not frappe.db.exists("Email Digest", "Default Weekly Digest - " + company):
+			edigest = frappe.get_doc({
+				"doctype": "Email Digest",
+				"name": "Default Weekly Digest - " + company,
+				"company": company,
+				"frequency": "Weekly",
+				"recipient_list": "\n".join(system_managers)
+			})
+
+			for df in edigest.meta.get("fields", {"fieldtype": "Check"}):
+				if df.fieldname != "scheduler_errors":
+					edigest.set(df.fieldname, 1)
+
+			edigest.insert()
+
+	# scheduler errors digest
+	if companies:
+		edigest = frappe.new_doc("Email Digest")
+		edigest.update({
+			"name": "Scheduler Errors",
+			"company": companies[0],
+			"frequency": "Daily",
+			"recipient_list": "\n".join(system_managers),
+			"scheduler_errors": 1,
+			"enabled": 1
+		})
+		edigest.insert()
+
+def get_fy_details(fy_start_date, fy_end_date):
+	start_year = getdate(fy_start_date).year
+	if start_year == getdate(fy_end_date).year:
+		fy = cstr(start_year)
+	else:
+		fy = cstr(start_year) + '-' + cstr(start_year + 1)
+	return fy
+	
 def create_sales_tax(args):
 	country_wise_tax = get_country_wise_tax(args.get("country"))
 	if len(country_wise_tax)>0:
 		for sales_tax, tax_data in country_wise_tax.items():
-			account = create_account(tax_data, args)
-			if account:
-				create_sales_template(sales_tax, account, args)
-
-def create_account(tax_data, args):
-	try:
-		account = frappe.get_doc({
-			"doctype": "Account",
-			"is_group": 0,
-			"root_type": "Liability",
-			"company": args.get("company_name"),
-			"parent_account": "Duties and Taxes - %s"%(args.get('company_abbr')),
-			"account_name": tax_data.get('account_name'),
-			"account_type": "Tax",
-			"tax_rate": tax_data.get('tax_rate'),
-			"currency": args.get('currency')
-		}).insert(ignore_permissions=True)
-
-		return account.name
-	except:
-		return None
-
-def create_sales_template(sales_tax, account, args):
-	sales_tax_template = frappe.get_doc({
-		"doctype": "Sales Taxes and Charges Template",
-		"title": sales_tax,
-		"company": args.get("company_name"),
-		"taxes": [{
-			"doctype": "Sales Taxes and Charges",
-			"charge_type": "On Net Total",
-			"account_head": account,
-			"description": sales_tax.split("-")[0]
-		}]
-	}).insert(ignore_permissions=True)
-
-	sales_tax_template.set_missing_values()
-	sales_tax_template.save()
+			make_tax_account_and_template(args.get("company_name").strip(), 
+				tax_data.get('account_name'), tax_data.get('tax_rate'), sales_tax)
 
 def get_country_wise_tax(country):
 	data = {}
@@ -117,491 +258,332 @@
 		data = json.load(countrywise_tax).get(country)
 
 	return data
- 
-def create_fiscal_year_and_company(args):
-    if (args.get('fy_start_date')):
-        curr_fiscal_year = get_fy_details(args.get('fy_start_date'), args.get('fy_end_date'))
-        frappe.get_doc({
-        "doctype":"Fiscal Year",
-        'year': curr_fiscal_year,
-        'year_start_date': args.get('fy_start_date'),
-        'year_end_date': args.get('fy_end_date'),
-        }).insert()
-        args["curr_fiscal_year"] = curr_fiscal_year
-
-    # Company
-    if (args.get('company_name')):
-        frappe.get_doc({
-            "doctype":"Company",
-            'company_name':args.get('company_name').strip(),
-            'abbr':args.get('company_abbr'),
-            'default_currency':args.get('currency'),
-            'country': args.get('country'),
-            'chart_of_accounts': args.get(('chart_of_accounts')),
-            'domain': args.get('domain')
-        }).insert()
-
-        #Enable shopping cart
-        enable_shopping_cart(args)
-
-        # Bank Account
-        create_bank_account(args)
-
-def enable_shopping_cart(args):
-    frappe.get_doc({
-        "doctype": "Shopping Cart Settings",
-        "enabled": 1,
-        'company': args.get('company_name').strip(),
-        'price_list': frappe.db.get_value("Price List", {"selling": 1}),
-        'default_customer_group': _("Individual"),
-        'quotation_series': "QTN-",
-    }).insert()
-
-def create_bank_account(args):
-    if args.get("bank_account"):
-        company_name = args.get('company_name').strip()
-        bank_account_group =  frappe.db.get_value("Account",
-            {"account_type": "Bank", "is_group": 1, "root_type": "Asset",
-                "company": company_name})
-        if bank_account_group:
-            bank_account = frappe.get_doc({
-                "doctype": "Account",
-                'account_name': args.get("bank_account"),
-                'parent_account': bank_account_group,
-                'is_group':0,
-                'company': company_name,
-                "account_type": "Bank",
-            })
-            try:
-                return bank_account.insert()
-            except RootNotEditable:
-                frappe.throw(_("Bank account cannot be named as {0}").format(args.get("bank_account")))
-            except frappe.DuplicateEntryError:
-                # bank account same as a CoA entry
-                pass
-
-def create_price_lists(args):
-    for pl_type, pl_name in (("Selling", _("Standard Selling")), ("Buying", _("Standard Buying"))):
-        frappe.get_doc({
-            "doctype": "Price List",
-            "price_list_name": pl_name,
-            "enabled": 1,
-            "buying": 1 if pl_type == "Buying" else 0,
-            "selling": 1 if pl_type == "Selling" else 0,
-            "currency": args["currency"]
-        }).insert()
-
-def set_defaults(args):
-    # enable default currency
-    frappe.db.set_value("Currency", args.get("currency"), "enabled", 1)
-
-    global_defaults = frappe.get_doc("Global Defaults", "Global Defaults")
-    global_defaults.update({
-        'current_fiscal_year': args.curr_fiscal_year,
-        'default_currency': args.get('currency'),
-        'default_company':args.get('company_name').strip(),
-        "country": args.get("country"),
-    })
-
-    global_defaults.save()
-
-    frappe.db.set_value("System Settings", None, "email_footer_address", args.get("company"))
-
-    accounts_settings = frappe.get_doc("Accounts Settings")
-    accounts_settings.auto_accounting_for_stock = 1
-    accounts_settings.save()
-
-    stock_settings = frappe.get_doc("Stock Settings")
-    stock_settings.item_naming_by = "Item Code"
-    stock_settings.valuation_method = "FIFO"
-    stock_settings.default_warehouse = frappe.db.get_value('Warehouse', {'warehouse_name': _('Stores')})
-    stock_settings.stock_uom = _("Nos")
-    stock_settings.auto_indent = 1
-    stock_settings.auto_insert_price_list_rate_if_missing = 1
-    stock_settings.automatically_set_serial_nos_based_on_fifo = 1
-    stock_settings.save()
-
-    selling_settings = frappe.get_doc("Selling Settings")
-    selling_settings.cust_master_name = "Customer Name"
-    selling_settings.so_required = "No"
-    selling_settings.dn_required = "No"
-    selling_settings.save()
-
-    buying_settings = frappe.get_doc("Buying Settings")
-    buying_settings.supp_master_name = "Supplier Name"
-    buying_settings.po_required = "No"
-    buying_settings.pr_required = "No"
-    buying_settings.maintain_same_rate = 1
-    buying_settings.save()
-
-    notification_control = frappe.get_doc("Notification Control")
-    notification_control.quotation = 1
-    notification_control.sales_invoice = 1
-    notification_control.purchase_order = 1
-    notification_control.save()
-
-    hr_settings = frappe.get_doc("HR Settings")
-    hr_settings.emp_created_by = "Naming Series"
-    hr_settings.save()
-
-def create_feed_and_todo():
-    """update Activity feed and create todo for creation of item, customer, vendor"""
-    add_info_comment(**{
-        "subject": _("ERPNext Setup Complete!")
-    })
-
-def create_email_digest():
-    from frappe.utils.user import get_system_managers
-    system_managers = get_system_managers(only_name=True)
-    if not system_managers:
-        return
-
-    companies = frappe.db.sql_list("select name FROM `tabCompany`")
-    for company in companies:
-        if not frappe.db.exists("Email Digest", "Default Weekly Digest - " + company):
-            edigest = frappe.get_doc({
-                "doctype": "Email Digest",
-                "name": "Default Weekly Digest - " + company,
-                "company": company,
-                "frequency": "Weekly",
-                "recipient_list": "\n".join(system_managers)
-            })
-
-            for df in edigest.meta.get("fields", {"fieldtype": "Check"}):
-                if df.fieldname != "scheduler_errors":
-                    edigest.set(df.fieldname, 1)
-
-            edigest.insert()
-
-    # scheduler errors digest
-    if companies:
-        edigest = frappe.new_doc("Email Digest")
-        edigest.update({
-            "name": "Scheduler Errors",
-            "company": companies[0],
-            "frequency": "Daily",
-            "recipient_list": "\n".join(system_managers),
-            "scheduler_errors": 1,
-            "enabled": 1
-        })
-        edigest.insert()
-
-def get_fy_details(fy_start_date, fy_end_date):
-    start_year = getdate(fy_start_date).year
-    if start_year == getdate(fy_end_date).year:
-        fy = cstr(start_year)
-    else:
-        fy = cstr(start_year) + '-' + cstr(start_year + 1)
-    return fy
 
 def create_taxes(args):
+	for i in xrange(1,6):
+		if args.get("tax_" + str(i)):
+			# replace % in case someone also enters the % symbol
+			tax_rate = cstr(args.get("tax_rate_" + str(i)) or "").replace("%", "")
+			account_name = args.get("tax_" + str(i))
 
-    for i in xrange(1,6):
-        if args.get("tax_" + str(i)):
-            # replace % in case someone also enters the % symbol
-            tax_rate = cstr(args.get("tax_rate_" + str(i)) or "").replace("%", "")
+			make_tax_account_and_template(args.get("company_name").strip(), account_name, tax_rate)
+			
+def make_tax_account_and_template(company, account_name, tax_rate, template_name=None):
+	try:
+		account = make_tax_account(company, account_name, tax_rate)
+		if account:
+			make_sales_and_purchase_tax_templates(account, template_name)
+	except frappe.NameError, e:
+		if e.args[2][0]==1062:
+			pass
+		else:
+			raise
+	except RootNotEditable, e:
+		pass
+				
+def get_tax_account_group(company):
+	tax_group = frappe.db.get_value("Account", 
+		{"account_name": "Duties and Taxes", "is_group": 1, "company": company})
+	if not tax_group:
+		tax_group = frappe.db.get_value("Account", {"is_group": 1, "root_type": "Liability", 
+				"account_type": "Tax", "company": company})
+				
+	return tax_group
 
-            try:
-                tax_group = frappe.db.get_value("Account", {"company": args.get("company_name"),
-                    "is_group": 1, "account_type": "Tax", "root_type": "Liability"})
-                if tax_group:
-                    account = make_tax_head(args, i, tax_group, tax_rate)
-                    make_sales_and_purchase_tax_templates(account)
+def make_tax_account(company, account_name, tax_rate):
+	tax_group = get_tax_account_group(company)
+	if tax_group:
+		return frappe.get_doc({
+			"doctype":"Account",
+			"company": company,
+			"parent_account": tax_group,
+			"account_name": account_name,
+			"is_group": 0,
+			"report_type": "Balance Sheet",
+			"root_type": "Liability",
+			"account_type": "Tax",
+			"tax_rate": flt(tax_rate) if tax_rate else None
+		}).insert(ignore_permissions=True)
 
-            except frappe.NameError, e:
-                if e.args[2][0]==1062:
-                    pass
-                else:
-                    raise
-            except RootNotEditable, e:
-                pass
+def make_sales_and_purchase_tax_templates(account, template_name=None):
+	if not template_name:
+		template_name = account.name
+		
+	sales_tax_template = {
+		"doctype": "Sales Taxes and Charges Template",
+		"title": template_name,
+		"company": account.company,
+		"taxes": [{
+			"category": "Valuation and Total",
+			"charge_type": "On Net Total",
+			"account_head": account.name,
+			"description": "{0} @ {1}".format(account.account_name, account.tax_rate),
+			"rate": account.tax_rate
+		}]
+	}
 
-def make_tax_head(args, i, tax_group, tax_rate):
-    return frappe.get_doc({
-        "doctype":"Account",
-        "company": args.get("company_name").strip(),
-        "parent_account": tax_group,
-        "account_name": args.get("tax_" + str(i)),
-        "is_group": 0,
-        "report_type": "Balance Sheet",
-        "account_type": "Tax",
-        "tax_rate": flt(tax_rate) if tax_rate else None
-    }).insert(ignore_permissions=True)
+	# Sales
+	frappe.get_doc(copy.deepcopy(sales_tax_template)).insert(ignore_permissions=True)
 
-def make_sales_and_purchase_tax_templates(account):
-    doc = {
-        "doctype": "Sales Taxes and Charges Template",
-        "title": account.name,
-        "taxes": [{
-            "category": "Valuation and Total",
-            "charge_type": "On Net Total",
-            "account_head": account.name,
-            "description": "{0} @ {1}".format(account.account_name, account.tax_rate),
-            "rate": account.tax_rate
-        }]
-    }
-
-    # Sales
-    frappe.get_doc(copy.deepcopy(doc)).insert()
-
-    # Purchase
-    doc["doctype"] = "Purchase Taxes and Charges Template"
-    frappe.get_doc(copy.deepcopy(doc)).insert()
+	# Purchase
+	purchase_tax_template = copy.deepcopy(sales_tax_template)
+	purchase_tax_template["doctype"] = "Purchase Taxes and Charges Template"
+	frappe.get_doc(purchase_tax_template).insert(ignore_permissions=True)
 
 def create_items(args):
-    for i in xrange(1,6):
-        item = args.get("item_" + str(i))
-        if item:
-            item_group = args.get("item_group_" + str(i))
-            is_sales_item = args.get("is_sales_item_" + str(i))
-            is_purchase_item = args.get("is_purchase_item_" + str(i))
-            is_stock_item = item_group!=_("Services")
-            default_warehouse = ""
-            if is_stock_item:
-                default_warehouse = frappe.db.get_value("Warehouse", filters={
-                    "warehouse_name": _("Finished Goods") if is_sales_item else _("Stores"),
-                    "company": args.get("company_name").strip()
-                })
+	for i in xrange(1,6):
+		item = args.get("item_" + str(i))
+		if item:
+			item_group = args.get("item_group_" + str(i))
+			is_sales_item = args.get("is_sales_item_" + str(i))
+			is_purchase_item = args.get("is_purchase_item_" + str(i))
+			is_stock_item = item_group!=_("Services")
+			default_warehouse = ""
+			if is_stock_item:
+				default_warehouse = frappe.db.get_value("Warehouse", filters={
+					"warehouse_name": _("Finished Goods") if is_sales_item else _("Stores"),
+					"company": args.get("company_name").strip()
+				})
 
-            try:
-                frappe.get_doc({
-                    "doctype":"Item",
-                    "item_code": item,
-                    "item_name": item,
-                    "description": item,
-                    "show_in_website": 1,
-                    "is_sales_item": is_sales_item,
-                    "is_purchase_item": is_purchase_item,
-                    "is_stock_item": is_stock_item and 1 or 0,
-                    "item_group": item_group,
-                    "stock_uom": args.get("item_uom_" + str(i)),
-                    "default_warehouse": default_warehouse
-                }).insert()
+			try:
+				frappe.get_doc({
+					"doctype":"Item",
+					"item_code": item,
+					"item_name": item,
+					"description": item,
+					"show_in_website": 1,
+					"is_sales_item": is_sales_item,
+					"is_purchase_item": is_purchase_item,
+					"is_stock_item": is_stock_item and 1 or 0,
+					"item_group": item_group,
+					"stock_uom": args.get("item_uom_" + str(i)),
+					"default_warehouse": default_warehouse
+				}).insert()
 
-                if args.get("item_img_" + str(i)):
-                    item_image = args.get("item_img_" + str(i)).split(",")
-                    if len(item_image)==3:
-                        filename, filetype, content = item_image
-                        fileurl = save_file(filename, content, "Item", item, decode=True).file_url
-                        frappe.db.set_value("Item", item, "image", fileurl)
+				if args.get("item_img_" + str(i)):
+					item_image = args.get("item_img_" + str(i)).split(",")
+					if len(item_image)==3:
+						filename, filetype, content = item_image
+						fileurl = save_file(filename, content, "Item", item, decode=True).file_url
+						frappe.db.set_value("Item", item, "image", fileurl)
 
-                if args.get("item_price_" + str(i)):
-                    item_price = flt(args.get("item_price_" + str(i)))
+				if args.get("item_price_" + str(i)):
+					item_price = flt(args.get("item_price_" + str(i)))
 
-                    if is_sales_item:
-                        price_list_name = frappe.db.get_value("Price List", {"selling": 1})
-                        make_item_price(item, price_list_name, item_price)
+					if is_sales_item:
+						price_list_name = frappe.db.get_value("Price List", {"selling": 1})
+						make_item_price(item, price_list_name, item_price)
 
-                    if is_purchase_item:
-                        price_list_name = frappe.db.get_value("Price List", {"buying": 1})
-                        make_item_price(item, price_list_name, item_price)
+					if is_purchase_item:
+						price_list_name = frappe.db.get_value("Price List", {"buying": 1})
+						make_item_price(item, price_list_name, item_price)
 
-            except frappe.NameError:
-                pass
+			except frappe.NameError:
+				pass
 
 def make_item_price(item, price_list_name, item_price):
-    frappe.get_doc({
-        "doctype": "Item Price",
-        "price_list": price_list_name,
-        "item_code": item,
-        "price_list_rate": item_price
-    }).insert()
+	frappe.get_doc({
+		"doctype": "Item Price",
+		"price_list": price_list_name,
+		"item_code": item,
+		"price_list_rate": item_price
+	}).insert()
 
 
 def create_customers(args):
-    for i in xrange(1,6):
-        customer = args.get("customer_" + str(i))
-        if customer:
-            try:
-                doc = frappe.get_doc({
-                    "doctype":"Customer",
-                    "customer_name": customer,
-                    "customer_type": "Company",
-                    "customer_group": _("Commercial"),
-                    "territory": args.get("country"),
-                    "company": args.get("company_name").strip()
-                }).insert()
+	for i in xrange(1,6):
+		customer = args.get("customer_" + str(i))
+		if customer:
+			try:
+				doc = frappe.get_doc({
+					"doctype":"Customer",
+					"customer_name": customer,
+					"customer_type": "Company",
+					"customer_group": _("Commercial"),
+					"territory": args.get("country"),
+					"company": args.get("company_name").strip()
+				}).insert()
 
-                if args.get("customer_contact_" + str(i)):
-                    create_contact(args.get("customer_contact_" + str(i)),
-                        "customer", doc.name)
-            except frappe.NameError:
-                pass
+				if args.get("customer_contact_" + str(i)):
+					create_contact(args.get("customer_contact_" + str(i)),
+						"customer", doc.name)
+			except frappe.NameError:
+				pass
 
 def create_suppliers(args):
-    for i in xrange(1,6):
-        supplier = args.get("supplier_" + str(i))
-        if supplier:
-            try:
-                doc = frappe.get_doc({
-                    "doctype":"Supplier",
-                    "supplier_name": supplier,
-                    "supplier_type": _("Local"),
-                    "company": args.get("company_name").strip()
-                }).insert()
+	for i in xrange(1,6):
+		supplier = args.get("supplier_" + str(i))
+		if supplier:
+			try:
+				doc = frappe.get_doc({
+					"doctype":"Supplier",
+					"supplier_name": supplier,
+					"supplier_type": _("Local"),
+					"company": args.get("company_name").strip()
+				}).insert()
 
-                if args.get("supplier_contact_" + str(i)):
-                    create_contact(args.get("supplier_contact_" + str(i)),
-                        "supplier", doc.name)
-            except frappe.NameError:
-                pass
+				if args.get("supplier_contact_" + str(i)):
+					create_contact(args.get("supplier_contact_" + str(i)),
+						"supplier", doc.name)
+			except frappe.NameError:
+				pass
 
 def create_contact(contact, party_type, party):
-    """Create contact based on given contact name"""
-    contact = contact.strip().split(" ")
+	"""Create contact based on given contact name"""
+	contact = contact.strip().split(" ")
 
-    frappe.get_doc({
-        "doctype":"Contact",
-        party_type: party,
-        "first_name":contact[0],
-        "last_name": len(contact) > 1 and contact[1] or ""
-    }).insert()
+	frappe.get_doc({
+		"doctype":"Contact",
+		party_type: party,
+		"first_name":contact[0],
+		"last_name": len(contact) > 1 and contact[1] or ""
+	}).insert()
 
 def create_letter_head(args):
-    if args.get("attach_letterhead"):
-        frappe.get_doc({
-            "doctype":"Letter Head",
-            "letter_head_name": _("Standard"),
-            "is_default": 1
-        }).insert()
+	if args.get("attach_letterhead"):
+		frappe.get_doc({
+			"doctype":"Letter Head",
+			"letter_head_name": _("Standard"),
+			"is_default": 1
+		}).insert()
 
-        attach_letterhead = args.get("attach_letterhead").split(",")
-        if len(attach_letterhead)==3:
-            filename, filetype, content = attach_letterhead
-            fileurl = save_file(filename, content, "Letter Head", _("Standard"), decode=True).file_url
-            frappe.db.set_value("Letter Head", _("Standard"), "content", "<img src='%s' style='max-width: 100%%;'>" % fileurl)
+		attach_letterhead = args.get("attach_letterhead").split(",")
+		if len(attach_letterhead)==3:
+			filename, filetype, content = attach_letterhead
+			fileurl = save_file(filename, content, "Letter Head", _("Standard"), decode=True).file_url
+			frappe.db.set_value("Letter Head", _("Standard"), "content", "<img src='%s' style='max-width: 100%%;'>" % fileurl)
 
 def create_logo(args):
-    if args.get("attach_logo"):
-        attach_logo = args.get("attach_logo").split(",")
-        if len(attach_logo)==3:
-            filename, filetype, content = attach_logo
-            fileurl = save_file(filename, content, "Website Settings", "Website Settings",
-                decode=True).file_url
-            frappe.db.set_value("Website Settings", "Website Settings", "brand_html",
-                "<img src='{0}' style='max-width: 40px; max-height: 25px;'> {1}".format(fileurl, args.get("company_name").strip()))
+	if args.get("attach_logo"):
+		attach_logo = args.get("attach_logo").split(",")
+		if len(attach_logo)==3:
+			filename, filetype, content = attach_logo
+			fileurl = save_file(filename, content, "Website Settings", "Website Settings",
+				decode=True).file_url
+			frappe.db.set_value("Website Settings", "Website Settings", "brand_html",
+				"<img src='{0}' style='max-width: 40px; max-height: 25px;'> {1}".format(fileurl, args.get("company_name").strip()))
 
 def create_territories():
-    """create two default territories, one for home country and one named Rest of the World"""
-    from frappe.utils.nestedset import get_root_of
-    country = frappe.db.get_default("country")
-    root_territory = get_root_of("Territory")
-    for name in (country, _("Rest Of The World")):
-        if name and not frappe.db.exists("Territory", name):
-            frappe.get_doc({
-                "doctype": "Territory",
-                "territory_name": name.replace("'", ""),
-                "parent_territory": root_territory,
-                "is_group": "No"
-            }).insert()
+	"""create two default territories, one for home country and one named Rest of the World"""
+	from frappe.utils.nestedset import get_root_of
+	country = frappe.db.get_default("country")
+	root_territory = get_root_of("Territory")
+	for name in (country, _("Rest Of The World")):
+		if name and not frappe.db.exists("Territory", name):
+			frappe.get_doc({
+				"doctype": "Territory",
+				"territory_name": name.replace("'", ""),
+				"parent_territory": root_territory,
+				"is_group": "No"
+			}).insert()
 
 def login_as_first_user(args):
-    if args.get("email") and hasattr(frappe.local, "login_manager"):
-        frappe.local.login_manager.login_as(args.get("email"))
+	if args.get("email") and hasattr(frappe.local, "login_manager"):
+		frappe.local.login_manager.login_as(args.get("email"))
 
 def create_users(args):
-    if frappe.session.user == 'Administrator':
-        return
+	if frappe.session.user == 'Administrator':
+		return
 
-    # create employee for self
-    emp = frappe.get_doc({
-        "doctype": "Employee",
-        "employee_name": " ".join(filter(None, [args.get("first_name"), args.get("last_name")])),
-        "user_id": frappe.session.user,
-        "status": "Active",
-        "company": args.get("company_name")
-    })
-    emp.flags.ignore_mandatory = True
-    emp.insert(ignore_permissions = True)
+	# create employee for self
+	emp = frappe.get_doc({
+		"doctype": "Employee",
+		"employee_name": " ".join(filter(None, [args.get("first_name"), args.get("last_name")])),
+		"user_id": frappe.session.user,
+		"status": "Active",
+		"company": args.get("company_name")
+	})
+	emp.flags.ignore_mandatory = True
+	emp.insert(ignore_permissions = True)
 
-    for i in xrange(1,5):
-        email = args.get("user_email_" + str(i))
-        fullname = args.get("user_fullname_" + str(i))
-        if email:
-            if not fullname:
-                fullname = email.split("@")[0]
+	for i in xrange(1,5):
+		email = args.get("user_email_" + str(i))
+		fullname = args.get("user_fullname_" + str(i))
+		if email:
+			if not fullname:
+				fullname = email.split("@")[0]
 
-            parts = fullname.split(" ", 1)
+			parts = fullname.split(" ", 1)
 
-            user = frappe.get_doc({
-                "doctype": "User",
-                "email": email,
-                "first_name": parts[0],
-                "last_name": parts[1] if len(parts) > 1 else "",
-                "enabled": 1,
-                "user_type": "System User"
-            })
+			user = frappe.get_doc({
+				"doctype": "User",
+				"email": email,
+				"first_name": parts[0],
+				"last_name": parts[1] if len(parts) > 1 else "",
+				"enabled": 1,
+				"user_type": "System User"
+			})
 
-            # default roles
-            user.append_roles("Projects User", "Stock User", "Support Team")
+			# default roles
+			user.append_roles("Projects User", "Stock User", "Support Team")
 
-            if args.get("user_sales_" + str(i)):
-                user.append_roles("Sales User", "Sales Manager", "Accounts User")
-            if args.get("user_purchaser_" + str(i)):
-                user.append_roles("Purchase User", "Purchase Manager", "Accounts User")
-            if args.get("user_accountant_" + str(i)):
-                user.append_roles("Accounts Manager", "Accounts User")
+			if args.get("user_sales_" + str(i)):
+				user.append_roles("Sales User", "Sales Manager", "Accounts User")
+			if args.get("user_purchaser_" + str(i)):
+				user.append_roles("Purchase User", "Purchase Manager", "Accounts User")
+			if args.get("user_accountant_" + str(i)):
+				user.append_roles("Accounts Manager", "Accounts User")
 
-            user.flags.delay_emails = True
+			user.flags.delay_emails = True
 
-            if not frappe.db.get_value("User", email):
-                user.insert(ignore_permissions=True)
+			if not frappe.db.get_value("User", email):
+				user.insert(ignore_permissions=True)
 
-                # create employee
-                emp = frappe.get_doc({
-                    "doctype": "Employee",
-                    "employee_name": fullname,
-                    "user_id": email,
-                    "status": "Active",
-                    "company": args.get("company_name")
-                })
-                emp.flags.ignore_mandatory = True
-                emp.insert(ignore_permissions = True)
+				# create employee
+				emp = frappe.get_doc({
+					"doctype": "Employee",
+					"employee_name": fullname,
+					"user_id": email,
+					"status": "Active",
+					"company": args.get("company_name")
+				})
+				emp.flags.ignore_mandatory = True
+				emp.insert(ignore_permissions = True)
 
 def create_academic_term():
-    at = ["Semester 1", "Semester 2", "Semester 3"]
-    ay = ["2013-14", "2014-15", "2015-16", "2016-17", "2017-18"]
-    for y in ay:
-        for t in at:
-            academic_term = frappe.new_doc("Academic Term")
-            academic_term.academic_year = y
-            academic_term.term_name = t
-            academic_term.save()
+	at = ["Semester 1", "Semester 2", "Semester 3"]
+	ay = ["2013-14", "2014-15", "2015-16", "2016-17", "2017-18"]
+	for y in ay:
+		for t in at:
+			academic_term = frappe.new_doc("Academic Term")
+			academic_term.academic_year = y
+			academic_term.term_name = t
+			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()
+	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()
+	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()
+	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()
+	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()
+	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()