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()