From 6fb7b162e8b8698ef593599ae0dc16168dabc50c Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 20 Oct 2016 15:49:39 +0530 Subject: [PATCH] Create tax template based on country --- erpnext/setup/setup_wizard/setup_wizard.py | 910 ++++++++++----------- 1 file changed, 446 insertions(+), 464 deletions(-) diff --git a/erpnext/setup/setup_wizard/setup_wizard.py b/erpnext/setup/setup_wizard/setup_wizard.py index 2c0c85cbbc..7c65f88965 100644 --- a/erpnext/setup/setup_wizard/setup_wizard.py +++ b/erpnext/setup/setup_wizard/setup_wizard.py @@ -68,48 +68,189 @@ def setup_complete(args=None): 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 @@ def get_country_wise_tax(country): 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", "" % 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", "" % 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", - " {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", + " {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()