def execute():
	frappe.reload_doctype("Sales Order Item")

	repost_for = frappe.db.sql("""
		select
			distinct item_code, warehouse
		from
			(
				(
					select distinct item_code, warehouse
								from `tabSales Order Item` where docstatus=1
				) UNION (
					select distinct item_code, warehouse
					from `tabPacked Item` where docstatus=1 and parenttype='Sales Order'
				)
			) so_item
		where
			exists(select name from tabItem where name=so_item.item_code and ifnull(is_stock_item, 0)=1)
	""")

	for item_code, warehouse in repost_for:
			update_bin_qty(item_code, warehouse, {
				"reserved_qty": get_reserved_qty(item_code, warehouse)
			})

	frappe.db.sql("""delete from tabBin
		where exists(
			select name from tabItem where name=tabBin.item_code and ifnull(is_stock_item, 0) = 0
		)
	""")
def execute():
	item_details = frappe._dict()
	for d in frappe.db.sql("select name, description from `tabItem`", as_dict=1):
		description = cstr(d.description).strip()
		new_desc = extract_description(description)

		item_details.setdefault(d.name, frappe._dict({
			"old_description": description,
			"new_description": new_desc
		}))


	dt_list= ["Purchase Order Item","Supplier Quotation Item", "BOM", "BOM Explosion Item" , \
	"BOM Item", "Opportunity Item" , "Quotation Item" , "Sales Order Item" , "Delivery Note Item" , \
	"Material Request Item" , "Purchase Receipt Item" , "Stock Entry Detail"]
	for dt in dt_list:
		frappe.reload_doctype(dt)
		records = frappe.db.sql("""select name, `{0}` as item_code, description from `tab{1}`
			where description is not null and description like '%%<table%%'"""
			.format("item" if dt=="BOM" else "item_code", dt), as_dict=1)

		count = 1
		for d in records:
			if d.item_code and item_details.get(d.item_code) \
					and cstr(d.description) == item_details.get(d.item_code).old_description:
				desc = item_details.get(d.item_code).new_description
			else:
				desc = extract_description(cstr(d.description))

			frappe.db.sql("""update `tab{0}` set description = %s
				where name = %s """.format(dt), (desc, d.name))

			count += 1
			if count % 500 == 0:
				frappe.db.commit()
def execute():
	item_details = frappe._dict()
	for d in frappe.db.sql("select name, description, image from `tabItem`", as_dict=1):
		description = cstr(d.description).strip()
		item_details.setdefault(d.name, frappe._dict({
			"description": description,
			"image": d.image
		}))


	dt_list= ["Sales Invoice Item","Purchase Invoice Item"]
	for dt in dt_list:
		frappe.reload_doctype(dt)
		records = frappe.db.sql("""select name, item_code, description from `tab{0}`
			where ifnull(item_code, '') != '' and description is not null """.format(dt), as_dict=1)

		count = 1
		for d in records:
			if item_details.get(d.item_code) and cstr(d.description) == item_details.get(d.item_code).description:
				desc = item_details.get(d.item_code).description
				image = item_details.get(d.item_code).image
			else:
				desc, image = extract_image_and_description(cstr(d.description))
				
				if not image:
					item_detail = item_details.get(d.item_code)
					if item_detail:
						image = item_detail.image

			frappe.db.sql("""update `tab{0}` set description = %s, image = %s
				where name = %s """.format(dt), (desc, image, d.name))

			count += 1
			if count % 500 == 0:
				frappe.db.commit()
def execute():
	if not frappe.db.get_single_value("Accounts Settings", "auto_accounting_for_stock"):
		return
	
	frappe.reload_doctype("Account")

	warehouses = frappe.db.sql_list("""select name from tabAccount
		where account_type = 'Stock' and is_group = 0
		and (warehouse is null or warehouse = '')""")
	if warehouses:
		warehouses = set_warehouse_for_stock_account(warehouses)

		stock_vouchers = frappe.db.sql("""select distinct sle.voucher_type, sle.voucher_no
			from `tabStock Ledger Entry` sle
			where sle.warehouse in (%s) and creation > '2016-05-01'
			and not exists(select name from `tabGL Entry` 
				where account=sle.warehouse and voucher_type=sle.voucher_type and voucher_no=sle.voucher_no)
			order by sle.posting_date""" %
			', '.join(['%s']*len(warehouses)), tuple(warehouses))

		rejected = []
		for voucher_type, voucher_no in stock_vouchers:
			try:
				frappe.db.sql("""delete from `tabGL Entry`
					where voucher_type=%s and voucher_no=%s""", (voucher_type, voucher_no))

				voucher = frappe.get_doc(voucher_type, voucher_no)
				voucher.make_gl_entries()
				frappe.db.commit()
			except Exception, e:
				print frappe.get_traceback()
				rejected.append([voucher_type, voucher_no])
				frappe.db.rollback()

		print rejected
def execute():
	frappe.reload_doctype("Email Digest")
	frappe.db.sql("""update `tabEmail Digest` set expense_year_to_date =
		income_year_to_date""")

	if frappe.db.exists("Email Digest", "Scheduler Errors"):
		frappe.delete_doc("Email Digest", "Scheduler Errors")
def execute():
	frappe.reload_doctype('Purchase Order Item')
	frappe.reload_doctype('Purchase Receipt Item')
	update_po_fields()
	update_prop_setters_reports_print_format_for_po()
	set_sales_order_field()
	rename_pr_fields()
def execute():
	for doctype in ("Purchase Receipt Item", "Delivery Note Item"):
		frappe.reload_doctype(doctype)

		table_columns = frappe.db.get_table_columns(doctype)
		if "qa_no" in table_columns:
			rename_field(doctype, "qa_no", "quality_inspection")

	frappe.reload_doctype("Item")
	rename_field("Item", "inspection_required", "inspection_required_before_purchase")

	frappe.reload_doc('stock', 'doctype', 'quality_inspection')
	frappe.db.sql("""
		update
			`tabQuality Inspection`
		set
			reference_type = 'Purchase Receipt', reference_name = purchase_receipt_no
		where
			ifnull(purchase_receipt_no, '') != '' and inspection_type = 'Incoming'
	""")

	frappe.db.sql("""
		update
			`tabQuality Inspection`
		set
			reference_type = 'Delivery Note', reference_name = delivery_note_no
		where
			ifnull(delivery_note_no, '') != '' and inspection_type = 'Outgoing'
	""")

	for old_fieldname in ["purchase_receipt_no", "delivery_note_no"]:
		update_reports("Quality Inspection", old_fieldname, "reference_name")
		update_users_report_view_settings("Quality Inspection", old_fieldname, "reference_name")
		update_property_setters("Quality Inspection", old_fieldname, "reference_name")
def execute():
	frappe.reload_doctype("Sales Order Item")
	for so_name in frappe.db.sql("""select distinct parent from `tabSales Order Item`
			where delivered_by_supplier=1 and docstatus=1"""):
		so = frappe.get_doc("Sales Order", so_name[0])
		so.update_delivery_status()
		so.set_status(update=True, update_modified=False)
def execute():
	frappe.reload_doctype('Company')
	enabled = frappe.db.get_single_value("Accounts Settings", "auto_accounting_for_stock") or 0
	for data in frappe.get_all('Company', fields = ["name"]):
		doc = frappe.get_doc('Company', data.name)
		doc.enable_perpetual_inventory = enabled
		doc.db_update()
def execute():
	sync_fixtures("erpnext_shopify")
	frappe.reload_doctype("Item")

	shopify_settings = frappe.get_doc("Shopify Settings")
	if not shopify_settings.enable_shopify:
		return

	try:
		shopify_items = get_item_list()
	except ShopifyError:
		print "Could not run shopify patch 'set_variant_id' for site: {0}".format(frappe.local.site)
		return

	if shopify_settings.shopify_url and shopify_items:
		for item in frappe.db.sql("""select name, item_code, shopify_id, has_variants, variant_of from tabItem
			where sync_with_shopify=1 and shopify_id is not null""", as_dict=1):

			if item.get("variant_of"):
				frappe.db.sql(""" update tabItem set shopify_variant_id=shopify_id
					where name = %s """, item.get("name"))

			elif not item.get("has_variants"):
				product = filter(lambda shopify_item: shopify_item['id'] == cint(item.get("shopify_id")), shopify_items)

				if product:
					frappe.db.sql(""" update tabItem set shopify_variant_id=%s
						where name = %s """, (product[0]["variants"][0]["id"], item.get("name")))
Exemple #11
0
def execute():
	frappe.reload_doctype("Feed")

	frappe.db.sql("update `tabFeed` set seen=1")

	for doctype, name in frappe.db.sql("""select distinct doc_type, doc_name from `tabFeed`
		where
			(doc_type is not null and doc_type != '')
			and (doc_name is not null and doc_name != '')
			and doc_type != 'Feed'
		for update"""):

		owner = frappe.db.get_value(doctype, name, "owner")

		if not owner:
			continue

		frappe.db.sql("""update `tabFeed`
			set doc_owner=%(owner)s
			where
				doc_type=%(doctype)s
				and doc_name=%(name)s
				and (doc_owner is null or doc_owner = '')""".format(doctype=doctype), {
					"doctype": doctype,
					"name": name,
					"owner": owner
				})

		frappe.db.commit()
def execute():
	from frappe.core.doctype.file.file import make_home_folder

	if not frappe.db.exists("DocType", "File"):
		frappe.rename_doc("DocType", "File Data", "File")
		frappe.reload_doctype("File")

	if not frappe.db.exists("File", {"is_home_folder": 1}):
		make_home_folder()

	# make missing folders and set parent folder
	for file in frappe.get_all("File", filters={"is_folder": 0}):
		file = frappe.get_doc("File", file.name)
		file.flags.ignore_folder_validate = True
		file.flags.ignore_file_validate = True
		file.flags.ignore_duplicate_entry_error = True
		file.flags.ignore_links = True
		file.set_folder_name()
		try:
			file.save()
		except:
			print frappe.get_traceback()
			raise

	from frappe.utils.nestedset import rebuild_tree
	rebuild_tree("File", "folder")

	# reset file size
	for folder in frappe.db.sql("""select name from tabFile f1 where is_folder = 1 and
		(select count(*) from tabFile f2 where f2.folder = f1.name and f2.is_folder = 1) = 0"""):
		folder = frappe.get_doc("File", folder[0])
		folder.save()
def execute():
	frappe.reload_doctype('Custom Role')
	
	# set ref doctype in custom role for reports
	frappe.db.sql(""" update `tabCustom Role` set 
		`tabCustom Role`.ref_doctype = (select ref_doctype from `tabReport` where name = `tabCustom Role`.report)
		where `tabCustom Role`.report is not null""")
def execute():
	frappe.reload_doctype("Production Order")
	frappe.db.sql("""update `tabProduction Order` set material_transferred_for_manufacturing=
		(select sum(fg_completed_qty) from `tabStock Entry`
			where docstatus=1
			and production_order=`tabProduction Order`.name
			and purpose = "Material Transfer for Manufacture")""")
def execute():
	# convert milestones to tasks
	frappe.reload_doctype("Project")
	frappe.reload_doc("projects", "doctype", "project_task")
	frappe.reload_doctype("Task")
	frappe.reload_doc("projects", "doctype", "task_depends_on")

	for m in frappe.get_all("Project Milestone", "*"):
		if (m.milestone and m.milestone_date
			and frappe.db.exists("Project", m.parent)):
			task = frappe.get_doc({
				"doctype": "Task",
				"subject": m.milestone,
				"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
	frappe.delete_doc("DocType", "Project Milestone")

	# remove calendar events for milestone
	for e in frappe.get_all("Event", ["name"], {"ref_type": "Project"}):
		frappe.delete_doc("Event", e.name)
def execute():
	frappe.reload_doctype("Currency Exchange")
	frappe.db.sql("""
		update `tabCurrency Exchange` 
		set `date` = '2010-01-01' 
		where date is null or date = '' or date = '0000-00-00'
	""")
def execute():
	frappe.reload_doctype('Task')
	for t in frappe.get_all('Task', fields=['name']):
		task = frappe.get_doc('Task', t.name)
		task.update_depends_on()
		if task.depends_on_tasks:
			task.db_set('depends_on_tasks', task.depends_on_tasks, update_modified=False)
Exemple #18
0
def execute():
	frappe.reload_doctype("Communication")

	for doctype, name in frappe.db.sql("""select distinct reference_doctype, reference_name
		from `tabCommunication`
		where
			(reference_doctype is not null and reference_doctype != '')
			and (reference_name is not null and reference_name != '')
			and (reference_owner is null or reference_owner = '')
		for update"""):

		owner = frappe.db.get_value(doctype, name, "owner")

		if not owner:
			continue

		frappe.db.sql("""update `tabCommunication`
			set reference_owner=%(owner)s
			where
				reference_doctype=%(doctype)s
				and reference_name=%(name)s
				and (reference_owner is null or reference_owner = '')""".format(doctype=doctype), {
					"doctype": doctype,
					"name": name,
					"owner": owner
				})

		frappe.db.commit()
def execute():
	# stock reco now amendable
	frappe.db.sql("""update tabDocPerm set `amend` = 1 where parent='Stock Reconciliation' and submit = 1""")

	frappe.reload_doc("stock", "doctype", "stock_reconciliation_item")
	frappe.reload_doctype("Stock Reconciliation")
	
	if frappe.db.has_column("Stock Reconciliation", "reconciliation_json"):
		for sr in frappe.db.get_all("Stock Reconciliation", ["name"],
			{"reconciliation_json": ["!=", ""]}):
			start = False
			sr = frappe.get_doc("Stock Reconciliation", sr.name)
			for row in json.loads(sr.reconciliation_json):
				if start:
					sr.append("items", {
						"item_code": row[0],
						"warehouse": row[1],
						"qty": row[2] if len(row) > 2 else None,
						"valuation_rate": row[3] if len(row) > 3 else None
					})

				elif row[0]=="Item Code":
					start = True


			for item in sr.items:
				item.db_update()
def execute():
    frappe.reload_doctype("Purchase Order")
    frappe.reload_doctype("Purchase Order Item")

    if not frappe.db.has_column("Purchase Order", "delivered_by_supplier"):
        return

    for po in frappe.get_all("Purchase Order", filters={"delivered_by_supplier": 1}, fields=["name"]):
        purchase_order = frappe.get_doc("Purchase Order", po)

        for item in purchase_order.items:
            if item.prevdoc_doctype == "Sales Order":
                delivered_by_supplier = frappe.get_value(
                    "Sales Order Item", item.prevdoc_detail_docname, "delivered_by_supplier"
                )

                if delivered_by_supplier:
                    frappe.db.sql(
                        """update `tabPurchase Order Item`
						set delivered_by_supplier=1, billed_amt=amount, received_qty=qty
						where name=%s """,
                        item.name,
                    )

        update_per_received(purchase_order)
        update_per_billed(purchase_order)
def execute():
	frappe.reload_doctype('Salary Slip', 'Salary Component')
	salary_components = [['Arrear', "ARR"], ['Leave Encashment', 'LENC']]
	for salary_component, salary_abbr in salary_components:
		if not frappe.db.exists('Salary Component', salary_component):
			sal_comp = frappe.get_doc({
				"doctype": "Salary Component",
				"salary_component": salary_component,
				"type": "Earning",
				"salary_component_abbr": salary_abbr
			}).insert()

	salary_slips = frappe.db.sql("""select name, arrear_amount, leave_encashment_amount from `tabSalary Slip`
					where docstatus !=2 and (arrear_amount > 0 or leave_encashment_amount > 0)""", as_dict=True)

	for salary_slip in salary_slips:
		doc = frappe.get_doc('Salary Slip', salary_slip.name)

		if salary_slip.get("arrear_amount") > 0:
			r = doc.append('earnings', {
				'salary_component': 'Arrear',
				'amount': salary_slip.arrear_amount
			})
			r.db_update()

		if salary_slip.get("leave_encashment_amount") > 0:
			r = doc.append('earnings', {
				'salary_component': 'Leave Encashment',
				'amount': salary_slip.leave_encashment_amount
			})
			r.db_update()
def execute():
	frappe.reload_doctype("Web Form")
	frappe.delete_doc("Web Form", "Issues")
	frappe.delete_doc("Web Form", "Addresses")

	from erpnext.setup.install import add_web_forms
	add_web_forms()
Exemple #23
0
def execute():
	# Reload doctype
	for dt in ("Account", "GL Entry", "Journal Entry",
		"Journal Entry Account", "Sales Invoice", "Purchase Invoice", "Customer", "Supplier"):
			frappe.reload_doctype(dt)

	company_list = frappe.get_all("Company", fields=["name", "default_currency", "default_receivable_account"])
	for company in company_list:

		# update currency in account and gl entry as per company currency
		frappe.db.sql("""update `tabAccount` set account_currency = %s
			where ifnull(account_currency, '') = '' and company=%s""", (company.default_currency, company.name))

		# update newly introduced field's value in sales / purchase invoice
		frappe.db.sql("""
			update
				`tabSales Invoice`
			set
				base_paid_amount=paid_amount,
				base_write_off_amount=write_off_amount,
				party_account_currency=%s
			where company=%s
		""", (company.default_currency, company.name))

		frappe.db.sql("""
			update
				`tabPurchase Invoice`
			set
				base_write_off_amount=write_off_amount,
				party_account_currency=%s
			where company=%s
		""", (company.default_currency, company.name))

		# update exchange rate, debit/credit in account currency in Journal Entry
		frappe.db.sql("""
			update `tabJournal Entry Account` jea
			set exchange_rate=1,
				debit_in_account_currency=debit,
				credit_in_account_currency=credit,
				account_type=(select account_type from `tabAccount` where name=jea.account)
		""")

		frappe.db.sql("""
			update `tabJournal Entry Account` jea, `tabJournal Entry` je
			set account_currency=%s
			where jea.parent = je.name and je.company=%s
		""", (company.default_currency, company.name))

		# update debit/credit in account currency in GL Entry
		frappe.db.sql("""
			update
				`tabGL Entry`
			set
				debit_in_account_currency=debit,
				credit_in_account_currency=credit,
				account_currency=%s
			where
				company=%s
		""", (company.default_currency, company.name))
def execute():
	frappe.reload_doctype('Student Attendance')
	# frappe.reload_doc("schools", "doctype", "student_attendance")
	frappe.db.sql('''
		update `tabStudent Attendance` set
			docstatus=0
		where
			docstatus=1''')
def execute():
	frappe.reload_doctype("Quotation")
	frappe.db.sql(""" UPDATE `tabQuotation` set party_name = lead WHERE quotation_to = 'Lead' """)
	frappe.db.sql(""" UPDATE `tabQuotation` set party_name = customer WHERE quotation_to = 'Customer' """)

	frappe.reload_doctype("Opportunity")
	frappe.db.sql(""" UPDATE `tabOpportunity` set party_name = lead WHERE opportunity_from = 'Lead' """)
	frappe.db.sql(""" UPDATE `tabOpportunity` set party_name = customer WHERE opportunity_from = 'Customer' """)
def execute():
	for dt in ("Sales Invoice Advance", "Purchase Invoice Advance"):
		frappe.reload_doctype(dt)
		
		frappe.db.sql("update `tab{0}` set reference_type = 'Journal Entry'".format(dt))
		
		rename_field(dt, "journal_entry", "reference_name")
		rename_field(dt, "jv_detail_no", "reference_row")
def execute():
	'''Update company monthly sales history based on sales invoices'''
	frappe.reload_doctype("Company")
	companies = [d['name'] for d in frappe.get_list("Company")]

	for company in companies:
		update_company_current_month_sales(company)
		update_company_monthly_sales(company)
def execute():
	
	doc_list = ["Purchase Invoice Item", "Stock Entry Detail", "Delivery Note Item", 
		"Purchase Receipt Item", "Sales Invoice Item"]
	
	for doctype in doc_list:
		frappe.reload_doctype(doctype)
		rename_field(doctype, "is_sample_item", "allow_zero_valuation_rate")
Exemple #29
0
def rename_and_reload_doctypes():
	if "tabVariant Attribute" in frappe.db.get_tables():
		frappe.rename_doc("DocType", "Variant Attribute", "Item Variant Attribute")

	frappe.reload_doctype("Item")
	frappe.reload_doc("Stock", "DocType", "Item Variant Attribute")
	frappe.reload_doc("Stock", "DocType", "Item Attribute Value")
	frappe.reload_doc("Stock", "DocType", "Item Attribute")
Exemple #30
0
	def set_values(self):
		'''set values based on `data.set_value`'''
		if self.data.set_value:
			for args in self.data.set_value:
				frappe.reload_doctype(args[0])
				doc = frappe.get_doc(args[0], args[1] or args[0])
				doc.set(args[2], args[3])
				doc.save()
Exemple #31
0
def execute():
    frappe.reload_doctype('Employee')
    frappe.db.sql('update tabEmployee set first_name = employee_name')

    # update holiday list
    frappe.reload_doctype('Holiday List')
    for holiday_list in frappe.get_all('Holiday List'):
        holiday_list = frappe.get_doc('Holiday List', holiday_list.name)
        holiday_list.db_set('total_holidays',
                            len(holiday_list.holidays),
                            update_modified=False)
def execute():
    frappe.reload_doctype("POS Profile")
    frappe.reload_doctype("Sales Invoice Payment")

    frappe.db.sql("""
		update
			`tabSales Invoice Payment`
		set `tabSales Invoice Payment`.default = 1
		where
			`tabSales Invoice Payment`.parenttype = 'POS Profile'
			and `tabSales Invoice Payment`.idx=1""")
Exemple #33
0
def execute():
    frappe.reload_doctype('Supplier Quotation Item')
    for data in frappe.db.sql(
            """ select prevdoc_docname, prevdoc_detail_docname, name
		from `tabSupplier Quotation Item` where prevdoc_docname is not null""",
            as_dict=True):
        frappe.db.set_value("Supplier Quotation Item", data.name,
                            "material_request", data.prevdoc_docname)
        frappe.db.set_value("Supplier Quotation Item", data.name,
                            "material_request_item",
                            data.prevdoc_detail_docname)
def execute():
	frappe.reload_doctype('Salary Slip')
	if not frappe.db.has_column('Salary Detail', 'abbr'):
		return

	salary_details = frappe.db.sql("""select abbr, salary_component, name from `tabSalary Detail`
				where abbr is null or abbr = ''""", as_dict=True)

	for salary_detail in salary_details:
		salary_component_abbr = frappe.get_value("Salary Component", salary_detail.salary_component, "salary_component_abbr")
		frappe.db.sql("""update `tabSalary Detail` set abbr = %s where name = %s""",(salary_component_abbr, salary_detail.name))
Exemple #35
0
def execute():
    for doctype in ('Sales Order', 'Purchase Order', 'Sales Invoice',
                    'Purchase Invoice'):
        frappe.reload_doctype(doctype)
        frappe.db.sql(
            '''update `tab{0}` set submit_on_creation=1, notify_by_email=1
			where is_recurring=1'''.format(doctype))
        frappe.db.sql('''update `tab{0}` set notify_by_email=1
			where is_recurring=1'''.format(doctype))
        frappe.db.sql('''update `tab{0}` set recurring_id = name
			where is_recurring=1 and ifnull(recurring_id, '') = "" '''.format(doctype))
def execute():
	for doctype in ("Sales Order Item", "Bin"):
		frappe.reload_doctype(doctype)

	repost_for = frappe.db.sql("""select distinct item_code, warehouse
		from `tabSales Order Item` where docstatus=1 and uom != stock_uom and
		exists(select name from tabItem where name=`tabSales Order Item`.item_code and ifnull(is_stock_item, 0)=1)""")

	for item_code, warehouse in repost_for:
		update_bin_qty(item_code, warehouse, {
			"reserved_qty": get_reserved_qty(item_code, warehouse)
		})
Exemple #37
0
def execute():
    frappe.reload_doctype("Notification")
    for e in frappe.get_all("Notification"):
        notification = frappe.get_doc("Notification", e.name)
        if notification.event == "Date Change":
            if notification.days_in_advance < 0:
                notification.event = "Days After"
                notification.days_in_advance = -email_alert.days_in_advance
            else:
                notification.event = "Days Before"

            notification.save()
Exemple #38
0
def execute():
    frappe.reload_doctype("Serial No")

    frappe.db.sql("""
		update
			`tabSerial No`
		set
			sales_invoice = NULL
		where
			sales_invoice in (select return_against from
				`tabSales Invoice` where docstatus =1 and is_return=1)
			and sales_invoice is not null and sales_invoice !='' """)
Exemple #39
0
def execute():

    doc_list = [
        "Purchase Invoice Item", "Stock Entry Detail", "Delivery Note Item",
        "Purchase Receipt Item", "Sales Invoice Item"
    ]

    for doctype in doc_list:
        frappe.reload_doctype(doctype)
        if "is_sample_item" in frappe.db.get_table_columns(doctype):
            rename_field(doctype, "is_sample_item",
                         "allow_zero_valuation_rate")
def execute():
    frappe.reload_doctype('GL Entry')
    frappe.db.sql("""
            UPDATE
                `tabGL Entry`
            SET
                against_voucher_type = 'Loan',
                against_voucher = voucher_no
            WHERE voucher_type = 'Loan'
            AND against_voucher_type IS NULL
            AND against_voucher IS NULL
        """)
def execute():
    for dt in ("Sales Invoice Advance", "Purchase Invoice Advance"):
        frappe.reload_doctype(dt)

        frappe.db.sql(
            "update `tab{0}` set reference_type = 'Journal Entry'".format(dt))

        if frappe.get_meta(dt).has_field('journal_entry'):
            rename_field(dt, "journal_entry", "reference_name")

        if frappe.get_meta(dt).has_field('jv_detail_no'):
            rename_field(dt, "jv_detail_no", "reference_row")
Exemple #42
0
def execute():
    frappe.reload_doctype("Sales Invoice")
    return_entries = frappe.get_list(
        "Sales Invoice",
        filters={
            "is_return": 1,
            "docstatus": 1
        },
        fields=["debit_to", "customer", "return_against"])
    for d in return_entries:
        update_outstanding_amt(d.debit_to, "Customer", d.customer,
                               "Sales Invoice", d.return_against)
def execute():
	'''Get 'Disable CWIP Accounting value' from Asset Settings, set it in 'Enable Capital Work in Progress Accounting' field
	in Company, delete Asset Settings '''

	if frappe.db.exists("DocType", "Asset Settings"):
		frappe.reload_doctype("Asset Category")
		cwip_value = frappe.db.get_single_value("Asset Settings", "disable_cwip_accounting")
		
		frappe.db.sql("""UPDATE `tabAsset Category` SET enable_cwip_accounting = %s""", cint(cwip_value))

		frappe.db.sql("""DELETE FROM `tabSingles` where doctype = 'Asset Settings'""")
		frappe.delete_doc_if_exists("DocType", "Asset Settings")
def execute():
    frappe.reload_doctype("Pricing Rule")

    currency = frappe.db.get_default("currency")
    for doc in frappe.get_all('Pricing Rule', fields=["company", "name"]):
        if doc.company:
            currency = frappe.get_cached_value('Company', doc.company,
                                               "default_currency")

        frappe.db.sql(
            """update `tabPricing Rule` set currency = %s where name = %s""",
            (currency, doc.name))
def execute():
    frappe.reload_doctype("Shipping Rule")

    # default "calculate_based_on"
    frappe.db.sql('''update `tabShipping Rule`
		set calculate_based_on = "Net Weight"
		where ifnull(calculate_based_on, '') = '' ''')

    # default "shipping_rule_type"
    frappe.db.sql('''update `tabShipping Rule`
		set shipping_rule_type = "Selling"
		where ifnull(shipping_rule_type, '') = '' ''')
Exemple #46
0
def reload_doctype(context, doctype):
    "Reload schema for a DocType"
    for site in context.sites:
        try:
            frappe.init(site=site)
            frappe.connect()
            frappe.reload_doctype(doctype, force=context.force)
            frappe.db.commit()
        finally:
            frappe.destroy()
    if not context.sites:
        raise SiteNotSpecifiedError
def execute():
	frappe.reload_doctype("Email Alert")
	for e in frappe.get_all("Email Alert"):
		email_alert = frappe.get_doc("Email Alert", e.name)
		if email_alert.event == "Date Change":
			if email_alert.days_in_advance < 0:
				email_alert.event = "Days After"
				email_alert.days_in_advance = -email_alert.days_in_advance
			else:
				email_alert.event = "Days Before"

			email_alert.save()
Exemple #48
0
def execute():
    frappe.reload_doctype("Sales Order")
    frappe.reload_doctype("Sales Order Item")

    frappe.db.sql(
        """update `tabSales Order` set final_delivery_date = delivery_date where docstatus=1"""
    )

    frappe.db.sql("""
		update `tabSales Order` so, `tabSales Order Item` so_item
		set so_item.delivery_date = so.delivery_date
		where so.name = so_item.parent
	""")
Exemple #49
0
def execute():
    """ set status as Paid in Expense Claim if total_sactioned_amount 
		and total_amount_reimbursed is equal """

    frappe.reload_doctype('Expense Claim')

    frappe.db.sql("""
		update 
			`tabExpense Claim`
		set status = 'Paid'
		where 
			total_sanctioned_amount = total_amount_reimbursed
	""")
def execute():
    frappe.reload_doctype('Role')
    for dt in ("assessment", "course", "fees"):
        frappe.reload_doc("schools", "doctype", dt)

    frappe.reload_doc('website', 'doctype', 'portal_menu_item')

    frappe.get_doc('Portal Settings').sync_menu()

    if 'schools' in frappe.get_installed_apps():
        domainify.setup_domain('Education')
    else:
        domainify.setup_sidebar_items(domainify.get_domain('Manufacturing'))
def execute():
    frappe.reload_doctype('Sales Order Item')
    frappe.reload_doctype('Sales Order')

    for d in frappe.get_all('Work Order',
                            fields=['sales_order', 'sales_order_item'],
                            filters={
                                'sales_order': ('!=', ''),
                                'sales_order_item': ('!=', '')
                            }):

        # update produced qty in sales order
        update_produced_qty_in_so_item(d.sales_order, d.sales_order_item)
def execute():
    frappe.reload_doctype("Selling Settings")
    selling_settings = frappe.get_single("Selling Settings")

    if selling_settings.customer_group in (_("All Customer Groups"),
                                           "All Customer Groups"):
        selling_settings.customer_group = None

    if selling_settings.territory in (_("All Territories"), "All Territories"):
        selling_settings.territory = None

    selling_settings.flags.ignore_mandatory = True
    selling_settings.save(ignore_permissions=True)
Exemple #53
0
def execute():
    if "purchase_receipt" not in frappe.db.get_table_columns(
            "Landed Cost Purchase Receipt"):
        return

    frappe.reload_doctype("Landed Cost Purchase Receipt")

    frappe.db.sql("""
		update `tabLanded Cost Purchase Receipt`
		set receipt_document_type = 'Purchase Receipt', receipt_document = purchase_receipt
		where (receipt_document is null or receipt_document = '')
			and (purchase_receipt is not null and purchase_receipt != '')
	""")
Exemple #54
0
def execute():
    frappe.reload_doc("stock", "doctype", "manufacturer")
    frappe.reload_doctype("Item")

    for d in frappe.db.sql("""select distinct manufacturer from tabItem 
		where ifnull(manufacturer, '') != '' and disabled=0"""):
        manufacturer_name = cstr(d[0]).strip()
        if manufacturer_name and not frappe.db.exists("Manufacturer",
                                                      manufacturer_name):
            man = frappe.new_doc("Manufacturer")
            man.short_name = manufacturer_name
            man.full_name = manufacturer_name
            man.save()
Exemple #55
0
def execute():
	'''
	Remove the doctype "Custom Link" that was used to add Custom Links to the
	Dashboard since this is now managed by Customize Form.
	Update `parent` property to the DocType and delte the doctype
	'''
	frappe.reload_doctype('DocType Link')
	if frappe.db.has_table('Custom Link'):
		for custom_link in frappe.get_all('Custom Link', ['name', 'document_type']):
			frappe.db.sql('update `tabDocType Link` set custom=1, parent=%s where parent=%s',
				(custom_link.document_type, custom_link.name))

		frappe.delete_doc('DocType', 'Custom Link')
Exemple #56
0
def execute():
    frappe.reload_doctype('Document Naming Rule')

    doc = frappe.get_doc({
        'doctype': 'Document Naming Rule',
        'document_type': 'Sales Invoice',
        'priority': 1,
        'prefix': 'Recibo No. ',
        'prefix_digits': 6,
        'counter': 0
    })

    doc.insert()
Exemple #57
0
def execute():
	frappe.reload_doctype('Task')

	# add "Completed" if customized
	property_setter_name = frappe.db.exists('Property Setter', dict(doc_type='Task', field_name = 'status', property = 'options'))
	if property_setter_name:
		property_setter = frappe.get_doc('Property Setter', property_setter_name)
		if not "Completed" in property_setter.value:
			property_setter.value = property_setter.value + '\nCompleted'
			property_setter.save()

	# renamed default status to Completed as status "Closed" is ambiguous
	frappe.db.sql('update tabTask set status = "Completed" where status = "Closed"')
Exemple #58
0
def execute():
	frappe.reload_doctype("Purchase Invoice")

	for pi in frappe.db.sql("""select name from `tabPurchase Invoice` 
		where company in(select name from tabCompany where enable_perpetual_inventory = 1) and 
		update_stock=1 and docstatus=1 order by posting_date asc""", as_dict=1):
		
			frappe.db.sql("""delete from `tabGL Entry` 
				where voucher_type = 'Purchase Invoice' and voucher_no = %s""", pi.name)
				
			pi_doc = frappe.get_doc("Purchase Invoice", pi.name)
			pi_doc.make_gl_entries(repost_future_gle=False)
			frappe.db.commit()
Exemple #59
0
	def test_index_and_unique_constraints(self):
		doctype = "User"
		frappe.reload_doctype("User", force=True)
		frappe.model.meta.trim_tables("User")

		make_property_setter(doctype, "restrict_ip", "unique", "1", "Int")
		frappe.db.updatedb(doctype)
		restrict_ip_in_table = get_table_column("User", "restrict_ip")
		self.assertTrue(restrict_ip_in_table.unique)

		make_property_setter(doctype, "restrict_ip", "unique", "0", "Int")
		frappe.db.updatedb(doctype)
		restrict_ip_in_table = get_table_column("User", "restrict_ip")
		self.assertFalse(restrict_ip_in_table.unique)

		make_property_setter(doctype, "restrict_ip", "search_index", "1", "Int")
		frappe.db.updatedb(doctype)
		restrict_ip_in_table = get_table_column("User", "restrict_ip")
		self.assertTrue(restrict_ip_in_table.index)

		make_property_setter(doctype, "restrict_ip", "search_index", "0", "Int")
		frappe.db.updatedb(doctype)
		restrict_ip_in_table = get_table_column("User", "restrict_ip")
		self.assertFalse(restrict_ip_in_table.index)

		make_property_setter(doctype, "restrict_ip", "search_index", "1", "Int")
		make_property_setter(doctype, "restrict_ip", "unique", "1", "Int")
		frappe.db.updatedb(doctype)
		restrict_ip_in_table = get_table_column("User", "restrict_ip")
		self.assertTrue(restrict_ip_in_table.index)
		self.assertTrue(restrict_ip_in_table.unique)

		make_property_setter(doctype, "restrict_ip", "search_index", "1", "Int")
		make_property_setter(doctype, "restrict_ip", "unique", "0", "Int")
		frappe.db.updatedb(doctype)
		restrict_ip_in_table = get_table_column("User", "restrict_ip")
		self.assertTrue(restrict_ip_in_table.index)
		self.assertFalse(restrict_ip_in_table.unique)

		make_property_setter(doctype, "restrict_ip", "search_index", "0", "Int")
		make_property_setter(doctype, "restrict_ip", "unique", "1", "Int")
		frappe.db.updatedb(doctype)
		restrict_ip_in_table = get_table_column("User", "restrict_ip")
		self.assertFalse(restrict_ip_in_table.index)
		self.assertTrue(restrict_ip_in_table.unique)

		# explicitly make a text index
		frappe.db.add_index(doctype, ["email_signature(200)"])
		frappe.db.updatedb(doctype)
		email_sig_column = get_table_column("User", "email_signature")
		self.assertEqual(email_sig_column.index, 1)
Exemple #60
0
def execute():
    if '__OldAuth' not in frappe.db.get_tables():
        frappe.db.sql_ddl('''alter table `__Auth` rename `__OldAuth`''')

    create_auth_table()

    # user passwords
    frappe.db.sql(
        '''insert ignore into `__Auth` (doctype, name, fieldname, `password`)
		(select 'User', user, 'password', `password` from `__OldAuth`)''')

    frappe.db.commit()

    # other password fields
    for doctype in frappe.db.sql_list(
            '''select distinct parent from `tabDocField`
		where fieldtype="Password" and parent != "User"'''):

        frappe.reload_doctype(doctype)
        meta = frappe.get_meta(doctype)

        for df in meta.get('fields', {'fieldtype': 'Password'}):
            if meta.issingle:
                password = frappe.db.get_value(doctype, doctype, df.fieldname)
                if password:
                    set_encrypted_password(doctype,
                                           doctype,
                                           password,
                                           fieldname=df.fieldname)
                    frappe.db.set_value(doctype, doctype, df.fieldname,
                                        '*' * len(password))

            else:
                for d in frappe.db.sql(
                        '''select name, `{fieldname}` from `tab{doctype}`
					where `{fieldname}` is not null'''.format(fieldname=df.fieldname,
                                               doctype=doctype),
                        as_dict=True):

                    set_encrypted_password(doctype,
                                           d.name,
                                           d.get(df.fieldname),
                                           fieldname=df.fieldname)

                frappe.db.sql(
                    '''update `tab{doctype}` set `{fieldname}`=repeat("*", char_length(`{fieldname}`))'''
                    .format(doctype=doctype, fieldname=df.fieldname))

            frappe.db.commit()

    frappe.db.sql_ddl('''drop table `__OldAuth`''')