def execute(): dataent.reload_doc('manufacturing', 'doctype', 'bom_item') dataent.reload_doc('manufacturing', 'doctype', 'bom_explosion_item') dataent.reload_doc('manufacturing', 'doctype', 'bom_scrap_item') dataent.db.sql( "update `tabBOM Item` set stock_qty = qty, uom = stock_uom, conversion_factor = 1" ) dataent.db.sql("update `tabBOM Explosion Item` set stock_qty = qty") if "qty" in dataent.db.get_table_columns("BOM Scrap Item"): dataent.db.sql("update `tabBOM Scrap Item` set stock_qty = qty")
def execute(): """Create domain documents""" dataent.reload_doc("core", "doctype", "domain") dataent.reload_doc("core", "doctype", "domain_settings") dataent.reload_doc("core", "doctype", "has_domain") dataent.reload_doc("core", "doctype", "role") for domain in ("Distribution", "Manufacturing", "Retail", "Services", "Education"): if not dataent.db.exists({"doctype": "Domain", "domain": domain}): create_domain(domain) # set domain in domain settings based on company domain domains = [] condition = "" company = epaas.get_default_company() if company: condition = " and name='{0}'".format(dataent.db.escape(company)) domains = dataent.db.sql_list( "select distinct domain from `tabCompany` where domain != 'Other' {0}". format(condition)) if not domains: return domain_settings = dataent.get_doc("Domain Settings", "Domain Settings") checked_domains = [row.domain for row in domain_settings.active_domains] for domain in domains: # check and ignore if the domains is already checked in domain settings if domain in checked_domains: continue if not dataent.db.get_value("Domain", domain): # user added custom domain in companies domain field create_domain(domain) row = domain_settings.append("active_domains", dict(domain=domain)) domain_settings.save(ignore_permissions=True)
def execute(): dataent.reload_doc('epaas_integrations', 'doctype', 'shopify_settings') dataent.reload_doc('epaas_integrations', 'doctype', 'shopify_tax_account') dataent.reload_doc('epaas_integrations', 'doctype', 'shopify_log') dataent.reload_doc('epaas_integrations', 'doctype', 'shopify_webhook_detail') if 'epaas_shopify' in dataent.get_installed_apps(): remove_from_installed_apps('epaas_shopify') dataent.db.sql( 'delete from `tabDesktop Icon` where app="epaas_shopify" ') dataent.delete_doc("Module Def", 'epaas_shopify') dataent.db.commit() dataent.db.sql("truncate `tabShopify Log`") setup_app_type() else: disable_shopify()
def execute(): """ in communication move feedback details to content remove Guest None from sender full name setup feedback request trigger's is_manual field """ dataent.reload_doc('core', 'doctype', 'dynamic_link') dataent.reload_doc('email', 'doctype', 'contact') dataent.reload_doc("core", "doctype", "feedback_request") dataent.reload_doc("core", "doctype", "communication") if dataent.db.has_column('Communication', 'feedback'): dataent.db.sql("""update tabCommunication set content=ifnull(feedback, "feedback details not provided") where communication_type="Feedback" and content is NULL""") dataent.db.sql(""" update tabCommunication set sender_full_name="" where communication_type="Feedback" and sender_full_name='Guest None' """) dataent.db.sql(""" update `tabFeedback Request` set is_manual=1, feedback_trigger="Manual" where ifnull(feedback_trigger, '')='' """)
def execute(): dataent.reload_doc("setup", "doctype", "item_group") dataent.reload_doc("stock", "doctype", "item") dataent.reload_doc("setup", "doctype", "sales_partner") try: dataent.model.rename_field("Item Group", "parent_website_sitemap", "parent_website_route") dataent.model.rename_field("Item", "parent_website_sitemap", "parent_website_route") dataent.model.rename_field("Sales Partner", "parent_website_sitemap", "parent_website_route") except Exception as e: if e.args[0] != 1054: raise
def execute(): dataent.reload_doc("buying", "doctype", "request_for_quotation_supplier") dataent.reload_doc("buying", "doctype", "request_for_quotation_item") dataent.reload_doc("buying", "doctype", "request_for_quotation") dataent.reload_doc("projects", "doctype", "timesheet") for role in ('Customer', 'Supplier'): dataent.db.sql( '''delete from `tabHas Role` where role=%s and parent in ("Administrator", "Guest")''', role) if not dataent.db.sql('select name from `tabHas Role` where role=%s', role): # delete DocPerm for doctype in dataent.db.sql( 'select parent from tabDocPerm where role=%s', role): d = dataent.get_doc("DocType", doctype[0]) d.permissions = [p for p in d.permissions if p.role != role] d.save() # delete Role dataent.delete_doc_if_exists('Role', role)
def execute(): dataent.reload_doc("core", "doctype", "block_module") dataent.reload_doctype("User") dataent.reload_doctype("Lead") dataent.reload_doctype("Contact") dataent.reload_doc('email', 'doctype', 'email_group') dataent.reload_doc('email', 'doctype', 'email_group_member') dataent.reload_doc('email', 'doctype', 'newsletter') dataent.permissions.reset_perms("Newsletter") if not dataent.db.exists("Role", "Newsletter Manager"): dataent.get_doc({ "doctype": "Role", "role": "Newsletter Manager" }).insert() for userrole in dataent.get_all("Has Role", "parent", { "role": "Sales Manager", "parenttype": "User" }): if dataent.db.exists("User", userrole.parent): user = dataent.get_doc("User", userrole.parent) user.append("roles", { "doctype": "Has Role", "role": "Newsletter Manager" }) user.flags.ignore_mandatory = True user.save() # create default lists general = dataent.new_doc("Email Group") general.title = "General" general.insert() general.import_from("Lead") general.import_from("Contact")
def execute(): dataent.reload_doc('accounts', 'doctype', 'sales_invoice_timesheet') dataent.reload_doc('accounts', 'doctype', 'sales_invoice_payment') dataent.reload_doc('accounts', 'doctype', 'mode_of_payment') count = 0 for data in dataent.db.sql( """select name, mode_of_payment, cash_bank_account, paid_amount, company from `tabSales Invoice` si where si.is_pos = 1 and si.docstatus < 2 and si.cash_bank_account is not null and si.cash_bank_account != '' and not exists(select name from `tabSales Invoice Payment` where parent=si.name)""", as_dict=1): if not data.mode_of_payment and not dataent.db.exists( "Mode of Payment", "Cash"): mop = dataent.new_doc("Mode of Payment") mop.mode_of_payment = "Cash" mop.type = "Cash" mop.save() si_doc = dataent.get_doc('Sales Invoice', data.name) row = si_doc.append( 'payments', { 'mode_of_payment': data.mode_of_payment or 'Cash', 'account': data.cash_bank_account, 'type': dataent.db.get_value('Mode of Payment', data.mode_of_payment, 'type') or 'Cash', 'amount': data.paid_amount }) row.db_update() si_doc.set_paid_amount() si_doc.db_set("paid_amount", si_doc.paid_amount, update_modified=False) si_doc.db_set("base_paid_amount", si_doc.base_paid_amount, update_modified=False) count += 1 if count % 200 == 0: dataent.db.commit()
def execute(): dataent.reload_doc("accounts", "doctype", "salary_component_account") dataent.reload_doc("hr", "doctype", "salary_component") dataent.reload_doc("hr", "doctype", "taxable_salary_slab") for s in dataent.db.sql( '''select name, type, salary_component_abbr from `tabSalary Component` where ifnull(type, "")="" or ifnull(salary_component_abbr, "") = ""''', as_dict=1): component = dataent.get_doc('Salary Component', s.name) # guess if not s.type: guess = dataent.db.sql( '''select parentfield from `tabSalary Detail` where salary_component=%s limit 1''', s.name) if guess: component.type = 'Earning' if guess[0][ 0] == 'earnings' else 'Deduction' else: component.type = 'Deduction' if not s.salary_component_abbr: abbr = ''.join([c[0] for c in component.salary_component.split() ]).upper() abbr_count = dataent.db.sql( """ select count(name) from `tabSalary Component` where salary_component_abbr = %s or salary_component_abbr like %s """, (abbr, abbr + "-%%")) if abbr_count and abbr_count[0][0] > 0: abbr = abbr + "-" + cstr(abbr_count[0][0]) component.salary_component_abbr = abbr component.save()
def execute(): from epaas.setup.setup_wizard.operations.install_fixtures import add_uom_data dataent.reload_doc("setup", "doctype", "UOM Conversion Factor") dataent.reload_doc("setup", "doctype", "UOM") dataent.reload_doc("stock", "doctype", "UOM Category") if not dataent.db.a_row_exists("UOM Conversion Factor"): add_uom_data() else: # delete conversion data and insert again dataent.db.sql("delete from `tabUOM Conversion Factor`") try: dataent.delete_doc('UOM', 'Hundredweight') dataent.delete_doc('UOM', 'Pound Cubic Yard') except dataent.LinkExistsError: pass add_uom_data()
def execute(): if dataent.db.exists("DocType", "Guardian"): # 'Schools' module changed to the 'Education' # dataent.reload_doc("schools", "doctype", "student") # dataent.reload_doc("schools", "doctype", "student_guardian") # dataent.reload_doc("schools", "doctype", "student_sibling") dataent.reload_doc("education", "doctype", "student") dataent.reload_doc("education", "doctype", "student_guardian") dataent.reload_doc("education", "doctype", "student_sibling") if "student" not in dataent.db.get_table_columns("Guardian"): return guardian = dataent.get_all("Guardian", fields=["name", "student"]) for d in guardian: if d.student: student = dataent.get_doc("Student", d.student) if student: student.append("guardians", {"guardian": d.name}) student.save()
def execute(): reload_doctypes_for_schools_icons() dataent.reload_doc('website', 'doctype', 'portal_settings') dataent.reload_doc('website', 'doctype', 'portal_menu_item') dataent.reload_doc('buying', 'doctype', 'request_for_quotation') if 'schools' in dataent.get_installed_apps(): dataent.db.sql("""delete from `tabDesktop Icon`""") if not dataent.db.exists('Module Def', 'Schools') and dataent.db.exists( 'Module Def', 'Academics'): # 'Schools' module changed to the 'Education' # dataent.rename_doc("Module Def", "Academics", "Schools") dataent.rename_doc("Module Def", "Academics", "Education") remove_from_installed_apps("schools")
def execute(): dataent.reload_doctype('Role') for dt in ("assessment", "course", "fees"): # 'Schools' module changed to the 'Education' # dataent.reload_doc("schools", "doctype", dt) dataent.reload_doc("education", "doctype", dt) for dt in ("domain", "has_domain", "domain_settings"): dataent.reload_doc("core", "doctype", dt) dataent.reload_doc('website', 'doctype', 'portal_menu_item') dataent.get_doc('Portal Settings').sync_menu() if 'schools' in dataent.get_installed_apps(): domain = dataent.get_doc('Domain', 'Education') domain.setup_domain() else: domain = dataent.get_doc('Domain', 'Manufacturing') domain.setup_data() domain.setup_sidebar_items()
def execute(): dataent.reload_doc('portal', 'doctype', 'homepage_featured_product') dataent.reload_doc('portal', 'doctype', 'homepage') dataent.reload_doc('portal', 'doctype', 'products_settings') dataent.reload_doctype('Item') dataent.reload_doctype('Item Group') website_settings = dataent.get_doc('Website Settings', 'Website Settings') if dataent.db.exists('Web Page', website_settings.home_page): header = dataent.db.get_value('Web Page', website_settings.home_page, 'header') if header and header.startswith("<div class='hero text-center'>"): homepage = dataent.get_doc('Homepage', 'Homepage') homepage.company = epaas.get_default_company() or dataent.get_all("Company")[0].name if '<h1>' in header: homepage.tag_line = header.split('<h1>')[1].split('</h1>')[0] or 'Default Website' else: homepage.tag_line = 'Default Website' homepage.setup_items() homepage.save() website_settings.home_page = 'home' website_settings.save()
def execute(): # convert milestones to tasks dataent.reload_doctype("Project") dataent.reload_doc("projects", "doctype", "project_task") dataent.reload_doctype("Task") dataent.reload_doc("projects", "doctype", "task_depends_on") dataent.reload_doc("projects", "doctype", "time_log") for m in dataent.get_all("Project Milestone", "*"): if (m.milestone and m.milestone_date and dataent.db.exists("Project", m.parent)): subject = (m.milestone[:139] + "…") if (len(m.milestone) > 140) else m.milestone description = m.milestone task = dataent.get_doc({ "doctype": "Task", "subject": subject, "description": description if description != subject else None, "expected_start_date": m.milestone_date, "status": "Open" if m.status == "Pending" else "Closed", "project": m.parent, }) task.flags.ignore_mandatory = True task.insert(ignore_permissions=True) # remove project milestone dataent.delete_doc("DocType", "Project Milestone") # remove calendar events for milestone for e in dataent.get_all("Event", ["name"], {"ref_type": "Project"}): dataent.delete_doc("Event", e.name)
def execute(): dataent.reload_doc('crm', 'doctype', 'market_segment') dataent.local.lang = dataent.db.get_default("lang") or 'en' add_market_segments()
def execute(): dataent.reload_doc("selling", "doctype", "customer") dataent.reload_doc("buying", "doctype", "supplier") dataent.reload_doc("setup", "doctype", "supplier_type") dataent.reload_doc("accounts", "doctype", "payment_term") dataent.reload_doc("accounts", "doctype", "payment_terms_template_detail") dataent.reload_doc("accounts", "doctype", "payment_terms_template") payment_terms = [] records = [] for doctype in ("Customer", "Supplier", "Supplier Type"): credit_days = dataent.db.sql(""" SELECT DISTINCT `credit_days`, `credit_days_based_on`, `name` from `tab{0}` where ((credit_days_based_on='Fixed Days' or credit_days_based_on is null) and credit_days is not null) or credit_days_based_on='Last Day of the Next Month' """.format(doctype)) credit_records = ((record[0], record[1], record[2]) for record in credit_days) for days, based_on, party_name in credit_records: if based_on == "Fixed Days": pyt_template_name = 'Default Payment Term - N{0}'.format(days) else: pyt_template_name = 'Default Payment Term - EO2M' if not dataent.db.exists("Payment Terms Template", pyt_template_name): payment_term = make_payment_term(days, based_on) template = make_template(payment_term) else: template = dataent.get_doc("Payment Terms Template", pyt_template_name) payment_terms.append( 'WHEN `name`="%s" THEN "%s"' % (dataent.db.escape(party_name), template.template_name)) records.append(dataent.db.escape(party_name)) begin_query_str = "UPDATE `tab{0}` SET `payment_terms` = CASE ".format( doctype) value_query_str = " ".join(payment_terms) cond_query_str = " ELSE `payment_terms` END WHERE " if records: dataent.db.sql( begin_query_str + value_query_str + cond_query_str + '`name` IN %s', (records, ))
def reload_doctypes(): for doctype in ("razorpay_settings", "paypal_settings", "dropbox_settings", "ldap_settings"): dataent.reload_doc("integrations", "doctype", doctype)
def execute(): dataent.reload_doc("manufacturing", "doctype", "bom") company = dataent.db.get_value("Global Defaults", None, "default_company") dataent.db.sql("""update `tabBOM` set company = %s""",company)
def execute(): dataent.reload_doc("website", "doctype", "website_theme") dataent.reload_doc("website", "website_theme", "standard") dataent.reload_doctype("Website Settings") migrate_style_settings() dataent.delete_doc("website", "doctype", "style_settings")
def execute(): dataent.reload_doc('stock', 'doctype', 'material_request_item') rename_field("Material Request Item", "sales_order_no", "sales_order") dataent.reload_doc('support', 'doctype', 'maintenance_schedule_item') rename_field("Maintenance Schedule Item", "prevdoc_docname", "sales_order")
def execute(): dataent.reload_doc("workflow", "doctype", "workflow_transition") dataent.db.sql("update `tabWorkflow Transition` set allow_self_approval=1")
def execute(): dataent.reload_doc('crm', 'doctype', 'lead') dataent.reload_doc('crm', 'doctype', 'opportunity') add_crm_to_user_desktop_items()
def execute(): dataent.reload_doc("accounts", "doctype", "sales_invoice_item") dataent.reload_doc('accounts', 'doctype', 'purchase_invoice_item') dataent.reload_doc('buying', 'doctype', 'purchase_order_item') dataent.reload_doc('buying', 'doctype', 'supplier_quotation_item') dataent.reload_doc('selling', 'doctype', 'sales_order_item') dataent.reload_doc('selling', 'doctype', 'quotation_item') dataent.reload_doc('stock', 'doctype', 'delivery_note_item') dataent.reload_doc('stock', 'doctype', 'purchase_receipt_item') selling_doctypes = [ "Sales Order Item", "Sales Invoice Item", "Delivery Note Item", "Quotation Item" ] buying_doctypes = [ "Purchase Order Item", "Purchase Invoice Item", "Purchase Receipt Item", "Supplier Quotation Item" ] for doctype in selling_doctypes: dataent.db.sql(''' UPDATE `tab%s` SET discount_amount = if(rate_with_margin > 0, rate_with_margin, price_list_rate) * discount_percentage / 100 WHERE discount_percentage > 0 ''' % (doctype)) for doctype in buying_doctypes: dataent.db.sql(''' UPDATE `tab%s` SET discount_amount = price_list_rate * discount_percentage / 100 WHERE discount_percentage > 0 ''' % (doctype))
def execute(): dataent.reload_doc('accounts', 'doctype', 'pos_settings') doc = dataent.get_doc('POS Settings') doc.use_pos_in_offline_mode = 1 doc.save()
def execute(): dataent.reload_doc('projects', 'doctype', 'project') if dataent.db.has_column('Project', 'from'): rename_field('Project', 'from', 'from_time') rename_field('Project', 'to', 'to_time')
def execute(): rename_doc('DocType', 'Health Insurance', 'Employee Health Insurance', force=True) dataent.reload_doc('hr', 'doctype', 'employee_health_insurance')
def execute(): dataent.reload_doc('buying', 'doctype', 'supplier_scorecard_variable') dataent.reload_doc('buying', 'doctype', 'supplier_scorecard_standing') make_default_records()
def execute(): dataent.reload_doc('core', 'doctype', 'system_settings') dataent.db.sql("update `tabSystem Settings` set allow_error_traceback=1")
def execute(): dataent.reload_doc('setup', 'doctype', 'currency_exchange') dataent.db.sql( """update `tabCurrency Exchange` set for_buying = 1, for_selling = 1""" )