diff --git a/erpnext/patches/repair_tools/__init__.py b/erpnext/patches/repair_tools/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/patches/repair_tools/__init__.py
+++ /dev/null
diff --git a/erpnext/patches/repair_tools/set_stock_balance_as_per_serial_no.py b/erpnext/patches/repair_tools/set_stock_balance_as_per_serial_no.py
deleted file mode 100644
index 5a421d1..0000000
--- a/erpnext/patches/repair_tools/set_stock_balance_as_per_serial_no.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	from erpnext.stock.stock_balance import set_stock_balance_as_per_serial_no
-	frappe.db.auto_commit_on_many_writes = 1
-
-	set_stock_balance_as_per_serial_no()
-
-	frappe.db.auto_commit_on_many_writes = 0
diff --git a/erpnext/patches/v10_0/__init__.py b/erpnext/patches/v10_0/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/patches/v10_0/__init__.py
+++ /dev/null
diff --git a/erpnext/patches/v10_0/add_agriculture_domain.py b/erpnext/patches/v10_0/add_agriculture_domain.py
deleted file mode 100644
index c18e69f..0000000
--- a/erpnext/patches/v10_0/add_agriculture_domain.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	domain = 'Agriculture'
-	if not frappe.db.exists('Domain', domain):
-		frappe.get_doc({
-			'doctype': 'Domain',
-			'domain': domain
-		}).insert(ignore_permissions=True)
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/add_guardian_role_for_parent_portal.py b/erpnext/patches/v10_0/add_guardian_role_for_parent_portal.py
deleted file mode 100644
index 0b891f2..0000000
--- a/erpnext/patches/v10_0/add_guardian_role_for_parent_portal.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	# create guardian role
-	if not frappe.get_value('Role', dict(role_name='Guardian')):
-		frappe.get_doc({
-			'doctype': 'Role',
-			'role_name': 'Guardian',
-			'desk_access': 0,
-			'restrict_to_domain': 'Education'
-		}).insert(ignore_permissions=True)
-	
-	# set guardian roles in already created users
-	if frappe.db.exists("Doctype", "Guardian"):
-		for user in frappe.db.sql_list("""select u.name from `tabUser` u , `tabGuardian` g where g.email_address = u.name"""):
-			user = frappe.get_doc('User', user)
-			user.flags.ignore_validate = True
-			user.flags.ignore_mandatory = True
-			user.save()
diff --git a/erpnext/patches/v10_0/add_non_profit_domain.py b/erpnext/patches/v10_0/add_non_profit_domain.py
deleted file mode 100644
index b03d669..0000000
--- a/erpnext/patches/v10_0/add_non_profit_domain.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	domain = 'Non Profit'
-	if not frappe.db.exists('Domain', domain):
-		frappe.get_doc({
-			'doctype': 'Domain',
-			'domain': domain
-		}).insert(ignore_permissions=True)
-
-		frappe.get_doc({
-			'doctype': 'Role',
-			'role_name': 'Non Profit Portal User',
-			'desk_access': 0,
-			'restrict_to_domain': domain
-		}).insert(ignore_permissions=True)
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/allow_operators_in_supplier_scorecard.py b/erpnext/patches/v10_0/allow_operators_in_supplier_scorecard.py
deleted file mode 100644
index 827f9bc..0000000
--- a/erpnext/patches/v10_0/allow_operators_in_supplier_scorecard.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright (c) 2019, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc('buying', 'doctype', 'supplier_scorecard_criteria')
-	frappe.reload_doc('buying', 'doctype', 'supplier_scorecard_scoring_criteria')
-	frappe.reload_doc('buying', 'doctype', 'supplier_scorecard')
-
-	for criteria in frappe.get_all('Supplier Scorecard Criteria', fields=['name', 'formula'], limit_page_length=None):
-		frappe.db.set_value('Supplier Scorecard Criteria', criteria.name,
-			'formula', criteria.formula.replace('&lt;','<').replace('&gt;','>'))
-
-	for criteria in frappe.get_all('Supplier Scorecard Scoring Criteria', fields=['name', 'formula'], limit_page_length=None):
-		if criteria.formula: # not mandatory
-			frappe.db.set_value('Supplier Scorecard Scoring Criteria', criteria.name,
-				'formula', criteria.formula.replace('&lt;','<').replace('&gt;','>'))
-
-	for sc in frappe.get_all('Supplier Scorecard', fields=['name', 'weighting_function'], limit_page_length=None):
-		frappe.db.set_value('Supplier Scorecard', sc.name, 'weighting_function',
-			sc.weighting_function.replace('&lt;','<').replace('&gt;','>'))
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/copy_projects_renamed_fields.py b/erpnext/patches/v10_0/copy_projects_renamed_fields.py
deleted file mode 100644
index 80db3bd..0000000
--- a/erpnext/patches/v10_0/copy_projects_renamed_fields.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import rename_field
-
-def execute():
-    """ copy data from old fields to new """
-    frappe.reload_doc("projects", "doctype", "project")
-
-    if frappe.db.has_column('Project', 'total_sales_cost'):
-        rename_field('Project', "total_sales_cost", "total_sales_amount")
-
-    if frappe.db.has_column('Project', 'total_billing_amount'):
-        rename_field('Project', "total_billing_amount", "total_billable_amount")
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/enabled_regional_print_format_based_on_country.py b/erpnext/patches/v10_0/enabled_regional_print_format_based_on_country.py
deleted file mode 100644
index 38b04ce..0000000
--- a/erpnext/patches/v10_0/enabled_regional_print_format_based_on_country.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	print_format_mapper = {
-		'India': ['GST POS Invoice', 'GST Tax Invoice'],
-		'Saudi Arabia': ['Simplified Tax Invoice', 'Detailed Tax Invoice', 'Tax Invoice'],
-		'United Arab Emirates': ['Simplified Tax Invoice', 'Detailed Tax Invoice', 'Tax Invoice']
-	}
-
-	frappe.db.sql(""" update `tabPrint Format` set disabled = 1 where name
-		in ('GST POS Invoice', 'GST Tax Invoice', 'Simplified Tax Invoice', 'Detailed Tax Invoice')""")
-
-	for d in frappe.get_all('Company', fields = ["country"],
-		filters={'country': ('in', ['India', 'Saudi Arabia', 'United Arab Emirates'])}):
-		if print_format_mapper.get(d.country):
-			print_formats = print_format_mapper.get(d.country)
-			frappe.db.sql(""" update `tabPrint Format` set disabled = 0
-				where name in (%s)""" % ", ".join(["%s"]*len(print_formats)), tuple(print_formats))
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/fix_reserved_qty_for_sub_contract.py b/erpnext/patches/v10_0/fix_reserved_qty_for_sub_contract.py
deleted file mode 100644
index c0a9e5e..0000000
--- a/erpnext/patches/v10_0/fix_reserved_qty_for_sub_contract.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from erpnext.stock.utils import get_bin
-
-def execute():
-	frappe.reload_doc("stock", "doctype", "bin")
-	frappe.reload_doc("buying", "doctype", "purchase_order_item_supplied")
-	for d in frappe.db.sql("""
-		select distinct rm_item_code, reserve_warehouse
-		from `tabPurchase Order Item Supplied`
-		where docstatus=1 and reserve_warehouse is not null and reserve_warehouse != ''"""):
-
-		try:
-			bin_doc = get_bin(d[0], d[1])
-			bin_doc.update_reserved_qty_for_sub_contracting()
-		except:
-			pass
-
-	for d in frappe.db.sql("""select distinct item_code, source_warehouse
-		from `tabWork Order Item`
-		where docstatus=1 and transferred_qty > required_qty
-			and source_warehouse is not null and source_warehouse != ''""", as_list=1):
-
-		try:
-			bin_doc = get_bin(d[0], d[1])
-			bin_doc.update_reserved_qty_for_production()
-		except:
-			pass
diff --git a/erpnext/patches/v10_0/recalculate_gross_margin_for_project.py b/erpnext/patches/v10_0/recalculate_gross_margin_for_project.py
deleted file mode 100644
index 6d461f3..0000000
--- a/erpnext/patches/v10_0/recalculate_gross_margin_for_project.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc('projects', 'doctype', 'project')
-	for d in frappe.db.sql(""" select name from `tabProject` where
-		ifnull(total_consumed_material_cost, 0 ) > 0 and ifnull(total_billed_amount, 0) > 0""", as_dict=1):
-		doc = frappe.get_doc("Project", d.name)
-		doc.calculate_gross_margin()
-		doc.db_set('gross_margin', doc.gross_margin)
-		doc.db_set('per_gross_margin', doc.per_gross_margin)
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/rename_schools_to_education.py b/erpnext/patches/v10_0/rename_schools_to_education.py
deleted file mode 100644
index 85c25a8..0000000
--- a/erpnext/patches/v10_0/rename_schools_to_education.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	# rename the School module as Education
-
-	# rename the school module
-	if frappe.db.exists('Module Def', 'Schools') and not frappe.db.exists('Module Def', 'Education'):
-		frappe.rename_doc("Module Def", "Schools", "Education")
-
-	# delete the school module
-	if frappe.db.exists('Module Def', 'Schools') and frappe.db.exists('Module Def', 'Education'):
-		frappe.db.sql("""delete from `tabModule Def` where module_name = 'Schools'""")
-
-
-	# rename "School Settings" to the "Education Settings
-	if frappe.db.exists('DocType', 'School Settings'):
-		frappe.rename_doc("DocType", "School Settings", "Education Settings", force=True)
-		frappe.reload_doc("education", "doctype", "education_settings")
-
-	# delete the discussion web form if exists
-	if frappe.db.exists('Web Form', 'Discussion'):
-		frappe.db.sql("""delete from `tabWeb Form` where name = 'discussion'""")
-
-	# rename the select option field from "School Bus" to "Institute's Bus"
-	frappe.reload_doc("education", "doctype", "Program Enrollment")
-	if "mode_of_transportation" in frappe.db.get_table_columns("Program Enrollment"):
-		frappe.db.sql("""update `tabProgram Enrollment` set mode_of_transportation = "Institute's Bus"
-			where mode_of_transportation = "School Bus" """)
diff --git a/erpnext/patches/v10_0/repost_gle_for_purchase_receipts_with_rejected_items.py b/erpnext/patches/v10_0/repost_gle_for_purchase_receipts_with_rejected_items.py
deleted file mode 100644
index e6546e3..0000000
--- a/erpnext/patches/v10_0/repost_gle_for_purchase_receipts_with_rejected_items.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe, erpnext
-
-def execute():
-	for company in frappe.get_all("Company"):
-		if not erpnext.is_perpetual_inventory_enabled(company.name):
-			continue
-
-		acc_frozen_upto = frappe.db.get_value("Accounts Settings", None, "acc_frozen_upto") or "1900-01-01"
-		pr_with_rejected_warehouse = frappe.db.sql("""
-			select pr.name
-			from `tabPurchase Receipt` pr, `tabPurchase Receipt Item` pr_item
-			where pr.name = pr_item.parent
-				and pr.posting_date > %s
-				and pr.docstatus=1
-				and pr.company = %s
-				and pr_item.rejected_qty > 0
-		""", (acc_frozen_upto, company.name), as_dict=1)
-
-		for d in pr_with_rejected_warehouse:
-			doc = frappe.get_doc("Purchase Receipt", d.name)
-
-			doc.docstatus = 2
-			doc.make_gl_entries_on_cancel()
-
-
-			# update gl entries for submit state of PR
-			doc.docstatus = 1
-			doc.make_gl_entries()
diff --git a/erpnext/patches/v10_0/repost_requested_qty_for_non_stock_uom_items.py b/erpnext/patches/v10_0/repost_requested_qty_for_non_stock_uom_items.py
deleted file mode 100644
index 4fe4e97..0000000
--- a/erpnext/patches/v10_0/repost_requested_qty_for_non_stock_uom_items.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright (c) 2019, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	from erpnext.stock.stock_balance import update_bin_qty, get_indented_qty
-
-	count=0
-	for item_code, warehouse in frappe.db.sql("""select distinct item_code, warehouse
-		from `tabMaterial Request Item` where docstatus = 1 and stock_uom<>uom"""):
-			try:
-				count += 1
-				update_bin_qty(item_code, warehouse, {
-					"indented_qty": get_indented_qty(item_code, warehouse),
-				})
-				if count % 200 == 0:
-					frappe.db.commit()
-			except:
-				frappe.db.rollback()
diff --git a/erpnext/patches/v10_0/set_auto_created_serial_no_in_stock_entry.py b/erpnext/patches/v10_0/set_auto_created_serial_no_in_stock_entry.py
deleted file mode 100644
index c6470f2..0000000
--- a/erpnext/patches/v10_0/set_auto_created_serial_no_in_stock_entry.py
+++ /dev/null
@@ -1,56 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	serialised_items = [d.name for d in frappe.get_all("Item", filters={"has_serial_no": 1})]
-
-	if not serialised_items:
-		return
-
-	for dt in ["Stock Entry Detail", "Purchase Receipt Item", "Purchase Invoice Item"]:
-		cond = ""
-		if dt=="Purchase Invoice Item":
-			cond = """ and parent in (select name from `tabPurchase Invoice`
-				where `tabPurchase Invoice`.name = `tabPurchase Invoice Item`.parent and update_stock=1)"""
-
-		item_rows = frappe.db.sql("""
-			select name
-			from `tab{0}`
-			where conversion_factor != 1
-				and docstatus = 1
-				and ifnull(serial_no, '') = ''
-				and item_code in ({1})
-				{2}
-		""".format(dt, ', '.join(['%s']*len(serialised_items)), cond), tuple(serialised_items))
-
-		if item_rows:
-			sle_serial_nos = dict(frappe.db.sql("""
-				select voucher_detail_no, serial_no
-				from `tabStock Ledger Entry`
-				where ifnull(serial_no, '') != ''
-					and voucher_detail_no in (%s)
-			""".format(', '.join(['%s']*len(item_rows))),
-				tuple([d[0] for d in item_rows])))
-
-			batch_size = 100
-			for i in range(0, len(item_rows), batch_size):
-				batch_item_rows = item_rows[i:i + batch_size]
-				when_then = []
-				for item_row in batch_item_rows:
-				
-					when_then.append('WHEN `name` = "{row_name}" THEN "{value}"'.format(
-						row_name=item_row[0],
-						value=sle_serial_nos.get(item_row[0])))
-
-				frappe.db.sql("""
-					update
-						`tab{doctype}`
-					set
-						serial_no = CASE {when_then_cond} ELSE `serial_no` END
-				""".format(
-					doctype = dt,
-					when_then_cond=" ".join(when_then)
-				))
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/set_b2c_limit.py b/erpnext/patches/v10_0/set_b2c_limit.py
deleted file mode 100644
index 5d964e6..0000000
--- a/erpnext/patches/v10_0/set_b2c_limit.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc("regional", "doctype", "gst_settings")
-	frappe.reload_doc("accounts", "doctype", "gst_account")
-	gst_settings = frappe.get_doc("GST Settings")
-	gst_settings.b2c_limit = 250000
-	gst_settings.save()
diff --git a/erpnext/patches/v10_0/set_default_payment_terms_based_on_company.py b/erpnext/patches/v10_0/set_default_payment_terms_based_on_company.py
deleted file mode 100644
index a90e096..0000000
--- a/erpnext/patches/v10_0/set_default_payment_terms_based_on_company.py
+++ /dev/null
@@ -1,37 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from erpnext.patches.v8_10.change_default_customer_credit_days import make_payment_term, make_template
-
-def execute():
-	for dt in ("Company", "Customer Group"):
-		frappe.reload_doc("setup", "doctype", frappe.scrub(dt))
-
-		credit_records = frappe.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(dt), as_dict=1)
-
-		for d in credit_records:
-			template = create_payment_terms_template(d)
-
-			frappe.db.sql("""
-				update `tab{0}`
-				set `payment_terms` = %s
-				where name = %s
-			""".format(dt), (template.name, d.name))
-
-def create_payment_terms_template(data):
-	if data.credit_days_based_on == "Fixed Days":
-		pyt_template_name = 'Default Payment Term - N{0}'.format(data.credit_days)
-	else:
-		pyt_template_name = 'Default Payment Term - EO2M'
-
-	if not frappe.db.exists("Payment Terms Template", pyt_template_name):
-		payment_term = make_payment_term(data.credit_days, data.credit_days_based_on)
-		template = make_template(payment_term)
-	else:
-		template = frappe.get_doc("Payment Terms Template", pyt_template_name)
-	return template
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/set_discount_amount.py b/erpnext/patches/v10_0/set_discount_amount.py
deleted file mode 100644
index d5e2c5a..0000000
--- a/erpnext/patches/v10_0/set_discount_amount.py
+++ /dev/null
@@ -1,35 +0,0 @@
-from __future__ import unicode_literals
-
-import frappe
-
-def execute():
-	frappe.reload_doc("accounts", "doctype", "sales_invoice_item")
-	frappe.reload_doc('accounts', 'doctype', 'purchase_invoice_item')
-	frappe.reload_doc('buying', 'doctype', 'purchase_order_item')
-	frappe.reload_doc('buying', 'doctype', 'supplier_quotation_item')
-	frappe.reload_doc('selling', 'doctype', 'sales_order_item')
-	frappe.reload_doc('selling', 'doctype', 'quotation_item')
-	frappe.reload_doc('stock', 'doctype', 'delivery_note_item')
-	frappe.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:
-		frappe.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:
-		frappe.db.sql('''
-			UPDATE
-				`tab%s`
-			SET
-				discount_amount = price_list_rate * discount_percentage / 100
-			WHERE
-				discount_percentage > 0
-		''' % (doctype))
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/set_numeric_ranges_in_template_if_blank.py b/erpnext/patches/v10_0/set_numeric_ranges_in_template_if_blank.py
deleted file mode 100644
index 6825f19..0000000
--- a/erpnext/patches/v10_0/set_numeric_ranges_in_template_if_blank.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	item_numeric_attributes = frappe.db.sql("""
-		select name, numeric_values, from_range, to_range, increment
-		from `tabItem Attribute`
-		where numeric_values = 1
-	""", as_dict=1)
-
-	for d in item_numeric_attributes:
-		frappe.db.sql("""
-			update `tabItem Variant Attribute`
-			set
-				from_range = CASE
-					WHEN from_range = 0 THEN %(from_range)s
-					ELSE from_range
-					END,
-				to_range = CASE
-					WHEN to_range = 0 THEN %(to_range)s
-					ELSE to_range
-					END,
-				increment = CASE
-					WHEN increment = 0 THEN %(increment)s
-					ELSE increment
-					END,
-				numeric_values = %(numeric_values)s
-			where
-				attribute = %(name)s
-				and exists(select name from tabItem 
-					where name=`tabItem Variant Attribute`.parent and has_variants=1)
-		""", d)
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/set_primary_contact_for_customer.py b/erpnext/patches/v10_0/set_primary_contact_for_customer.py
deleted file mode 100644
index ae0b31c2..0000000
--- a/erpnext/patches/v10_0/set_primary_contact_for_customer.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():	
-	frappe.reload_doctype('Customer')
-
-	frappe.db.sql("""
-		update 
-			`tabCustomer`, (           
-				select `tabContact`.name, `tabContact`.mobile_no, `tabContact`.email_id, 
-					`tabDynamic Link`.link_name from `tabContact`, `tabDynamic Link`
-				where `tabContact`.name = `tabDynamic Link`.parent and 
-				`tabDynamic Link`.link_doctype = 'Customer' and `tabContact`.is_primary_contact = 1
-			) as contact
-		set 
-			`tabCustomer`.customer_primary_contact = contact.name,
-			`tabCustomer`.mobile_no = contact.mobile_no, `tabCustomer`.email_id = contact.email_id 
-		where `tabCustomer`.name = contact.link_name""")
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/set_qty_in_transactions_based_on_serial_no_input.py b/erpnext/patches/v10_0/set_qty_in_transactions_based_on_serial_no_input.py
deleted file mode 100644
index 083b7f4..0000000
--- a/erpnext/patches/v10_0/set_qty_in_transactions_based_on_serial_no_input.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc("stock", "doctype", "stock_settings")
-
-	ss = frappe.get_doc("Stock Settings")
-	ss.set_qty_in_transactions_based_on_serial_no_input = 1
-
-	if ss.default_warehouse \
-		and not frappe.db.exists("Warehouse", ss.default_warehouse):
-			ss.default_warehouse = None
-
-	if ss.stock_uom and not frappe.db.exists("UOM", ss.stock_uom):
-		ss.stock_uom = None
-
-	ss.flags.ignore_mandatory = True
-	ss.save()
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/set_student_party_type.py b/erpnext/patches/v10_0/set_student_party_type.py
deleted file mode 100644
index 08376ae..0000000
--- a/erpnext/patches/v10_0/set_student_party_type.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	if not frappe.db.exists("Party Type", "Student"):
-		party = frappe.new_doc("Party Type")
-		party.party_type = "Student"
-		party.save()
diff --git a/erpnext/patches/v10_0/setup_vat_for_uae_and_saudi_arabia.py b/erpnext/patches/v10_0/setup_vat_for_uae_and_saudi_arabia.py
deleted file mode 100644
index a8d9049..0000000
--- a/erpnext/patches/v10_0/setup_vat_for_uae_and_saudi_arabia.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from erpnext.setup.doctype.company.company import install_country_fixtures
-
-def execute():
-	frappe.reload_doc("accounts", "doctype", "account")
-	frappe.reload_doc("accounts", "doctype", "payment_schedule")
-	for d in frappe.get_all('Company',
-		filters={'country': ('in', ['Saudi Arabia', 'United Arab Emirates'])}):
-		install_country_fixtures(d.name)
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/show_leaves_of_all_department_members_in_calendar.py b/erpnext/patches/v10_0/show_leaves_of_all_department_members_in_calendar.py
deleted file mode 100644
index 7e2ff7a..0000000
--- a/erpnext/patches/v10_0/show_leaves_of_all_department_members_in_calendar.py
+++ /dev/null
@@ -1,6 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc("hr", "doctype", "hr_settings")
-	frappe.db.set_value("HR Settings", None, "show_leaves_of_all_department_members_in_calendar", 1)
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/taxes_issue_with_pos.py b/erpnext/patches/v10_0/taxes_issue_with_pos.py
deleted file mode 100644
index 2a3275a..0000000
--- a/erpnext/patches/v10_0/taxes_issue_with_pos.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	for d in frappe.get_all('Sales Invoice', fields=["name"],
-		filters = {'is_pos':1, 'docstatus': 1, 'creation': ('>', '2018-04-23')}):
-		doc = frappe.get_doc('Sales Invoice', d.name)
-		if (not doc.taxes and doc.taxes_and_charges and doc.pos_profile and doc.outstanding_amount != 0 and
-			frappe.db.get_value('POS Profile', doc.pos_profile, 'taxes_and_charges', cache=True) == doc.taxes_and_charges):
-
-			doc.append_taxes_from_master()
-			doc.calculate_taxes_and_totals()
-			for d in doc.taxes:
-				d.db_update()
-
-			doc.db_update()
-
-			delete_gle_for_voucher(doc.name)
-			doc.make_gl_entries()
-
-def delete_gle_for_voucher(voucher_no):
-	frappe.db.sql("""delete from `tabGL Entry` where voucher_no = %(voucher_no)s""",
-		{'voucher_no': voucher_no})
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/update_address_template_for_india.py b/erpnext/patches/v10_0/update_address_template_for_india.py
deleted file mode 100644
index 1ddca93..0000000
--- a/erpnext/patches/v10_0/update_address_template_for_india.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from erpnext.regional.address_template.setup import set_up_address_templates
-
-def execute():
-	if frappe.db.get_value('Company',  {'country': 'India'},  'name'):
-		address_template = frappe.db.get_value('Address Template', 'India', 'template')
-		if not address_template or "gstin" not in address_template:
-			set_up_address_templates(default_country='India')
diff --git a/erpnext/patches/v10_0/update_assessment_plan.py b/erpnext/patches/v10_0/update_assessment_plan.py
deleted file mode 100644
index 174623c..0000000
--- a/erpnext/patches/v10_0/update_assessment_plan.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc('education', 'doctype', 'assessment_plan')
-
-	frappe.db.sql("""
-		UPDATE `tabAssessment Plan` as ap
-		INNER JOIN `tabStudent Group` as sg ON sg.name = ap.student_group
-		SET ap.academic_term = sg.academic_term,
-			ap.academic_year = sg.academic_year,
-			ap.program = sg.program
-		WHERE ap.docstatus = 1
-	""")
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/update_assessment_result.py b/erpnext/patches/v10_0/update_assessment_result.py
deleted file mode 100644
index 96218db..0000000
--- a/erpnext/patches/v10_0/update_assessment_result.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc('education', 'doctype', 'assessment_result')
-
-	frappe.db.sql("""
-		UPDATE `tabAssessment Result` AS ar
-		INNER JOIN `tabAssessment Plan` AS ap ON ap.name = ar.assessment_plan
-		SET ar.academic_term = ap.academic_term,
-			ar.academic_year = ap.academic_year,
-			ar.program = ap.program,
-			ar.course = ap.course,
-			ar.assessment_group = ap.assessment_group,
-			ar.student_group = ap.student_group
-		WHERE ap.docstatus = 1
-	""")
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/update_asset_calculate_depreciation.py b/erpnext/patches/v10_0/update_asset_calculate_depreciation.py
deleted file mode 100644
index b947a40..0000000
--- a/erpnext/patches/v10_0/update_asset_calculate_depreciation.py
+++ /dev/null
@@ -1,12 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc('assets', 'doctype', 'asset')
-	frappe.reload_doc('assets', 'doctype', 'depreciation_schedule')
-
-	frappe.db.sql("""
-		update tabAsset a
-		set calculate_depreciation = 1
-		where exists(select ds.name from `tabDepreciation Schedule` ds where ds.parent=a.name)
-	""")
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/update_hub_connector_domain.py b/erpnext/patches/v10_0/update_hub_connector_domain.py
deleted file mode 100644
index baf580a..0000000
--- a/erpnext/patches/v10_0/update_hub_connector_domain.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	if frappe.db.table_exists("Data Migration Connector"):
-		frappe.db.sql("""
-			UPDATE `tabData Migration Connector`
-			SET hostname = 'https://hubmarket.org'
-			WHERE connector_name = 'Hub Connector'
-		""")
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/update_lft_rgt_for_employee.py b/erpnext/patches/v10_0/update_lft_rgt_for_employee.py
deleted file mode 100644
index 46ca786..0000000
--- a/erpnext/patches/v10_0/update_lft_rgt_for_employee.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.utils.nestedset import rebuild_tree
-
-def execute():
-    """ assign lft and rgt appropriately """
-    frappe.reload_doc("hr", "doctype", "employee")
-
-    rebuild_tree("Employee", "reports_to")
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/update_project_in_sle.py b/erpnext/patches/v10_0/update_project_in_sle.py
deleted file mode 100644
index 08c64f1..0000000
--- a/erpnext/patches/v10_0/update_project_in_sle.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	for doctype in ['Sales Invoice', 'Delivery Note', 'Stock Entry']:
-		frappe.db.sql(""" update
-				`tabStock Ledger Entry` sle, `tab{0}` parent_doc
-			set
-				sle.project = parent_doc.project
-			where
-				sle.voucher_no = parent_doc.name and sle.voucher_type = %s and sle.project is null
-				and parent_doc.project is not null and parent_doc.project != ''""".format(doctype), doctype)
diff --git a/erpnext/patches/v10_0/update_reserved_qty_for_purchase_order.py b/erpnext/patches/v10_0/update_reserved_qty_for_purchase_order.py
deleted file mode 100644
index 7b2c366..0000000
--- a/erpnext/patches/v10_0/update_reserved_qty_for_purchase_order.py
+++ /dev/null
@@ -1,53 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from erpnext.stock.utils import get_bin
-
-def execute():
-	po_item = list(frappe.db.sql(("""
-		select distinct po.name as poname, poitem.rm_item_code as rm_item_code, po.company
-		from `tabPurchase Order` po, `tabPurchase Order Item Supplied` poitem
-		where po.name = poitem.parent
-			and po.is_subcontracted = "Yes"
-			and po.docstatus = 1"""), as_dict=1))
-	if not po_item:
-		return
-
-	frappe.reload_doc("stock", "doctype", "bin")
-	frappe.reload_doc("buying", "doctype", "purchase_order_item_supplied")
-	company_warehouse = frappe._dict(frappe.db.sql("""select company, min(name) from `tabWarehouse`
-		where is_group = 0 group by company"""))
-
-	items = list(set([d.rm_item_code for d in po_item]))
-	item_wh = frappe._dict(frappe.db.sql("""select item_code, default_warehouse
-		from `tabItem` where name in ({0})""".format(", ".join(["%s"] * len(items))), items))
-
-	# Update reserved warehouse
-	for item in po_item:
-		reserve_warehouse = get_warehouse(item.rm_item_code, item.company, company_warehouse, item_wh)
-		frappe.db.sql("""update `tabPurchase Order Item Supplied`
-			set reserve_warehouse = %s
-			where parent = %s and rm_item_code = %s
-		""", (reserve_warehouse, item["poname"], item["rm_item_code"]))
-
-	# Update bin
-	item_wh_bin = frappe.db.sql(("""
-		select distinct poitemsup.rm_item_code as rm_item_code,
-			poitemsup.reserve_warehouse as reserve_warehouse
-		from `tabPurchase Order` po, `tabPurchase Order Item Supplied` poitemsup
-		where po.name = poitemsup.parent
-			and po.is_subcontracted = "Yes"
-			and po.docstatus = 1"""), as_dict=1)
-	for d in item_wh_bin:
-		try:
-			stock_bin = get_bin(d["rm_item_code"], d["reserve_warehouse"])
-			stock_bin.update_reserved_qty_for_sub_contracting()
-		except:
-			pass
-
-def get_warehouse(item_code, company, company_warehouse, item_wh):
-	reserve_warehouse = item_wh.get(item_code)
-	if frappe.db.get_value("Warehouse", reserve_warehouse, "company") != company:
-		reserve_warehouse = None
-	if not reserve_warehouse:
-		reserve_warehouse = company_warehouse.get(company)
-	return reserve_warehouse
diff --git a/erpnext/patches/v10_0/update_sales_order_link_to_purchase_order.py b/erpnext/patches/v10_0/update_sales_order_link_to_purchase_order.py
deleted file mode 100644
index b4f5838..0000000
--- a/erpnext/patches/v10_0/update_sales_order_link_to_purchase_order.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc("buying", "doctype", "supplier_quotation_item")
-
-	for doctype in ['Purchase Order','Supplier Quotation']:
-		frappe.db.sql("""
-			Update
-				`tab{doctype} Item`, `tabMaterial Request Item`
-			set
-				`tab{doctype} Item`.sales_order = `tabMaterial Request Item`.sales_order
-			where
-				`tab{doctype} Item`.material_request= `tabMaterial Request Item`.parent
-				and `tab{doctype} Item`.material_request_item = `tabMaterial Request Item`.name
-				and `tabMaterial Request Item`.sales_order is not null""".format(doctype=doctype))
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/update_status_for_multiple_source_in_po.py b/erpnext/patches/v10_0/update_status_for_multiple_source_in_po.py
deleted file mode 100644
index fd3be08..0000000
--- a/erpnext/patches/v10_0/update_status_for_multiple_source_in_po.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-
-
-	# update the sales order item in the material request
-	frappe.reload_doc('stock', 'doctype', 'material_request_item')
-	frappe.db.sql('''update `tabMaterial Request Item` mri, `tabSales Order Item` soi
-		set mri.sales_order_item = soi.name
-		where ifnull(mri.sales_order, "")!="" and soi.parent=mri.sales_order
-		and soi.item_code=mri.item_code and mri.docstatus=1
-	''')
-
-	# update the sales order item in the purchase order
-	frappe.db.sql('''update `tabPurchase Order Item` poi, `tabSales Order Item` soi
-		set poi.sales_order_item = soi.name
-		where ifnull(poi.sales_order, "")!="" and soi.parent=poi.sales_order
-		and soi.item_code=poi.item_code and poi.docstatus = 1
-	''')
-
-	# Update the status in material request and sales order
-	po_list = frappe.db.sql('''
-			select parent from `tabPurchase Order Item` where ifnull(material_request, "")!="" and
-			ifnull(sales_order, "")!="" and docstatus=1
-		''',as_dict=1)
-
-	for po in list(set([d.get("parent") for d in po_list if d.get("parent")])):
-		try:
-			po_doc = frappe.get_doc("Purchase Order", po)
-
-			# update the so in the status updater
-			po_doc.update_status_updater()
-			po_doc.update_qty(update_modified=False)
-
-		except Exception:
-			pass
diff --git a/erpnext/patches/v10_0/update_status_in_purchase_receipt.py b/erpnext/patches/v10_0/update_status_in_purchase_receipt.py
deleted file mode 100644
index a0bdd9e..0000000
--- a/erpnext/patches/v10_0/update_status_in_purchase_receipt.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc("stock", "doctype", "purchase_receipt")
-	frappe.db.sql('''
-		UPDATE `tabPurchase Receipt` SET status = "Completed" WHERE per_billed = 100 AND docstatus = 1
-	''')
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/update_territory_and_customer_group.py b/erpnext/patches/v10_0/update_territory_and_customer_group.py
deleted file mode 100644
index 7f3dae9..0000000
--- a/erpnext/patches/v10_0/update_territory_and_customer_group.py
+++ /dev/null
@@ -1,29 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.model.rename_doc import get_fetch_fields
-
-def execute():
-	ignore_doctypes = ["Lead", "Opportunity", "POS Profile", "Tax Rule", "Pricing Rule"]
-	customers = frappe.get_all('Customer', fields=["name", "customer_group"])
-	customer_group_fetch = get_fetch_fields('Customer', 'Customer Group', ignore_doctypes)
-
-	batch_size = 1000
-	for i in range(0, len(customers), batch_size):
-		batch_customers = customers[i:i + batch_size]
-		for d in customer_group_fetch:
-			when_then = []
-			for customer in batch_customers:
-				value = frappe.db.escape(frappe.as_unicode(customer.get("customer_group")))
-
-				when_then.append('''
-					WHEN `%s` = %s and %s != %s
-					THEN %s
-				'''%(d["master_fieldname"], frappe.db.escape(frappe.as_unicode(customer.name)),
-					d["linked_to_fieldname"], value, value))
-
-			frappe.db.sql("""
-				update
-					`tab%s`
-				set
-					%s = CASE %s  ELSE `%s` END
-			"""%(d['doctype'], d.linked_to_fieldname, " ".join(when_then), d.linked_to_fieldname))
diff --git a/erpnext/patches/v10_0/update_user_image_in_employee.py b/erpnext/patches/v10_0/update_user_image_in_employee.py
deleted file mode 100644
index 72d5d2a..0000000
--- a/erpnext/patches/v10_0/update_user_image_in_employee.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc('hr', 'doctype', 'employee')
-
-	frappe.db.sql("""
-		UPDATE
-			`tabEmployee`, `tabUser`
-		SET
-			`tabEmployee`.image = `tabUser`.user_image
-		WHERE
-			`tabEmployee`.user_id = `tabUser`.name and
-			`tabEmployee`.user_id is not null and
-			`tabEmployee`.user_id != '' and `tabEmployee`.image is null
-	""")
diff --git a/erpnext/patches/v10_0/update_warehouse_address_details.py b/erpnext/patches/v10_0/update_warehouse_address_details.py
deleted file mode 100644
index b982b9a..0000000
--- a/erpnext/patches/v10_0/update_warehouse_address_details.py
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	warehouse = frappe.db.sql("""select name, email_id, phone_no, mobile_no, address_line_1,
-		address_line_2, city, state, pin from `tabWarehouse` where ifnull(address_line_1, '') != '' 
-		or ifnull(mobile_no, '') != '' 
-		or ifnull(email_id, '') != '' """, as_dict=1)
-
-	for d in warehouse:
-		try:
-			address = frappe.new_doc('Address')
-			address.name = d.name
-			address.address_title = d.name
-			address.address_line1 = d.address_line_1
-			address.city = d.city
-			address.state = d.state
-			address.pincode = d.pin
-			address.db_insert()
-			address.append('links',{'link_doctype':'Warehouse','link_name':d.name})
-			address.links[0].db_insert()
-			if d.name and (d.email_id or d.mobile_no or d.phone_no):
-				contact = frappe.new_doc('Contact')
-				contact.name = d.name
-				contact.first_name = d.name
-				contact.mobile_no = d.mobile_no
-				contact.email_id = d.email_id
-				contact.phone = d.phone_no
-				contact.db_insert()
-				contact.append('links',{'link_doctype':'Warehouse','link_name':d.name})
-				contact.links[0].db_insert()
-		except frappe.DuplicateEntryError:
-			pass
-	
\ No newline at end of file
diff --git a/erpnext/patches/v10_1/__init__.py b/erpnext/patches/v10_1/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/patches/v10_1/__init__.py
+++ /dev/null
diff --git a/erpnext/patches/v11_0/__init__.py b/erpnext/patches/v11_0/__init__.py
deleted file mode 100644
index baffc48..0000000
--- a/erpnext/patches/v11_0/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v11_0/remove_subscriber_doctype.py b/erpnext/patches/v11_0/remove_subscriber_doctype.py
deleted file mode 100644
index 4839a20..0000000
--- a/erpnext/patches/v11_0/remove_subscriber_doctype.py
+++ /dev/null
@@ -1,16 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import rename_field
-
-def execute():
-	""" copy subscribe field to customer """
-	frappe.reload_doc("accounts","doctype","subscription")
-
-	if frappe.db.exists("DocType", "Subscriber"):
-		if frappe.db.has_column('Subscription','subscriber'):
-			frappe.db.sql("""
-				update `tabSubscription` s1
-				set customer=(select customer from tabSubscriber where name=s1.subscriber)
-			""")
-
-		frappe.delete_doc("DocType", "Subscriber")
\ No newline at end of file
diff --git a/erpnext/patches/v11_1/__init__.py b/erpnext/patches/v11_1/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/patches/v11_1/__init__.py
+++ /dev/null
diff --git a/erpnext/patches/v12_0/__init__.py b/erpnext/patches/v12_0/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/patches/v12_0/__init__.py
+++ /dev/null
diff --git a/erpnext/patches/v13_0/__init__.py b/erpnext/patches/v13_0/__init__.py
deleted file mode 100644
index baffc48..0000000
--- a/erpnext/patches/v13_0/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v4_0/__init__.py b/erpnext/patches/v4_0/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/patches/v4_0/__init__.py
+++ /dev/null
diff --git a/erpnext/patches/v4_0/apply_user_permissions.py b/erpnext/patches/v4_0/apply_user_permissions.py
deleted file mode 100644
index 3c5d612..0000000
--- a/erpnext/patches/v4_0/apply_user_permissions.py
+++ /dev/null
@@ -1,50 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from erpnext.hr.doctype.employee.employee import EmployeeUserDisabledError
-
-def execute():
-	update_hr_permissions()
-	update_permissions()
-	remove_duplicate_user_permissions()
-	frappe.clear_cache()
-
-def update_hr_permissions():
-	# add set user permissions rights to HR Manager
-	frappe.db.sql("""update `tabDocPerm` set `set_user_permissions`=1 where parent in ('Employee', 'Leave Application')
-		and role='HR Manager' and permlevel=0 and `read`=1""")
-	docperm_meta = frappe.get_meta('DocPerm')
-	if docperm_meta.get_field('apply_user_permissions'):
-		# apply user permissions on Employee and Leave Application
-		frappe.db.sql("""update `tabDocPerm` set `apply_user_permissions`=1 where parent in ('Employee', 'Leave Application')
-			and role in ('Employee', 'Leave Approver') and permlevel=0 and `read`=1""")
-
-	frappe.clear_cache()
-
-	# save employees to run on_update events
-	for employee in frappe.db.sql_list("""select name from `tabEmployee` where docstatus < 2"""):
-		try:
-			emp = frappe.get_doc("Employee", employee)
-			emp.flags.ignore_mandatory = True
-			emp.save()
-		except EmployeeUserDisabledError:
-			pass
-
-def update_permissions():
-	# clear match conditions other than owner
-	frappe.db.sql("""update tabDocPerm set `match`=''
-		where ifnull(`match`,'') not in ('', 'owner')""")
-
-def remove_duplicate_user_permissions():
-	# remove duplicate user_permissions (if they exist)
-	for d in frappe.db.sql("""select parent, defkey, defvalue,
-		count(*) as cnt from tabDefaultValue
-		where parent not in ('__global', '__default')
-		group by parent, defkey, defvalue""", as_dict=1):
-		if d.cnt > 1:
-			# order by parenttype so that user permission does not get removed!
-			frappe.db.sql("""delete from tabDefaultValue where `parent`=%s and `defkey`=%s and
-				`defvalue`=%s order by parenttype limit %s""", (d.parent, d.defkey, d.defvalue, d.cnt-1))
-
diff --git a/erpnext/patches/v4_0/countrywise_coa.py b/erpnext/patches/v4_0/countrywise_coa.py
deleted file mode 100644
index f45e602..0000000
--- a/erpnext/patches/v4_0/countrywise_coa.py
+++ /dev/null
@@ -1,29 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc("setup", 'doctype', "company")
-	frappe.reload_doc("accounts", 'doctype', "account")
-
-	frappe.db.sql("""update tabAccount set account_type='Cash'
-		where account_type='Bank or Cash' and account_name in ('Cash', 'Cash In Hand')""")
-
-	frappe.db.sql("""update tabAccount set account_type='Stock'
-		where account_name = 'Stock Assets'""")
-
-	ac_types = {"Fixed Asset Account": "Fixed Asset", "Bank or Cash": "Bank"}
-	for old, new in ac_types.items():
-		frappe.db.sql("""update tabAccount set account_type=%s
-			where account_type=%s""", (new, old))
-
-	try:
-		frappe.db.sql("""update `tabAccount` set report_type =
-			if(is_pl_account='Yes', 'Profit and Loss', 'Balance Sheet')""")
-
-		frappe.db.sql("""update `tabAccount` set balance_must_be=debit_or_credit
-			where ifnull(allow_negative_balance, 0) = 0""")
-	except:
-		pass
diff --git a/erpnext/patches/v4_0/create_custom_fields_for_india_specific_fields.py b/erpnext/patches/v4_0/create_custom_fields_for_india_specific_fields.py
deleted file mode 100644
index fe50e44..0000000
--- a/erpnext/patches/v4_0/create_custom_fields_for_india_specific_fields.py
+++ /dev/null
@@ -1,63 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.custom.doctype.custom_field.custom_field import create_custom_field_if_values_exist
-
-def execute():
-	frappe.reload_doc("stock", "doctype", "purchase_receipt")
-	frappe.reload_doc("hr", "doctype", "employee")
-	frappe.reload_doc("Payroll", "doctype", "salary_slip")
-
-	india_specific_fields = {
-		"Purchase Receipt": [{
-			"label": "Supplier Shipment No",
-			"fieldname": "challan_no",
-			"fieldtype": "Data",
-			"insert_after": "is_subcontracted"
-		}, {
-			"label": "Supplier Shipment Date",
-			"fieldname": "challan_date",
-			"fieldtype": "Date",
-			"insert_after": "is_subcontracted"
-		}],
-		"Employee": [{
-			"label": "PAN Number",
-			"fieldname": "pan_number",
-			"fieldtype": "Data",
-			"insert_after": "company_email"
-		}, {
-			"label": "Gratuity LIC Id",
-			"fieldname": "gratuity_lic_id",
-			"fieldtype": "Data",
-			"insert_after": "company_email"
-		}, {
-			"label": "Esic Card No",
-			"fieldname": "esic_card_no",
-			"fieldtype": "Data",
-			"insert_after": "bank_ac_no"
-		}, {
-			"label": "PF Number",
-			"fieldname": "pf_number",
-			"fieldtype": "Data",
-			"insert_after": "bank_ac_no"
-		}],
-		"Salary Slip": [{
-			"label": "Esic No",
-			"fieldname": "esic_no",
-			"fieldtype": "Data",
-			"insert_after": "letter_head",
-			"permlevel": 1
-		}, {
-			"label": "PF Number",
-			"fieldname": "pf_no",
-			"fieldtype": "Data",
-			"insert_after": "letter_head",
-			"permlevel": 1
-		}]
-	}
-
-	for dt, docfields in india_specific_fields.items():
-		for df in docfields:
-			create_custom_field_if_values_exist(dt, df)
diff --git a/erpnext/patches/v4_0/create_price_list_if_missing.py b/erpnext/patches/v4_0/create_price_list_if_missing.py
deleted file mode 100644
index 039e521..0000000
--- a/erpnext/patches/v4_0/create_price_list_if_missing.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe import _
-from frappe.utils.nestedset import get_root_of
-
-def execute():
-	# setup not complete
-	if not frappe.db.sql("""select name from tabCompany limit 1"""):
-		return
-
-	if "shopping_cart" in frappe.get_installed_apps():
-		frappe.reload_doc("shopping_cart", "doctype", "shopping_cart_settings")
-
-	if not frappe.db.sql("select name from `tabPrice List` where buying=1"):
-		create_price_list(_("Standard Buying"), buying=1)
-
-	if not frappe.db.sql("select name from `tabPrice List` where selling=1"):
-		create_price_list(_("Standard Selling"), selling=1)
-
-def create_price_list(pl_name, buying=0, selling=0):
-	price_list = frappe.get_doc({
-		"doctype": "Price List",
-		"price_list_name": pl_name,
-		"enabled": 1,
-		"buying": buying,
-		"selling": selling,
-		"currency": frappe.db.get_default("currency"),
-		"territories": [{
-			"territory": get_root_of("Territory")
-		}]
-	})
-	price_list.insert()
diff --git a/erpnext/patches/v4_0/customer_discount_to_pricing_rule.py b/erpnext/patches/v4_0/customer_discount_to_pricing_rule.py
deleted file mode 100644
index 1b260c4..0000000
--- a/erpnext/patches/v4_0/customer_discount_to_pricing_rule.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.utils.nestedset import get_root_of
-
-def execute():
-	frappe.reload_doc("accounts", "doctype", "pricing_rule")
-
-	frappe.db.auto_commit_on_many_writes = True
-
-	default_item_group = get_root_of("Item Group")
-
-	for d in frappe.db.sql("""select * from `tabCustomer Discount`
-		where ifnull(parent, '') != ''""", as_dict=1):
-			if not d.discount:
-				continue
-
-			frappe.get_doc({
-				"doctype": "Pricing Rule",
-				"apply_on": "Item Group",
-				"item_group": d.item_group or default_item_group,
-				"applicable_for": "Customer",
-				"customer": d.parent,
-				"price_or_discount": "Discount Percentage",
-				"discount_percentage": d.discount,
-				"selling": 1
-			}).insert()
-
-	frappe.db.auto_commit_on_many_writes = False
-
-	frappe.delete_doc("DocType", "Customer Discount")
diff --git a/erpnext/patches/v4_0/fields_to_be_renamed.py b/erpnext/patches/v4_0/fields_to_be_renamed.py
deleted file mode 100644
index cc17697..0000000
--- a/erpnext/patches/v4_0/fields_to_be_renamed.py
+++ /dev/null
@@ -1,109 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import rename_field
-from frappe.modules import scrub, get_doctype_module
-
-rename_map = {
-	"Quotation Item": [
-		["ref_rate", "price_list_rate"],
-		["base_ref_rate", "base_price_list_rate"],
-		["adj_rate", "discount_percentage"],
-		["export_rate", "rate"],
-		["basic_rate", "base_rate"],
-		["amount", "base_amount"],
-		["export_amount", "amount"]
-	],
-
-	"Sales Order Item": [
-		["ref_rate", "price_list_rate"],
-		["base_ref_rate", "base_price_list_rate"],
-		["adj_rate", "discount_percentage"],
-		["export_rate", "rate"],
-		["basic_rate", "base_rate"],
-		["amount", "base_amount"],
-		["export_amount", "amount"],
-		["reserved_warehouse", "warehouse"]
-	],
-
-	"Delivery Note Item": [
-		["ref_rate", "price_list_rate"],
-		["base_ref_rate", "base_price_list_rate"],
-		["adj_rate", "discount_percentage"],
-		["export_rate", "rate"],
-		["basic_rate", "base_rate"],
-		["amount", "base_amount"],
-		["export_amount", "amount"]
-	],
-
-	"Sales Invoice Item": [
-		["ref_rate", "price_list_rate"],
-		["base_ref_rate", "base_price_list_rate"],
-		["adj_rate", "discount_percentage"],
-		["export_rate", "rate"],
-		["basic_rate", "base_rate"],
-		["amount", "base_amount"],
-		["export_amount", "amount"]
-	],
-
-	"Supplier Quotation Item": [
-		["import_ref_rate", "price_list_rate"],
-		["purchase_ref_rate", "base_price_list_rate"],
-		["discount_rate", "discount_percentage"],
-		["import_rate", "rate"],
-		["purchase_rate", "base_rate"],
-		["amount", "base_amount"],
-		["import_amount", "amount"]
-	],
-
-	"Purchase Order Item": [
-		["import_ref_rate", "price_list_rate"],
-		["purchase_ref_rate", "base_price_list_rate"],
-		["discount_rate", "discount_percentage"],
-		["import_rate", "rate"],
-		["purchase_rate", "base_rate"],
-		["amount", "base_amount"],
-		["import_amount", "amount"]
-	],
-
-	"Purchase Receipt Item": [
-		["import_ref_rate", "price_list_rate"],
-		["purchase_ref_rate", "base_price_list_rate"],
-		["discount_rate", "discount_percentage"],
-		["import_rate", "rate"],
-		["purchase_rate", "base_rate"],
-		["amount", "base_amount"],
-		["import_amount", "amount"]
-	],
-
-	"Purchase Invoice Item": [
-		["import_ref_rate", "price_list_rate"],
-		["purchase_ref_rate", "base_price_list_rate"],
-		["discount_rate", "discount_percentage"],
-		["import_rate", "rate"],
-		["rate", "base_rate"],
-		["amount", "base_amount"],
-		["import_amount", "amount"],
-		["expense_head", "expense_account"]
-	],
-
-	"Item": [
-		["purchase_account", "expense_account"],
-		["default_sales_cost_center", "selling_cost_center"],
-		["cost_center", "buying_cost_center"],
-		["default_income_account", "income_account"],
-	],
-	"Item Price": [
-		["ref_rate", "price_list_rate"]
-	]
-}
-
-def execute():
-	for dn in rename_map:
-		frappe.reload_doc(get_doctype_module(dn), "doctype", scrub(dn))
-
-	for dt, field_list in rename_map.items():
-		for field in field_list:
-			rename_field(dt, field[0], field[1])
diff --git a/erpnext/patches/v4_0/fix_address_template.py b/erpnext/patches/v4_0/fix_address_template.py
deleted file mode 100644
index 905e3db..0000000
--- a/erpnext/patches/v4_0/fix_address_template.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	missing_line = """{{ address_line1 }}<br>"""
-	for name, template in frappe.db.sql("select name, template from `tabAddress Template`"):
-		if missing_line not in template:
-			d = frappe.get_doc("Address Template", name)
-			d.template = missing_line + d.template
-			d.save()
diff --git a/erpnext/patches/v4_0/fix_case_of_hr_module_def.py b/erpnext/patches/v4_0/fix_case_of_hr_module_def.py
deleted file mode 100644
index e77b427..0000000
--- a/erpnext/patches/v4_0/fix_case_of_hr_module_def.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	hr = frappe.db.get_value("Module Def", "HR")
-	if hr == "Hr":
-		frappe.rename_doc("Module Def", "Hr", "HR")
-		frappe.db.set_value("Module Def", "HR", "module_name", "HR")
-
-	frappe.clear_cache()
-	frappe.setup_module_map()
diff --git a/erpnext/patches/v4_0/fix_contact_address.py b/erpnext/patches/v4_0/fix_contact_address.py
deleted file mode 100644
index 6a3e106..0000000
--- a/erpnext/patches/v4_0/fix_contact_address.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc("website", "doctype", "contact_us_settings")
-	address = frappe.db.get_value("Contact Us Settings", None, "address")
-	if address:
-		address = frappe.get_doc("Address", address)
-		contact = frappe.get_doc("Contact Us Settings", "Contact Us Settings")
-		for f in ("address_title", "address_line1", "address_line2", "city", "state", "country", "pincode"):
-			contact.set(f, address.get(f))
-		
-		contact.save()
\ No newline at end of file
diff --git a/erpnext/patches/v4_0/fix_employee_user_id.py b/erpnext/patches/v4_0/fix_employee_user_id.py
deleted file mode 100644
index 6f449f9..0000000
--- a/erpnext/patches/v4_0/fix_employee_user_id.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-
-import frappe
-from frappe.utils import get_fullname
-
-def execute():
-	for user_id in frappe.db.sql_list("""select distinct user_id from `tabEmployee`
-		where ifnull(user_id, '')!=''
-		group by user_id having count(name) > 1"""):
-
-		fullname = get_fullname(user_id)
-		employee = frappe.db.get_value("Employee", {"employee_name": fullname, "user_id": user_id})
-
-		if employee:
-			frappe.db.sql("""update `tabEmployee` set user_id=null
-				where user_id=%s and name!=%s""", (user_id, employee))
-		else:
-			count = frappe.db.sql("""select count(*) from `tabEmployee` where user_id=%s""", user_id)[0][0]
-			frappe.db.sql("""update `tabEmployee` set user_id=null
-				where user_id=%s limit %s""", (user_id, count - 1))
diff --git a/erpnext/patches/v4_0/global_defaults_to_system_settings.py b/erpnext/patches/v4_0/global_defaults_to_system_settings.py
deleted file mode 100644
index 2905fe1..0000000
--- a/erpnext/patches/v4_0/global_defaults_to_system_settings.py
+++ /dev/null
@@ -1,39 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# MIT License. See license.txt
-
-from __future__ import unicode_literals
-
-import frappe
-from collections import Counter
-from frappe.core.doctype.user.user import STANDARD_USERS
-
-def execute():
-	frappe.reload_doc("core", "doctype", "system_settings")
-	system_settings = frappe.get_doc("System Settings")
-
-	# set values from global_defauls
-	global_defaults = frappe.db.get_value("Global Defaults", None,
-		["time_zone", "date_format", "number_format", "float_precision", "session_expiry"], as_dict=True)
-
-	if global_defaults:
-		for key, val in global_defaults.items():
-			if not system_settings.get(key):
-				system_settings.set(key, val)
-
-	# language
-	if not system_settings.get("language"):
-		# find most common language
-		lang = frappe.db.sql_list("""select language from `tabUser`
-			where ifnull(language, '')!='' and language not like "Loading%%" and name not in ({standard_users})""".format(
-			standard_users=", ".join(["%s"]*len(STANDARD_USERS))), tuple(STANDARD_USERS))
-		lang = Counter(lang).most_common(1)
-		lang = (len(lang) > 0) and lang[0][0] or "english"
-
-		system_settings.language = lang
-
-	system_settings.flags.ignore_mandatory = True
-	system_settings.save()
-
-	global_defaults = frappe.get_doc("Global Defaults")
-	global_defaults.flags.ignore_mandatory = True
-	global_defaults.save()
diff --git a/erpnext/patches/v4_0/import_country_codes.py b/erpnext/patches/v4_0/import_country_codes.py
deleted file mode 100644
index 43e23d5..0000000
--- a/erpnext/patches/v4_0/import_country_codes.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# MIT License. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.geo.country_info import get_all
-from frappe.utils.install import import_country_and_currency
-
-from six import iteritems
-
-def execute():
-	frappe.reload_doc("setup", "doctype", "country")
-	import_country_and_currency()
-	for name, country in iteritems(get_all()):
-		frappe.set_value("Country", name, "code", country.get("code"))
\ No newline at end of file
diff --git a/erpnext/patches/v4_0/map_charge_to_taxes_and_charges.py b/erpnext/patches/v4_0/map_charge_to_taxes_and_charges.py
deleted file mode 100644
index 97e217a..0000000
--- a/erpnext/patches/v4_0/map_charge_to_taxes_and_charges.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	# update sales cycle
-	for d in ['Sales Invoice', 'Sales Order', 'Quotation', 'Delivery Note']:
-		frappe.db.sql("""update `tab%s` set taxes_and_charges=charge""" % d)
-
-	# update purchase cycle
-	for d in ['Purchase Invoice', 'Purchase Order', 'Supplier Quotation', 'Purchase Receipt']:
-		frappe.db.sql("""update `tab%s` set taxes_and_charges=purchase_other_charges""" % d)
-	
-	frappe.db.sql("""update `tabPurchase Taxes and Charges` set parentfield='other_charges'""")
diff --git a/erpnext/patches/v4_0/move_warehouse_user_to_restrictions.py b/erpnext/patches/v4_0/move_warehouse_user_to_restrictions.py
deleted file mode 100644
index 8b81936..0000000
--- a/erpnext/patches/v4_0/move_warehouse_user_to_restrictions.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-import frappe.permissions
-
-def execute():
-	for warehouse, user in frappe.db.sql("""select parent, user from `tabWarehouse User`"""):
-		frappe.permissions.add_user_permission("Warehouse", warehouse, user)
-
-	frappe.delete_doc_if_exists("DocType", "Warehouse User")
-	frappe.reload_doc("stock", "doctype", "warehouse")
diff --git a/erpnext/patches/v4_0/new_address_template.py b/erpnext/patches/v4_0/new_address_template.py
deleted file mode 100644
index fa66027..0000000
--- a/erpnext/patches/v4_0/new_address_template.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from __future__ import print_function, unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc("utilities", "doctype", "address_template")
-	if not frappe.db.sql("select name from `tabAddress Template`"):
-		try:
-			d = frappe.new_doc("Address Template")
-			d.update({"country":frappe.db.get_default("country") or
-				frappe.db.get_value("Global Defaults", "Global Defaults", "country")})
-			d.insert()
-		except:
-			print(frappe.get_traceback())
-
diff --git a/erpnext/patches/v4_0/reload_sales_print_format.py b/erpnext/patches/v4_0/reload_sales_print_format.py
deleted file mode 100644
index b8f090f..0000000
--- a/erpnext/patches/v4_0/reload_sales_print_format.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc('accounts', 'Print Format', 'POS Invoice')
diff --git a/erpnext/patches/v4_0/remove_employee_role_if_no_employee.py b/erpnext/patches/v4_0/remove_employee_role_if_no_employee.py
deleted file mode 100644
index 8766ace..0000000
--- a/erpnext/patches/v4_0/remove_employee_role_if_no_employee.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-import frappe.permissions
-
-def execute():
-	for user in frappe.db.sql_list("select distinct parent from `tabHas Role` where role='Employee'"):
-		# if employee record does not exists, remove employee role!
-		if not frappe.db.get_value("Employee", {"user_id": user}):
-			try:
-				user = frappe.get_doc("User", user)
-				for role in user.get("roles", {"role": "Employee"}):
-					user.get("roles").remove(role)
-				user.save()
-			except frappe.DoesNotExistError:
-				pass
diff --git a/erpnext/patches/v4_0/remove_module_home_pages.py b/erpnext/patches/v4_0/remove_module_home_pages.py
deleted file mode 100644
index a2720e0..0000000
--- a/erpnext/patches/v4_0/remove_module_home_pages.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	for page in ("accounts-home", "website-home", "support-home", "stock-home", "selling-home", "projects-home",
-		"manufacturing-home", "hr-home", "buying-home"):
-		frappe.delete_doc("Page", page)
\ No newline at end of file
diff --git a/erpnext/patches/v4_0/rename_sitemap_to_route.py b/erpnext/patches/v4_0/rename_sitemap_to_route.py
deleted file mode 100644
index ffb1fda..0000000
--- a/erpnext/patches/v4_0/rename_sitemap_to_route.py
+++ /dev/null
@@ -1,17 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-import frappe.model
-
-def execute():
-	frappe.reload_doc("setup", "doctype", "item_group")
-	frappe.reload_doc("stock", "doctype", "item")
-	frappe.reload_doc("setup", "doctype", "sales_partner")
-	
-	try:
-		frappe.model.rename_field("Item Group", "parent_website_sitemap", "parent_website_route")
-		frappe.model.rename_field("Item", "parent_website_sitemap", "parent_website_route")
-		frappe.model.rename_field("Sales Partner", "parent_website_sitemap",
-			 "parent_website_route")
-	except Exception as e:
-		if e.args[0]!=1054:
-			raise
diff --git a/erpnext/patches/v4_0/reset_permissions_for_masters.py b/erpnext/patches/v4_0/reset_permissions_for_masters.py
deleted file mode 100644
index bc1b438..0000000
--- a/erpnext/patches/v4_0/reset_permissions_for_masters.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import print_function, unicode_literals
-from frappe.permissions import reset_perms
-
-def execute():
-	for doctype in ("About Us Settings", "Accounts Settings", "Activity Type",
-		"Blog Category", "Blog Settings", "Blogger", "Branch", "Brand", "Buying Settings",
-		"Communication", "Company", "Contact Us Settings",
-		"Country", "Currency", "Currency Exchange", "Deduction Type", "Department",
-		"Designation", "Earning Type", "Event", "Feed", "File", "Fiscal Year",
-		"HR Settings", "Industry Type", "Leave Type", "Letter Head",
-		"Mode of Payment", "Module Def", "Naming Series", "POS Setting", "Print Heading",
-		"Report", "Role", "Selling Settings", "Stock Settings", "Supplier Type", "UOM"):
-		try:
-			reset_perms(doctype)
-		except:
-			print("Error resetting perms for", doctype)
-			raise
diff --git a/erpnext/patches/v4_0/save_default_letterhead.py b/erpnext/patches/v4_0/save_default_letterhead.py
deleted file mode 100644
index 5d75f09..0000000
--- a/erpnext/patches/v4_0/save_default_letterhead.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	"""save default letterhead to set default_letter_head_content"""
-	try:
-		letter_head = frappe.get_doc("Letter Head", {"is_default": 1})
-		letter_head.save()
-	except frappe.DoesNotExistError:
-		pass
diff --git a/erpnext/patches/v4_0/set_pricing_rule_for_buying_or_selling.py b/erpnext/patches/v4_0/set_pricing_rule_for_buying_or_selling.py
deleted file mode 100644
index 7e472e2..0000000
--- a/erpnext/patches/v4_0/set_pricing_rule_for_buying_or_selling.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc("accounts", "doctype", "pricing_rule")
-	frappe.db.sql("""update `tabPricing Rule` set selling=1 where ifnull(applicable_for, '') in
-		('', 'Customer', 'Customer Group', 'Territory', 'Sales Partner', 'Campaign')""")
-
-	frappe.db.sql("""update `tabPricing Rule` set buying=1 where ifnull(applicable_for, '') in
-		('', 'Supplier', 'Supplier Type')""")
diff --git a/erpnext/patches/v4_0/split_email_settings.py b/erpnext/patches/v4_0/split_email_settings.py
deleted file mode 100644
index 5d1dea6..0000000
--- a/erpnext/patches/v4_0/split_email_settings.py
+++ /dev/null
@@ -1,67 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import print_function, unicode_literals
-import frappe
-
-def execute():
-	print("WARNING!!!! Email Settings not migrated. Please setup your email again.")
-
-	# this will happen if you are migrating very old accounts
-	# comment out this line below and remember to create new Email Accounts
-	# for incoming and outgoing mails
-	raise Exception
-
-	return
-
-
-	frappe.reload_doc("core", "doctype", "outgoing_email_settings")
-	frappe.reload_doc("support", "doctype", "support_email_settings")
-
-	email_settings = get_email_settings()
-	map_outgoing_email_settings(email_settings)
-	map_support_email_settings(email_settings)
-
-
-def map_outgoing_email_settings(email_settings):
-	outgoing_email_settings = frappe.get_doc("Outgoing Email Settings")
-	for fieldname in (("outgoing_mail_server", "mail_server"),
-		"use_ssl", "mail_port", "mail_login", "mail_password",
-		"always_use_login_id_as_sender", "auto_email_id"):
-
-		if isinstance(fieldname, tuple):
-			from_fieldname, to_fieldname = fieldname
-		else:
-			from_fieldname = to_fieldname = fieldname
-
-		outgoing_email_settings.set(to_fieldname, email_settings.get(from_fieldname))
-
-	outgoing_email_settings._fix_numeric_types()
-	outgoing_email_settings.save()
-
-def map_support_email_settings(email_settings):
-	support_email_settings = frappe.get_doc("Support Email Settings")
-
-	for fieldname in ("sync_support_mails", "support_email",
-		("support_host", "mail_server"),
-		("support_use_ssl", "use_ssl"),
-		("support_username", "mail_login"),
-		("support_password", "mail_password"),
-		"support_signature", "send_autoreply", "support_autoreply"):
-
-		if isinstance(fieldname, tuple):
-			from_fieldname, to_fieldname = fieldname
-		else:
-			from_fieldname = to_fieldname = fieldname
-
-		support_email_settings.set(to_fieldname, email_settings.get(from_fieldname))
-
-	support_email_settings._fix_numeric_types()
-	support_email_settings.save()
-
-def get_email_settings():
-	ret = {}
-	for field, value in frappe.db.sql("select field, value from tabSingles where doctype='Email Settings'"):
-		ret[field] = value
-	return ret
-
diff --git a/erpnext/patches/v4_0/update_account_root_type.py b/erpnext/patches/v4_0/update_account_root_type.py
deleted file mode 100644
index 15ddf03..0000000
--- a/erpnext/patches/v4_0/update_account_root_type.py
+++ /dev/null
@@ -1,34 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import print_function, unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc("accounts", "doctype", "account")
-
-	account_table_columns = frappe.db.get_table_columns("Account")
-	if "debit_or_credit" in account_table_columns and "is_pl_account" in account_table_columns:
-		frappe.db.sql("""UPDATE tabAccount
-			SET root_type = CASE
-				WHEN (debit_or_credit='Debit' and is_pl_account = 'No') THEN 'Asset'
-				WHEN (debit_or_credit='Credit' and is_pl_account = 'No') THEN 'Liability'
-				WHEN (debit_or_credit='Debit' and is_pl_account = 'Yes') THEN 'Expense'
-				WHEN (debit_or_credit='Credit' and is_pl_account = 'Yes') THEN 'Income'
-				END
-			WHERE ifnull(parent_account, '') = ''
-		""")
-
-	else:
-		for key, root_type in (("asset", "Asset"), ("liabilities", "Liability"), ("expense", "Expense"),
-			("income", "Income")):
-			frappe.db.sql("""update tabAccount set root_type=%s where name like %s
-				and ifnull(parent_account, '')=''""", (root_type, "%" + key + "%"))
-
-	for root in frappe.db.sql("""SELECT name, lft, rgt, root_type FROM `tabAccount`
-		WHERE ifnull(parent_account, '')=''""",	as_dict=True):
-			if root.root_type:
-				frappe.db.sql("""UPDATE tabAccount SET root_type=%s WHERE lft>%s and rgt<%s""",
-					(root.root_type, root.lft, root.rgt))
-			else:
-				print(b"Root type not found for {0}".format(root.name.encode("utf-8")))
diff --git a/erpnext/patches/v4_0/update_custom_print_formats_for_renamed_fields.py b/erpnext/patches/v4_0/update_custom_print_formats_for_renamed_fields.py
deleted file mode 100644
index d784a1b..0000000
--- a/erpnext/patches/v4_0/update_custom_print_formats_for_renamed_fields.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-import re
-
-def execute():
-	# NOTE: sequence is important
-	fields_list = (
-		("amount", "base_amount"),
-		("ref_rate", "price_list_rate"),
-		("base_ref_rate", "base_price_list_rate"),
-		("adj_rate", "discount_percentage"),
-		("export_rate", "rate"),
-		("basic_rate", "base_rate"),
-		("export_amount", "amount"),
-		("reserved_warehouse", "warehouse"),
-		("import_ref_rate", "price_list_rate"),
-		("purchase_ref_rate", "base_price_list_rate"),
-		("discount_rate", "discount_percentage"),
-		("import_rate", "rate"),
-		("purchase_rate", "base_rate"),
-		("import_amount", "amount")
-	)
-
-	condition = " or ".join("""html like "%%{}%%" """.format(d[0].replace("_", "\\_")) for d in fields_list
-		if d[0] != "amount")
-
-	for name, html in frappe.db.sql("""select name, html from `tabPrint Format`
-		where standard = 'No' and ({}) and html not like '%%frappe.%%'""".format(condition)):
-			html = html.replace("wn.", "frappe.")
-			for from_field, to_field in fields_list:
-				html = re.sub(r"\b{}\b".format(from_field), to_field, html)
-
-			frappe.db.set_value("Print Format", name, "html", html)
diff --git a/erpnext/patches/v4_0/update_incharge_name_to_sales_person_in_maintenance_schedule.py b/erpnext/patches/v4_0/update_incharge_name_to_sales_person_in_maintenance_schedule.py
deleted file mode 100644
index fe66a5e..0000000
--- a/erpnext/patches/v4_0/update_incharge_name_to_sales_person_in_maintenance_schedule.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc("support", "doctype", "schedules")
-	frappe.reload_doc("support", "doctype", "maintenance_schedule_item")
-	
-	frappe.db.sql("""update `tabMaintenance Schedule Detail` set sales_person=incharge_name""")
-	frappe.db.sql("""update `tabMaintenance Schedule Item` set sales_person=incharge_name""")
\ No newline at end of file
diff --git a/erpnext/patches/v4_0/update_other_charges_in_custom_purchase_print_formats.py b/erpnext/patches/v4_0/update_other_charges_in_custom_purchase_print_formats.py
deleted file mode 100644
index 2e2e77a..0000000
--- a/erpnext/patches/v4_0/update_other_charges_in_custom_purchase_print_formats.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-import re
-
-def execute():
-	for name, html in frappe.db.sql("""select name, html from `tabPrint Format`
-		where standard = 'No' and html like '%%purchase\\_tax\\_details%%'"""):
-			html = re.sub(r"\bpurchase_tax_details\b", "taxes", html)
-			frappe.db.set_value("Print Format", name, "html", html)
diff --git a/erpnext/patches/v4_0/update_tax_amount_after_discount.py b/erpnext/patches/v4_0/update_tax_amount_after_discount.py
deleted file mode 100644
index d10329e..0000000
--- a/erpnext/patches/v4_0/update_tax_amount_after_discount.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc("accounts", "doctype", "sales_taxes_and_charges")
-	docs_with_discount_amount = frappe._dict()
-	for dt in ["Quotation", "Sales Order", "Delivery Note", "Sales Invoice"]:
-		records = frappe.db.sql_list("""select name from `tab%s`
-			where ifnull(discount_amount, 0) > 0 and docstatus=1""" % dt)
-		docs_with_discount_amount[dt] = records
-
-	for dt, discounted_records in docs_with_discount_amount.items():
-		frappe.db.sql("""update `tabSales Taxes and Charges`
-			set tax_amount_after_discount_amount = tax_amount
-			where parenttype = %s and parent not in (%s)""" %
-			('%s', ', '.join(['%s']*(len(discounted_records)+1))),
-			tuple([dt, ''] + discounted_records))
diff --git a/erpnext/patches/v4_0/update_user_properties.py b/erpnext/patches/v4_0/update_user_properties.py
deleted file mode 100644
index f2085ce..0000000
--- a/erpnext/patches/v4_0/update_user_properties.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-import frappe.permissions
-import frappe.defaults
-
-def execute():
-	frappe.reload_doc("core", "doctype", "docfield")
-	frappe.reload_doc("hr", "doctype", "employee")
-
-	set_print_email_permissions()
-	migrate_user_properties_to_user_permissions()
-
-	frappe.clear_cache()
-
-def migrate_user_properties_to_user_permissions():
-	for d in frappe.db.sql("""select parent, defkey, defvalue from tabDefaultValue
-		where parent not in ('__global', '__default')""", as_dict=True):
-		df = frappe.db.sql("""select options from tabDocField
-			where fieldname=%s and fieldtype='Link'""", d.defkey, as_dict=True)
-
-		if df:
-			frappe.db.sql("""update tabDefaultValue
-				set defkey=%s, parenttype='User Permission'
-				where defkey=%s and
-				parent not in ('__global', '__default')""", (df[0].options, d.defkey))
-
-def set_print_email_permissions():
-	# reset Page perms
-	from frappe.core.page.permission_manager.permission_manager import reset
-	reset("Page")
-	reset("Report")
-
-	if "allow_print" not in frappe.db.get_table_columns("DocType"):
-		return
-
-	# patch to move print, email into DocPerm
-	# NOTE: allow_print and allow_email are misnamed. They were used to hide print / hide email
-	for doctype, hide_print, hide_email in frappe.db.sql("""select name, ifnull(allow_print, 0), ifnull(allow_email, 0)
-		from `tabDocType` where ifnull(issingle, 0)=0 and ifnull(istable, 0)=0 and
-		(ifnull(allow_print, 0)=0 or ifnull(allow_email, 0)=0)"""):
-
-		if not hide_print:
-			frappe.db.sql("""update `tabDocPerm` set `print`=1
-				where permlevel=0 and `read`=1 and parent=%s""", doctype)
-
-		if not hide_email:
-			frappe.db.sql("""update `tabDocPerm` set `email`=1
-				where permlevel=0 and `read`=1 and parent=%s""", doctype)
diff --git a/erpnext/patches/v4_0/update_users_report_view_settings.py b/erpnext/patches/v4_0/update_users_report_view_settings.py
deleted file mode 100644
index 6f216f5..0000000
--- a/erpnext/patches/v4_0/update_users_report_view_settings.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-
-from frappe.model.utils.rename_field import update_users_report_view_settings
-from erpnext.patches.v4_0.fields_to_be_renamed import rename_map
-
-def execute():
-	for dt, field_list in rename_map.items():
-		for field in field_list:
-			update_users_report_view_settings(dt, field[0], field[1])
diff --git a/erpnext/patches/v4_0/validate_v3_patch.py b/erpnext/patches/v4_0/validate_v3_patch.py
deleted file mode 100644
index 3df39ed..0000000
--- a/erpnext/patches/v4_0/validate_v3_patch.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	from frappe.modules.patch_handler import executed
-	last_v3_patch = 'patches.1401.fix_pos_outstanding'
-	if not executed(last_v3_patch):
-		raise Exception("site not ready to migrate to version 4")
diff --git a/erpnext/patches/v4_1/__init__.py b/erpnext/patches/v4_1/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/patches/v4_1/__init__.py
+++ /dev/null
diff --git a/erpnext/patches/v4_1/fix_delivery_and_billing_status.py b/erpnext/patches/v4_1/fix_delivery_and_billing_status.py
deleted file mode 100644
index 8cc6a4b..0000000
--- a/erpnext/patches/v4_1/fix_delivery_and_billing_status.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.db.sql("""update `tabSales Order` set delivery_status = 'Not Delivered'
-		where delivery_status = 'Delivered' and ifnull(per_delivered, 0) = 0 and ifnull(docstatus, 0) in (0, 1)""")
-
-	frappe.db.sql("""update `tabSales Order` set billing_status = 'Not Billed'
-		where billing_status = 'Billed' and ifnull(per_billed, 0) = 0 and ifnull(docstatus, 0) in (0, 1)""")
diff --git a/erpnext/patches/v4_1/fix_jv_remarks.py b/erpnext/patches/v4_1/fix_jv_remarks.py
deleted file mode 100644
index e07bf05..0000000
--- a/erpnext/patches/v4_1/fix_jv_remarks.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	reference_date = guess_reference_date()
-	for name in frappe.db.sql_list("""select name from `tabJournal Entry`
-			where date(creation)>=%s""", reference_date):
-		jv = frappe.get_doc("Journal Entry", name)
-		try:
-			jv.create_remarks()
-		except frappe.MandatoryError:
-			pass
-		else:
-			frappe.db.set_value("Journal Entry", jv.name, "remark", jv.remark)
-
-def guess_reference_date():
-	return (frappe.db.get_value("Patch Log", {"patch": "erpnext.patches.v4_0.validate_v3_patch"}, "creation")
-		or "2014-05-06")
diff --git a/erpnext/patches/v4_1/fix_sales_order_delivered_status.py b/erpnext/patches/v4_1/fix_sales_order_delivered_status.py
deleted file mode 100644
index 66037b8..0000000
--- a/erpnext/patches/v4_1/fix_sales_order_delivered_status.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	for si in frappe.db.sql_list("""select name
-		from `tabSales Invoice`
-		where ifnull(update_stock,0) = 1 and docstatus = 1 and exists(
-			select name from `tabSales Invoice Item` where parent=`tabSales Invoice`.name and
-				ifnull(so_detail, "") != "")"""):
-
-		invoice = frappe.get_doc("Sales Invoice", si)
-		invoice.update_qty()
diff --git a/erpnext/patches/v4_1/set_outgoing_email_footer.py b/erpnext/patches/v4_1/set_outgoing_email_footer.py
deleted file mode 100644
index 54d016b..0000000
--- a/erpnext/patches/v4_1/set_outgoing_email_footer.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from erpnext.setup.install import default_mail_footer
-
-def execute():
-	return
-	mail_footer = frappe.db.get_default('mail_footer') or ''
-	mail_footer += default_mail_footer
-	frappe.db.set_value("Outgoing Email Settings", "Outgoing Email Settings", "footer", mail_footer)
diff --git a/erpnext/patches/v4_2/__init__.py b/erpnext/patches/v4_2/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/patches/v4_2/__init__.py
+++ /dev/null
diff --git a/erpnext/patches/v4_2/add_currency_turkish_lira.py b/erpnext/patches/v4_2/add_currency_turkish_lira.py
deleted file mode 100644
index 1a46089..0000000
--- a/erpnext/patches/v4_2/add_currency_turkish_lira.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	return
-	# country = get_country_info(country="Turkey")
-	# add_country_and_currency("Turkey", country)
diff --git a/erpnext/patches/v4_2/default_website_style.py b/erpnext/patches/v4_2/default_website_style.py
deleted file mode 100644
index e8f9502..0000000
--- a/erpnext/patches/v4_2/default_website_style.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	return
-	# frappe.reload_doc('website', 'doctype', 'style_settings')
-	# style_settings = frappe.get_doc("Style Settings", "Style Settings")
-	# if not style_settings.apply_style:
-	# 	style_settings.update(default_properties)
-	# 	style_settings.apply_style = 1
-	# 	style_settings.save()
diff --git a/erpnext/patches/v4_2/delete_gl_entries_for_cancelled_invoices.py b/erpnext/patches/v4_2/delete_gl_entries_for_cancelled_invoices.py
deleted file mode 100644
index 169b1e2..0000000
--- a/erpnext/patches/v4_2/delete_gl_entries_for_cancelled_invoices.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	cancelled_invoices = frappe.db.sql_list("""select name from `tabSales Invoice` 
-		where docstatus = 2 and ifnull(update_stock, 0) = 1""")
-
-	if cancelled_invoices:
-		frappe.db.sql("""delete from `tabGL Entry` 
-			where voucher_type = 'Sales Invoice' and voucher_no in (%s)""" 
-			% (', '.join(['%s']*len(cancelled_invoices))), tuple(cancelled_invoices))
\ No newline at end of file
diff --git a/erpnext/patches/v4_2/delete_old_print_formats.py b/erpnext/patches/v4_2/delete_old_print_formats.py
deleted file mode 100644
index cacdb85..0000000
--- a/erpnext/patches/v4_2/delete_old_print_formats.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	old_formats = ("Sales Invoice", "Sales Invoice Spartan", "Sales Invoice Modern",
-		"Sales Invoice Classic",
-		"Sales Order Spartan", "Sales Order Modern", "Sales Order Classic",
-		"Purchase Order Spartan", "Purchase Order Modern", "Purchase Order Classic",
-		"Quotation Spartan", "Quotation Modern", "Quotation Classic",
-		"Delivery Note Spartan", "Delivery Note Modern", "Delivery Note Classic")
-
-	for fmt in old_formats:
-		# update property setter
-		for ps in frappe.db.sql_list("""select name from `tabProperty Setter`
-			where property='default_print_format' and value=%s""", fmt):
-			ps = frappe.get_doc("Property Setter", ps)
-			ps.value = "Standard"
-			ps.save(ignore_permissions = True)
-
-		frappe.delete_doc_if_exists("Print Format", fmt)
diff --git a/erpnext/patches/v4_2/discount_amount.py b/erpnext/patches/v4_2/discount_amount.py
deleted file mode 100644
index 7ab61bd..0000000
--- a/erpnext/patches/v4_2/discount_amount.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.modules import scrub, get_doctype_module
-
-def execute():
-	for dt in ["Quotation", "Sales Order", "Delivery Note", "Sales Invoice"]:
-		frappe.reload_doc(get_doctype_module(dt), "doctype", scrub(dt))
-		frappe.db.sql("""update `tab{0}` set base_discount_amount=discount_amount,
-			discount_amount=discount_amount/conversion_rate""".format(dt))
diff --git a/erpnext/patches/v4_2/fix_account_master_type.py b/erpnext/patches/v4_2/fix_account_master_type.py
deleted file mode 100644
index 99444ce..0000000
--- a/erpnext/patches/v4_2/fix_account_master_type.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	for d in frappe.db.sql("""select name from `tabAccount`
-		where ifnull(master_type, '') not in ('Customer', 'Supplier', 'Employee', '') and docstatus=0"""):
-			ac = frappe.get_doc("Account", d[0])
-			ac.master_type = None
-			ac.save()
diff --git a/erpnext/patches/v4_2/fix_gl_entries_for_stock_transactions.py b/erpnext/patches/v4_2/fix_gl_entries_for_stock_transactions.py
deleted file mode 100644
index c6c94d4..0000000
--- a/erpnext/patches/v4_2/fix_gl_entries_for_stock_transactions.py
+++ /dev/null
@@ -1,54 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import print_function, unicode_literals
-import frappe
-from frappe.utils import flt
-
-def execute():
-	from erpnext.stock.stock_balance import repost
-	repost(allow_zero_rate=True, only_actual=True)
-
-	frappe.reload_doctype("Account")
-
-	warehouse_account = frappe.db.sql("""select name, master_name from tabAccount
-		where ifnull(account_type, '') = 'Warehouse'""")
-	if warehouse_account:
-		warehouses = [d[1] for d in warehouse_account]
-		accounts = [d[0] for d in warehouse_account]
-
-		stock_vouchers = frappe.db.sql("""select distinct sle.voucher_type, sle.voucher_no
-			from `tabStock Ledger Entry` sle
-			where sle.warehouse in (%s)
-			order by sle.posting_date""" %
-			', '.join(['%s']*len(warehouses)), tuple(warehouses))
-
-		rejected = []
-		for voucher_type, voucher_no in stock_vouchers:
-			stock_bal = frappe.db.sql("""select sum(stock_value_difference) from `tabStock Ledger Entry`
-				where voucher_type=%s and voucher_no =%s and warehouse in (%s)""" %
-				('%s', '%s', ', '.join(['%s']*len(warehouses))), tuple([voucher_type, voucher_no] + warehouses))
-
-			account_bal = frappe.db.sql("""select ifnull(sum(ifnull(debit, 0) - ifnull(credit, 0)), 0)
-				from `tabGL Entry`
-				where voucher_type=%s and voucher_no =%s and account in (%s)
-				group by voucher_type, voucher_no""" %
-				('%s', '%s', ', '.join(['%s']*len(accounts))), tuple([voucher_type, voucher_no] + accounts))
-
-			if stock_bal and account_bal and abs(flt(stock_bal[0][0]) - flt(account_bal[0][0])) > 0.1:
-				try:
-					print(voucher_type, voucher_no, stock_bal[0][0], account_bal[0][0])
-
-					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 as e:
-					print(frappe.get_traceback())
-					rejected.append([voucher_type, voucher_no])
-					frappe.db.rollback()
-
-		print("Failed to repost: ")
-		print(rejected)
diff --git a/erpnext/patches/v4_2/fix_recurring_orders.py b/erpnext/patches/v4_2/fix_recurring_orders.py
deleted file mode 100644
index ea1724a..0000000
--- a/erpnext/patches/v4_2/fix_recurring_orders.py
+++ /dev/null
@@ -1,41 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	sales_orders = frappe.db.sql("""select name from `tabSales Order` 
-		where docstatus = 1 and ifnull(is_recurring, 0) = 1 
-		and (per_delivered > 0 or per_billed > 0)""", as_dict=1)
-
-	for so in sales_orders:
-		if not frappe.db.exists("Delivery Note Item", {"against_sales_order": so.name, "docstatus": 1}):
-			frappe.db.sql("""update `tabSales Order` set per_delivered = 0, 
-				delivery_status = 'Not Delivered' where name = %s""", so.name)
-			frappe.db.sql("""update `tabSales Order Item` set delivered_qty = 0
-				where parent = %s""", so.name)
-
-		if not frappe.db.exists("Sales Invoice Item", {"sales_order": so.name, "docstatus": 1}):
-			frappe.db.sql("""update `tabSales Order` set per_billed = 0, 
-				billing_status = 'Not Billed' where name = %s""", so.name)
-			frappe.db.sql("""update `tabSales Order Item` set billed_amt = 0
-				where parent = %s""", so.name)
-
-	purchase_orders = frappe.db.sql("""select name from `tabPurchase Order` 
-		where docstatus = 1 and ifnull(is_recurring, 0) = 1 
-		and (per_received > 0 or per_billed > 0)""", as_dict=1)
-
-	for po in purchase_orders:
-		if not frappe.db.exists("Purchase Receipt Item", {"prevdoc_doctype": "Purchase Order", 
-			"prevdoc_docname": po.name, "docstatus": 1}):
-				frappe.db.sql("""update `tabPurchase Order` set per_received = 0
-					where name = %s""", po.name)
-				frappe.db.sql("""update `tabPurchase Order Item` set received_qty = 0
-					where parent = %s""", po.name)
-
-		if not frappe.db.exists("Purchase Invoice Item", {"purchase_order": po.name, "docstatus": 1}):
-			frappe.db.sql("""update `tabPurchase Order` set per_billed = 0
-				where name = %s""", po.name)
-			frappe.db.sql("""update `tabPurchase Order Item` set billed_amt = 0
-				where parent = %s""", po.name)
\ No newline at end of file
diff --git a/erpnext/patches/v4_2/party_model.py b/erpnext/patches/v4_2/party_model.py
deleted file mode 100644
index 46d7fff..0000000
--- a/erpnext/patches/v4_2/party_model.py
+++ /dev/null
@@ -1,117 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import print_function, unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc("accounts", "doctype", "account")
-	frappe.reload_doc("setup", "doctype", "company")
-	frappe.reload_doc("accounts", "doctype", "gl_entry")
-	frappe.reload_doc("accounts", "doctype", "journal_entry_account")
-	receivable_payable_accounts = create_receivable_payable_account()
-	if receivable_payable_accounts:
-		set_party_in_jv_and_gl_entry(receivable_payable_accounts)
-		delete_individual_party_account()
-		remove_customer_supplier_account_report()
-
-def create_receivable_payable_account():
-	receivable_payable_accounts = frappe._dict()
-
-	def _create_account(args):
-		if args["parent_account"] and frappe.db.exists("Account", args["parent_account"]):
-			account_id = frappe.db.get_value("Account", 
-					{"account_name": args["account_name"], "company": args["company"]})
-			if not account_id:
-				account = frappe.new_doc("Account")
-				account.is_group = 0
-				account.update(args)
-				account.insert()
-			
-				account_id = account.name
-			
-			frappe.db.set_value("Company", args["company"], ("default_receivable_account"
-				if args["account_type"]=="Receivable" else "default_payable_account"), account_id)
-
-			receivable_payable_accounts.setdefault(args["company"], {}).setdefault(args["account_type"], account_id)
-
-	for company in frappe.db.sql_list("select name from tabCompany"):
-		_create_account({
-				"account_name": "Debtors",
-				"account_type": "Receivable",
-				"company": company,
-				"parent_account": get_parent_account(company, "Customer")
-			})
-
-		_create_account({
-			"account_name": "Creditors",
-			"account_type": "Payable",
-			"company": company,
-			"parent_account": get_parent_account(company, "Supplier")
-		})
-
-	return receivable_payable_accounts
-
-def get_parent_account(company, master_type):
-	parent_account = None
-	
-	if "receivables_group" in frappe.db.get_table_columns("Company"):
-		parent_account = frappe.get_cached_value('Company',  company, 
-			"receivables_group" if master_type=="Customer" else "payables_group")
-	if not parent_account:
-		parent_account = frappe.db.get_value("Account", {"company": company,
-			"account_name": "Accounts Receivable" if master_type=="Customer" else "Accounts Payable"})
-
-	if not parent_account:
-		parent_account = frappe.db.sql_list("""select parent_account from tabAccount
-			where company=%s and ifnull(master_type, '')=%s and ifnull(master_name, '')!='' limit 1""",
-			(company, master_type))
-		parent_account = parent_account[0][0] if parent_account else None
-
-	return parent_account
-
-def set_party_in_jv_and_gl_entry(receivable_payable_accounts):
-	accounts = frappe.db.sql("""select name, master_type, master_name, company from `tabAccount`
-		where ifnull(master_type, '') in ('Customer', 'Supplier') and ifnull(master_name, '') != ''""", as_dict=1)
-
-	account_map = frappe._dict()
-	for d in accounts:
-		account_map.setdefault(d.name, d)
-
-	if not account_map:
-		return
-
-	for dt in ["Journal Entry Account", "GL Entry"]:
-		records = frappe.db.sql("""select name, account from `tab%s` 
-			where account in (%s) and ifnull(party, '') = '' and docstatus < 2""" % 
-			(dt, ", ".join(['%s']*len(account_map))), tuple(account_map.keys()), as_dict=1)
-		for i, d in enumerate(records):
-			account_details = account_map.get(d.account, {})
-			account_type = "Receivable" if account_details.get("master_type")=="Customer" else "Payable"
-			new_account = receivable_payable_accounts[account_details.get("company")][account_type]
-
-			frappe.db.sql("update `tab{0}` set account=%s, party_type=%s, party=%s where name=%s".format(dt),
-				(new_account, account_details.get("master_type"), account_details.get("master_name"), d.name))
-
-			if i%500 == 0:
-				frappe.db.commit()
-
-def delete_individual_party_account():
-	frappe.db.sql("""delete from `tabAccount` 
-		where ifnull(master_type, '') in ('Customer', 'Supplier') 
-			and ifnull(master_name, '') != '' 
-			and not exists(select gle.name from `tabGL Entry` gle 
-				where gle.account = tabAccount.name)""")
-		
-	accounts_not_deleted = frappe.db.sql_list("""select tabAccount.name from `tabAccount` 
-		where ifnull(master_type, '') in ('Customer', 'Supplier')
-		and ifnull(master_name, '') != '' 
-		and exists(select gle.name from `tabGL Entry` gle where gle.account = tabAccount.name)""")
-		
-	if accounts_not_deleted:
-		print("Accounts not deleted: " + "\n".join(accounts_not_deleted))
-		
-
-def remove_customer_supplier_account_report():
-	for d in ["Customer Account Head", "Supplier Account Head"]:
-		frappe.delete_doc("Report", d)
diff --git a/erpnext/patches/v4_2/recalculate_bom_cost.py b/erpnext/patches/v4_2/recalculate_bom_cost.py
deleted file mode 100644
index eee89fc..0000000
--- a/erpnext/patches/v4_2/recalculate_bom_cost.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	for d in frappe.db.sql("select name from `tabBOM` where docstatus < 2"):
-		try:
-			document = frappe.get_doc('BOM', d[0])
-			if document.docstatus == 1:
-				document.flags.ignore_validate_update_after_submit = True
-				document.calculate_cost()
-			document.save()
-		except:
-			pass
diff --git a/erpnext/patches/v4_2/repost_sle_for_si_with_no_warehouse.py b/erpnext/patches/v4_2/repost_sle_for_si_with_no_warehouse.py
deleted file mode 100644
index 1356129..0000000
--- a/erpnext/patches/v4_2/repost_sle_for_si_with_no_warehouse.py
+++ /dev/null
@@ -1,34 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import print_function, unicode_literals
-import frappe
-from erpnext.stock.stock_ledger import NegativeStockError
-
-def execute():
-	si_list = frappe.db.sql("""select distinct si.name 
-		from `tabSales Invoice Item` si_item, `tabSales Invoice` si 
-		where si.name = si_item.parent and si.modified > '2015-02-16' and si.docstatus=1 
-		and ifnull(si_item.warehouse, '') = '' and ifnull(si.update_stock, 0) = 1 
-		order by posting_date, posting_time""", as_dict=1)
-		
-	failed_list = []
-	for si in si_list:
-		try:
-			si_doc = frappe.get_doc("Sales Invoice", si.name)		
-			si_doc.docstatus = 2
-			si_doc.on_cancel()
-
-			si_doc.docstatus = 1
-			si_doc.set_missing_item_details()
-			si_doc.on_submit()
-			frappe.db.commit()
-		except:
-			failed_list.append(si.name)
-			frappe.local.stockledger_exceptions = None
-			frappe.db.rollback()
-
-	print("Failed to repost: ", failed_list)
-					
-		
-	
\ No newline at end of file
diff --git a/erpnext/patches/v4_2/repost_stock_reconciliation.py b/erpnext/patches/v4_2/repost_stock_reconciliation.py
deleted file mode 100644
index ad20ebb..0000000
--- a/erpnext/patches/v4_2/repost_stock_reconciliation.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-import json
-
-def execute():
-	existing_allow_negative_stock = frappe.db.get_value("Stock Settings", None, "allow_negative_stock")
-	frappe.db.set_value("Stock Settings", None, "allow_negative_stock", 1)
-
-	head_row = ["Item Code", "Warehouse", "Quantity", "Valuation Rate"]
-	stock_reco_to_be_reposted = []
-	for d in frappe.db.sql("""select name, reconciliation_json from `tabStock Reconciliation`
-		where docstatus=1 and creation > '2014-03-01'""", as_dict=1):
-			data = json.loads(d.reconciliation_json)
-			for row in data[data.index(head_row)+1:]:
-				if row[3] in ["", None]:
-					stock_reco_to_be_reposted.append(d.name)
-					break
-
-	for dn in stock_reco_to_be_reposted:
-		reco = frappe.get_doc("Stock Reconciliation", dn)
-		reco.docstatus = 2
-		reco.on_cancel()
-
-		reco.docstatus = 1
-		reco.validate()
-		reco.on_submit()
-
-	frappe.db.set_value("Stock Settings", None, "allow_negative_stock", existing_allow_negative_stock)
diff --git a/erpnext/patches/v4_2/reset_bom_costs.py b/erpnext/patches/v4_2/reset_bom_costs.py
deleted file mode 100644
index 42ca759..0000000
--- a/erpnext/patches/v4_2/reset_bom_costs.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc('manufacturing', 'doctype', 'bom_operation')
-	for d in frappe.db.sql("""select name from `tabBOM` where docstatus < 2""", as_dict=1):
-		try:
-			bom = frappe.get_doc('BOM', d.name)
-			bom.flags.ignore_validate_update_after_submit = True
-			bom.calculate_cost()
-			bom.save()
-			frappe.db.commit()
-		except:
-			frappe.db.rollback()
diff --git a/erpnext/patches/v4_2/seprate_manufacture_and_repack.py b/erpnext/patches/v4_2/seprate_manufacture_and_repack.py
deleted file mode 100644
index 2c93543..0000000
--- a/erpnext/patches/v4_2/seprate_manufacture_and_repack.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.db.sql("""update `tabStock Entry` set purpose='Manufacture' where purpose='Manufacture/Repack' and ifnull(work_order,"")!="" """)
-	frappe.db.sql("""update `tabStock Entry` set purpose='Repack' where purpose='Manufacture/Repack' and ifnull(work_order,"")="" """)
\ No newline at end of file
diff --git a/erpnext/patches/v4_2/set_company_country.py b/erpnext/patches/v4_2/set_company_country.py
deleted file mode 100644
index 89f07f2..0000000
--- a/erpnext/patches/v4_2/set_company_country.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import print_function, unicode_literals
-import frappe
-
-def execute():
-	country = frappe.db.get_single_value("Global Defaults", "country")
-	if not country:
-		print("Country not specified in Global Defaults")
-		return
-
-	for company in frappe.db.sql_list("""select name from `tabCompany`
-		where ifnull(country, '')=''"""):
-		frappe.db.set_value("Company", company, "country", country)
diff --git a/erpnext/patches/v4_2/set_item_has_batch.py b/erpnext/patches/v4_2/set_item_has_batch.py
deleted file mode 100644
index 7e52d2d..0000000
--- a/erpnext/patches/v4_2/set_item_has_batch.py
+++ /dev/null
@@ -1,65 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.db.sql("update tabItem set has_batch_no = 0 where ifnull(has_batch_no, '') = ''")
-	frappe.db.sql("update tabItem set has_serial_no = 0 where ifnull(has_serial_no, '') = ''")
-
-	item_list = frappe.db.sql("""select name, has_batch_no, has_serial_no from tabItem
-		where is_stock_item = 1""", as_dict=1)
-
-	sle_count = get_sle_count()
-	sle_with_batch = get_sle_with_batch()
-	sle_with_serial = get_sle_with_serial()
-
-	batch_items = get_items_with_batch()
-	serialized_items = get_items_with_serial()
-
-	for d in item_list:
-		if d.has_batch_no == 1:
-			if d.name not in batch_items and sle_count.get(d.name) and sle_count.get(d.name) != sle_with_batch.get(d.name):
-					frappe.db.set_value("Item", d.name, "has_batch_no", 0)
-		else:
-			if d.name in batch_items or (sle_count.get(d.name) and sle_count.get(d.name) == sle_with_batch.get(d.name)):
-				frappe.db.set_value("Item", d.name, "has_batch_no", 1)
-
-		if d.has_serial_no == 1:
-			if d.name not in serialized_items and sle_count.get(d.name) and sle_count.get(d.name) != sle_with_serial.get(d.name):
-				frappe.db.set_value("Item", d.name, "has_serial_no", 0)
-		else:
-			if d.name in serialized_items or (sle_count.get(d.name) and sle_count.get(d.name) == sle_with_serial.get(d.name)):
-				frappe.db.set_value("Item", d.name, "has_serial_no", 1)
-
-
-def get_sle_count():
-	sle_count = {}
-	for d in frappe.db.sql("""select item_code, count(name) as cnt from `tabStock Ledger Entry` group by item_code""", as_dict=1):
-		sle_count.setdefault(d.item_code, d.cnt)
-
-	return sle_count
-
-def get_sle_with_batch():
-	sle_with_batch = {}
-	for d in frappe.db.sql("""select item_code, count(name) as cnt from `tabStock Ledger Entry`
-		where ifnull(batch_no, '') != '' group by item_code""", as_dict=1):
-			sle_with_batch.setdefault(d.item_code, d.cnt)
-
-	return sle_with_batch
-
-
-def get_sle_with_serial():
-	sle_with_serial = {}
-	for d in frappe.db.sql("""select item_code, count(name) as cnt from `tabStock Ledger Entry`
-		where ifnull(serial_no, '') != '' group by item_code""", as_dict=1):
-			sle_with_serial.setdefault(d.item_code, d.cnt)
-
-	return sle_with_serial
-
-def get_items_with_batch():
-	return frappe.db.sql_list("select item from tabBatch")
-
-def get_items_with_serial():
-	return frappe.db.sql_list("select item_code from `tabSerial No`")
diff --git a/erpnext/patches/v4_2/toggle_rounded_total.py b/erpnext/patches/v4_2/toggle_rounded_total.py
deleted file mode 100644
index e571208..0000000
--- a/erpnext/patches/v4_2/toggle_rounded_total.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	global_defaults = frappe.get_doc("Global Defaults", "Global Defaults")
-	global_defaults.toggle_rounded_total()
diff --git a/erpnext/patches/v4_2/update_landed_cost_voucher.py b/erpnext/patches/v4_2/update_landed_cost_voucher.py
deleted file mode 100644
index ec00296..0000000
--- a/erpnext/patches/v4_2/update_landed_cost_voucher.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc("stock", "doctype", "landed_cost_voucher")
-	frappe.db.sql("""update `tabLanded Cost Voucher` set distribute_charges_based_on = 'Amount'
-		where docstatus=1""")
diff --git a/erpnext/patches/v4_2/update_project_milestones.py b/erpnext/patches/v4_2/update_project_milestones.py
deleted file mode 100644
index e704116..0000000
--- a/erpnext/patches/v4_2/update_project_milestones.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	for project in frappe.db.sql_list("select name from tabProject"):
-		frappe.reload_doc("projects", "doctype", "project")
-		p = frappe.get_doc("Project", project)
-		p.update_milestones_completed()
-		p.db_set("percent_milestones_completed", p.percent_milestones_completed)
diff --git a/erpnext/patches/v4_2/update_sales_order_invoice_field_name.py b/erpnext/patches/v4_2/update_sales_order_invoice_field_name.py
deleted file mode 100644
index 28dd5c0..0000000
--- a/erpnext/patches/v4_2/update_sales_order_invoice_field_name.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc('accounts', 'doctype', 'sales_invoice')
-	frappe.db.sql("""update `tabSales Invoice` set from_date = invoice_period_from_date,
-		to_date = invoice_period_to_date, is_recurring = convert_into_recurring_invoice""")
diff --git a/erpnext/patches/v4_2/update_stock_uom_for_dn_in_sle.py b/erpnext/patches/v4_2/update_stock_uom_for_dn_in_sle.py
deleted file mode 100644
index 89bf795..0000000
--- a/erpnext/patches/v4_2/update_stock_uom_for_dn_in_sle.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.db.sql("""update `tabStock Ledger Entry` sle, tabItem item
-		set sle.stock_uom = item.stock_uom
-		where sle.voucher_type="Delivery Note" and item.name = sle.item_code
-		and sle.stock_uom != item.stock_uom""")
diff --git a/erpnext/patches/v4_4/__init__.py b/erpnext/patches/v4_4/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/patches/v4_4/__init__.py
+++ /dev/null
diff --git a/erpnext/patches/v4_4/make_email_accounts.py b/erpnext/patches/v4_4/make_email_accounts.py
deleted file mode 100644
index 57df1ae..0000000
--- a/erpnext/patches/v4_4/make_email_accounts.py
+++ /dev/null
@@ -1,96 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.model import default_fields
-
-from six import iteritems
-
-def execute():
-	frappe.reload_doc("email", "doctype", "email_account")
-
-	# outgoing
-	outgoing = dict(frappe.db.sql("select field, value from tabSingles where doctype='Outgoing Email Settings'"))
-	if outgoing and outgoing['mail_server'] and outgoing['mail_login']:
-		account = frappe.new_doc("Email Account")
-		mapping = {
-			"login_id_is_different": 1,
-			"email_id": "auto_email_id",
-			"login_id": "mail_login",
-			"password": "mail_password",
-			"footer": "footer",
-			"smtp_server": "mail_server",
-			"smtp_port": "mail_port",
-			"use_tls": "use_ssl"
-		}
-
-		for target_fieldname, source_fieldname in iteritems(mapping):
-			account.set(target_fieldname, outgoing.get(source_fieldname))
-
-		account.enable_outgoing = 1
-		account.enable_incoming = 0
-
-		account.insert()
-
-	# support
-	support = dict(frappe.db.sql("select field, value from tabSingles where doctype='Support Email Settings'"))
-	if support and support['mail_server'] and support['mail_login']:
-		account = frappe.new_doc("Email Account")
-		mapping = {
-			"enable_incoming": "sync_support_mails",
-			"email_id": "mail_login",
-			"password": "mail_password",
-			"email_server": "mail_server",
-			"use_ssl": "use_ssl",
-			"signature": "support_signature",
-			"enable_auto_reply": "send_autoreply",
-			"auto_reply_message": "support_autoreply"
-		}
-
-		for target_fieldname, source_fieldname in iteritems(mapping):
-			account.set(target_fieldname, support.get(source_fieldname))
-
-		account.enable_outgoing = 0
-		account.append_to = "Issue"
-
-		insert_or_update(account)
-
-	# sales, jobs
-	for doctype in ("Sales Email Settings", "Jobs Email Settings"):
-		source = dict(frappe.db.sql("select field, value from tabSingles where doctype=%s", doctype))
-		if source and  source.get('host') and source.get('username'):
-			account = frappe.new_doc("Email Account")
-			mapping = {
-				"enable_incoming": "extract_emails",
-				"email_id": "username",
-				"password": "password",
-				"email_server": "host",
-				"use_ssl": "use_ssl",
-			}
-
-			for target_fieldname, source_fieldname in iteritems(mapping):
-				account.set(target_fieldname, source.get(source_fieldname))
-
-			account.enable_outgoing = 0
-			account.append_to = "Lead" if doctype=="Sales Email Settings" else "Job Applicant"
-
-			insert_or_update(account)
-
-	for doctype in ("Outgoing Email Settings", "Support Email Settings",
-		"Sales Email Settings", "Jobs Email Settings"):
-		frappe.delete_doc("DocType", doctype)
-
-def insert_or_update(account):
-	try:
-		account.insert()
-	except frappe.NameError as e:
-		if e.args[0]=="Email Account":
-			existing_account = frappe.get_doc("Email Account", e.args[1])
-			for key, value in account.as_dict().items():
-				if not existing_account.get(key) and value \
-					and key not in default_fields \
-					and key != "__islocal":
-					existing_account.set(key, value)
-
-			existing_account.save()
-		else:
-			raise
-
diff --git a/erpnext/patches/v5_0/__init__.py b/erpnext/patches/v5_0/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/patches/v5_0/__init__.py
+++ /dev/null
diff --git a/erpnext/patches/v5_0/convert_stock_reconciliation.py b/erpnext/patches/v5_0/convert_stock_reconciliation.py
deleted file mode 100644
index 75d1da7..0000000
--- a/erpnext/patches/v5_0/convert_stock_reconciliation.py
+++ /dev/null
@@ -1,31 +0,0 @@
-from __future__ import unicode_literals
-import frappe, json
-
-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()
-
diff --git a/erpnext/patches/v5_0/execute_on_doctype_update.py b/erpnext/patches/v5_0/execute_on_doctype_update.py
deleted file mode 100644
index 70b1d8d..0000000
--- a/erpnext/patches/v5_0/execute_on_doctype_update.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	for dt in ("Stock Ledger Entry", "Communication", "DefaultValue", "DocShare", "File", "ToDo"):
-		frappe.get_doc("DocType", dt).run_module_method("on_doctype_update")
diff --git a/erpnext/patches/v5_0/fix_taxes_and_totals_in_party_currency.py b/erpnext/patches/v5_0/fix_taxes_and_totals_in_party_currency.py
deleted file mode 100644
index 30dc0f8..0000000
--- a/erpnext/patches/v5_0/fix_taxes_and_totals_in_party_currency.py
+++ /dev/null
@@ -1,66 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.model.meta import get_field_precision
-
-def execute():
-	if not frappe.db.sql("""select name from `tabPatch Log`
-		where patch = 'erpnext.patches.v5_0.taxes_and_totals_in_party_currency'"""):
-			return
-	selling_doctypes = ["Quotation", "Sales Order", "Delivery Note", "Sales Invoice"]
-	buying_doctypes = ["Supplier Quotation", "Purchase Order", "Purchase Receipt", "Purchase Invoice"]
-
-	for dt in selling_doctypes:
-		update_values(dt, "Sales Taxes and Charges")
-
-	for dt in buying_doctypes:
-		update_values(dt, "Purchase Taxes and Charges")
-
-def update_values(dt, tax_table):
-	rate_field_precision = get_field_precision(frappe.get_meta(dt + " Item").get_field("rate"))
-	tax_amount_precision = get_field_precision(frappe.get_meta(tax_table).get_field("tax_amount"))
-
-	# update net_total, discount_on
-	frappe.db.sql("""
-		UPDATE
-			`tab{0}`
-		SET
-			total_taxes_and_charges = round(base_total_taxes_and_charges / conversion_rate, {1})
-		WHERE
-			docstatus < 2
-			and ifnull(base_total_taxes_and_charges, 0) != 0
-			and ifnull(total_taxes_and_charges, 0) = 0
-	""".format(dt, tax_amount_precision))
-
-	# update net_amount
-	frappe.db.sql("""
-		UPDATE
-			`tab{0}` par, `tab{1}` item
-		SET
-			item.net_amount = round(item.base_net_amount / par.conversion_rate, {2}),
-			item.net_rate = round(item.base_net_rate / par.conversion_rate, {2})
-		WHERE
-			par.name = item.parent
-			and par.docstatus < 2
-			and ((ifnull(item.base_net_amount, 0) != 0 and ifnull(item.net_amount, 0) = 0)
-				or (ifnull(item.base_net_rate, 0) != 0 and ifnull(item.net_rate, 0) = 0))
-	""".format(dt, dt + " Item", rate_field_precision))
-
-	# update tax in party currency
-	frappe.db.sql("""
-		UPDATE
-			`tab{0}` par, `tab{1}` tax
-		SET
-			tax.tax_amount = round(tax.base_tax_amount / par.conversion_rate, {2}),
-			tax.total = round(tax.base_total / conversion_rate, {2}),
-			tax.tax_amount_after_discount_amount = round(tax.base_tax_amount_after_discount_amount / conversion_rate, {2})
-		WHERE
-			par.name = tax.parent
-			and par.docstatus < 2
-			and ((ifnull(tax.base_tax_amount, 0) != 0 and  ifnull(tax.tax_amount, 0) = 0)
-				or (ifnull(tax.base_total, 0) != 0 and ifnull(tax.total, 0) = 0)
-				or (ifnull(tax.base_tax_amount_after_discount_amount, 0) != 0 and
-					ifnull(tax.tax_amount_after_discount_amount, 0) = 0))
-	""".format(dt, tax_table, tax_amount_precision))
\ No newline at end of file
diff --git a/erpnext/patches/v5_0/index_on_account_and_gl_entry.py b/erpnext/patches/v5_0/index_on_account_and_gl_entry.py
deleted file mode 100644
index 2920e92..0000000
--- a/erpnext/patches/v5_0/index_on_account_and_gl_entry.py
+++ /dev/null
@@ -1,30 +0,0 @@
-from __future__ import unicode_literals
-
-import frappe
-
-def execute():
-	index_map = {
-		"Account": ["parent_account", "lft", "rgt"],
-		"GL Entry": ["posting_date", "account", 'party', "voucher_no"],
-		"Sales Invoice": ["posting_date", "debit_to", "customer"],
-		"Purchase Invoice": ["posting_date", "credit_to", "supplier"]
-	}
-	
-	for dt, indexes in index_map.items():
-		existing_indexes = [(d.Key_name, d.Column_name) for d in frappe.db.sql("""show index from `tab{0}` 
-			where Column_name != 'name'""".format(dt), as_dict=1)]
-
-		for old, column in existing_indexes:
-			if column in ("parent", "group_or_ledger", "is_group", "is_pl_account", "debit_or_credit", 
-					"account_name", "company", "project", "voucher_date", "due_date", "bill_no", 
-					"bill_date", "is_opening", "fiscal_year", "outstanding_amount"):
-				frappe.db.sql("alter table `tab{0}` drop index {1}".format(dt, old))
-		
-		existing_indexes = [(d.Key_name, d.Column_name) for d in frappe.db.sql("""show index from `tab{0}` 
-			where Column_name != 'name'""".format(dt), as_dict=1)]
-			
-		existing_indexed_columns = list(set([x[1] for x in existing_indexes]))
-							
-		for new in indexes:
-			if new not in existing_indexed_columns:
-				frappe.db.sql("alter table `tab{0}` add index ({1})".format(dt, new))
\ No newline at end of file
diff --git a/erpnext/patches/v5_0/is_group.py b/erpnext/patches/v5_0/is_group.py
deleted file mode 100644
index 4e3f760..0000000
--- a/erpnext/patches/v5_0/is_group.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from __future__ import unicode_literals
-
-import frappe
-
-def execute():
-	frappe.reload_doctype("Account")
-	frappe.reload_doctype("Cost Center")
-	frappe.db.sql("update tabAccount set is_group = if(group_or_ledger='Group', 1, 0)")
-	frappe.db.sql("update `tabCost Center` set is_group = if(group_or_ledger='Group', 1, 0)")
diff --git a/erpnext/patches/v5_0/item_patches.py b/erpnext/patches/v5_0/item_patches.py
deleted file mode 100644
index e223e09..0000000
--- a/erpnext/patches/v5_0/item_patches.py
+++ /dev/null
@@ -1,6 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.db.sql("update `tabItem` set end_of_life='2099-12-31' where ifnull(end_of_life, '0000-00-00')='0000-00-00'")
-	frappe.db.sql("update `tabItem` set website_image = image where ifnull(website_image, '') = 'attach_files:'")
diff --git a/erpnext/patches/v5_0/link_warehouse_with_account.py b/erpnext/patches/v5_0/link_warehouse_with_account.py
deleted file mode 100644
index 338fd7a..0000000
--- a/erpnext/patches/v5_0/link_warehouse_with_account.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	if "master_name" in frappe.db.get_table_columns("Account"):	
-		frappe.db.sql("""update tabAccount set warehouse=master_name
-			where ifnull(account_type, '') = 'Warehouse' and ifnull(master_name, '') != ''""")
\ No newline at end of file
diff --git a/erpnext/patches/v5_0/new_crm_module.py b/erpnext/patches/v5_0/new_crm_module.py
deleted file mode 100644
index f5dda1f..0000000
--- a/erpnext/patches/v5_0/new_crm_module.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import json
-import frappe
-
-def execute():
-	frappe.reload_doc('crm', 'doctype', 'lead')
-	frappe.reload_doc('crm', 'doctype', 'opportunity')
-
-	add_crm_to_user_desktop_items()
-
-def add_crm_to_user_desktop_items():
-	key = "_user_desktop_items"
-	for user in frappe.get_all("User", filters={"enabled": 1, "user_type": "System User"}):
-		user = user.name
-		user_desktop_items = frappe.db.get_defaults(key, parent=user)
-		if user_desktop_items:
-			user_desktop_items = json.loads(user_desktop_items)
-			if "CRM" not in user_desktop_items:
-				user_desktop_items.append("CRM")
-				frappe.db.set_default(key, json.dumps(user_desktop_items), parent=user)
-
diff --git a/erpnext/patches/v5_0/newsletter.py b/erpnext/patches/v5_0/newsletter.py
deleted file mode 100644
index 63e3312..0000000
--- a/erpnext/patches/v5_0/newsletter.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-import frappe.permissions
-
-def execute():
-	frappe.reload_doc("core", "doctype", "block_module")
-	frappe.reload_doctype("User")
-	frappe.reload_doctype("Lead")
-	frappe.reload_doctype("Contact")
-
-	frappe.reload_doc('email', 'doctype', 'email_group')
-	frappe.reload_doc('email', 'doctype', 'email_group_member')
-	frappe.reload_doc('email', 'doctype', 'newsletter')
-
-	frappe.permissions.reset_perms("Newsletter")
-
-	if not frappe.db.exists("Role", "Newsletter Manager"):
-		frappe.get_doc({"doctype": "Role", "role": "Newsletter Manager"}).insert()
-
-	for userrole in frappe.get_all("Has Role", "parent", {"role": "Sales Manager", "parenttype": "User"}):
-		if frappe.db.exists("User", userrole.parent):
-			user = frappe.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 = frappe.new_doc("Email Group")
-	general.title = "General"
-	general.insert()
-	general.import_from("Lead")
-	general.import_from("Contact")
diff --git a/erpnext/patches/v5_0/opportunity_not_submittable.py b/erpnext/patches/v5_0/opportunity_not_submittable.py
deleted file mode 100644
index e29d66f..0000000
--- a/erpnext/patches/v5_0/opportunity_not_submittable.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype("Opportunity")
-	frappe.db.sql("update tabDocPerm set submit=0, cancel=0, amend=0 where parent='Opportunity'")
-	frappe.db.sql("update tabOpportunity set docstatus=0 where docstatus=1")
diff --git a/erpnext/patches/v5_0/party_model_patch_fix.py b/erpnext/patches/v5_0/party_model_patch_fix.py
deleted file mode 100644
index d9b6709..0000000
--- a/erpnext/patches/v5_0/party_model_patch_fix.py
+++ /dev/null
@@ -1,18 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	for company in frappe.get_all("Company",
-			["name", "default_receivable_account", "default_payable_account"]):
-
-		if company.default_receivable_account:
-			frappe.db.sql("""update `tabSales Invoice` invoice set `debit_to`=%(account)s
-				where company=%(company)s
-				and not exists (select name from `tabAccount` account where account.name=invoice.debit_to)""",
-				{"company": company.name, "account": company.default_receivable_account})
-
-		if company.default_payable_account:
-			frappe.db.sql("""update `tabPurchase Invoice` invoice set `credit_to`=%(account)s
-				where company=%(company)s
-				and not exists (select name from `tabAccount` account where account.name=invoice.credit_to)""",
-				{"company": company.name, "account": company.default_payable_account})
diff --git a/erpnext/patches/v5_0/portal_fixes.py b/erpnext/patches/v5_0/portal_fixes.py
deleted file mode 100644
index 1fefd99..0000000
--- a/erpnext/patches/v5_0/portal_fixes.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-import erpnext.setup.install
-
-def execute():
-	frappe.reload_doc("website", "doctype", "web_form_field", force=True, reset_permissions=True)
-	#erpnext.setup.install.add_web_forms()
diff --git a/erpnext/patches/v5_0/project_costing.py b/erpnext/patches/v5_0/project_costing.py
deleted file mode 100644
index e2d65d0..0000000
--- a/erpnext/patches/v5_0/project_costing.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype("Project")
-	frappe.db.sql("update `tabProject` set expected_start_date = project_start_date, \
-		expected_end_date = completion_date, actual_end_date = act_completion_date, \
-		estimated_costing = project_value, gross_margin = gross_margin_value")
\ No newline at end of file
diff --git a/erpnext/patches/v5_0/recalculate_total_amount_in_jv.py b/erpnext/patches/v5_0/recalculate_total_amount_in_jv.py
deleted file mode 100644
index d5af43c..0000000
--- a/erpnext/patches/v5_0/recalculate_total_amount_in_jv.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import money_in_words
-
-def execute():
-	company_currency = dict(frappe.db.sql("select name, default_currency from `tabCompany`"))
-	bank_or_cash_accounts = frappe.db.sql_list("""select name from `tabAccount`
-		where account_type in ('Bank', 'Cash') and docstatus < 2""")
-
-	for je in frappe.db.sql_list("""select name from `tabJournal Entry` where docstatus < 2"""):
-		total_amount = 0
-		total_amount_in_words = ""
-
-		je_doc = frappe.get_doc('Journal Entry', je)
-		for d in je_doc.get("accounts"):
-			if (d.party_type and d.party) or d.account in bank_or_cash_accounts:
-				total_amount = d.debit or d.credit
-				if total_amount:
-					total_amount_in_words = money_in_words(total_amount, company_currency.get(je_doc.company))
-
-		if total_amount:
-			frappe.db.sql("""update `tabJournal Entry` set total_amount=%s, total_amount_in_words=%s
-				where name = %s""", (total_amount, total_amount_in_words, je))
diff --git a/erpnext/patches/v5_0/reclculate_planned_operating_cost_in_production_order.py b/erpnext/patches/v5_0/reclculate_planned_operating_cost_in_production_order.py
deleted file mode 100644
index 6d39283..0000000
--- a/erpnext/patches/v5_0/reclculate_planned_operating_cost_in_production_order.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():					
-	for wo in frappe.db.sql("""select name from `tabWork Order` where docstatus < 2""", as_dict=1):
-		work_order = frappe.get_doc("Work Order", wo.name)
-		if work_order.operations:
-			work_order.flags.ignore_validate_update_after_submit = True
-			work_order.calculate_time()
-			work_order.save()
\ No newline at end of file
diff --git a/erpnext/patches/v5_0/remove_birthday_events.py b/erpnext/patches/v5_0/remove_birthday_events.py
deleted file mode 100644
index 3ead866..0000000
--- a/erpnext/patches/v5_0/remove_birthday_events.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	for e in frappe.db.sql_list("""select name from tabEvent where
-		repeat_on='Every Year' and ref_type='Employee'"""):
-		frappe.delete_doc("Event", e, force=True)
diff --git a/erpnext/patches/v5_0/rename_customer_issue.py b/erpnext/patches/v5_0/rename_customer_issue.py
deleted file mode 100644
index 1bd69ce..0000000
--- a/erpnext/patches/v5_0/rename_customer_issue.py
+++ /dev/null
@@ -1,6 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	if frappe.db.table_exists("Customer Issue"):
-		frappe.rename_doc("DocType", "Customer Issue", "Warranty Claim")
diff --git a/erpnext/patches/v5_0/rename_pos_setting.py b/erpnext/patches/v5_0/rename_pos_setting.py
deleted file mode 100644
index bf10333..0000000
--- a/erpnext/patches/v5_0/rename_pos_setting.py
+++ /dev/null
@@ -1,6 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	if frappe.db.table_exists("POS Setting"):
-		frappe.rename_doc("DocType", "POS Setting", "POS Profile")
diff --git a/erpnext/patches/v5_0/rename_table_fieldnames.py b/erpnext/patches/v5_0/rename_table_fieldnames.py
deleted file mode 100644
index aefb0a2..0000000
--- a/erpnext/patches/v5_0/rename_table_fieldnames.py
+++ /dev/null
@@ -1,243 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import rename_field
-from frappe.modules import scrub, get_doctype_module
-
-rename_map = {
-	"Opportunity": [
-		["enquiry_details", "items"]
-	],
-	"Quotation": [
-		["quotation_details", "items"],
-		["other_charges", "taxes"]
-	],
-	"Sales Order": [
-		["sales_order_details", "items"],
-		["other_charges", "taxes"],
-		["packing_details", "packed_items"]
-	],
-	"Delivery Note": [
-		["delivery_note_details", "items"],
-		["other_charges", "taxes"],
-		["packing_details", "packed_items"]
-	],
-	"Sales Invoice": [
-		["entries", "items"],
-		["other_charges", "taxes"],
-		["packing_details", "packed_items"],
-		["advance_adjustment_details", "advances"]
-	],
-	"Material Request": [
-		["indent_details", "items"]
-	],
-	"Supplier Quotation": [
-		["quotation_items", "items"],
-		["other_charges", "taxes"]
-	],
-	"Purchase Order": [
-		["po_details", "items"],
-		["other_charges", "taxes"],
-		["po_raw_material_details", "supplied_items"]
-	],
-	"Purchase Receipt": [
-		["purchase_receipt_details", "items"],
-		["other_charges", "taxes"],
-		["pr_raw_material_details", "supplied_items"]
-	],
-	"Purchase Invoice": [
-		["entries", "items"],
-		["other_charges", "taxes"],
-		["advance_allocation_details", "advances"]
-	],
-	"Work Order": [
-		["production_order_operations", "operations"]
-	],
-	"BOM": [
-		["bom_operations", "operations"],
-		["bom_materials", "items"],
-		["flat_bom_details", "exploded_items"]
-	],
-	"Payment Reconciliation": [
-		["payment_reconciliation_payments", "payments"],
-		["payment_reconciliation_invoices", "invoices"]
-	],
-	"Sales Taxes and Charges Template": [
-		["other_charges", "taxes"],
-		["valid_for_territories", "territories"]
-	],
-	"Purchase Taxes and Charges Template": [
-		["other_charges", "taxes"]
-	],
-	"Shipping Rule": [
-		["shipping_rule_conditions", "conditions"],
-		["valid_for_territories", "territories"]
-	],
-	"Price List": [
-		["valid_for_territories", "territories"]
-	],
-	"Appraisal": [
-		["appraisal_details", "goals"]
-	],
-	"Appraisal Template": [
-		["kra_sheet", "goals"]
-	],
-	"Bank Reconciliation": [
-		["entries", "journal_entries"]
-	],
-	"C-Form": [
-		["invoice_details", "invoices"]
-	],
-	"Employee": [
-		["employee_leave_approvers", "leave_approvers"],
-		["educational_qualification_details", "education"],
-		["previous_experience_details", "external_work_history"],
-		["experience_in_company_details", "internal_work_history"]
-	],
-	"Expense Claim": [
-		["expense_voucher_details", "expenses"]
-	],
-	"Fiscal Year": [
-		["fiscal_year_companies", "companies"]
-	],
-	"Holiday List": [
-		["holiday_list_details", "holidays"]
-	],
-	"Installation Note": [
-		["installed_item_details", "items"]
-	],
-	"Item": [
-		["item_reorder", "reorder_levels"],
-		["uom_conversion_details", "uoms"],
-		["item_supplier_details", "supplier_items"],
-		["item_customer_details", "customer_items"],
-		["item_tax", "taxes"],
-		["item_specification_details", "quality_parameters"],
-		["item_website_specifications", "website_specifications"]
-	],
-	"Item Group": [
-		["item_website_specifications", "website_specifications"]
-	],
-	"Landed Cost Voucher": [
-		["landed_cost_purchase_receipts", "purchase_receipts"],
-		["landed_cost_items", "items"],
-		["landed_cost_taxes_and_charges", "taxes"]
-	],
-	"Maintenance Schedule": [
-		["item_maintenance_detail", "items"],
-		["maintenance_schedule_detail", "schedules"]
-	],
-	"Maintenance Visit": [
-		["maintenance_visit_details", "purposes"]
-	],
-	"Packing Slip": [
-		["item_details", "items"]
-	],
-	"Customer": [
-		["party_accounts", "accounts"]
-	],
-	"Customer Group": [
-		["party_accounts", "accounts"]
-	],
-	"Supplier": [
-		["party_accounts", "accounts"]
-	],
-	"Supplier Type": [
-		["party_accounts", "accounts"]
-	],
-	"Payment Tool": [
-		["payment_tool_details", "vouchers"]
-	],
-	"Production Planning Tool": [
-		["pp_so_details", "sales_orders"],
-		["pp_details", "items"]
-	],
-	"Quality Inspection": [
-		["qa_specification_details", "readings"]
-	],
-	"Salary Slip": [
-		["earning_details", "earnings"],
-		["deduction_details", "deductions"]
-	],
-	"Salary Structure": [
-		["earning_details", "earnings"],
-		["deduction_details", "deductions"]
-	],
-	"Product Bundle": [
-		["sales_bom_items", "items"]
-	],
-	"SMS Settings": [
-		["static_parameter_details", "parameters"]
-	],
-	"Stock Entry": [
-		["mtn_details", "items"]
-	],
-	"Sales Partner": [
-		["partner_target_details", "targets"]
-	],
-	"Sales Person": [
-		["target_details", "targets"]
-	],
-	"Territory": [
-		["target_details", "targets"]
-	],
-	"Time Sheet": [
-		["time_sheet_details", "time_logs"]
-	],
-	"Workstation": [
-		["workstation_operation_hours", "working_hours"]
-	],
-	"Payment Reconciliation Payment": [
-		["journal_voucher", "journal_entry"],
-	],
-	"Purchase Invoice Advance": [
-		["journal_voucher", "journal_entry"],
-	],
-	"Sales Invoice Advance": [
-		["journal_voucher", "journal_entry"],
-	],
-	"Journal Entry": [
-		["entries", "accounts"]
-	],
-	"Monthly Distribution": [
-		["budget_distribution_details", "percentages"]
-	]
-}
-
-def execute():
-	# rename doctypes
-	tables = frappe.db.sql_list("show tables")
-	for old_dt, new_dt in [["Journal Voucher Detail", "Journal Entry Account"],
-		["Journal Voucher", "Journal Entry"],
-		["Budget Distribution Detail", "Monthly Distribution Percentage"],
-		["Budget Distribution", "Monthly Distribution"]]:
-			if "tab"+new_dt not in tables:
-				frappe.rename_doc("DocType", old_dt, new_dt, force=True)
-
-	# reload new child doctypes
-	frappe.reload_doc("manufacturing", "doctype", "work_order_operation")
-	frappe.reload_doc("manufacturing", "doctype", "workstation_working_hour")
-	frappe.reload_doc("stock", "doctype", "item_variant")
-	frappe.reload_doc("Payroll", "doctype", "salary_detail")
-	frappe.reload_doc("accounts", "doctype", "party_account")
-	frappe.reload_doc("accounts", "doctype", "fiscal_year_company")
-
-	#rename table fieldnames
-	for dn in rename_map:
-		if not frappe.db.exists("DocType", dn):
-			continue
-		frappe.reload_doc(get_doctype_module(dn), "doctype", scrub(dn))
-
-	for dt, field_list in rename_map.items():
-		if not frappe.db.exists("DocType", dt):
-			continue
-		for field in field_list:
-			rename_field(dt, field[0], field[1])
-
-	# update voucher type
-	for old, new in [["Bank Voucher", "Bank Entry"], ["Cash Voucher", "Cash Entry"],
-		["Credit Card Voucher", "Credit Card Entry"], ["Contra Voucher", "Contra Entry"],
-		["Write Off Voucher", "Write Off Entry"], ["Excise Voucher", "Excise Entry"]]:
-			frappe.db.sql("update `tabJournal Entry` set voucher_type=%s where voucher_type=%s", (new, old))
diff --git a/erpnext/patches/v5_0/rename_taxes_and_charges_master.py b/erpnext/patches/v5_0/rename_taxes_and_charges_master.py
deleted file mode 100644
index e26f48c..0000000
--- a/erpnext/patches/v5_0/rename_taxes_and_charges_master.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-
-def execute():
-	if frappe.db.table_exists("Sales Taxes and Charges Master"):
-		frappe.rename_doc("DocType", "Sales Taxes and Charges Master",
-			"Sales Taxes and Charges Template")
-		frappe.delete_doc("DocType", "Sales Taxes and Charges Master")
-
-	if frappe.db.table_exists("Purchase Taxes and Charges Master"):
-		frappe.rename_doc("DocType", "Purchase Taxes and Charges Master",
-			"Purchase Taxes and Charges Template")
-		frappe.delete_doc("DocType", "Purchase Taxes and Charges Master")
diff --git a/erpnext/patches/v5_0/rename_total_fields.py b/erpnext/patches/v5_0/rename_total_fields.py
deleted file mode 100644
index 6657dd8..0000000
--- a/erpnext/patches/v5_0/rename_total_fields.py
+++ /dev/null
@@ -1,55 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import rename_field
-from frappe.modules import scrub, get_doctype_module
-
-selling_doctypes = ("Quotation", "Sales Order", "Delivery Note", "Sales Invoice")
-
-buying_doctypes = ("Supplier Quotation", "Purchase Order", "Purchase Receipt", "Purchase Invoice")
-
-selling_renamed_fields = (
-	("net_total", "base_net_total"),
-	("net_total_export", "net_total"),
-	("other_charges_total", "base_total_taxes_and_charges"),
-	("other_charges_total_export", "total_taxes_and_charges"),
-	("grand_total", "base_grand_total"),
-	("grand_total_export", "grand_total"),
-	("rounded_total", "base_rounded_total"),
-	("rounded_total_export", "rounded_total"),
-	("in_words", "base_in_words"),
-	("in_words_export", "in_words")
-)
-
-buying_renamed_fields = (
-	("net_total", "base_net_total"),
-	("net_total_import", "net_total"),
-	("grand_total", "base_grand_total"),
-	("grand_total_import", "grand_total"),
-	("rounded_total", "base_rounded_total"),
-	("in_words", "base_in_words"),
-	("in_words_import", "in_words"),
-	("other_charges_added", "base_taxes_and_charges_added"),
-	("other_charges_added_import", "taxes_and_charges_added"),
-	("other_charges_deducted", "base_taxes_and_charges_deducted"),
-	("other_charges_deducted_import", "taxes_and_charges_deducted"),
-	("total_tax", "base_total_taxes_and_charges")
-)
-
-def execute():
-	for doctypes, fields in [[selling_doctypes, selling_renamed_fields], [buying_doctypes, buying_renamed_fields]]:
-		for dt in doctypes:
-			frappe.reload_doc(get_doctype_module(dt), "doctype", scrub(dt))
-			table_columns = frappe.db.get_table_columns(dt)
-			base_net_total = frappe.db.sql("select sum(ifnull({0}, 0)) from `tab{1}`".format(fields[0][1], dt))[0][0]
-			if not base_net_total:
-				for f in fields:
-					if f[0] in table_columns:
-						rename_field(dt, f[0], f[1])
-
-				# Added new field "total_taxes_and_charges" in buying cycle, updating value
-				if dt in ("Supplier Quotation", "Purchase Order", "Purchase Receipt", "Purchase Invoice"):
-					frappe.db.sql("""update `tab{0}` set total_taxes_and_charges =
-						round(base_total_taxes_and_charges/conversion_rate, 2)""".format(dt))
diff --git a/erpnext/patches/v5_0/replace_renamed_fields_in_custom_scripts_and_print_formats.py b/erpnext/patches/v5_0/replace_renamed_fields_in_custom_scripts_and_print_formats.py
deleted file mode 100644
index c564f8b..0000000
--- a/erpnext/patches/v5_0/replace_renamed_fields_in_custom_scripts_and_print_formats.py
+++ /dev/null
@@ -1,65 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-import re
-
-def execute():
-	# NOTE: sequence is important
-	renamed_fields = get_all_renamed_fields()
-
-	for dt, script_field, ref_dt_field in (("Client Script", "script", "dt"), ("Print Format", "html", "doc_type")):
-
-		cond1 = " or ".join("""{0} like "%%{1}%%" """.format(script_field, d[0].replace("_", "\\_")) for d in renamed_fields)
-		cond2 = " and standard = 'No'" if dt == "Print Format" else ""
-
-		for name, script, ref_dt in frappe.db.sql("select name, {0} as script, {1} as ref_dt from `tab{2}` where ({3}) {4}".format(script_field, ref_dt_field, dt, cond1, cond2)):
-			update_script(dt, name, ref_dt, script_field, script, renamed_fields)
-
-def get_all_renamed_fields():
-	from erpnext.patches.v5_0.rename_table_fieldnames import rename_map
-
-	renamed_fields = (
-		("base_amount", "base_net_amount"),
-		("net_total", "base_net_total"),
-		("net_total_export", "total"),
-		("net_total_import", "total"),
-		("other_charges_total", "base_total_taxes_and_charges"),
-		("other_charges_total_export", "total_taxes_and_charges"),
-		("other_charges_added", "base_taxes_and_charges_added"),
-		("other_charges_added_import", "taxes_and_charges_added"),
-		("other_charges_deducted", "base_taxes_and_charges_deducted"),
-		("other_charges_deducted_import", "taxes_and_charges_deducted"),
-		("total_tax", "base_total_taxes_and_charges"),
-		("grand_total", "base_grand_total"),
-		("grand_total_export", "grand_total"),
-		("grand_total_import", "grand_total"),
-		("rounded_total", "base_rounded_total"),
-		("rounded_total_export", "rounded_total"),
-		("rounded_total_import", "rounded_total"),
-		("in_words", "base_in_words"),
-		("in_words_export", "in_words"),
-		("in_words_import", "in_words"),
-		("tax_amount", "base_tax_amount"),
-		("tax_amount_after_discount_amount", "base_tax_amount_after_discount_amount"),
-	)
-
-	for fields in rename_map.values():
-		renamed_fields += tuple(fields)
-	
-	return renamed_fields
-
-def update_script(dt, name, ref_dt, script_field, script, renamed_fields):
-	for from_field, to_field in renamed_fields:
-		if from_field != "entries":
-			script = re.sub(r"\b{}\b".format(from_field), to_field, script)
-			
-	if ref_dt == "Journal Entry":
-		script = re.sub(r"\bentries\b", "accounts", script)
-	elif ref_dt == "Bank Reconciliation":
-		script = re.sub(r"\bentries\b", "journal_entries", script)
-	elif ref_dt in ("Sales Invoice", "Purchase Invoice"):
-		script = re.sub(r"\bentries\b", "items", script)
-
-	frappe.db.set_value(dt, name, script_field, script)
\ No newline at end of file
diff --git a/erpnext/patches/v5_0/repost_gle_for_jv_with_multiple_party.py b/erpnext/patches/v5_0/repost_gle_for_jv_with_multiple_party.py
deleted file mode 100644
index 76efdcc..0000000
--- a/erpnext/patches/v5_0/repost_gle_for_jv_with_multiple_party.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import print_function, unicode_literals
-import frappe
-
-def execute():
-	je_list = frappe.db.sql_list("""
-		select par.name from `tabJournal Entry` par 
-		where par.docstatus=1 and par.creation > '2015-03-01'
-			and (select count(distinct child.party) from `tabJournal Entry Account` child
-				where par.name=child.parent and ifnull(child.party, '') != '') > 1	
-	""")
-	
-	for d in je_list:		
-		# delete existing gle
-		frappe.db.sql("delete from `tabGL Entry` where voucher_type='Journal Entry' and voucher_no=%s", d)
-		
-		# repost gl entries
-		je = frappe.get_doc("Journal Entry", d)
-		je.make_gl_entries()
-		
-	if je_list:
-		print(je_list)
-		
-		
\ No newline at end of file
diff --git a/erpnext/patches/v5_0/repost_requested_qty.py b/erpnext/patches/v5_0/repost_requested_qty.py
deleted file mode 100644
index 6af71f3..0000000
--- a/erpnext/patches/v5_0/repost_requested_qty.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	from erpnext.stock.stock_balance import update_bin_qty, get_indented_qty
-
-	count=0
-	for item_code, warehouse in frappe.db.sql("""select distinct item_code, warehouse 
-		from `tabMaterial Request Item` where docstatus = 1"""):
-			try:
-				count += 1
-				update_bin_qty(item_code, warehouse, {
-					"indented_qty": get_indented_qty(item_code, warehouse),
-				})
-				if count % 200 == 0:
-					frappe.db.commit()
-			except:
-				frappe.db.rollback()
diff --git a/erpnext/patches/v5_0/reset_values_in_tools.py b/erpnext/patches/v5_0/reset_values_in_tools.py
deleted file mode 100644
index fd970ba..0000000
--- a/erpnext/patches/v5_0/reset_values_in_tools.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	for dt in ["Payment Tool", "Bank Reconciliation", "Payment Reconciliation", "Leave Control Panel", 
-		"Salary Manager", "Upload Attenadance", "Production Planning Tool", "BOM Update Tool", "Customize Form",
-		 "Employee Attendance Tool", "Rename Tool", "BOM Update Tool", "Process Payroll", "Naming Series"]:
-			frappe.db.sql("delete from `tabSingles` where doctype=%s", dt)
-		
\ No newline at end of file
diff --git a/erpnext/patches/v5_0/set_appraisal_remarks.py b/erpnext/patches/v5_0/set_appraisal_remarks.py
deleted file mode 100644
index 8652c32..0000000
--- a/erpnext/patches/v5_0/set_appraisal_remarks.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype("Appraisal")
-	frappe.db.sql("update `tabAppraisal` set remarks = comments")
\ No newline at end of file
diff --git a/erpnext/patches/v5_0/set_default_company_in_bom.py b/erpnext/patches/v5_0/set_default_company_in_bom.py
deleted file mode 100644
index a5cd761..0000000
--- a/erpnext/patches/v5_0/set_default_company_in_bom.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc("manufacturing", "doctype", "bom")
-	company = frappe.db.get_value("Global Defaults", None, "default_company")
-	frappe.db.sql("""update  `tabBOM` set company = %s""",company)
diff --git a/erpnext/patches/v5_0/set_footer_address.py b/erpnext/patches/v5_0/set_footer_address.py
deleted file mode 100644
index 8120d83..0000000
--- a/erpnext/patches/v5_0/set_footer_address.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype("System Settings")
-	ss = frappe.get_doc("System Settings", "System Settings")
-	ss.email_footer_address = frappe.db.get_default("company")
-	ss.flags.ignore_mandatory = True
-	ss.save()
diff --git a/erpnext/patches/v5_0/stock_entry_update_value.py b/erpnext/patches/v5_0/stock_entry_update_value.py
deleted file mode 100644
index ba1af31..0000000
--- a/erpnext/patches/v5_0/stock_entry_update_value.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	for d in frappe.db.get_all("Stock Entry"):
-		se = frappe.get_doc("Stock Entry", d.name)
-		se.set_total_incoming_outgoing_value()
-		se.db_update()
diff --git a/erpnext/patches/v5_0/taxes_and_totals_in_party_currency.py b/erpnext/patches/v5_0/taxes_and_totals_in_party_currency.py
deleted file mode 100644
index 76d1082..0000000
--- a/erpnext/patches/v5_0/taxes_and_totals_in_party_currency.py
+++ /dev/null
@@ -1,80 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.model.meta import get_field_precision
-from frappe.custom.doctype.property_setter.property_setter import make_property_setter
-
-def execute():
-	selling_doctypes = ["Quotation", "Sales Order", "Delivery Note", "Sales Invoice"]
-	buying_doctypes = ["Supplier Quotation", "Purchase Order", "Purchase Receipt", "Purchase Invoice"]
-
-	for dt in selling_doctypes:
-		update_values(dt, "Sales Taxes and Charges")
-
-	for dt in buying_doctypes:
-		update_values(dt, "Purchase Taxes and Charges")
-
-def update_values(dt, tax_table):
-	frappe.reload_doctype(dt)
-	frappe.reload_doctype(dt + " Item")
-	frappe.reload_doctype(tax_table)
-
-	net_total_precision = get_field_precision(frappe.get_meta(dt).get_field("net_total"))
-	for field in ("total", "base_total", "base_net_total"):
-		make_property_setter(dt, field, "precision", net_total_precision, "Select")
-
-	rate_field_precision = get_field_precision(frappe.get_meta(dt + " Item").get_field("rate"))
-	for field in ("net_rate", "base_net_rate", "net_amount", "base_net_amount", "base_rate", "base_amount"):
-		make_property_setter(dt + " Item", field, "precision", rate_field_precision, "Select")
-
-	tax_amount_precision = get_field_precision(frappe.get_meta(tax_table).get_field("tax_amount"))
-	for field in ("base_tax_amount", "total", "base_total", "tax_amount_after_discount_amount",
-		"base_tax_amount_after_discount_amount"):
-			make_property_setter(tax_table, field, "precision", tax_amount_precision, "Select")
-
-	# update net_total, discount_on
-	frappe.db.sql("""
-		UPDATE
-			`tab{0}`
-		SET
-			total = round(net_total, {1}),
-			base_total = round(net_total*conversion_rate, {1}),
-			net_total = round(base_net_total / conversion_rate, {1}),
-			apply_discount_on = "Grand Total"
-		WHERE
-			docstatus < 2
-	""".format(dt, net_total_precision))
-
-	# update net_amount
-	frappe.db.sql("""
-		UPDATE
-			`tab{0}` par, `tab{1}` item
-		SET
-			item.base_net_amount = round(item.base_amount, {2}),
-			item.base_net_rate = round(item.base_rate, {2}),
-			item.net_amount = round(item.base_amount / par.conversion_rate, {2}),
-			item.net_rate = round(item.base_rate / par.conversion_rate, {2}),
-			item.base_amount = round(item.amount * par.conversion_rate, {2}),
-			item.base_rate = round(item.rate * par.conversion_rate, {2})
-		WHERE
-			par.name = item.parent
-			and par.docstatus < 2
-	""".format(dt, dt + " Item", rate_field_precision))
-
-	# update tax in party currency
-	frappe.db.sql("""
-		UPDATE
-			`tab{0}` par, `tab{1}` tax
-		SET
-			tax.base_tax_amount = round(tax.tax_amount, {2}),
-			tax.tax_amount = round(tax.tax_amount / par.conversion_rate, {2}),
-			tax.base_total = round(tax.total, {2}),
-			tax.total = round(tax.total / conversion_rate, {2}),
-			tax.base_tax_amount_after_discount_amount = round(tax.tax_amount_after_discount_amount, {2}),
-			tax.tax_amount_after_discount_amount = round(tax.tax_amount_after_discount_amount / conversion_rate, {2})
-		WHERE
-			par.name = tax.parent
-			and par.docstatus < 2
-	""".format(dt, tax_table, tax_amount_precision))
diff --git a/erpnext/patches/v5_0/update_account_types.py b/erpnext/patches/v5_0/update_account_types.py
deleted file mode 100644
index 424743e..0000000
--- a/erpnext/patches/v5_0/update_account_types.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	for company in frappe.db.get_all("Company"):
-		company = frappe.get_doc("Company", company.name)
-
-		match_types = ("Stock Received But Not Billed", "Stock Adjustment", "Expenses Included In Valuation",
-			"Cost of Goods Sold")
-
-		for account_type in match_types:
-			account_name = "{0} - {1}".format(account_type, company.abbr)
-			current_account_type = frappe.db.get_value("Account", account_name, "account_type")
-			if current_account_type != account_type:
-				frappe.db.set_value("Account", account_name, "account_type", account_type)
-
-		company.set_default_accounts()
diff --git a/erpnext/patches/v5_0/update_advance_paid.py b/erpnext/patches/v5_0/update_advance_paid.py
deleted file mode 100644
index 74e71e8..0000000
--- a/erpnext/patches/v5_0/update_advance_paid.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	for dt in ("Sales Order", "Purchase Order"):
-		orders_with_advance = frappe.db.sql("""select name from `tab{0}` 
-			where docstatus < 2 and ifnull(advance_paid, 0) != 0""".format(dt), as_dict=1)
-			
-		for order in orders_with_advance:
-			frappe.get_doc(dt, order.name).set_total_advance_paid()
\ No newline at end of file
diff --git a/erpnext/patches/v5_0/update_companywise_payment_account.py b/erpnext/patches/v5_0/update_companywise_payment_account.py
deleted file mode 100644
index fb4b919..0000000
--- a/erpnext/patches/v5_0/update_companywise_payment_account.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc('accounts', 'doctype', 'mode_of_payment')
-	frappe.reload_doc('accounts', 'doctype', 'mode_of_payment_account')
-
-	mode_of_payment_list = frappe.db.sql("""select name, default_account
-		from `tabMode of Payment`""", as_dict=1)
-
-	for d in mode_of_payment_list:
-		if d.get("default_account"):
-			parent_doc = frappe.get_doc("Mode of Payment", d.get("name"))
-
-			parent_doc.set("accounts",
-				[{"company": frappe.db.get_value("Account", d.get("default_account"), "company"),
-				"default_account": d.get("default_account")}])
-			parent_doc.save()
diff --git a/erpnext/patches/v5_0/update_dn_against_doc_fields.py b/erpnext/patches/v5_0/update_dn_against_doc_fields.py
deleted file mode 100644
index 56f4f48..0000000
--- a/erpnext/patches/v5_0/update_dn_against_doc_fields.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc('stock', 'doctype', 'delivery_note_item')
-
-	frappe.db.sql("""update `tabDelivery Note Item` set so_detail = prevdoc_detail_docname
-		where ifnull(against_sales_order, '') != ''""")
-
-	frappe.db.sql("""update `tabDelivery Note Item` set si_detail = prevdoc_detail_docname
-		where ifnull(against_sales_invoice, '') != ''""")
diff --git a/erpnext/patches/v5_0/update_from_bom.py b/erpnext/patches/v5_0/update_from_bom.py
deleted file mode 100644
index 4b3e62d..0000000
--- a/erpnext/patches/v5_0/update_from_bom.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype("Stock Entry")
-	frappe.db.sql("update `tabStock Entry` set from_bom = if(ifnull(bom_no, '')='', 0, 1)")
diff --git a/erpnext/patches/v5_0/update_frozen_accounts_permission_role.py b/erpnext/patches/v5_0/update_frozen_accounts_permission_role.py
deleted file mode 100644
index b52785a..0000000
--- a/erpnext/patches/v5_0/update_frozen_accounts_permission_role.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	account_settings = frappe.get_doc("Accounts Settings")
-
-	if not account_settings.frozen_accounts_modifier and account_settings.bde_auth_role:
-		frappe.db.set_value("Accounts Settings", None,
-			"frozen_accounts_modifier", account_settings.bde_auth_role)
-
diff --git a/erpnext/patches/v5_0/update_item_and_description_again.py b/erpnext/patches/v5_0/update_item_and_description_again.py
deleted file mode 100644
index 35dedcc..0000000
--- a/erpnext/patches/v5_0/update_item_and_description_again.py
+++ /dev/null
@@ -1,50 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import cstr
-import re
-
-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 extract_description(desc):
-	for tag in ("img", "table", "tr", "td"):
-		desc =  re.sub("\</*{0}[^>]*\>".format(tag), "", desc)
-
-	return desc
diff --git a/erpnext/patches/v5_0/update_item_desc_in_invoice.py b/erpnext/patches/v5_0/update_item_desc_in_invoice.py
deleted file mode 100644
index dba35d5..0000000
--- a/erpnext/patches/v5_0/update_item_desc_in_invoice.py
+++ /dev/null
@@ -1,52 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.website.utils import find_first_image
-from frappe.utils import cstr
-import re
-
-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 extract_image_and_description(data):
-	image_url = find_first_image(data)
-	desc = data
-	for tag in ("img", "table", "tr", "td"):
-		desc =  re.sub("\</*{0}[^>]*\>".format(tag), "", desc)
-	return desc, image_url
\ No newline at end of file
diff --git a/erpnext/patches/v5_0/update_item_description_and_image.py b/erpnext/patches/v5_0/update_item_description_and_image.py
deleted file mode 100644
index 75df39e..0000000
--- a/erpnext/patches/v5_0/update_item_description_and_image.py
+++ /dev/null
@@ -1,54 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.website.utils import find_first_image
-from frappe.utils import cstr
-import re
-
-def execute():
-	item_details = frappe._dict()
-	for d in frappe.db.sql("select name, description_html, description from `tabItem`", as_dict=1):
-		description = cstr(d.description_html).strip() or cstr(d.description).strip()
-		image_url, new_desc = extract_image_and_description(description)
-
-		item_details.setdefault(d.name, frappe._dict({
-			"old_description": description,
-			"new_description": new_desc,
-			"image_url": image_url
-		}))
-
-
-	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 image is null and description like '%%<img%%'"""
-			.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:
-				image_url = item_details.get(d.item_code).image_url
-				desc = item_details.get(d.item_code).new_description
-			else:
-				image_url, desc = extract_image_and_description(cstr(d.description))
-
-			if image_url:
-				frappe.db.sql("""update `tab{0}` set description = %s, image = %s
-					where name = %s """.format(dt), (desc, image_url, d.name))
-
-				count += 1
-				if count % 500 == 0:
-					frappe.db.commit()
-
-
-def extract_image_and_description(data):
-	image_url = find_first_image(data)
-	desc =  re.sub("\<img[^>]+\>", "", data)
-
-	return image_url, desc
diff --git a/erpnext/patches/v5_0/update_item_name_in_bom.py b/erpnext/patches/v5_0/update_item_name_in_bom.py
deleted file mode 100644
index 5781542..0000000
--- a/erpnext/patches/v5_0/update_item_name_in_bom.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc("manufacturing", "doctype", "bom")
-	frappe.reload_doc("manufacturing", "doctype", "bom_item")
-	frappe.reload_doc("manufacturing", "doctype", "bom_explosion_item")
-	frappe.reload_doc("manufacturing", "doctype", "bom_operation")
-
-	frappe.db.sql("""update `tabBOM` as bom  set bom.item_name = \
-		( select item.item_name from `tabItem` as item  where item.name = bom.item)""")
-	frappe.db.sql("""update `tabBOM Item` as bomItem set bomItem.item_name = ( select item.item_name  \
-		from `tabItem` as item where item.name = bomItem.item_code)""")
-	frappe.db.sql("""update `tabBOM Explosion Item` as explosionItem set explosionItem.item_name = \
-		( select item.item_name from `tabItem` as item where item.name = explosionItem.item_code)""")
diff --git a/erpnext/patches/v5_0/update_journal_entry_title.py b/erpnext/patches/v5_0/update_journal_entry_title.py
deleted file mode 100644
index eaa2be0..0000000
--- a/erpnext/patches/v5_0/update_journal_entry_title.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype("Journal Entry")
-	frappe.db.sql("""update `tabJournal Entry` set title =
-		if(ifnull(pay_to_recd_from, "")!="", pay_to_recd_from,
-			(select account from `tabJournal Entry Account`
-				where parent=`tabJournal Entry`.name and idx=1 limit 1))""")
diff --git a/erpnext/patches/v5_0/update_material_transfer_for_manufacture.py b/erpnext/patches/v5_0/update_material_transfer_for_manufacture.py
deleted file mode 100644
index f31c9fe..0000000
--- a/erpnext/patches/v5_0/update_material_transfer_for_manufacture.py
+++ /dev/null
@@ -1,6 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.db.sql("""update `tabStock Entry` set purpose='Material Transfer for Manufacture'
-		where ifnull(work_order, '')!='' and purpose='Material Transfer'""")
diff --git a/erpnext/patches/v5_0/update_material_transferred_for_manufacturing.py b/erpnext/patches/v5_0/update_material_transferred_for_manufacturing.py
deleted file mode 100644
index 2a09aa2..0000000
--- a/erpnext/patches/v5_0/update_material_transferred_for_manufacturing.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype("Work Order")
-	frappe.db.sql("""update `tabWork Order` set material_transferred_for_manufacturing=
-		(select sum(fg_completed_qty) from `tabStock Entry`
-			where docstatus=1
-			and work_order=`tabWork Order`.name
-			and purpose = "Material Transfer for Manufacture")""")
diff --git a/erpnext/patches/v5_0/update_material_transferred_for_manufacturing_again.py b/erpnext/patches/v5_0/update_material_transferred_for_manufacturing_again.py
deleted file mode 100644
index 5847c83..0000000
--- a/erpnext/patches/v5_0/update_material_transferred_for_manufacturing_again.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	wo_order_qty_transferred = frappe._dict()
-	for se in frappe.db.sql("""select work_order, sum(fg_completed_qty) as transferred_qty 
-		from `tabStock Entry`
-		where docstatus=1 and ifnull(work_order, '') != ''
-		and purpose = 'Material Transfer for Manufacture'
-		group by work_order""", as_dict=1):
-			wo_order_qty_transferred.setdefault(se.work_order, se.transferred_qty)
-	
-	for d in frappe.get_all("Work Order", filters={"docstatus": 1}, fields=["name", "qty"]):
-		if d.name in wo_order_qty_transferred:
-			material_transferred_for_manufacturing = wo_order_qty_transferred.get(d.name) \
-				if wo_order_qty_transferred.get(d.name) <= d.qty else d.qty		
-		
-			frappe.db.sql("""update `tabWork Order` set material_transferred_for_manufacturing=%s
-				where name=%s""", (material_transferred_for_manufacturing, d.name))
\ No newline at end of file
diff --git a/erpnext/patches/v5_0/update_operation_description.py b/erpnext/patches/v5_0/update_operation_description.py
deleted file mode 100644
index 4ce32f3..0000000
--- a/erpnext/patches/v5_0/update_operation_description.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-import frappe.permissions
-
-def execute():
-	if "opn_description" in frappe.db.get_table_columns("BOM Operation"):
-		frappe.db.sql("""update `tabBOM Operation` set description = opn_description
-			where ifnull(description, '') = ''""")
\ No newline at end of file
diff --git a/erpnext/patches/v5_0/update_opportunity.py b/erpnext/patches/v5_0/update_opportunity.py
deleted file mode 100644
index 8eb45c4..0000000
--- a/erpnext/patches/v5_0/update_opportunity.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc('crm', 'doctype', 'opportunity')
-	frappe.reload_doc('crm', 'doctype', 'opportunity_item')
-
-	# all existing opportunities were with items
-	frappe.db.sql("update `tabDocType` set module = 'CRM' where name='Opportunity Item'")
-	frappe.db.sql("update tabOpportunity set with_items=1, title=customer_name")
-	frappe.db.sql("update `tabEmail Account` set append_to='Opportunity' where append_to='Lead'")
diff --git a/erpnext/patches/v5_0/update_projects.py b/erpnext/patches/v5_0/update_projects.py
deleted file mode 100644
index 68e03c9..0000000
--- a/erpnext/patches/v5_0/update_projects.py
+++ /dev/null
@@ -1,34 +0,0 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-import frappe
-
-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")
-	frappe.reload_doc("projects", "doctype", "time_log")
-
-	for m in frappe.get_all("Project Milestone", "*"):
-		if (m.milestone and m.milestone_date
-			and frappe.db.exists("Project", m.parent)):
-			subject = (m.milestone[:139] + "…") if (len(m.milestone) > 140) else m.milestone
-			description = m.milestone
-			task = frappe.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
-	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)
diff --git a/erpnext/patches/v5_0/update_sms_sender.py b/erpnext/patches/v5_0/update_sms_sender.py
deleted file mode 100644
index 7ffc703..0000000
--- a/erpnext/patches/v5_0/update_sms_sender.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.db.set_value("SMS Settings", "SMS Settings", "sms_sender_name",
-		frappe.db.get_single_value("Global Defaults", "sms_sender_name"))
diff --git a/erpnext/patches/v5_0/update_tax_amount_after_discount_in_purchase_cycle.py b/erpnext/patches/v5_0/update_tax_amount_after_discount_in_purchase_cycle.py
deleted file mode 100644
index 53df942..0000000
--- a/erpnext/patches/v5_0/update_tax_amount_after_discount_in_purchase_cycle.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.db.sql("""
-		update
-			`tabPurchase Taxes and Charges`
-		set
-			tax_amount_after_discount_amount = tax_amount,
-			base_tax_amount_after_discount_amount = base_tax_amount
-		where
-			ifnull(tax_amount_after_discount_amount, 0) = 0
-			and ifnull(base_tax_amount_after_discount_amount, 0) = 0
-	""")
\ No newline at end of file
diff --git a/erpnext/patches/v5_0/update_temporary_account.py b/erpnext/patches/v5_0/update_temporary_account.py
deleted file mode 100644
index 078c871..0000000
--- a/erpnext/patches/v5_0/update_temporary_account.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.db.sql("""Update `tabAccount` set account_type = 'Temporary' 
-		where account_name in ('Temporary Assets', 'Temporary Liabilities', 'Temporary Opening')""")
\ No newline at end of file
diff --git a/erpnext/patches/v5_0/update_time_log_title.py b/erpnext/patches/v5_0/update_time_log_title.py
deleted file mode 100644
index 8263be0..0000000
--- a/erpnext/patches/v5_0/update_time_log_title.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype("Time Log")
-	for d in frappe.get_all("Time Log"):
-		time_log = frappe.get_doc("Time Log", d.name)
-		time_log.set_title()
-		frappe.db.set_value("Time Log", time_log.name, "title", time_log.title)
diff --git a/erpnext/patches/v5_1/__init__.py b/erpnext/patches/v5_1/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/patches/v5_1/__init__.py
+++ /dev/null
diff --git a/erpnext/patches/v5_1/default_bom.py b/erpnext/patches/v5_1/default_bom.py
deleted file mode 100644
index 6484edd..0000000
--- a/erpnext/patches/v5_1/default_bom.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from __future__ import unicode_literals
-
-import frappe
-
-def execute():
-	frappe.db.sql("""Update `tabItem` as item set default_bom = NULL where 
-		not exists(select name from `tabBOM` as bom where item.default_bom = bom.name and bom.docstatus =1 )""")
\ No newline at end of file
diff --git a/erpnext/patches/v5_1/fix_against_account.py b/erpnext/patches/v5_1/fix_against_account.py
deleted file mode 100644
index a62c15b..0000000
--- a/erpnext/patches/v5_1/fix_against_account.py
+++ /dev/null
@@ -1,37 +0,0 @@
-from __future__ import unicode_literals
-
-import frappe
-
-from erpnext.accounts.doctype.gl_entry.gl_entry import update_against_account
-
-def execute():
-    from_date = "2015-05-01"
-
-    for doc in frappe.get_all("Journal Entry",
-        filters={"creation": (">", from_date), "docstatus": "1"}):
-
-        # update in gl_entry
-        update_against_account("Journal Entry", doc.name)
-
-        # update in jv
-        doc = frappe.get_doc("Journal Entry", doc.name)
-        doc.set_against_account()
-        doc.db_update()
-
-    for doc in frappe.get_all("Sales Invoice",
-        filters={"creation": (">", from_date), "docstatus": "1"},
-        fields=["name", "customer"]):
-
-        frappe.db.sql("""update `tabGL Entry` set against=%s
-            where voucher_type='Sales Invoice' and voucher_no=%s
-            and credit > 0 and ifnull(party, '')=''""",
-            (doc.customer, doc.name))
-
-    for doc in frappe.get_all("Purchase Invoice",
-        filters={"creation": (">", from_date), "docstatus": "1"},
-        fields=["name", "supplier"]):
-
-        frappe.db.sql("""update `tabGL Entry` set against=%s
-            where voucher_type='Purchase Invoice' and voucher_no=%s
-            and debit > 0 and ifnull(party, '')=''""",
-            (doc.supplier, doc.name))
diff --git a/erpnext/patches/v5_1/rename_roles.py b/erpnext/patches/v5_1/rename_roles.py
deleted file mode 100644
index e19c22a..0000000
--- a/erpnext/patches/v5_1/rename_roles.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	if not frappe.db.exists("Role", "Stock User"):
-		frappe.rename_doc("Role", "Material User", "Stock User")
-	if not frappe.db.exists("Role", "Stock Manager"):
-		frappe.rename_doc("Role", "Material Manager", "Stock Manager")
-	if not frappe.db.exists("Role", "Item Manager"):
-		frappe.rename_doc("Role", "Material Master Manager", "Item Manager")
diff --git a/erpnext/patches/v5_1/sales_bom_rename.py b/erpnext/patches/v5_1/sales_bom_rename.py
deleted file mode 100644
index e06012f..0000000
--- a/erpnext/patches/v5_1/sales_bom_rename.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	tables = frappe.db.sql_list("show tables")
-	for old_dt, new_dt in [["Sales BOM Item", "Product Bundle Item"],
-		["Sales BOM", "Product Bundle"]]:
-			if "tab"+new_dt not in tables:
-				frappe.rename_doc("DocType", old_dt, new_dt, force=True)
diff --git a/erpnext/patches/v5_2/__init__.py b/erpnext/patches/v5_2/__init__.py
deleted file mode 100644
index baffc48..0000000
--- a/erpnext/patches/v5_2/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v5_2/change_item_selects_to_checks.py b/erpnext/patches/v5_2/change_item_selects_to_checks.py
deleted file mode 100644
index 1ee8f6c..0000000
--- a/erpnext/patches/v5_2/change_item_selects_to_checks.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from __future__ import unicode_literals
-
-import frappe
-
-def execute():
-	fields = ("is_stock_item", "is_asset_item", "has_batch_no", "has_serial_no",
-		"is_sales_item", "is_purchase_item", "inspection_required", "is_sub_contracted_item")
-
-	# convert to 1 or 0
-	update_str = ", ".join(["`{0}`=if(`{0}`='Yes',1,0)".format(f) for f in fields])
-	frappe.db.sql("update tabItem set {0}".format(update_str))
-
-	frappe.db.commit()
-
-	# alter fields to int
-	for f in fields:
-		frappe.db.sql("alter table tabItem change {0} {0} int(1) default '0'".format(f, f))
-
-	frappe.reload_doctype("Item")
diff --git a/erpnext/patches/v5_4/__init__.py b/erpnext/patches/v5_4/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/patches/v5_4/__init__.py
+++ /dev/null
diff --git a/erpnext/patches/v5_4/cleanup_journal_entry.py b/erpnext/patches/v5_4/cleanup_journal_entry.py
deleted file mode 100644
index 6860e6a..0000000
--- a/erpnext/patches/v5_4/cleanup_journal_entry.py
+++ /dev/null
@@ -1,21 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from pymysql import InternalError
-
-def execute():
-	frappe.reload_doctype("Journal Entry Account")
-	for doctype, fieldname in (
-		("Sales Order", "against_sales_order"),
-		("Purchase Order", "against_purchase_order"),
-		("Sales Invoice", "against_invoice"),
-		("Purchase Invoice", "against_voucher"),
-		("Journal Entry", "against_jv"),
-		("Expense Claim", "against_expense_claim"),
-	):
-		try:
-			frappe.db.sql("""update `tabJournal Entry Account`
-				set reference_type=%s, reference_name={0} where ifnull({0}, '') != ''
-			""".format(fieldname), doctype)
-		except InternalError:
-			# column not found
-			pass
diff --git a/erpnext/patches/v5_4/fix_invoice_outstanding.py b/erpnext/patches/v5_4/fix_invoice_outstanding.py
deleted file mode 100644
index 54a1da6..0000000
--- a/erpnext/patches/v5_4/fix_invoice_outstanding.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from erpnext.accounts.doctype.gl_entry.gl_entry import update_outstanding_amt
-
-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)
diff --git a/erpnext/patches/v5_4/fix_missing_item_images.py b/erpnext/patches/v5_4/fix_missing_item_images.py
deleted file mode 100644
index c6fe578..0000000
--- a/erpnext/patches/v5_4/fix_missing_item_images.py
+++ /dev/null
@@ -1,126 +0,0 @@
-from __future__ import print_function, unicode_literals
-import frappe
-import os
-from frappe.utils import get_files_path
-from frappe.core.doctype.file.file import get_content_hash
-
-def execute():
-	files_path = get_files_path()
-
-	# get files that don't have attached_to_name but exist
-	unlinked_files = get_unlinked_files(files_path)
-	if not unlinked_files:
-		return
-
-	fixed_files = fix_files_for_item(files_path, unlinked_files)
-
-	# fix remaining files
-	for key, file_data in unlinked_files.items():
-		if key not in fixed_files:
-			rename_and_set_content_hash(files_path, unlinked_files, key)
-			frappe.db.commit()
-
-def fix_files_for_item(files_path, unlinked_files):
-	fixed_files = []
-
-	# make a list of files/something and /files/something to check in child table's image column
-	file_urls = [key for key in unlinked_files.keys()] + ["/" + key for key in unlinked_files.keys()]
-	file_item_code = get_file_item_code(file_urls)
-
-	for (file_url, item_code), children in file_item_code.items():
-		new_file_url = "/files/{0}".format(unlinked_files[file_url]["file_name"])
-
-		for row in children:
-			# print file_url, new_file_url, item_code, row.doctype, row.name
-
-			# replace image in these rows with the new file url
-			frappe.db.set_value(row.doctype, row.name, "image", new_file_url, update_modified=False)
-
-		# set it as attachment of this item code
-		file_data = frappe.get_doc("File", unlinked_files[file_url]["file"])
-		file_data.attached_to_doctype = "Item"
-		file_data.attached_to_name = item_code
-		file_data.flags.ignore_folder_validate = True
-
-		try:
-			file_data.save()
-		except IOError:
-			print("File {0} does not exist".format(new_file_url))
-
-			# marking fix to prevent further errors
-			fixed_files.append(file_url)
-
-			continue
-
-		# set it as image in Item
-		if not frappe.db.get_value("Item", item_code, "image"):
-			frappe.db.set_value("Item", item_code, "image", new_file_url, update_modified=False)
-
-		rename_and_set_content_hash(files_path, unlinked_files, file_url)
-
-		fixed_files.append(file_url)
-
-		# commit
-		frappe.db.commit()
-
-	return fixed_files
-
-def rename_and_set_content_hash(files_path, unlinked_files, file_url):
-	# rename this file
-	old_filename = os.path.join(files_path, unlinked_files[file_url]["file"])
-	new_filename = os.path.join(files_path, unlinked_files[file_url]["file_name"])
-
-	if not os.path.exists(new_filename):
-		os.rename(old_filename, new_filename)
-
-	# set content hash if missing
-	file_data_name = unlinked_files[file_url]["file"]
-	if not frappe.db.get_value("File", file_data_name, "content_hash"):
-		with open(new_filename, "r") as f:
-			content_hash = get_content_hash(f.read())
-			frappe.db.set_value("File", file_data_name, "content_hash", content_hash)
-
-def get_unlinked_files(files_path):
-	# find files that have the same name as a File doc
-	# and the file_name mentioned in that File doc doesn't exist
-	# and it isn't already attached to a doc
-	unlinked_files = {}
-	files = os.listdir(files_path)
-	for file in files:
-		if not frappe.db.exists("File", {"file_name": file}):
-			file_data = frappe.db.get_value("File", {"name": file},
-				["file_name", "attached_to_doctype", "attached_to_name"], as_dict=True)
-
-			if (file_data
-				and file_data.file_name
-				and file_data.file_name not in files
-				and not file_data.attached_to_doctype
-				and not file_data.attached_to_name):
-
-				file_data["file"] = file
-				unlinked_files["files/{0}".format(file)] = file_data
-
-	return unlinked_files
-
-def get_file_item_code(file_urls):
-	# get a map of file_url, item_code and list of documents where file_url will need to be changed in image field
-	file_item_code = {}
-
-	doctypes = frappe.db.sql_list("""select name from `tabDocType` dt
-		where istable=1
-			and exists (select name from `tabDocField` df where df.parent=dt.name and df.fieldname='item_code')
-			and exists (select name from `tabDocField` df where df.parent=dt.name and df.fieldname='image')""")
-
-	for doctype in doctypes:
-		result = frappe.db.sql("""select name, image, item_code, '{0}' as doctype from `tab{0}`
-				where image in ({1})""".format(doctype, ", ".join(["%s"]*len(file_urls))),
-				file_urls, as_dict=True)
-
-		for r in result:
-			key = (r.image, r.item_code)
-			if key not in file_item_code:
-				file_item_code[key] = []
-
-			file_item_code[key].append(r)
-
-	return file_item_code
diff --git a/erpnext/patches/v5_4/fix_reserved_qty_and_sle_for_packed_items.py b/erpnext/patches/v5_4/fix_reserved_qty_and_sle_for_packed_items.py
deleted file mode 100644
index 6eb3994..0000000
--- a/erpnext/patches/v5_4/fix_reserved_qty_and_sle_for_packed_items.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from erpnext.stock.stock_balance import repost_actual_qty
-
-def execute():
-	cancelled_invoices = frappe.db.sql_list("""select name from `tabSales Invoice` 
-		where docstatus = 2 and ifnull(update_stock, 0) = 1""")
-
-	if cancelled_invoices:
-		repost_for = frappe.db.sql("""select distinct item_code, warehouse from `tabStock Ledger Entry`
-			where voucher_type = 'Sales Invoice' and voucher_no in (%s)""" 
-			% (', '.join(['%s']*len(cancelled_invoices))), tuple(cancelled_invoices))
-			
-		frappe.db.sql("""delete from `tabStock Ledger Entry` 
-			where voucher_type = 'Sales Invoice' and voucher_no in (%s)""" 
-			% (', '.join(['%s']*len(cancelled_invoices))), tuple(cancelled_invoices))
-			
-		for item_code, warehouse in repost_for:
-			repost_actual_qty(item_code, warehouse)
\ No newline at end of file
diff --git a/erpnext/patches/v5_4/notify_system_managers_regarding_wrong_tax_calculation.py b/erpnext/patches/v5_4/notify_system_managers_regarding_wrong_tax_calculation.py
deleted file mode 100644
index ba31122..0000000
--- a/erpnext/patches/v5_4/notify_system_managers_regarding_wrong_tax_calculation.py
+++ /dev/null
@@ -1,41 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import print_function, unicode_literals
-import frappe
-from frappe.email import sendmail_to_system_managers
-from frappe.utils import get_link_to_form
-
-def execute():
-	wrong_records = []
-	for dt in ("Quotation", "Sales Order", "Delivery Note", "Sales Invoice", 
-		"Purchase Order", "Purchase Receipt", "Purchase Invoice"):
-			records = frappe.db.sql_list("""select name from `tab{0}` 
-				where apply_discount_on = 'Net Total' and ifnull(discount_amount, 0) != 0
-				and modified >= '2015-02-17' and docstatus=1""".format(dt))
-		
-			if records:
-				records = [get_link_to_form(dt, d) for d in records]
-				wrong_records.append([dt, records])
-				
-	if wrong_records:
-		content = """Dear System Manager,
-
-Due to an error related to Discount Amount on Net Total, tax calculation might be wrong in the following records. We did not fix the tax amount automatically because it can corrupt the entries, so we request you to check these records and amend if you found the calculation wrong.
-
-Please check following Entries:
-
-%s
-
-
-Regards,
-
-Administrator""" % "\n".join([(d[0] + ": " + ", ".join(d[1])) for d in wrong_records])
-		try:
-			sendmail_to_system_managers("[Important] [ERPNext] Tax calculation might be wrong, please check.", content)
-		except:
-			pass
-		
-		print("="*50)
-		print(content)
-		print("="*50)
\ No newline at end of file
diff --git a/erpnext/patches/v5_4/set_root_and_report_type.py b/erpnext/patches/v5_4/set_root_and_report_type.py
deleted file mode 100644
index 9147644..0000000
--- a/erpnext/patches/v5_4/set_root_and_report_type.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	roots = frappe.db.sql("""select lft, rgt, report_type, root_type 
-		from `tabAccount` where ifnull(parent_account, '')=''""", as_dict=1)
-	for d in roots:
-		frappe.db.sql("update `tabAccount` set report_type=%s, root_type=%s where lft > %s and rgt < %s", 
-			(d.report_type, d.root_type, d.lft, d.rgt))
\ No newline at end of file
diff --git a/erpnext/patches/v5_4/stock_entry_additional_costs.py b/erpnext/patches/v5_4/stock_entry_additional_costs.py
deleted file mode 100644
index 3a98deb..0000000
--- a/erpnext/patches/v5_4/stock_entry_additional_costs.py
+++ /dev/null
@@ -1,53 +0,0 @@
-# Copyright (c) 2015, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import flt
-
-def execute():
-	frappe.reload_doctype("Stock Entry")
-	frappe.reload_doctype("Stock Entry Detail")
-	frappe.reload_doctype("Landed Cost Taxes and Charges")
-
-	stock_entry_db_columns = frappe.db.get_table_columns("Stock Entry")
-	if "additional_operating_cost" in stock_entry_db_columns:
-		operating_cost_fieldname = "additional_operating_cost"
-	elif "total_fixed_cost" in stock_entry_db_columns:
-		operating_cost_fieldname = "total_fixed_cost"
-	else:
-		return
-		
-
-	frappe.db.sql("""update `tabStock Entry Detail` sed, `tabStock Entry` se
-		set sed.valuation_rate=sed.incoming_rate, sed.basic_rate=sed.incoming_rate, sed.basic_amount=sed.amount
-		where sed.parent = se.name
-		and (se.purpose not in ('Manufacture', 'Repack') or ifnull({0}, 0)=0)
-	""".format(operating_cost_fieldname))
-		
-
-	stock_entries = frappe.db.sql_list("""select name from `tabStock Entry`
-		where purpose in ('Manufacture', 'Repack') and ifnull({0}, 0)!=0
-		and docstatus < 2""".format(operating_cost_fieldname))
-
-	for d in stock_entries:
-		stock_entry = frappe.get_doc("Stock Entry", d)
-		stock_entry.append("additional_costs", {
-			"description": "Additional Operating Cost",
-			"amount": stock_entry.get(operating_cost_fieldname)
-		})
-
-		number_of_fg_items = len([t.t_warehouse for t in stock_entry.get("items") if t.t_warehouse])
-
-		for d in stock_entry.get("items"):
-			d.valuation_rate = d.incoming_rate
-
-			if d.bom_no or (d.t_warehouse and number_of_fg_items == 1):
-				d.additional_cost = stock_entry.get(operating_cost_fieldname)
-
-			d.basic_rate = flt(d.valuation_rate) - flt(d.additional_cost)
-			d.basic_amount = flt(flt(d.basic_rate) *flt(d.transfer_qty), d.precision("basic_amount"))
-
-		stock_entry.flags.ignore_validate = True
-		stock_entry.flags.ignore_validate_update_after_submit = True
-		stock_entry.save()
diff --git a/erpnext/patches/v5_4/update_purchase_cost_against_project.py b/erpnext/patches/v5_4/update_purchase_cost_against_project.py
deleted file mode 100644
index 1b917c8..0000000
--- a/erpnext/patches/v5_4/update_purchase_cost_against_project.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2015, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	for p in frappe.get_all("Project"):
-		purchase_cost = frappe.db.sql("""select sum(ifnull(base_net_amount, 0))
-			from `tabPurchase Invoice Item` where project = %s and docstatus=1""", p.name)
-		purchase_cost = purchase_cost and purchase_cost[0][0] or 0
-		
-		frappe.db.set_value("Project", p.name, "total_purchase_cost", purchase_cost)
\ No newline at end of file
diff --git a/erpnext/patches/v5_7/__init__.py b/erpnext/patches/v5_7/__init__.py
deleted file mode 100644
index baffc48..0000000
--- a/erpnext/patches/v5_7/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v5_7/item_template_attributes.py b/erpnext/patches/v5_7/item_template_attributes.py
deleted file mode 100644
index 6aa81f7..0000000
--- a/erpnext/patches/v5_7/item_template_attributes.py
+++ /dev/null
@@ -1,124 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import print_function, unicode_literals
-import frappe
-from frappe.exceptions import SQLError
-
-def execute():
-	"""
-		Structure History:
-			1. Item and Item Variant
-			2. Item, Variant Attribute, Manage Variants and Manage Variant Items
-			3. Item, Item Variant Attribute, Item Attribute and Item Attribute Type (latest)
-	"""
-	rename_and_reload_doctypes()
-
-	variant_templates = frappe.get_all("Item", filters={"has_variants": 1}, limit_page_length=1)
-	if not variant_templates:
-		# database does not have items that have variants
-		# so no point in running the patch
-		return
-
-	variant_attributes = frappe.get_all("Item Variant Attribute", fields=["*"], limit_page_length=1)
-
-	if variant_attributes:
-		# manage variant patch is already applied
-		migrate_manage_variants()
-
-	else:
-		# old structure based on "Item Variant" table
-		try:
-			migrate_item_variants()
-
-		except SQLError:
-			print("`tabItem Variant` not found")
-
-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")
-
-def migrate_manage_variants():
-	item_attribute = {}
-	for d in  frappe.db.sql("""select DISTINCT va.attribute, i.variant_of
-		from `tabItem Variant Attribute` va, `tabItem` i
-		where va.parent = i.name and ifnull(i.variant_of, '')!=''""", as_dict=1):
-		item_attribute.setdefault(d.variant_of, []).append({"attribute": d.attribute})
-
-	for item, attributes in item_attribute.items():
-		template = frappe.get_doc("Item", item)
-		template.set('attributes', attributes)
-		template.save()
-
-# patch old style
-def migrate_item_variants():
-	for item in frappe.get_all("Item", filters={"has_variants": 1}):
-		all_variants = frappe.get_all("Item", filters={"variant_of": item.name}, fields=["name", "description"])
-		item_attributes = frappe.db.sql("""select distinct item_attribute, item_attribute_value
-			from `tabItem Variant` where parent=%s""", item.name)
-
-		if not item_attributes and not all_variants:
-			item = frappe.get_doc("Item", item.name)
-			item.has_variants = 0
-			item.save()
-			continue
-
-		attribute_value_options = {}
-		for attribute, value in item_attributes:
-			attribute_value_options.setdefault(attribute, []).append(value)
-
-		possible_combinations = get_possible_combinations(attribute_value_options)
-
-		for variant in all_variants:
-			for combination in possible_combinations:
-				match = True
-				for attribute, value in combination.items():
-					if "{0}: {1}".format(attribute, value) not in variant.description:
-						match = False
-						break
-
-				if match:
-					# found the right variant
-					save_attributes_in_variant(variant, combination)
-					break
-
-		save_attributes_in_template(item, attribute_value_options)
-
-	frappe.delete_doc("DocType", "Item Variant")
-
-def save_attributes_in_template(item, attribute_value_options):
-	# store attribute in Item Variant Attribute table for template
-	template = frappe.get_doc("Item", item)
-	template.set("attributes", [{"attribute": attribute} for attribute in attribute_value_options.keys()])
-	template.save()
-
-def get_possible_combinations(attribute_value_options):
-	possible_combinations = []
-
-	for attribute, values in attribute_value_options.items():
-		if not possible_combinations:
-			for v in values:
-				possible_combinations.append({attribute: v})
-
-		else:
-			for v in values:
-				for combination in possible_combinations:
-					combination[attribute] = v
-
-	return possible_combinations
-
-def save_attributes_in_variant(variant, combination):
-	# add data into attributes table
-	variant_item = frappe.get_doc("Item", variant.name)
-	variant_item.set("attributes", [])
-	for attribute, value in combination.items():
-		variant_item.append("attributes", {
-			"attribute": attribute,
-			"attribute_value": value
-		})
-	variant_item.save()
diff --git a/erpnext/patches/v5_8/__init__.py b/erpnext/patches/v5_8/__init__.py
deleted file mode 100644
index baffc48..0000000
--- a/erpnext/patches/v5_8/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v5_8/add_credit_note_print_heading.py b/erpnext/patches/v5_8/add_credit_note_print_heading.py
deleted file mode 100644
index 476cbc8..0000000
--- a/erpnext/patches/v5_8/add_credit_note_print_heading.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe import _
-
-def execute():
-	for print_heading in (_("Credit Note"), _("Debit Note")):
-		if not frappe.db.exists("Print Heading", print_heading):
-			frappe.get_doc({
-				"doctype": "Print Heading",
-				"print_heading": print_heading
-			}).insert()
diff --git a/erpnext/patches/v5_8/tax_rule.py b/erpnext/patches/v5_8/tax_rule.py
deleted file mode 100644
index 8da28ba..0000000
--- a/erpnext/patches/v5_8/tax_rule.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc("accounts", "doctype", "tax_rule")
-
-	customers = frappe.db.sql("""select name, default_taxes_and_charges from tabCustomer where
-		ifnull(default_taxes_and_charges, '') != '' """, as_dict=1)
-
-	for d in customers:
-		if not frappe.db.sql("select name from `tabTax Rule` where customer=%s", d.name):
-			tr = frappe.new_doc("Tax Rule")
-			tr.tax_type = "Sales"
-			tr.customer = d.name
-			tr.sales_tax_template = d.default_taxes_and_charges
-			tr.save()
-
-
-	suppliers = frappe.db.sql("""select name, default_taxes_and_charges from tabSupplier where
-		ifnull(default_taxes_and_charges, '') != '' """, as_dict=1)
-
-	for d in suppliers:
-		if not frappe.db.sql("select name from `tabTax Rule` where supplier=%s", d.name):
-			tr = frappe.new_doc("Tax Rule")
-			tr.tax_type = "Purchase"
-			tr.supplier = d.name
-			tr.purchase_tax_template = d.default_taxes_and_charges
-			tr.save()
\ No newline at end of file
diff --git a/erpnext/patches/v5_8/update_order_reference_in_return_entries.py b/erpnext/patches/v5_8/update_order_reference_in_return_entries.py
deleted file mode 100644
index 5032638..0000000
--- a/erpnext/patches/v5_8/update_order_reference_in_return_entries.py
+++ /dev/null
@@ -1,92 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype("Delivery Note")
-	frappe.reload_doctype("Sales Invoice")
-	frappe.reload_doctype("Purchase Receipt")
-	frappe.reload_doctype("Sales Order Item")
-	frappe.reload_doctype("Purchase Order Item")
-	frappe.reload_doctype("Purchase Order Item Supplied")
-
-	# sales return
-	return_entries = list(frappe.db.sql("""
-		select dn.name as name, dn_item.name as row_id, dn.return_against,
-			dn_item.item_code, "Delivery Note" as doctype
-		from `tabDelivery Note Item` dn_item, `tabDelivery Note` dn
-		where dn_item.parent=dn.name and dn.is_return=1 and dn.docstatus < 2
-	""", as_dict=1))
-
-	return_entries += list(frappe.db.sql("""
-		select si.name as name, si_item.name as row_id, si.return_against,
-			si_item.item_code, "Sales Invoice" as doctype, update_stock
-		from `tabSales Invoice Item` si_item, `tabSales Invoice` si
-		where si_item.parent=si.name and si.is_return=1 and si.docstatus < 2
-	""", as_dict=1))
-
-	for d in return_entries:
-		ref_field = "against_sales_order" if d.doctype == "Delivery Note" else "sales_order"
-		order_details = frappe.db.sql("""
-			select {ref_field} as sales_order, so_detail,
-				(select transaction_date from `tabSales Order` where name=item.{ref_field}) as sales_order_date
-			from `tab{doctype} Item` item
-			where
-				parent=%s
-				and item_code=%s
-				and ifnull(so_detail, '') !=''
-			order by sales_order_date DESC limit 1
-		""".format(ref_field=ref_field, doctype=d.doctype), (d.return_against, d.item_code), as_dict=1)
-
-		if order_details:
-			frappe.db.sql("""
-				update `tab{doctype} Item`
-				set {ref_field}=%s, so_detail=%s
-				where name=%s
-			""".format(doctype=d.doctype, ref_field=ref_field),
-			(order_details[0].sales_order, order_details[0].so_detail, d.row_id))
-
-			if (d.doctype=="Sales Invoice" and d.update_stock) or d.doctype=="Delivery Note":
-				doc = frappe.get_doc(d.doctype, d.name)
-				doc.update_reserved_qty()
-
-				if d.doctype=="Sales Invoice":
-					doc.status_updater = []
-					doc.update_status_updater_args()
-
-				doc.update_prevdoc_status()
-
-	#--------------------------
-	# purchase return
-	return_entries = frappe.db.sql("""
-		select pr.name as name, pr_item.name as row_id, pr.return_against, pr_item.item_code
-		from `tabPurchase Receipt Item` pr_item, `tabPurchase Receipt` pr
-		where pr_item.parent=pr.name and pr.is_return=1 and pr.docstatus < 2
-	""", as_dict=1)
-
-	for d in return_entries:
-		order_details = frappe.db.sql("""
-			select prevdoc_docname as purchase_order, prevdoc_detail_docname as po_detail,
-				(select transaction_date from `tabPurchase Order` where name=item.prevdoc_detail_docname) as purchase_order_date
-			from `tabPurchase Receipt Item` item
-			where
-				parent=%s
-				and item_code=%s
-				and ifnull(prevdoc_detail_docname, '') !=''
-				and ifnull(prevdoc_doctype, '') = 'Purchase Order' and ifnull(prevdoc_detail_docname, '') != ''
-			order by purchase_order_date DESC limit 1
-		""", (d.return_against, d.item_code), as_dict=1)
-
-		if order_details:
-			frappe.db.sql("""
-				update `tabPurchase Receipt Item`
-				set prevdoc_doctype='Purchase Order', prevdoc_docname=%s, prevdoc_detail_docname=%s
-				where name=%s
-			""", (order_details[0].purchase_order, order_details[0].po_detail, d.row_id))
-
-			pr = frappe.get_doc("Purchase Receipt", d.name)
-			pr.update_ordered_and_reserved_qty()
-			pr.update_prevdoc_status()
-
diff --git a/erpnext/patches/v6_0/__init__.py b/erpnext/patches/v6_0/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/patches/v6_0/__init__.py
+++ /dev/null
diff --git a/erpnext/patches/v6_0/default_activity_rate.py b/erpnext/patches/v6_0/default_activity_rate.py
deleted file mode 100644
index cfbfb72..0000000
--- a/erpnext/patches/v6_0/default_activity_rate.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc("projects", "doctype", "activity_cost")
-
-	for cost in frappe.db.get_list("Activity Cost", filters = {"employee": ""},
-		fields = ("name", "activity_type", "costing_rate", "billing_rate")):
-		activity_type = frappe.get_doc("Activity Type", cost.activity_type)
-		activity_type.costing_rate = cost.costing_rate
-		activity_type.billing_rate = cost.billing_rate
-		activity_type.save()
-
-		frappe.delete_doc("Activity Cost", cost.name)
diff --git a/erpnext/patches/v6_0/fix_outstanding_amount.py b/erpnext/patches/v6_0/fix_outstanding_amount.py
deleted file mode 100644
index 0de6890..0000000
--- a/erpnext/patches/v6_0/fix_outstanding_amount.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from erpnext.accounts.doctype.gl_entry.gl_entry import update_outstanding_amt
-
-def execute():
-	for dt, party_field, account_field in (("Sales Invoice", "customer", "debit_to"), 
-			("Purchase Invoice", "supplier", "credit_to")):
-			
-		wrong_invoices = frappe.db.sql("""select name, {0} as account from `tab{1}` 
-			where docstatus=1 and ifnull({2}, '')=''""".format(account_field, dt, party_field))
-			
-		for invoice, account in wrong_invoices:
-			update_outstanding_amt(account, party_field.title(), None, dt, invoice)
\ No newline at end of file
diff --git a/erpnext/patches/v6_0/fix_planned_qty.py b/erpnext/patches/v6_0/fix_planned_qty.py
deleted file mode 100644
index cf7b429..0000000
--- a/erpnext/patches/v6_0/fix_planned_qty.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from erpnext.stock.stock_balance import get_planned_qty, update_bin_qty
-
-def execute():
-	for item_code, warehouse in frappe.db.sql("""select distinct production_item, fg_warehouse
-		from `tabWork Order`"""):
-			if frappe.db.exists("Item", item_code) and frappe.db.exists("Warehouse", warehouse):
-				update_bin_qty(item_code, warehouse, {
-					"planned_qty": get_planned_qty(item_code, warehouse)
-				})
diff --git a/erpnext/patches/v6_0/multi_currency.py b/erpnext/patches/v6_0/multi_currency.py
deleted file mode 100644
index b4c37fc..0000000
--- a/erpnext/patches/v6_0/multi_currency.py
+++ /dev/null
@@ -1,65 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-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))
diff --git a/erpnext/patches/v6_0/set_default_title.py b/erpnext/patches/v6_0/set_default_title.py
deleted file mode 100644
index cceff3f..0000000
--- a/erpnext/patches/v6_0/set_default_title.py
+++ /dev/null
@@ -1,36 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype("Quotation")
-	frappe.db.sql("""update tabQuotation set title = customer_name""")
-
-	frappe.reload_doctype("Sales Order")
-	frappe.db.sql("""update `tabSales Order` set title = customer_name""")
-
-	frappe.reload_doctype("Delivery Note")
-	frappe.db.sql("""update `tabDelivery Note` set title = customer_name""")
-
-	frappe.reload_doctype("Material Request")
-	frappe.db.sql("""update `tabMaterial Request` set title = material_request_type""")
-
-	frappe.reload_doctype("Supplier Quotation")
-	frappe.db.sql("""update `tabSupplier Quotation` set title = supplier_name""")
-
-	frappe.reload_doctype("Purchase Order")
-	frappe.db.sql("""update `tabPurchase Order` set title = supplier_name""")
-
-	frappe.reload_doctype("Purchase Receipt")
-	frappe.db.sql("""update `tabPurchase Receipt` set title = supplier_name""")
-
-	frappe.reload_doctype("Purchase Invoice")
-	frappe.db.sql("""update `tabPurchase Invoice` set title = supplier_name""")
-
-	frappe.reload_doctype("Stock Entry")
-	frappe.db.sql("""update `tabStock Entry` set title = purpose""")
-
-	frappe.reload_doctype("Sales Invoice")
-	frappe.db.sql("""update `tabSales Invoice` set title = customer_name""")
-
-	frappe.reload_doctype("Expense Claim")
-	frappe.db.sql("""update `tabExpense Claim` set title = employee_name""")
diff --git a/erpnext/patches/v6_10/__init__.py b/erpnext/patches/v6_10/__init__.py
deleted file mode 100644
index baffc48..0000000
--- a/erpnext/patches/v6_10/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v6_10/email_digest_default_quote.py b/erpnext/patches/v6_10/email_digest_default_quote.py
deleted file mode 100644
index 6139f1a..0000000
--- a/erpnext/patches/v6_10/email_digest_default_quote.py
+++ /dev/null
@@ -1,6 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype("Email Digest")
-	frappe.db.sql("update `tabEmail Digest` set add_quote = 1")
diff --git a/erpnext/patches/v6_10/fix_billed_amount_in_drop_ship_po.py b/erpnext/patches/v6_10/fix_billed_amount_in_drop_ship_po.py
deleted file mode 100644
index d7f72b5..0000000
--- a/erpnext/patches/v6_10/fix_billed_amount_in_drop_ship_po.py
+++ /dev/null
@@ -1,18 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.db.sql("""update `tabPurchase Order Item` set billed_amt = 0
-			where delivered_by_supplier=1 and docstatus=1""")
-			
-	drop_ship_pos = frappe.db.sql("""select distinct parent from `tabPurchase Order Item` 
-		where delivered_by_supplier=1 and docstatus=1""")
-		
-	for po in drop_ship_pos:
-		invoices = frappe.db.sql("""select distinct parent from `tabPurchase Invoice Item`
-			where purchase_order=%s and docstatus=1""", po[0])
-		if invoices:
-			for inv in invoices:
-				frappe.get_doc("Purchase Invoice", inv[0]).update_qty(update_modified=False)
-		else:
-			frappe.db.sql("""update `tabPurchase Order` set per_billed=0 where name=%s""", po[0])
\ No newline at end of file
diff --git a/erpnext/patches/v6_10/fix_delivery_status_of_drop_ship_item.py b/erpnext/patches/v6_10/fix_delivery_status_of_drop_ship_item.py
deleted file mode 100644
index 9a53b7f..0000000
--- a/erpnext/patches/v6_10/fix_delivery_status_of_drop_ship_item.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-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)
\ No newline at end of file
diff --git a/erpnext/patches/v6_10/fix_jv_total_amount.py b/erpnext/patches/v6_10/fix_jv_total_amount.py
deleted file mode 100644
index 42cb9e9..0000000
--- a/erpnext/patches/v6_10/fix_jv_total_amount.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-# patch all for-print field (total amount) in Journal Entry in 2015
-def execute():
-	for je in frappe.get_all("Journal Entry", filters={"creation": (">", "2015-01-01")}):
-		je = frappe.get_doc("Journal Entry", je.name)
-		original = je.total_amount
-
-		je.set_print_format_fields()
-
-		if je.total_amount != original:
-			je.db_set("total_amount", je.total_amount, update_modified=False)
-			je.db_set("total_amount_in_words", je.total_amount_in_words, update_modified=False)
diff --git a/erpnext/patches/v6_10/fix_ordered_received_billed.py b/erpnext/patches/v6_10/fix_ordered_received_billed.py
deleted file mode 100644
index c81a20e..0000000
--- a/erpnext/patches/v6_10/fix_ordered_received_billed.py
+++ /dev/null
@@ -1,17 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	not_null_patch_date = frappe.db.sql("""select date(creation) from `tabPatch Log` where patch='frappe.patches.v6_9.int_float_not_null'""")
-	if not not_null_patch_date:
-		return
-
-	not_null_patch_date = not_null_patch_date[0][0]
-
-	for doctype in ("Purchase Invoice", "Sales Invoice", "Purchase Order", "Delivery Note", "Installation Note", "Delivery Note", "Purchase Receipt"):
-		for name in frappe.db.sql_list("""select name from `tab{doctype}`
-			where docstatus > 0 and (date(creation) >= %(patch_date)s or date(modified) >= %(patch_date)s)""".format(doctype=doctype),
-			{"patch_date": not_null_patch_date}):
-
-			doc = frappe.get_doc(doctype, name)
-			doc.update_qty(update_modified=False)
diff --git a/erpnext/patches/v6_12/__init__.py b/erpnext/patches/v6_12/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/patches/v6_12/__init__.py
+++ /dev/null
diff --git a/erpnext/patches/v6_12/repost_entries_with_target_warehouse.py b/erpnext/patches/v6_12/repost_entries_with_target_warehouse.py
deleted file mode 100644
index fb5eab4..0000000
--- a/erpnext/patches/v6_12/repost_entries_with_target_warehouse.py
+++ /dev/null
@@ -1,175 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import print_function, unicode_literals
-import frappe
-
-"""
-This patch is written to fix Stock Ledger Entries and GL Entries 
-against Delivery Notes and Sales Invoice where Target Warehouse has been set wrongly
-due to User Permissions on Warehouse.
-
-This cannot be run automatically because we can't take a call that 
-Target Warehouse has been set purposefully or by mistake. 
-Thats why we left it to the users to take the call, and manually run the patch.
-
-This patch has 2 main functions, `check()` and `repost()`. 
-- Run `check` function, to list out all the Sales Orders, Delivery Notes 
-	and Sales Invoice with Target Warehouse.
-- Run `repost` function to remove the Target Warehouse value and repost SLE and GLE again.
-
-To execute this patch run following commands from frappe-bench directory:
-```
-	bench --site [your-site-name] execute erpnext.patches.v6_12.repost_entries_with_target_warehouse.check
-	bench --site [your-site-name] backup
-	bench --site [your-site-name] execute erpnext.patches.v6_12.repost_entries_with_target_warehouse.repost
-```
-
-Exception Handling:
-While reposting, if you get any exception, it will printed on screen. 
-Mostly it can be due to negative stock issue. If that is the case, follow these steps
-	- Ensure that stock is available for those items in the mentioned warehouse on the date mentioned in the error
-	- Execute `repost` funciton again
-"""
-
-def check():
-	so_list = get_affected_sales_order()
-	dn_list = get_affected_delivery_notes()
-	si_list = get_affected_sales_invoice()
-	
-	if so_list or dn_list or si_list:
-		print("Entries with Target Warehouse:")
-		
-		if so_list:
-			print("Sales Order")
-			print(so_list)
-
-		if dn_list:
-			print("Delivery Notes")
-			print([d.name for d in dn_list])
-
-		if si_list:
-			print("Sales Invoice")
-			print([d.name for d in si_list])
-		
-		
-def repost():
-	dn_failed_list, si_failed_list = [], []
-	repost_dn(dn_failed_list)
-	repost_si(si_failed_list)
-	repost_so()
-	frappe.db.commit()
-	
-	if dn_failed_list:
-		print("-"*40)
-		print("Delivery Note Failed to Repost")
-		print(dn_failed_list)
-
-	if si_failed_list:
-		print("-"*40)
-		print("Sales Invoice Failed to Repost")
-		print(si_failed_list)
-		print()
-		
-		print("""
-If above Delivery Notes / Sales Invoice failed due to negative stock, follow these steps:
-	- Ensure that stock is available for those items in the mentioned warehouse on the date mentioned in the error
-	- Run this patch again
-""")
-	
-def repost_dn(dn_failed_list):
-	dn_list = get_affected_delivery_notes()
-		
-	if dn_list:
-		print("-"*40)
-		print("Reposting Delivery Notes")
-
-	for dn in dn_list:
-		if dn.docstatus == 0:
-			continue
-			
-		print(dn.name)
-	
-		try:
-			dn_doc = frappe.get_doc("Delivery Note", dn.name)
-			dn_doc.docstatus = 2
-			dn_doc.update_prevdoc_status()
-			dn_doc.update_stock_ledger()
-			dn_doc.cancel_packing_slips()
-			frappe.db.sql("""delete from `tabGL Entry` 
-				where voucher_type='Delivery Note' and voucher_no=%s""", dn.name)
-
-			frappe.db.sql("update `tabDelivery Note Item` set target_warehouse='' where parent=%s", dn.name)
-			dn_doc = frappe.get_doc("Delivery Note", dn.name)
-			dn_doc.docstatus = 1
-			dn_doc.on_submit()
-			frappe.db.commit()
-		except Exception:
-			dn_failed_list.append(dn.name)
-			frappe.local.stockledger_exceptions = None
-			print(frappe.get_traceback())
-			frappe.db.rollback()
-		
-	frappe.db.sql("update `tabDelivery Note Item` set target_warehouse='' where docstatus=0")
-
-def repost_si(si_failed_list):
-	si_list = get_affected_sales_invoice()
-
-	if si_list:
-		print("-"*40)
-		print("Reposting Sales Invoice")
-	
-	for si in si_list:
-		if si.docstatus == 0:
-			continue
-		
-		print(si.name)
-	
-		try:
-			si_doc = frappe.get_doc("Sales Invoice", si.name)
-			si_doc.docstatus = 2
-			si_doc.update_stock_ledger()
-			frappe.db.sql("""delete from `tabGL Entry` 
-				where voucher_type='Sales Invoice' and voucher_no=%s""", si.name)
-			
-			frappe.db.sql("update `tabSales Invoice Item` set target_warehouse='' where parent=%s", si.name)
-			si_doc = frappe.get_doc("Sales Invoice", si.name)
-			si_doc.docstatus = 1
-			si_doc.update_stock_ledger()
-			si_doc.make_gl_entries()
-			frappe.db.commit()
-		except Exception:
-			si_failed_list.append(si.name)
-			frappe.local.stockledger_exceptions = None
-			print(frappe.get_traceback())
-			frappe.db.rollback()
-		
-	frappe.db.sql("update `tabSales Invoice Item` set target_warehouse='' where docstatus=0")
-	
-def repost_so():
-	so_list = get_affected_sales_order()
-	
-	frappe.db.sql("update `tabSales Order Item` set target_warehouse=''")
-	
-	if so_list:
-		print("-"*40)
-		print("Sales Order reposted")
-	
-	
-def get_affected_delivery_notes():
-	return frappe.db.sql("""select distinct dn.name, dn.docstatus
-		from `tabDelivery Note` dn, `tabDelivery Note Item` dn_item
-		where dn.name=dn_item.parent and dn.docstatus < 2
-			and dn_item.target_warehouse is not null and dn_item.target_warehouse != '' 
-		order by dn.posting_date asc""", as_dict=1)
-			
-def get_affected_sales_invoice():
-	return frappe.db.sql("""select distinct si.name, si.docstatus
-		from `tabSales Invoice` si, `tabSales Invoice Item` si_item
-		where si.name=si_item.parent and si.docstatus < 2 and si.update_stock=1
-			and si_item.target_warehouse is not null and si_item.target_warehouse != '' 
-		order by si.posting_date asc""", as_dict=1)
-		
-def get_affected_sales_order():
-	return frappe.db.sql_list("""select distinct parent from `tabSales Order Item` 
-		where target_warehouse is not null and target_warehouse != '' and docstatus <2""")
\ No newline at end of file
diff --git a/erpnext/patches/v6_12/set_overdue_tasks.py b/erpnext/patches/v6_12/set_overdue_tasks.py
deleted file mode 100644
index 7dbb8ba..0000000
--- a/erpnext/patches/v6_12/set_overdue_tasks.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype("Task")
-
-	from erpnext.projects.doctype.task.task import set_tasks_as_overdue
-	set_tasks_as_overdue()
diff --git a/erpnext/patches/v6_16/__init__.py b/erpnext/patches/v6_16/__init__.py
deleted file mode 100644
index baffc48..0000000
--- a/erpnext/patches/v6_16/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v6_16/create_manufacturer_records.py b/erpnext/patches/v6_16/create_manufacturer_records.py
deleted file mode 100644
index 5ae65f0..0000000
--- a/erpnext/patches/v6_16/create_manufacturer_records.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import cstr
-
-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()
diff --git a/erpnext/patches/v6_16/update_billing_status_in_dn_and_pr.py b/erpnext/patches/v6_16/update_billing_status_in_dn_and_pr.py
deleted file mode 100644
index 481f130..0000000
--- a/erpnext/patches/v6_16/update_billing_status_in_dn_and_pr.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	for dt in ("Delivery Note", "Purchase Receipt"):
-		frappe.reload_doctype(dt)
-		frappe.reload_doctype(dt + " Item")
-
-	# Update billed_amt in DN and PR which are not against any order
-	for d in frappe.db.sql("""select name from `tabDelivery Note Item` item
-		where (so_detail is null or so_detail = '') and docstatus=1""", as_dict=1):
-
-		billed_amt = frappe.db.sql("""select sum(amount) from `tabSales Invoice Item`
-			where dn_detail=%s and docstatus=1""", d.name)
-		billed_amt = billed_amt and billed_amt[0][0] or 0
-		frappe.db.set_value("Delivery Note Item", d.name, "billed_amt", billed_amt, update_modified=False)
-
-		frappe.db.commit()
-
-	# Update billed_amt in DN and PR which are not against any order
-	for d in frappe.db.sql("""select name from `tabPurchase Receipt Item` item
-		where (purchase_order_item is null or purchase_order_item = '') and docstatus=1""", as_dict=1):
-
-		billed_amt = frappe.db.sql("""select sum(amount) from `tabPurchase Invoice Item`
-			where pr_detail=%s and docstatus=1""", d.name)
-		billed_amt = billed_amt and billed_amt[0][0] or 0
-		frappe.db.set_value("Purchase Receipt Item", d.name, "billed_amt", billed_amt, update_modified=False)
-
-		frappe.db.commit()
-
-	for dt in ("Delivery Note", "Purchase Receipt"):
-		# Update billed amt which are against order or invoice
-		# Update billing status for all
-		for d in frappe.db.sql("select name from `tab{0}` where docstatus=1".format(dt), as_dict=1):
-			doc = frappe.get_doc(dt, d.name)
-			doc.update_billing_status(update_modified=False)
-			doc.set_status(update=True, update_modified=False)
-
-			frappe.db.commit()
diff --git a/erpnext/patches/v6_19/__init__.py b/erpnext/patches/v6_19/__init__.py
deleted file mode 100644
index baffc48..0000000
--- a/erpnext/patches/v6_19/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v6_19/comment_feed_communication.py b/erpnext/patches/v6_19/comment_feed_communication.py
deleted file mode 100644
index bc41c2d..0000000
--- a/erpnext/patches/v6_19/comment_feed_communication.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.patches.v6_19.comment_feed_communication import update_timeline_doc_for
-
-def execute():
-	for doctype in ("Customer", "Supplier", "Employee", "Project"):
-		update_timeline_doc_for(doctype)
diff --git a/erpnext/patches/v6_2/__init__.py b/erpnext/patches/v6_2/__init__.py
deleted file mode 100644
index baffc48..0000000
--- a/erpnext/patches/v6_2/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v6_2/fix_missing_default_taxes_and_lead.py b/erpnext/patches/v6_2/fix_missing_default_taxes_and_lead.py
deleted file mode 100644
index b0cfc3d..0000000
--- a/erpnext/patches/v6_2/fix_missing_default_taxes_and_lead.py
+++ /dev/null
@@ -1,25 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	# remove missing lead
-	for customer in frappe.db.sql_list("""select name from `tabCustomer`
-		where ifnull(lead_name, '')!='' and not exists (select name from `tabLead` where name=`tabCustomer`.lead_name)"""):
-		frappe.db.set_value("Customer", customer, "lead_name", None)
-
-	# remove missing default taxes
-	for customer in frappe.db.sql_list("""select name from `tabCustomer`
-		where ifnull(default_taxes_and_charges, '')!='' and not exists (
-			select name from `tabSales Taxes and Charges Template` where name=`tabCustomer`.default_taxes_and_charges
-		)"""):
-		c = frappe.get_doc("Customer", customer)
-		c.default_taxes_and_charges = None
-		c.save()
-
-	for supplier in frappe.db.sql_list("""select name from `tabSupplier`
-		where ifnull(default_taxes_and_charges, '')!='' and not exists (
-			select name from `tabPurchase Taxes and Charges Template` where name=`tabSupplier`.default_taxes_and_charges
-		)"""):
-		c = frappe.get_doc("Supplier", supplier)
-		c.default_taxes_and_charges = None
-		c.save()
diff --git a/erpnext/patches/v6_2/remove_newsletter_duplicates.py b/erpnext/patches/v6_2/remove_newsletter_duplicates.py
deleted file mode 100644
index f9d1547..0000000
--- a/erpnext/patches/v6_2/remove_newsletter_duplicates.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	duplicates = frappe.db.sql("""select email_group, email, count(name)
-		from `tabEmail Group Member`
-		group by email_group, email
-		having count(name) > 1""")
-
-	# delete all duplicates except 1
-	for email_group, email, count in duplicates:
-		frappe.db.sql("""delete from `tabEmail Group Member`
-			where email_group=%s and email=%s limit %s""", (email_group, email, count-1))
diff --git a/erpnext/patches/v6_20/__init__.py b/erpnext/patches/v6_20/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/patches/v6_20/__init__.py
+++ /dev/null
diff --git a/erpnext/patches/v6_20/set_party_account_currency_in_orders.py b/erpnext/patches/v6_20/set_party_account_currency_in_orders.py
deleted file mode 100644
index ae7ad95..0000000
--- a/erpnext/patches/v6_20/set_party_account_currency_in_orders.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	for doctype in ("Sales Order", "Purchase Order"):
-		frappe.reload_doctype(doctype)
-		
-		for order in frappe.db.sql("""select name, {0} as party from `tab{1}` 
-			where advance_paid > 0 and docstatus=1"""
-			.format(("customer" if doctype=="Sales Order" else "supplier"), doctype), as_dict=1):
-			
-			party_account_currency = frappe.db.get_value("Journal Entry Account", {
-				"reference_type": doctype,
-				"reference_name": order.name,
-				"party": order.party,
-				"docstatus": 1,
-				"is_advance": "Yes"
-			}, "account_currency")
-			
-			frappe.db.set_value(doctype, order.name, "party_account_currency", party_account_currency)
-		
\ No newline at end of file
diff --git a/erpnext/patches/v6_20x/__init__.py b/erpnext/patches/v6_20x/__init__.py
deleted file mode 100644
index baffc48..0000000
--- a/erpnext/patches/v6_20x/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v6_20x/remove_customer_supplier_roles.py b/erpnext/patches/v6_20x/remove_customer_supplier_roles.py
deleted file mode 100644
index a651576..0000000
--- a/erpnext/patches/v6_20x/remove_customer_supplier_roles.py
+++ /dev/null
@@ -1,23 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc("buying", "doctype", "request_for_quotation_supplier")
-	frappe.reload_doc("buying", "doctype", "request_for_quotation_item")
-	frappe.reload_doc("buying", "doctype", "request_for_quotation")
-	frappe.reload_doc("projects", "doctype", "timesheet")
-	
-	for role in ('Customer', 'Supplier'):
-		frappe.db.sql('''delete from `tabHas Role`
-			where role=%s and parent in ("Administrator", "Guest")''', role)
-
-		if not frappe.db.sql('select name from `tabHas Role` where role=%s', role):
-
-			# delete DocPerm
-			for doctype in frappe.db.sql('select parent from tabDocPerm where role=%s', role):
-				d = frappe.get_doc("DocType", doctype[0])
-				d.permissions = [p for p in d.permissions if p.role != role]
-				d.save()
-
-			# delete Role
-			frappe.delete_doc_if_exists('Role', role)
diff --git a/erpnext/patches/v6_20x/remove_fiscal_year_from_holiday_list.py b/erpnext/patches/v6_20x/remove_fiscal_year_from_holiday_list.py
deleted file mode 100644
index d440c68..0000000
--- a/erpnext/patches/v6_20x/remove_fiscal_year_from_holiday_list.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype("Holiday List")
-
-	default_holiday_list = frappe.db.get_value("Holiday List", {"is_default": 1})
-	if default_holiday_list:
-		for company in frappe.get_all("Company", fields=["name", "default_holiday_list"]):
-			if not company.default_holiday_list:
-				frappe.db.set_value("Company", company.name, "default_holiday_list", default_holiday_list)
-
-
-	fiscal_years = frappe._dict((fy.name, fy) for fy in frappe.get_all("Fiscal Year", fields=["name", "year_start_date", "year_end_date"]))
-
-	for holiday_list in frappe.get_all("Holiday List", fields=["name", "fiscal_year"]):
-		fy = fiscal_years[holiday_list.fiscal_year]
-		frappe.db.set_value("Holiday List", holiday_list.name, "from_date", fy.year_start_date)
-		frappe.db.set_value("Holiday List", holiday_list.name, "to_date", fy.year_end_date)
diff --git a/erpnext/patches/v6_20x/rename_project_name_to_project.py b/erpnext/patches/v6_20x/rename_project_name_to_project.py
deleted file mode 100644
index 49ec9d2..0000000
--- a/erpnext/patches/v6_20x/rename_project_name_to_project.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import rename_field
-
-def execute():
-	
-	doc_list = ["Work Order", "BOM", "Purchase Invoice Item", "Sales Invoice", 
-		"Purchase Order Item", "Stock Entry", "Delivery Note", "Sales Order", 
-		"Purchase Receipt Item", "Supplier Quotation Item"]
-	
-	for doctype in doc_list:
-		frappe.reload_doctype(doctype)
-		rename_field(doctype, "project_name", "project")
-	
\ No newline at end of file
diff --git a/erpnext/patches/v6_20x/repost_valuation_rate_for_negative_inventory.py b/erpnext/patches/v6_20x/repost_valuation_rate_for_negative_inventory.py
deleted file mode 100644
index 8369fea..0000000
--- a/erpnext/patches/v6_20x/repost_valuation_rate_for_negative_inventory.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import cint
-from erpnext.stock.stock_balance import repost
-
-def execute():
-	if cint(frappe.db.get_value("Stock Settings", None, "allow_negative_stock")):
-		repost(only_actual=True)
\ No newline at end of file
diff --git a/erpnext/patches/v6_20x/set_compact_print.py b/erpnext/patches/v6_20x/set_compact_print.py
deleted file mode 100644
index 495407f..0000000
--- a/erpnext/patches/v6_20x/set_compact_print.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-from erpnext.setup.install import create_compact_item_print_custom_field
-
-def execute():
-	create_compact_item_print_custom_field()
-	frappe.db.set_value("Print Settings", None, "compact_item_print", 1)
diff --git a/erpnext/patches/v6_20x/update_product_bundle_description.py b/erpnext/patches/v6_20x/update_product_bundle_description.py
deleted file mode 100644
index 1fac44b..0000000
--- a/erpnext/patches/v6_20x/update_product_bundle_description.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import sanitize_html
-
-def execute():
-	for product_bundle in frappe.get_all('Product Bundle'):
-		doc = frappe.get_doc('Product Bundle', product_bundle.name)
-		for item in doc.items:
-			if item.description:
-				description = sanitize_html(item.description)
-				item.db_set('description', description, update_modified=False)
diff --git a/erpnext/patches/v6_21/__init__.py b/erpnext/patches/v6_21/__init__.py
deleted file mode 100644
index baffc48..0000000
--- a/erpnext/patches/v6_21/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v6_21/fix_reorder_level.py b/erpnext/patches/v6_21/fix_reorder_level.py
deleted file mode 100644
index 82a35eb..0000000
--- a/erpnext/patches/v6_21/fix_reorder_level.py
+++ /dev/null
@@ -1,24 +0,0 @@
-from __future__ import unicode_literals
-
-import frappe
-from erpnext.stock.doctype.item.item import DuplicateReorderRows
-
-def execute():
-	if frappe.db.has_column("Item", "re_order_level"):
-		for item in frappe.db.sql("""select name, default_warehouse, re_order_level, re_order_qty
-			from tabItem
-			where ifnull(re_order_level, 0) != 0
-				and ifnull(re_order_qty, 0) != 0""", as_dict=1):
-
-			item_doc = frappe.get_doc("Item", item.name)
-			item_doc.append("reorder_levels", {
-				"warehouse": item.default_warehouse,
-				"warehouse_reorder_level": item.re_order_level,
-				"warehouse_reorder_qty": item.re_order_qty,
-				"material_request_type": "Purchase"
-			})
-
-			try:
-				item_doc.save()
-			except DuplicateReorderRows:
-				pass
diff --git a/erpnext/patches/v6_21/rename_material_request_fields.py b/erpnext/patches/v6_21/rename_material_request_fields.py
deleted file mode 100644
index 07be27a..0000000
--- a/erpnext/patches/v6_21/rename_material_request_fields.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import rename_field
-
-def execute():
-	frappe.reload_doc('stock', 'doctype', 'material_request_item')
-	rename_field("Material Request Item", "sales_order_no", "sales_order")
-	
-	frappe.reload_doc('support', 'doctype', 'maintenance_schedule_item')
-	rename_field("Maintenance Schedule Item", "prevdoc_docname", "sales_order")
-	
\ No newline at end of file
diff --git a/erpnext/patches/v6_23/__init__.py b/erpnext/patches/v6_23/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/patches/v6_23/__init__.py
+++ /dev/null
diff --git a/erpnext/patches/v6_23/update_stopped_status_to_closed.py b/erpnext/patches/v6_23/update_stopped_status_to_closed.py
deleted file mode 100644
index 79d1e0a..0000000
--- a/erpnext/patches/v6_23/update_stopped_status_to_closed.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	for dt in ("Sales Order", "Purchase Order"):
-		frappe.db.sql("update `tab{0}` set status='Closed' where status='Stopped'".format(dt))
\ No newline at end of file
diff --git a/erpnext/patches/v6_24/__init__.py b/erpnext/patches/v6_24/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/patches/v6_24/__init__.py
+++ /dev/null
diff --git a/erpnext/patches/v6_24/map_customer_address_to_shipping_address_on_po.py b/erpnext/patches/v6_24/map_customer_address_to_shipping_address_on_po.py
deleted file mode 100644
index 1dd8083..0000000
--- a/erpnext/patches/v6_24/map_customer_address_to_shipping_address_on_po.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype("Purchase Order")
-	
-	if not frappe.db.has_column("Purchase Order", "shipping_address"):
-		return
-		
-	if not frappe.db.has_column("Purchase Order", "customer_address"):
-		return
-	
-	frappe.db.sql("""update `tabPurchase Order` set shipping_address=customer_address, 
-		shipping_address_display=customer_address_display""")
-	
-	frappe.db.commit()
\ No newline at end of file
diff --git a/erpnext/patches/v6_24/set_recurring_id.py b/erpnext/patches/v6_24/set_recurring_id.py
deleted file mode 100644
index 527a2fd..0000000
--- a/erpnext/patches/v6_24/set_recurring_id.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-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))
diff --git a/erpnext/patches/v6_27/__init__.py b/erpnext/patches/v6_27/__init__.py
deleted file mode 100644
index baffc48..0000000
--- a/erpnext/patches/v6_27/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v6_27/fix_recurring_order_status.py b/erpnext/patches/v6_27/fix_recurring_order_status.py
deleted file mode 100644
index 5843c9f..0000000
--- a/erpnext/patches/v6_27/fix_recurring_order_status.py
+++ /dev/null
@@ -1,54 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	for doc in (
-		{
-			"doctype": "Sales Order",
-			"stock_doctype": "Delivery Note",
-			"invoice_doctype": "Sales Invoice",
-			"stock_doctype_ref_field": "against_sales_order",
-			"invoice_ref_field": "sales_order",
-			"qty_field": "delivered_qty"
-		},
-		{
-			"doctype": "Purchase Order",
-			"stock_doctype": "Purchase Receipt",
-			"invoice_doctype": "Purchase Invoice",
-			"stock_doctype_ref_field": "prevdoc_docname",
-			"invoice_ref_field": "purchase_order",
-			"qty_field": "received_qty"
-		}):
-
-		order_list = frappe.db.sql("""select name from `tab{0}`
-			where docstatus=1 and is_recurring=1
-			and ifnull(recurring_id, '') != name and creation >= '2016-01-25'"""
-			.format(doc["doctype"]), as_dict=1)
-
-		for order in order_list:
-			frappe.db.sql("""update `tab{0} Item`
-				set {1}=0, billed_amt=0 where parent=%s""".format(doc["doctype"],
-					doc["qty_field"]), order.name)
-
-			# Check against Delivery Note and Purchase Receipt
-			stock_doc_list = frappe.db.sql("""select distinct parent from `tab{0} Item`
-				where docstatus=1 and ifnull({1}, '')=%s"""
-				.format(doc["stock_doctype"], doc["stock_doctype_ref_field"]), order.name)
-
-			if stock_doc_list:
-				for dn in stock_doc_list:
-					frappe.get_doc(doc["stock_doctype"], dn[0]).update_qty(update_modified=False)
-
-			# Check against Invoice
-			invoice_list = frappe.db.sql("""select distinct parent from `tab{0} Item`
-				where docstatus=1 and ifnull({1}, '')=%s"""
-				.format(doc["invoice_doctype"], doc["invoice_ref_field"]), order.name)
-
-			if invoice_list:
-				for dn in invoice_list:
-					frappe.get_doc(doc["invoice_doctype"], dn[0]).update_qty(update_modified=False)
-
-			frappe.get_doc(doc["doctype"], order.name).set_status(update=True, update_modified=False)
\ No newline at end of file
diff --git a/erpnext/patches/v6_3/__init__.py b/erpnext/patches/v6_3/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/patches/v6_3/__init__.py
+++ /dev/null
diff --git a/erpnext/patches/v6_3/convert_applicable_territory.py b/erpnext/patches/v6_3/convert_applicable_territory.py
deleted file mode 100644
index 231a483..0000000
--- a/erpnext/patches/v6_3/convert_applicable_territory.py
+++ /dev/null
@@ -1,24 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc("stock", "doctype", "price_list_country")
-	frappe.reload_doc("accounts", "doctype", "shipping_rule_country")
-	frappe.reload_doctype("Price List")
-	frappe.reload_doctype("Shipping Rule")
-	frappe.reload_doctype("shopping_cart", "doctype", "shopping_cart_settings")
-
-	# for price list
-	countries = frappe.db.sql_list("select name from tabCountry")
-
-	for doctype in ("Price List", "Shipping Rule"):
-		for at in frappe.db.sql("""select name, parent, territory from `tabApplicable Territory` where
-			parenttype = %s """, doctype, as_dict=True):
-			if at.territory in countries:
-				parent = frappe.get_doc(doctype, at.parent)
-				if not parent.countries:
-					parent.append("countries", {"country": at.territory})
-				parent.save()
-
-
-	frappe.delete_doc("DocType", "Applicable Territory")
diff --git a/erpnext/patches/v6_4/__init__.py b/erpnext/patches/v6_4/__init__.py
deleted file mode 100644
index baffc48..0000000
--- a/erpnext/patches/v6_4/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v6_4/email_digest_update.py b/erpnext/patches/v6_4/email_digest_update.py
deleted file mode 100644
index 8342b7f..0000000
--- a/erpnext/patches/v6_4/email_digest_update.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-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")
diff --git a/erpnext/patches/v6_4/fix_duplicate_bins.py b/erpnext/patches/v6_4/fix_duplicate_bins.py
deleted file mode 100644
index 77d0527..0000000
--- a/erpnext/patches/v6_4/fix_duplicate_bins.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from erpnext.stock.stock_balance import repost_stock
-
-def execute():
-	bins = frappe.db.sql("""select item_code, warehouse, count(*) from `tabBin` 
-		group by item_code, warehouse having count(*) > 1""", as_dict=True)
-		
-	for d in bins:
-		try:
-			frappe.db.sql("delete from tabBin where item_code=%s and warehouse=%s", (d.item_code, d.warehouse))
-		
-			repost_stock(d.item_code, d.warehouse, allow_zero_rate=True, only_actual=False, only_bin=True)
-			
-			frappe.db.commit()
-		except:
-			frappe.db.rollback()
\ No newline at end of file
diff --git a/erpnext/patches/v6_4/fix_expense_included_in_valuation.py b/erpnext/patches/v6_4/fix_expense_included_in_valuation.py
deleted file mode 100644
index 7ed15ab..0000000
--- a/erpnext/patches/v6_4/fix_expense_included_in_valuation.py
+++ /dev/null
@@ -1,74 +0,0 @@
-# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import print_function, unicode_literals
-import frappe
-from frappe.utils import cstr
-
-def execute():
-	for company in frappe.db.sql("select name, expenses_included_in_valuation from tabCompany", as_dict=1):
-		frozen_date = get_frozen_date(company.name, company.expenses_included_in_valuation)
-
-		# Purchase Invoices after frozen date
-		# which are not against Receipt, but valuation related tax is there
-		pi_list = frappe.db.sql("""
-			select distinct pi.name
-			from `tabPurchase Invoice` pi, `tabPurchase Invoice Item` pi_item
-			where
-				pi.name = pi_item.parent
-				and pi.company = %s
-				and pi.posting_date > %s
-				and pi.docstatus = 1
-				and pi.is_opening = 'No'
-				and (pi_item.item_tax_amount is not null and pi_item.item_tax_amount > 0)
-				and (pi_item.purchase_receipt is null or pi_item.purchase_receipt = '')
-				and (pi_item.item_code is not null and pi_item.item_code != '')
-				and exists(select name from `tabItem` where name=pi_item.item_code and is_stock_item=1)
-		""", (company.name, frozen_date), as_dict=1)
-
-		for pi in pi_list:
-			# Check whether gle exists for Expenses Included in Valuation account against the PI
-			gle_for_expenses_included_in_valuation = frappe.db.sql("""select name from `tabGL Entry`
-				where voucher_type='Purchase Invoice' and voucher_no=%s and account=%s""",
-				(pi.name, company.expenses_included_in_valuation))
-
-			if gle_for_expenses_included_in_valuation:
-				print(pi.name)
-
-				frappe.db.sql("""delete from `tabGL Entry`
-					where voucher_type='Purchase Invoice' and voucher_no=%s""", pi.name)
-
-				purchase_invoice = frappe.get_doc("Purchase Invoice", pi.name)
-
-				# some old entries have missing expense accounts
-				if purchase_invoice.against_expense_account:
-					expense_account = purchase_invoice.against_expense_account.split(",")
-					if len(expense_account) == 1:
-						expense_account = expense_account[0]
-						for item in purchase_invoice.items:
-							if not item.expense_account:
-								item.db_set("expense_account", expense_account, update_modified=False)
-
-				purchase_invoice.make_gl_entries()
-
-def get_frozen_date(company, account):
-	# Accounting frozen upto
-	accounts_frozen_upto = frappe.db.get_single_value("Accounts Settings", "acc_frozen_upto")
-
-	# Last adjustment entry to correct Expenses Included in Valuation account balance
-	last_adjustment_entry = frappe.db.sql("""select posting_date from `tabGL Entry`
-		where account=%s and company=%s and voucher_type = 'Journal Entry'
-		order by posting_date desc limit 1""", (account, company))
-
-	last_adjustment_date = cstr(last_adjustment_entry[0][0]) if last_adjustment_entry else None
-
-	# Last period closing voucher
-	last_closing_entry = frappe.db.sql("""select posting_date from `tabGL Entry`
-		where company=%s and voucher_type = 'Period Closing Voucher'
-		order by posting_date desc limit 1""", company)
-
-	last_closing_date = cstr(last_closing_entry[0][0]) if last_closing_entry else None
-
-	frozen_date = max([accounts_frozen_upto, last_adjustment_date, last_closing_date])
-
-	return frozen_date or '1900-01-01'
diff --git a/erpnext/patches/v6_4/fix_journal_entries_due_to_reconciliation.py b/erpnext/patches/v6_4/fix_journal_entries_due_to_reconciliation.py
deleted file mode 100644
index b53412d..0000000
--- a/erpnext/patches/v6_4/fix_journal_entries_due_to_reconciliation.py
+++ /dev/null
@@ -1,53 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import print_function, unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype("Sales Invoice Advance")
-	frappe.reload_doctype("Purchase Invoice Advance")
-	
-	je_rows = frappe.db.sql("""
-		select name, parent, reference_type, reference_name, debit, credit
-		from `tabJournal Entry Account`
-		where docstatus=1 and date(modified) >= '2015-09-17'
-			and ((ifnull(debit_in_account_currency, 0)*exchange_rate != ifnull(debit, 0))
-			or (ifnull(credit_in_account_currency, 0)*exchange_rate != ifnull(credit, 0)))
-		order by parent
-	""", as_dict=True)
-
-	journal_entries = []
-	
-	for d in je_rows:
-		if d.parent not in journal_entries:
-			journal_entries.append(d.parent)
-
-		is_advance_entry=None
-		if d.reference_type in ("Sales Invoice", "Purchase Invoice") and d.reference_name:
-			is_advance_entry = frappe.db.sql("""select name from `tab{0}` 
-				where reference_name=%s and reference_row=%s 
-					and ifnull(allocated_amount, 0) > 0 and docstatus=1"""
-				.format(d.reference_type + " Advance"), (d.parent, d.name))
-				
-		if is_advance_entry or not (d.debit or d.credit):
-			frappe.db.sql("""
-				update `tabJournal Entry Account`
-				set	debit=debit_in_account_currency*exchange_rate,
-					credit=credit_in_account_currency*exchange_rate
-				where name=%s""", d.name)
-		else:
-			frappe.db.sql("""
-				update `tabJournal Entry Account`
-				set debit_in_account_currency=debit/exchange_rate,
-					credit_in_account_currency=credit/exchange_rate
-				where name=%s""", d.name)
-
-	for d in journal_entries:
-		print(d)
-		# delete existing gle
-		frappe.db.sql("delete from `tabGL Entry` where voucher_type='Journal Entry' and voucher_no=%s", d)
-
-		# repost gl entries
-		je = frappe.get_doc("Journal Entry", d)
-		je.make_gl_entries()
\ No newline at end of file
diff --git a/erpnext/patches/v6_4/fix_modified_in_sales_order_and_purchase_order.py b/erpnext/patches/v6_4/fix_modified_in_sales_order_and_purchase_order.py
deleted file mode 100644
index f27489e..0000000
--- a/erpnext/patches/v6_4/fix_modified_in_sales_order_and_purchase_order.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	for doctype in ("Sales Order", "Purchase Order"):
-		data = frappe.db.sql("""select parent, modified_by, modified
-			from `tab{doctype} Item` where docstatus=1 group by parent""".format(doctype=doctype), as_dict=True)
-		for item in data:
-			frappe.db.sql("""update `tab{doctype}` set modified_by=%(modified_by)s, modified=%(modified)s
-				where name=%(parent)s""".format(doctype=doctype), item)
diff --git a/erpnext/patches/v6_4/fix_sales_order_maintenance_status.py b/erpnext/patches/v6_4/fix_sales_order_maintenance_status.py
deleted file mode 100644
index 50aa9e5..0000000
--- a/erpnext/patches/v6_4/fix_sales_order_maintenance_status.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	for doc in frappe.get_all("Sales Order", filters={"docstatus": 1,
-		"order_type": "Maintenance"}):
-		doc = frappe.get_doc("Sales Order", doc.name)
-		doc.set_status(update=True)
diff --git a/erpnext/patches/v6_4/fix_status_in_sales_and_purchase_order.py b/erpnext/patches/v6_4/fix_status_in_sales_and_purchase_order.py
deleted file mode 100644
index 746a990..0000000
--- a/erpnext/patches/v6_4/fix_status_in_sales_and_purchase_order.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	for doctype in ("Sales Order", "Purchase Order"):
-		for doc in frappe.get_all(doctype, filters={"docstatus": 1}):
-			doc = frappe.get_doc(doctype, doc.name)
-			doc.set_status(update=True)
diff --git a/erpnext/patches/v6_4/make_image_thumbnail.py b/erpnext/patches/v6_4/make_image_thumbnail.py
deleted file mode 100644
index 2c86e8a..0000000
--- a/erpnext/patches/v6_4/make_image_thumbnail.py
+++ /dev/null
@@ -1,15 +0,0 @@
-from __future__ import print_function, unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype("File")
-	frappe.reload_doctype("Item")
-	for item in frappe.get_all("Item", fields=("name", "website_image", "thumbnail")):
-		if item.website_image and not item.thumbnail:
-			item_doc = frappe.get_doc("Item", item.name)
-			try:
-				item_doc.make_thumbnail()
-				if item_doc.thumbnail:
-					item_doc.db_set("thumbnail", item_doc.thumbnail, update_modified=False)
-			except Exception:
-				print("Unable to make thumbnail for {0}".format(item.website_image.encode("utf-8")))
diff --git a/erpnext/patches/v6_4/repost_gle_for_journal_entries_where_reference_name_missing.py b/erpnext/patches/v6_4/repost_gle_for_journal_entries_where_reference_name_missing.py
deleted file mode 100644
index 1319b53..0000000
--- a/erpnext/patches/v6_4/repost_gle_for_journal_entries_where_reference_name_missing.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import print_function, unicode_literals
-import frappe
-
-def execute():
-	je_list = frappe.db.sql_list("""select distinct parent from `tabJournal Entry Account` je
-		where docstatus=1 and ifnull(reference_name, '') !='' and creation > '2015-03-01'
-			and not exists(select name from `tabGL Entry` 
-				where voucher_type='Journal Entry' and voucher_no=je.parent 
-				and against_voucher_type=je.reference_type 
-				and against_voucher=je.reference_name)""")
-
-	for d in je_list:
-		print(d)
-		
-		# delete existing gle
-		frappe.db.sql("delete from `tabGL Entry` where voucher_type='Journal Entry' and voucher_no=%s", d)
-
-		# repost gl entries
-		je = frappe.get_doc("Journal Entry", d)
-		je.make_gl_entries()
\ No newline at end of file
diff --git a/erpnext/patches/v6_4/round_status_updater_percentages.py b/erpnext/patches/v6_4/round_status_updater_percentages.py
deleted file mode 100644
index 900e906..0000000
--- a/erpnext/patches/v6_4/round_status_updater_percentages.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	for doctype, fieldname in (
-		("Sales Order", "per_billed"),
-		("Sales Order", "per_delivered"),
-		("Delivery Note", "per_installed"),
-		("Purchase Order", "per_billed"),
-		("Purchase Order", "per_received"),
-		("Material Request", "per_ordered"),
-	):
-		frappe.db.sql("""update `tab{doctype}` set `{fieldname}`=round(`{fieldname}`, 2)""".format(
-			doctype=doctype, fieldname=fieldname))
diff --git a/erpnext/patches/v6_4/set_user_in_contact.py b/erpnext/patches/v6_4/set_user_in_contact.py
deleted file mode 100644
index 7e8a6ee..0000000
--- a/erpnext/patches/v6_4/set_user_in_contact.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype("Contact")
-	frappe.db.sql("""update tabContact, tabUser set tabContact.user = tabUser.name
-		where tabContact.email_id = tabUser.email""")
diff --git a/erpnext/patches/v6_5/__init__.py b/erpnext/patches/v6_5/__init__.py
deleted file mode 100644
index baffc48..0000000
--- a/erpnext/patches/v6_5/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v6_5/show_in_website_for_template_item.py b/erpnext/patches/v6_5/show_in_website_for_template_item.py
deleted file mode 100644
index af6e830..0000000
--- a/erpnext/patches/v6_5/show_in_website_for_template_item.py
+++ /dev/null
@@ -1,15 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-import frappe.website.render
-
-def execute():
-	for item_code in frappe.db.sql_list("""select distinct variant_of from `tabItem`
-		where variant_of is not null and variant_of !='' and show_in_website=1"""):
-
-		item = frappe.get_doc("Item", item_code)
-		item.db_set("show_in_website", 1, update_modified=False)
-
-		item.make_route()
-		item.db_set("route", item.route, update_modified=False)
-
-	frappe.website.render.clear_cache()
diff --git a/erpnext/patches/v6_6/__init__.py b/erpnext/patches/v6_6/__init__.py
deleted file mode 100644
index baffc48..0000000
--- a/erpnext/patches/v6_6/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v6_6/fix_website_image.py b/erpnext/patches/v6_6/fix_website_image.py
deleted file mode 100644
index cc3e2d8..0000000
--- a/erpnext/patches/v6_6/fix_website_image.py
+++ /dev/null
@@ -1,32 +0,0 @@
-from __future__ import print_function, unicode_literals
-import frappe
-from frappe.utils import encode
-
-def execute():
-	"""Fix the File records created via item.py even if the website_image file didn't exist"""
-	for item in frappe.db.sql_list("""select name from `tabItem`
-		where website_image is not null and website_image != ''
-			and website_image like '/files/%'
-			and exists (
-				select name from `tabFile`
-					where attached_to_doctype='Item'
-					and attached_to_name=`tabItem`.name
-					and file_url=`tabItem`.website_image
-					and (file_name is null or file_name = '')
-				)"""):
-
-		item = frappe.get_doc("Item", item)
-		file = frappe.get_doc("File", {
-			"attached_to_doctype": "Item",
-			"attached_to_name": item.name,
-			"file_url": item.website_image
-		})
-
-		try:
-			file.validate_file()
-		except IOError:
-			print(encode(item.website_image), "does not exist")
-			file.delete()
-			item.db_set("website_image", None, update_modified=False)
-
-
diff --git a/erpnext/patches/v6_6/remove_fiscal_year_from_leave_allocation.py b/erpnext/patches/v6_6/remove_fiscal_year_from_leave_allocation.py
deleted file mode 100644
index 11c582f..0000000
--- a/erpnext/patches/v6_6/remove_fiscal_year_from_leave_allocation.py
+++ /dev/null
@@ -1,17 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype("Leave Allocation")
-	if frappe.db.has_column("Leave Allocation", "fiscal_year"):
-		for leave_allocation in frappe.db.sql("select name, fiscal_year from `tabLeave Allocation`", as_dict=True):
-			dates = frappe.db.get_value("Fiscal Year", leave_allocation["fiscal_year"],
-				["year_start_date", "year_end_date"])
-
-			if dates:
-				year_start_date, year_end_date = dates
-
-				frappe.db.sql("""update `tabLeave Allocation`
-					set from_date=%s, to_date=%s where name=%s""",
-					(year_start_date, year_end_date, leave_allocation["name"]))
-
diff --git a/erpnext/patches/v6_8/__init__.py b/erpnext/patches/v6_8/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/patches/v6_8/__init__.py
+++ /dev/null
diff --git a/erpnext/patches/v6_8/make_webform_standard.py b/erpnext/patches/v6_8/make_webform_standard.py
deleted file mode 100644
index 2cc16a2..0000000
--- a/erpnext/patches/v6_8/make_webform_standard.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	pass
-
-	# done via fixtures
-
-	# 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()
diff --git a/erpnext/patches/v6_8/move_drop_ship_to_po_items.py b/erpnext/patches/v6_8/move_drop_ship_to_po_items.py
deleted file mode 100644
index 7184dee..0000000
--- a/erpnext/patches/v6_8/move_drop_ship_to_po_items.py
+++ /dev/null
@@ -1,43 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-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 update_per_received(po):
-	frappe.db.sql(""" update `tabPurchase Order`
-				set per_received = round((select sum(if(qty > ifnull(received_qty, 0),
-					ifnull(received_qty, 0), qty)) / sum(qty) *100
-				from `tabPurchase Order Item`
-				where parent = %(name)s), 2)
-			where name = %(name)s """, {"name": po.name})
-
-def update_per_billed(po):
-	frappe.db.sql(""" update `tabPurchase Order`
-				set per_billed = round((select sum( if(amount > ifnull(billed_amt, 0),
-					ifnull(billed_amt, 0), amount)) / sum(amount) *100
-				from `tabPurchase Order Item`
-				where parent = %(name)s), 2)
-			where name = %(name)s """, {"name": po.name})
-
-
diff --git a/erpnext/patches/v7_0/__init__.py b/erpnext/patches/v7_0/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/patches/v7_0/__init__.py
+++ /dev/null
diff --git a/erpnext/patches/v7_0/calculate_total_costing_amount.py b/erpnext/patches/v7_0/calculate_total_costing_amount.py
deleted file mode 100644
index 8ed60a2..0000000
--- a/erpnext/patches/v7_0/calculate_total_costing_amount.py
+++ /dev/null
@@ -1,18 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import flt
-
-def execute():
-	frappe.reload_doc('projects', 'doctype', 'timesheet')
-
-	for data in frappe.get_all('Timesheet', fields=["name, total_costing_amount"],
-		filters = [["docstatus", "<", "2"]]):
-		if flt(data.total_costing_amount) == 0.0:
-			ts = frappe.get_doc('Timesheet', data.name)
-			ts.update_cost()
-			ts.calculate_total_amounts()
-			ts.flags.ignore_validate = True
-			ts.flags.ignore_mandatory = True
-			ts.flags.ignore_validate_update_after_submit = True
-			ts.flags.ignore_links = True
-			ts.save()
diff --git a/erpnext/patches/v7_0/convert_timelog_to_timesheet.py b/erpnext/patches/v7_0/convert_timelog_to_timesheet.py
deleted file mode 100644
index 8c60b5b..0000000
--- a/erpnext/patches/v7_0/convert_timelog_to_timesheet.py
+++ /dev/null
@@ -1,69 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc('projects', 'doctype', 'task')
-	frappe.reload_doc('projects', 'doctype', 'timesheet')
-	if not frappe.db.table_exists("Time Log"):
-		return
-
-	from erpnext.manufacturing.doctype.work_order.work_order \
-		import make_timesheet, add_timesheet_detail
-
-	for data in frappe.db.sql("select * from `tabTime Log`", as_dict=1):
-		if data.task:
-			company = frappe.db.get_value("Task", data.task, "company")
-		elif data.work_order:
-			company = frappe.db.get_value("Work Order", data.work_order, "company")
-		else:
-			company = frappe.db.get_single_value('Global Defaults', 'default_company')
-		
-		time_sheet = make_timesheet(data.work_order, company)
-		args = get_timelog_data(data)
-		add_timesheet_detail(time_sheet, args)
-		if data.docstatus == 2:
-			time_sheet.docstatus = 0
-		else:
-			time_sheet.docstatus = data.docstatus
-		time_sheet.employee = data.employee
-		time_sheet.note = data.note
-		time_sheet.company = company
-
-		time_sheet.set_status()
-		time_sheet.set_dates()
-		time_sheet.update_cost()
-		time_sheet.calculate_total_amounts()
-		time_sheet.flags.ignore_validate = True
-		time_sheet.flags.ignore_links = True
-		time_sheet.save(ignore_permissions=True)
-
-		# To ignore validate_mandatory_fields function
-		if data.docstatus == 1:
-			time_sheet.db_set("docstatus", 1)
-			for d in time_sheet.get("time_logs"):
-				d.db_set("docstatus", 1)
-			time_sheet.update_work_order(time_sheet.name)
-			time_sheet.update_task_and_project()
-		if data.docstatus == 2:
-			time_sheet.db_set("docstatus", 2)
-			for d in time_sheet.get("time_logs"):
-				d.db_set("docstatus", 2)
-
-def get_timelog_data(data):
-	return {
-		'is_billable': data.billable,
-		'from_time': data.from_time,
-		'hours': data.hours,
-		'to_time': data.to_time,
-		'project': data.project,
-		'task': data.task,
-		'activity_type': data.activity_type,
-		'operation': data.operation,
-		'operation_id': data.operation_id,
-		'workstation': data.workstation,
-		'completed_qty': data.completed_qty,
-		'billing_rate': data.billing_rate,
-		'billing_amount': data.billing_amount,
-		'costing_rate': data.costing_rate,
-		'costing_amount': data.costing_amount
-	}
diff --git a/erpnext/patches/v7_0/convert_timelogbatch_to_timesheet.py b/erpnext/patches/v7_0/convert_timelogbatch_to_timesheet.py
deleted file mode 100644
index e78f163..0000000
--- a/erpnext/patches/v7_0/convert_timelogbatch_to_timesheet.py
+++ /dev/null
@@ -1,32 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import cint
-
-def execute():
-	if not frappe.db.exists("DocType", "Time Log Batch"):
-		return
-
-	from erpnext.manufacturing.doctype.work_order.work_order import add_timesheet_detail
-
-	for tlb in frappe.get_all('Time Log Batch', fields=["*"], 
-		filters = [["docstatus", "<", "2"]]):
-		time_sheet = frappe.new_doc('Timesheet')
-		time_sheet.employee= ""
-		time_sheet.company = frappe.db.get_single_value('Global Defaults', 'default_company')
-		time_sheet.sales_invoice = tlb.sales_invoice
-
-		for data in frappe.get_all('Time Log Batch Detail', fields=["*"],
-			filters = {'parent': tlb.name}):
-			args = get_timesheet_data(data)
-			add_timesheet_detail(time_sheet, args)
-
-		time_sheet.docstatus = tlb.docstatus
-		time_sheet.flags.ignore_links = True
-		time_sheet.save(ignore_permissions=True)
-
-def get_timesheet_data(data):
-	from erpnext.patches.v7_0.convert_timelog_to_timesheet import get_timelog_data
-
-	time_log = frappe.get_all('Time Log', fields=["*"], filters = {'name': data.time_log})
-	if time_log:
-		return get_timelog_data(time_log[0])
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/create_budget_record.py b/erpnext/patches/v7_0/create_budget_record.py
deleted file mode 100644
index fd8bec9..0000000
--- a/erpnext/patches/v7_0/create_budget_record.py
+++ /dev/null
@@ -1,57 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-from erpnext.accounts.doctype.budget.budget import DuplicateBudgetError
-
-def execute():
-	frappe.reload_doc("accounts", "doctype", "budget")
-	frappe.reload_doc("accounts", "doctype", "budget_account")
-
-	existing_budgets = frappe.db.sql("""
-		select
-			cc.name, cc.company, cc.distribution_id,
-			budget.account, budget.budget_allocated, budget.fiscal_year
-		from
-			`tabCost Center` cc, `tabBudget Detail` budget
-		where
-			cc.name=budget.parent
-	""", as_dict=1)
-
-	actions = {}
-	for d in frappe.db.sql("select name, yearly_bgt_flag, monthly_bgt_flag from tabCompany", as_dict=1):
-		actions.setdefault(d.name, d)
-
-	budget_records = []
-	for d in existing_budgets:
-		budget = frappe.db.get_value("Budget",
-			{"cost_center": d.name, "fiscal_year": d.fiscal_year, "company": d.company})
-
-		if not budget:
-			budget = frappe.new_doc("Budget")
-			budget.cost_center = d.name
-			budget.fiscal_year = d.fiscal_year
-			budget.monthly_distribution = d.distribution_id
-			budget.company = d.company
-			if actions[d.company]["yearly_bgt_flag"]:
-				budget.action_if_annual_budget_exceeded = actions[d.company]["yearly_bgt_flag"]
-			if actions[d.company]["monthly_bgt_flag"]:
-				budget.action_if_accumulated_monthly_budget_exceeded = actions[d.company]["monthly_bgt_flag"]
-		else:
-			budget = frappe.get_doc("Budget", budget)
-
-		budget.append("accounts", {
-			"account": d.account,
-			"budget_amount": d.budget_allocated
-		})
-
-		try:
-			budget.insert()
-			budget_records.append(budget)
-		except DuplicateBudgetError:
-			pass
-
-	for budget in budget_records:
-		budget.submit()
-
-	if frappe.db.get_value("DocType", "Budget Detail"):
-		frappe.delete_doc("DocType", "Budget Detail")
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/create_warehouse_nestedset.py b/erpnext/patches/v7_0/create_warehouse_nestedset.py
deleted file mode 100644
index 1c9fc32..0000000
--- a/erpnext/patches/v7_0/create_warehouse_nestedset.py
+++ /dev/null
@@ -1,128 +0,0 @@
-
-from __future__ import unicode_literals
-import frappe, erpnext
-from frappe import _
-from frappe.utils import cint
-from frappe.utils.nestedset import rebuild_tree
-
-def execute():
-	"""
-	Patch Reference:
-		1. check whether warehouse is associated to company or not
-		2. if warehouse is associated with company
-			a. create warehouse group for company
-			b. set warehouse group as parent to other warehouses and set is_group as 0
-		3. if warehouses is not associated with company
-			a. get distinct companies from stock ledger entries
-			b. if sle have only company,
-				i. set default company to all warehouse
-				ii. repeat 2.a and 2.b
-			c. if have multiple companies,
-				i. create group warehouse without company
-				ii. repeat 2.b
-	"""
-	
-	frappe.reload_doc("stock", "doctype", "warehouse")
-
-	if check_is_warehouse_associated_with_company():
-		for company in frappe.get_all("Company", fields=["name", "abbr"]):
-			make_warehouse_nestedset(company)
-	else:
-		sle_against_companies = frappe.db.sql_list("""select distinct company from `tabStock Ledger Entry`""")
-
-		if len(sle_against_companies) == 1:
-			company = frappe.get_cached_value('Company',  sle_against_companies[0],  
-				fieldname=["name", "abbr"], as_dict=1)
-			set_company_to_warehouse(company.name)
-			make_warehouse_nestedset(company)
-
-		elif len(sle_against_companies) > 1:
-			make_warehouse_nestedset()
-
-def check_is_warehouse_associated_with_company():
-	warehouse_associcated_with_company = False
-
-	for warehouse in frappe.get_all("Warehouse", fields=["name", "company"]):
-		if warehouse.company:
-			warehouse_associcated_with_company = True
-
-	return warehouse_associcated_with_company
-
-def make_warehouse_nestedset(company=None):
-	validate_parent_account_for_warehouse(company)
-	stock_account_group = get_stock_account_group(company.name)
-	enable_perpetual_inventory = cint(erpnext.is_perpetual_inventory_enabled(company.name)) or 0
-	if not stock_account_group and enable_perpetual_inventory:
-		return
-
-	if company:
-		warehouse_group = "{0} - {1}".format(_("All Warehouses"), company.abbr)
-		ignore_mandatory = False
-	else:
-		warehouse_group = _("All Warehouses")
-		ignore_mandatory = True
-
-	if not frappe.db.get_value("Warehouse", warehouse_group):
-		create_default_warehouse_group(company, stock_account_group, ignore_mandatory)
-
-	set_parent_to_warehouse(warehouse_group, company)
-	if enable_perpetual_inventory:
-		set_parent_to_warehouse_account(company)
-
-def validate_parent_account_for_warehouse(company=None):
-	if not company:
-		return
-
-	if cint(erpnext.is_perpetual_inventory_enabled(company.name)):
-		parent_account = frappe.db.sql("""select name from tabAccount
-			where account_type='Stock' and company=%s and is_group=1
-			and (warehouse is null or warehouse = '')""", company.name)
-
-		if not parent_account:
-			current_parent_accounts_for_warehouse = frappe.db.sql("""select parent_account from tabAccount
-				where account_type='Warehouse' and (warehouse is not null or warehouse != '') """)
-
-			if current_parent_accounts_for_warehouse:
-				frappe.db.set_value("Account", current_parent_accounts_for_warehouse[0][0], "account_type", "Stock")
-
-def create_default_warehouse_group(company=None, stock_account_group=None, ignore_mandatory=False):
-	wh = frappe.get_doc({
-		"doctype": "Warehouse",
-		"warehouse_name": _("All Warehouses"),
-		"is_group": 1,
-		"company": company.name if company else "",
-		"parent_warehouse": ""
-	})
-
-	if ignore_mandatory:
-		wh.flags.ignore_mandatory = ignore_mandatory
-
-	wh.insert(ignore_permissions=True)
-
-def set_parent_to_warehouse(warehouse_group, company=None):
-	frappe.db.sql(""" update tabWarehouse set parent_warehouse = %s, is_group = 0
-		where (is_group = 0 or is_group is null or is_group = '') and ifnull(company, '') = %s
-		""",(warehouse_group, company.name if company else ""))
-
-	rebuild_tree("Warehouse", "parent_warehouse")
-
-def set_parent_to_warehouse_account(company):
-	frappe.db.sql(""" update tabAccount set parent_account = %s
-		where is_group = 0 and account_type = "Warehouse"
-		and (warehouse is not null or warehouse != '') and company = %s
-		""",("{0} - {1}".format(_("All Warehouses"), company.abbr), company.name))
-
-	rebuild_tree("Account", "parent_account")
-
-def set_company_to_warehouse(company):
-	frappe.db.sql("update tabWahouse set company=%s", company)
-
-def get_stock_account_group(company):
-	stock_account_group = frappe.db.get_all('Account', filters = {'company': company, 'is_group': 1,
-		'account_type': 'Stock', 'root_type': 'Asset'}, limit=1)
-			
-	if not stock_account_group:
-		stock_account_group = frappe.db.get_all('Account', filters = {'company': company, 'is_group': 1,
-				'parent_account': '', 'root_type': 'Asset'}, limit=1)
-
-	return stock_account_group[0].name if stock_account_group else None
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/fix_duplicate_icons.py b/erpnext/patches/v7_0/fix_duplicate_icons.py
deleted file mode 100644
index 9f44202..0000000
--- a/erpnext/patches/v7_0/fix_duplicate_icons.py
+++ /dev/null
@@ -1,27 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-from frappe.desk.doctype.desktop_icon.desktop_icon import (sync_desktop_icons,
-	get_desktop_icons, set_hidden)
-from erpnext.patches.v7_0.migrate_schools_to_erpnext import reload_doctypes_for_schools_icons
-
-def execute():
-	'''hide new style icons if old ones are set'''
-	frappe.reload_doc('desk', 'doctype', 'desktop_icon')
-
-	reload_doctypes_for_schools_icons()
-
-	sync_desktop_icons()
-
-	for user in frappe.get_all('User', filters={'user_type': 'System User'}):
-		desktop_icons = get_desktop_icons(user.name)
-		icons_dict = {}
-		for d in desktop_icons:
-			if not d.hidden:
-				icons_dict[d.module_name] = d
-
-		for key in (('Selling', 'Customer'), ('Stock', 'Item'), ('Buying', 'Supplier'),
-			('HR', 'Employee'), ('CRM', 'Lead'), ('Support', 'Issue'), ('Projects', 'Project')):
-			if key[0] in icons_dict and key[1] in icons_dict:
-				set_hidden(key[1], user.name, 1)
-
diff --git a/erpnext/patches/v7_0/fix_nonwarehouse_ledger_gl_entries_for_transactions.py b/erpnext/patches/v7_0/fix_nonwarehouse_ledger_gl_entries_for_transactions.py
deleted file mode 100644
index 2bc0971..0000000
--- a/erpnext/patches/v7_0/fix_nonwarehouse_ledger_gl_entries_for_transactions.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import print_function, unicode_literals
-import frappe, erpnext
-
-def execute():
-	frappe.reload_doctype("Account")
-
-	warehouses = frappe.db.sql("""select name, company from tabAccount
-		where account_type = 'Stock' and is_group = 0
-		and (warehouse is null or warehouse = '')""", as_dict=1)
-	warehouses = [d.name for d in warehouses if erpnext.is_perpetual_inventory_enabled(d.company)]
-
-	if len(warehouses) > 0:
-		warehouses = set_warehouse_for_stock_account(warehouses)
-		if not warehouses:
-			return
-
-		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 as e:
-				print(frappe.get_traceback())
-				rejected.append([voucher_type, voucher_no])
-				frappe.db.rollback()
-
-		print(rejected)
-
-def set_warehouse_for_stock_account(warehouse_account):
-	for account in warehouse_account:
-		if frappe.db.exists('Warehouse', account):
-			frappe.db.set_value("Account", account, "warehouse", account)
-		else:
-			warehouse_account.remove(account)
-
-	return warehouse_account
diff --git a/erpnext/patches/v7_0/make_guardian.py b/erpnext/patches/v7_0/make_guardian.py
deleted file mode 100644
index 519969b..0000000
--- a/erpnext/patches/v7_0/make_guardian.py
+++ /dev/null
@@ -1,37 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	if frappe.db.exists("DocType", "Student"):
-		student_table_cols = frappe.db.get_table_columns("Student")
-		if "father_name" in student_table_cols:
-
-			# 'Schools' module changed to the 'Education'
-			# frappe.reload_doc("schools", "doctype", "student")
-			# frappe.reload_doc("schools", "doctype", "guardian")
-			# frappe.reload_doc("schools", "doctype", "guardian_interest")
-
-			frappe.reload_doc("education", "doctype", "student")
-			frappe.reload_doc("education", "doctype", "guardian")
-			frappe.reload_doc("education", "doctype", "guardian_interest")
-			frappe.reload_doc("hr", "doctype", "interest")
-		
-			fields = ["name", "father_name", "mother_name"]
-			
-			if "father_email_id" in student_table_cols:
-				fields += ["father_email_id", "mother_email_id"]
-	
-			students = frappe.get_all("Student", fields)
-			for stud in students:
-				if stud.father_name:
-					make_guardian(stud.father_name, stud.name, stud.father_email_id)
-				if stud.mother_name:
-					make_guardian(stud.mother_name, stud.name, stud.mother_email_id)
-		
-def make_guardian(name, student, email=None):
-	frappe.get_doc({
-		'doctype': 'Guardian',
-		'guardian_name': name,
-		'email': email,
-		'student': student
-	}).insert()
diff --git a/erpnext/patches/v7_0/make_is_group_fieldtype_as_check.py b/erpnext/patches/v7_0/make_is_group_fieldtype_as_check.py
deleted file mode 100644
index ba82e86..0000000
--- a/erpnext/patches/v7_0/make_is_group_fieldtype_as_check.py
+++ /dev/null
@@ -1,18 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	for doctype in ["Sales Person", "Customer Group", "Item Group", "Territory"]:
-		
-		# convert to 1 or 0
-		frappe.db.sql("update `tab{doctype}` set is_group = if(is_group='Yes',1,0) "
-			.format(doctype=doctype))
-
-		frappe.db.commit()
-
-		# alter fields to int
-				
-		frappe.db.sql("alter table `tab{doctype}` change is_group is_group int(1) default '0'"
-			.format(doctype=doctype))
-
-		frappe.reload_doctype(doctype)
diff --git a/erpnext/patches/v7_0/merge_account_type_stock_and_warehouse_to_stock.py b/erpnext/patches/v7_0/merge_account_type_stock_and_warehouse_to_stock.py
deleted file mode 100644
index 02808a7..0000000
--- a/erpnext/patches/v7_0/merge_account_type_stock_and_warehouse_to_stock.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc("accounts", "doctype", "account")
-	
-	frappe.db.sql(""" update tabAccount set account_type = "Stock"
-		where account_type = "Warehouse" """)
-	
-	frappe.db.commit()
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/migrate_mode_of_payments_v6_to_v7.py b/erpnext/patches/v7_0/migrate_mode_of_payments_v6_to_v7.py
deleted file mode 100644
index e0e3f70..0000000
--- a/erpnext/patches/v7_0/migrate_mode_of_payments_v6_to_v7.py
+++ /dev/null
@@ -1,38 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc('accounts', 'doctype', 'sales_invoice_timesheet')
-	frappe.reload_doc('accounts', 'doctype', 'sales_invoice_payment')
-	frappe.reload_doc('accounts', 'doctype', 'mode_of_payment')
-
-	count = 0
-	for data in frappe.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 frappe.db.exists("Mode of Payment", "Cash"):
-			mop = frappe.new_doc("Mode of Payment")
-			mop.mode_of_payment = "Cash"
-			mop.type = "Cash"
-			mop.save()
-		
-		si_doc = frappe.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': frappe.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:
-			frappe.db.commit()
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/migrate_schools_to_erpnext.py b/erpnext/patches/v7_0/migrate_schools_to_erpnext.py
deleted file mode 100644
index b72bc13..0000000
--- a/erpnext/patches/v7_0/migrate_schools_to_erpnext.py
+++ /dev/null
@@ -1,30 +0,0 @@
-from __future__ import unicode_literals
-import frappe, os
-from frappe.installer import remove_from_installed_apps
-
-def execute():
-	reload_doctypes_for_schools_icons()
-
-	frappe.reload_doc('website', 'doctype', 'portal_settings')
-	frappe.reload_doc('website', 'doctype', 'portal_menu_item')
-	frappe.reload_doc('buying', 'doctype', 'request_for_quotation')
-
-	if 'schools' in frappe.get_installed_apps():
-		if not frappe.db.exists('Module Def', 'Schools') and frappe.db.exists('Module Def', 'Academics'):
-
-			# 'Schools' module changed to the 'Education'
-			# frappe.rename_doc("Module Def", "Academics", "Schools")
-
-			frappe.rename_doc("Module Def", "Academics", "Education")
-
-		remove_from_installed_apps("schools")
-
-def reload_doctypes_for_schools_icons():
-	# 'Schools' module changed to the 'Education'
-	# base_path = frappe.get_app_path('erpnext', 'schools', 'doctype')
-
-	base_path = frappe.get_app_path('erpnext', 'education', 'doctype')
-	for doctype in os.listdir(base_path):
-		if os.path.exists(os.path.join(base_path, doctype, doctype + '.json')) \
-			and doctype not in ("fee_component", "assessment", "assessment_result"):
-			frappe.reload_doc('education', 'doctype', doctype)
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/move_timelogbatch_from_salesinvoiceitem_to_salesinvoicetimesheet.py b/erpnext/patches/v7_0/move_timelogbatch_from_salesinvoiceitem_to_salesinvoicetimesheet.py
deleted file mode 100644
index 998c4b6..0000000
--- a/erpnext/patches/v7_0/move_timelogbatch_from_salesinvoiceitem_to_salesinvoicetimesheet.py
+++ /dev/null
@@ -1,17 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc('accounts', 'doctype', 'sales_invoice')
-	frappe.reload_doc('accounts', 'doctype', 'sales_invoice_payment')
-	for time_sheet in frappe.db.sql(""" select sales_invoice, name, total_billable_amount from `tabTimesheet`
-		where sales_invoice is not null and docstatus < 2""", as_dict=True):
-		if not frappe.db.exists('Sales Invoice', time_sheet.sales_invoice):
-			continue
-		si_doc = frappe.get_doc('Sales Invoice', time_sheet.sales_invoice)
-		ts = si_doc.append('timesheets',{})
-		ts.time_sheet = time_sheet.name
-		ts.billing_amount = time_sheet.total_billable_amount
-		ts.db_update()
-		si_doc.calculate_billing_amount_from_timesheet()
-		si_doc.db_set("total_billing_amount", si_doc.total_billing_amount, update_modified = False)
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/po_status_issue_for_pr_return.py b/erpnext/patches/v7_0/po_status_issue_for_pr_return.py
deleted file mode 100644
index 910814f..0000000
--- a/erpnext/patches/v7_0/po_status_issue_for_pr_return.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	parent_list = []
-	count = 0
-
-	frappe.reload_doc('stock', 'doctype', 'purchase_receipt')
-	frappe.reload_doc('stock', 'doctype', 'purchase_receipt_item')
-
-	for data in frappe.db.sql("""
-		select
-			`tabPurchase Receipt Item`.purchase_order, `tabPurchase Receipt Item`.name,
-			`tabPurchase Receipt Item`.item_code, `tabPurchase Receipt Item`.idx,
-			`tabPurchase Receipt Item`.parent
-		from
-			`tabPurchase Receipt Item`, `tabPurchase Receipt`
-		where
-			`tabPurchase Receipt Item`.parent = `tabPurchase Receipt`.name and
-			`tabPurchase Receipt Item`.purchase_order_item is null and
-			`tabPurchase Receipt Item`.purchase_order is not null and
-			`tabPurchase Receipt`.is_return = 1""", as_dict=1):
-			name = frappe.db.get_value('Purchase Order Item',
-				{'item_code': data.item_code, 'parent': data.purchase_order, 'idx': data.idx}, 'name')
-
-			if name:
-				frappe.db.set_value('Purchase Receipt Item', data.name, 'purchase_order_item', name, update_modified=False)
-				parent_list.append(data.parent)
-
-			count +=1
-			if count % 200 == 0:
-				frappe.db.commit()
-
-	if len(parent_list) > 0:
-		for parent in set(parent_list):
-			doc = frappe.get_doc('Purchase Receipt', parent)
-			doc.update_qty(update_modified=False)
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/re_route.py b/erpnext/patches/v7_0/re_route.py
deleted file mode 100644
index 3cec6f3..0000000
--- a/erpnext/patches/v7_0/re_route.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from __future__ import unicode_literals
-from frappe.patches.v7_0.re_route import update_routes
-
-def execute():
-	update_routes(['Item', 'Item Group', 'Sales Partner', 'Job Opening'])
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/remove_administrator_role_in_doctypes.py b/erpnext/patches/v7_0/remove_administrator_role_in_doctypes.py
deleted file mode 100644
index 8c87c4e..0000000
--- a/erpnext/patches/v7_0/remove_administrator_role_in_doctypes.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.db.sql("""delete from tabDocPerm where role="Administrator" and parent in 
-		("Payment Gateway", "Payment Gateway Account", "Payment Request", "Academic Term", "Academic Year", "Course",
-		"Course Schedule", "Examination", "Fee Category", "Fee Structure", "Fees", "Instructor", "Program", "Program Enrollment Tool",
-		"Room", "Scheduling Tool", "Student", "Student Applicant", "Student Attendance", "Student Group", "Student Group Creation Tool")
-	""")
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/remove_doctypes_and_reports.py b/erpnext/patches/v7_0/remove_doctypes_and_reports.py
deleted file mode 100644
index 2356e2f..0000000
--- a/erpnext/patches/v7_0/remove_doctypes_and_reports.py
+++ /dev/null
@@ -1,27 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	if frappe.db.table_exists("Time Log"):
-		frappe.db.sql("""delete from `tabDocType`
-			where name in('Time Log Batch', 'Time Log Batch Detail', 'Time Log')""")
-
-	frappe.db.sql("""delete from `tabDocField` where parent in ('Time Log', 'Time Log Batch')""")
-	frappe.db.sql("""update `tabClient Script` set dt = 'Timesheet' where dt = 'Time Log'""")
-
-	for data in frappe.db.sql(""" select label, fieldname from  `tabCustom Field` where dt = 'Time Log'""", as_dict=1):
-		custom_field = frappe.get_doc({
-			'doctype': 'Custom Field',
-			'label': data.label,
-			'dt': 'Timesheet Detail',
-			'fieldname': data.fieldname,
-			'fieldtype': data.fieldtype or "Data"
-		}).insert(ignore_permissions=True)
-
-	frappe.db.sql("""delete from `tabCustom Field` where dt = 'Time Log'""")
-	frappe.reload_doc('projects', 'doctype', 'timesheet')
-	frappe.reload_doc('projects', 'doctype', 'timesheet_detail')
-
-	report = "Daily Time Log Summary"
-	if frappe.db.exists("Report", report):
-		frappe.delete_doc('Report', report)
diff --git a/erpnext/patches/v7_0/remove_features_setup.py b/erpnext/patches/v7_0/remove_features_setup.py
deleted file mode 100644
index 49393cc..0000000
--- a/erpnext/patches/v7_0/remove_features_setup.py
+++ /dev/null
@@ -1,29 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-from erpnext.setup.install import create_compact_item_print_custom_field
-from frappe.utils import cint
-
-def execute():
-	frappe.reload_doctype('Stock Settings')
-	stock_settings = frappe.get_doc('Stock Settings', 'Stock Settings')
-	stock_settings.show_barcode_field = cint(frappe.db.get_value("Features Setup", None, "fs_item_barcode"))
-	if not frappe.db.exists("UOM", stock_settings.stock_uom):
-		stock_settings.stock_uom = None
-	stock_settings.save()
-
-	create_compact_item_print_custom_field()
-
-	compact_item_print = frappe.db.get_value("Features Setup", None, "compact_item_print")
-	frappe.db.set_value("Print Settings", None, "compact_item_print", compact_item_print)
-
-	# remove defaults
-	frappe.db.sql("""delete from tabDefaultValue where defkey in ('fs_item_serial_nos',
-		'fs_item_batch_nos', 'fs_brands', 'fs_item_barcode',
-		'fs_item_advanced', 'fs_packing_details', 'fs_item_group_in_details',
-		'fs_exports', 'fs_imports', 'fs_discounts', 'fs_purchase_discounts',
-		'fs_after_sales_installations', 'fs_projects', 'fs_sales_extras',
-		'fs_recurring_invoice', 'fs_pos', 'fs_manufacturing', 'fs_quality',
-		'fs_page_break', 'fs_more_info', 'fs_pos_view', 'compact_item_print')""")
-
-	frappe.delete_doc('DocType', 'Features Setup')
diff --git a/erpnext/patches/v7_0/remove_old_earning_deduction_doctypes.py b/erpnext/patches/v7_0/remove_old_earning_deduction_doctypes.py
deleted file mode 100644
index 05a2c49..0000000
--- a/erpnext/patches/v7_0/remove_old_earning_deduction_doctypes.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	if frappe.db.exists("DocType", "Salary Component"):
-		for dt in ("Salary Structure Earning", "Salary Structure Deduction", "Salary Slip Earning", 
-			"Salary Slip Deduction", "Earning Type", "Deduction Type"):
-				frappe.delete_doc("DocType", dt)
-				
-					
-		for d in frappe.db.sql("""select name from `tabCustom Field` 
-			where dt in ('Salary Detail', 'Salary Component')"""):
-				frappe.get_doc("Custom Field", d[0]).save()
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/rename_advance_table_fields.py b/erpnext/patches/v7_0/rename_advance_table_fields.py
deleted file mode 100644
index 34d8134..0000000
--- a/erpnext/patches/v7_0/rename_advance_table_fields.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import rename_field
-
-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")
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/rename_examination_to_assessment.py b/erpnext/patches/v7_0/rename_examination_to_assessment.py
deleted file mode 100644
index dc248de..0000000
--- a/erpnext/patches/v7_0/rename_examination_to_assessment.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-from frappe.model.utils.rename_field import rename_field
-
-def execute():
-	if frappe.db.exists("DocType", "Examination"):
-		frappe.rename_doc("DocType", "Examination", "Assessment")
-		frappe.rename_doc("DocType", "Examination Result", "Assessment Result")
-
-		# 'Schools' module changed to the 'Education'
-		# frappe.reload_doc("schools", "doctype", "assessment")
-		# frappe.reload_doc("schools", "doctype", "assessment_result")
-
-		frappe.reload_doc("education", "doctype", "assessment")
-		frappe.reload_doc("education", "doctype", "assessment_result")
-
-		rename_field("Assessment", "exam_name", "assessment_name")
-		rename_field("Assessment", "exam_code", "assessment_code")
-	
-		frappe.db.sql("delete from `tabPortal Menu Item` where route = '/examination'")
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/rename_fee_amount_to_fee_component.py b/erpnext/patches/v7_0/rename_fee_amount_to_fee_component.py
deleted file mode 100644
index 5cb6a3b..0000000
--- a/erpnext/patches/v7_0/rename_fee_amount_to_fee_component.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-from frappe.model.utils.rename_field import rename_field
-
-def execute():
-	if frappe.db.exists("DocType", "Fee Amount"):
-		frappe.rename_doc("DocType", "Fee Amount", "Fee Component")
-		for dt in ("Fees", "Fee Structure"):
-			frappe.reload_doctype(dt)
-			rename_field(dt, "amount", "components")
-		
-	
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/rename_prevdoc_fields.py b/erpnext/patches/v7_0/rename_prevdoc_fields.py
deleted file mode 100644
index ded4ad4..0000000
--- a/erpnext/patches/v7_0/rename_prevdoc_fields.py
+++ /dev/null
@@ -1,76 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-import json
-from frappe.model.utils.rename_field import update_reports, rename_field, update_property_setters
-from frappe.custom.doctype.property_setter.property_setter import make_property_setter
-
-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 update_po_fields():
-	for data in frappe.db.sql(""" select prevdoc_docname, prevdoc_detail_docname, name, prevdoc_doctype
-		from `tabPurchase Order Item` where prevdoc_doctype is not null""", as_dict=True):
-		if data.prevdoc_doctype == 'Material Request':
-			frappe.db.set_value("Purchase Order Item", data.name, "material_request", data.prevdoc_docname, update_modified=False)
-			frappe.db.set_value("Purchase Order Item", data.name, "material_request_item", data.prevdoc_detail_docname, update_modified=False)
-		elif data.prevdoc_doctype == 'Sales Order':
-			frappe.db.set_value("Purchase Order Item", data.name, "sales_order", data.prevdoc_docname, update_modified=False)
-			frappe.db.set_value("Purchase Order Item", data.name, "sales_order_item", data.prevdoc_detail_docname, update_modified=False)
-
-def get_columns():
-	return {
-		'prevdoc_docname': 'material_request',
-		'prevdoc_detail_docname': 'material_request_item'
-	}
-
-def update_prop_setters_reports_print_format_for_po():
-	for key, val in get_columns().items():
-		update_property_setters('Purchase Order Item', key, val)
-		update_reports('Purchase Order Item', key, val)
-		update_print_format_for_po(key, val, 'Purchase Order')
-
-def update_print_format_for_po(old_fieldname, new_fieldname, doc_type):
-	column_mapper = get_columns()
-
-	for data in frappe.db.sql(""" select name, format_data from `tabPrint Format` where
-		format_data like %(old_fieldname)s and doc_type = %(doc_type)s""", 
-		{'old_fieldname': '%%%s%%'%(old_fieldname), 'doc_type': doc_type}, as_dict=True):
-
-		update_print_format_fields(old_fieldname, new_fieldname, data)
-
-def update_print_format_fields(old_fieldname, new_fieldname, args):
-	report_dict = json.loads(args.format_data)
-	update = False
-
-	for col in report_dict:
-		if col.get('fieldname') and col.get('fieldname') == old_fieldname:
-			col['fieldname'] = new_fieldname
-			update = True
-
-		if col.get('visible_columns'):
-			for key in col.get('visible_columns'):
-				if key.get('fieldname') == old_fieldname:
-					key['fieldname'] = new_fieldname
-					update = True
-
-	if update:
-		val = json.dumps(report_dict)
-		frappe.db.sql("""update `tabPrint Format` set `format_data`=%s where name=%s""", (val, args.name))
-		
-def set_sales_order_field():
-	for data in frappe.db.sql("""select doc_type, field_name, property, value, property_type 
-		from `tabProperty Setter` where doc_type = 'Purchase Order Item' 
-		and field_name in('material_request', 'material_request_item')""", as_dict=True):
-		if data.field_name == 'material_request':
-			make_property_setter(data.doc_type, 'sales_order', data.property, data.value, data.property_type)
-		else:
-			make_property_setter(data.doc_type, 'sales_order_item', data.property, data.value, data.property_type)
-
-def rename_pr_fields():
-	rename_field("Purchase Receipt Item", "prevdoc_docname", "purchase_order")
-	rename_field("Purchase Receipt Item", "prevdoc_detail_docname", "purchase_order_item")
diff --git a/erpnext/patches/v7_0/rename_salary_components.py b/erpnext/patches/v7_0/rename_salary_components.py
deleted file mode 100644
index 1693f3b..0000000
--- a/erpnext/patches/v7_0/rename_salary_components.py
+++ /dev/null
@@ -1,149 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import update_property_setters
-
-def execute():
-	if not frappe.db.exists("DocType", "Salary Structure Earning"):
-		return
-
-	frappe.reload_doc("Payroll", "doctype", "salary_detail")
-	frappe.reload_doc("Payroll", "doctype", "salary_component")
-
-	standard_cols = ["name", "creation", "modified", "owner", "modified_by", "parent", "parenttype", "parentfield", "idx"]
-
-	dt_cols = {
-		"Salary Structure Deduction": ["d_type", "d_modified_amt", "depend_on_lwp"],
-		"Salary Structure Earning": ["e_type", "modified_value", "depend_on_lwp"],
-		"Salary Slip Earning": ["e_type", "e_modified_amount", "e_depends_on_lwp", "e_amount"],
-		"Salary Slip Deduction": ["d_type", "d_modified_amount", "d_depends_on_lwp", "d_amount"],
-	}
-
-	earning_type_exists = True if "earning_type" in frappe.db.get_table_columns("Salary Slip Earning") else False
-	e_type_exists = True if "e_type" in frappe.db.get_table_columns("Salary Slip Earning") else False
-
-
-	if e_type_exists and earning_type_exists:
-		frappe.db.sql("""update `tabSalary Slip Earning`
-			set e_type = earning_type, e_modified_amount = earning_amount
-			where e_type is null and earning_type is not null""")
-
-		frappe.db.sql("""update `tabSalary Structure Earning` set e_type = earning_type
-			where e_type is null and earning_type is not null""")
-
-		frappe.db.sql("""update `tabSalary Slip Deduction` set
-			d_type = deduction_type, d_modified_amount = deduction_amount
-			where d_type is null and deduction_type is not null""")
-
-		frappe.db.sql("""update `tabSalary Structure Deduction` set d_type = deduction_type
-			where d_type is null and deduction_type is not null""")
-
-	if earning_type_exists and not e_type_exists:
-		for val in dt_cols.values():
-			if val[0] == "e_type":
-				val[0] = "earning_type"
-
-			if val[0] == "d_type":
-				val[0] = "deduction_type"
-
-			if val[1] == "e_modified_amount":
-				val[1]  ="earning_amount"
-
-			if val[1] == "d_modified_amount":
-				val[1]  ="deduction_amount"
-
-
-
-	target_cols = standard_cols + ["salary_component", "amount", "depends_on_payment_days", "default_amount"]
-	target_cols = "`" + "`, `".join(target_cols) + "`"
-
-	for doctype, cols in dt_cols.items():
-		source_cols = "`" + "`, `".join(standard_cols + cols) + "`"
-		if len(cols) == 3:
-			source_cols += ", 0"
-
-
-		frappe.db.sql("""INSERT INTO `tabSalary Detail` ({0}) SELECT {1} FROM `tab{2}`"""
-			.format(target_cols, source_cols, doctype))
-
-
-	dt_cols_de = {
-		"Deduction Type": ["deduction_name", "description"],
-		"Earning Type": ["earning_name", "description"],
-	}
-
-	standard_cols_de = standard_cols
-
-
-	target_cols = standard_cols_de + ["salary_component", "description"]
-	target_cols = "`" + "`, `".join(target_cols) + "`"
-
-	for doctype, cols in dt_cols_de.items():
-		source_cols = "`" + "`, `".join(standard_cols_de + cols) + "`"
-		try:
-			frappe.db.sql("""INSERT INTO `tabSalary Component` ({0}) SELECT {1} FROM `tab{2}`"""
-				.format(target_cols, source_cols, doctype))
-		except Exception as e:
-			if e.args[0]==1062:
-				pass
-
-	update_customizations()
-
-	for doctype in ["Salary Structure Deduction", "Salary Structure Earning", "Salary Slip Earning",
-			"Salary Slip Deduction", "Deduction Type", "Earning Type"] :
-		frappe.delete_doc("DocType", doctype)
-
-
-def update_customizations():
-	dt_cols = {
-		"Salary Structure Deduction": {
-			"d_type": "salary_component",
-			"deduction_type": "salary_component",
-			"d_modified_amt": "amount",
-			"depend_on_lwp": "depends_on_payment_days"
-		},
-		"Salary Structure Earning": {
-			"e_type": "salary_component",
-			"earning_type": "salary_component",
-			"modified_value": "amount",
-			"depend_on_lwp": "depends_on_payment_days"
-		},
-		"Salary Slip Earning": {
-			"e_type": "salary_component",
-			"earning_type": "salary_component",
-			"e_modified_amount": "amount",
-			"e_amount" : "default_amount",
-			"e_depends_on_lwp": "depends_on_payment_days"
-		},
-		"Salary Slip Deduction": {
-			"d_type": "salary_component",
-			"deduction_type": "salary_component",
-			"d_modified_amount": "amount",
-			"d_amount" : "default_amount",
-			"d_depends_on_lwp": "depends_on_payment_days"
-		}
-	}
-
-	update_property_setters_and_custom_fields("Salary Detail", dt_cols)
-
-	dt_cols = {
-		"Earning Type": {
-			"earning_name": "salary_component"
-		},
-		"Deduction Type": {
-			"deduction_name": "salary_component"
-		}
-	}
-
-	update_property_setters_and_custom_fields("Salary Component", dt_cols)
-
-
-
-
-def update_property_setters_and_custom_fields(new_dt, dt_cols):
-	for doctype, cols in dt_cols.items():
-		frappe.db.sql("update `tabProperty Setter` set doc_type = %s where doc_type=%s", (new_dt, doctype))
-		frappe.db.sql("update `tabCustom Field` set dt = %s where dt=%s", (new_dt, doctype))
-
-
-		for old_fieldname, new_fieldname in cols.items():
-			update_property_setters(new_dt, old_fieldname, new_fieldname)
diff --git a/erpnext/patches/v7_0/rename_time_sheet_doctype.py b/erpnext/patches/v7_0/rename_time_sheet_doctype.py
deleted file mode 100644
index f80a830..0000000
--- a/erpnext/patches/v7_0/rename_time_sheet_doctype.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	if frappe.db.table_exists("Time Sheet") and not frappe.db.table_exists("Timesheet"):
-		frappe.rename_doc("DocType", "Time Sheet", "Timesheet")
-		frappe.rename_doc("DocType", "Time Sheet Detail", "Timesheet Detail")
-		
-		for doctype in ['Time Sheet', 'Time Sheet Detail']:
-			frappe.delete_doc('DocType', doctype)
-		
-		report = "Daily Time Sheet Summary"
-		if frappe.db.exists("Report", report):
-			frappe.delete_doc('Report', report)
diff --git a/erpnext/patches/v7_0/repost_bin_qty_and_item_projected_qty.py b/erpnext/patches/v7_0/repost_bin_qty_and_item_projected_qty.py
deleted file mode 100644
index a5cf22c..0000000
--- a/erpnext/patches/v7_0/repost_bin_qty_and_item_projected_qty.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	repost_bin_qty()
-
-def repost_bin_qty():
-	for bin in frappe.db.sql(""" select name from `tabBin`
-		where (actual_qty + ordered_qty + indented_qty + planned_qty - reserved_qty - reserved_qty_for_production - reserved_qty_for_sub_contract) != projected_qty """, as_dict=1):
-		bin_doc = frappe.get_doc('Bin', bin.name)
-		bin_doc.set_projected_qty()
-		bin_doc.db_set("projected_qty", bin_doc.projected_qty, update_modified = False)
diff --git a/erpnext/patches/v7_0/repost_gle_for_pi_with_update_stock.py b/erpnext/patches/v7_0/repost_gle_for_pi_with_update_stock.py
deleted file mode 100644
index b864e59..0000000
--- a/erpnext/patches/v7_0/repost_gle_for_pi_with_update_stock.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import cint
-
-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()
-			frappe.db.commit()
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/repost_gle_for_pos_sales_return.py b/erpnext/patches/v7_0/repost_gle_for_pos_sales_return.py
deleted file mode 100644
index 77ecafd..0000000
--- a/erpnext/patches/v7_0/repost_gle_for_pos_sales_return.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import cint, flt
-
-def execute():
-	frappe.reload_doctype("Sales Invoice")
-	frappe.reload_doctype("Sales Invoice Item")
-	
-	for si in frappe.get_all("Sales Invoice", fields = ["name"], 
-		filters={"docstatus": 1, "is_pos": 1, "is_return": 1}):
-		si_doc = frappe.get_doc("Sales Invoice", si.name)
-		if len(si_doc.payments) > 0:
-			si_doc.set_paid_amount()
-			si_doc.flags.ignore_validate_update_after_submit = True
-			si_doc.save()
-			if si_doc.grand_total <= si_doc.paid_amount and si_doc.paid_amount < 0:
-				delete_gle_for_voucher(si_doc.name)
-				si_doc.run_method("make_gl_entries")
-
-def delete_gle_for_voucher(voucher_no):
-	frappe.db.sql("""delete from `tabGL Entry` where voucher_no = %(voucher_no)s""",
-		{'voucher_no': voucher_no})
diff --git a/erpnext/patches/v7_0/set_base_amount_in_invoice_payment_table.py b/erpnext/patches/v7_0/set_base_amount_in_invoice_payment_table.py
deleted file mode 100644
index 5dd61a0..0000000
--- a/erpnext/patches/v7_0/set_base_amount_in_invoice_payment_table.py
+++ /dev/null
@@ -1,24 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import flt
-
-def execute():
-	si_list = frappe.db.sql("""
-		select distinct parent
-		from `tabSales Invoice Payment`
-		where docstatus!=2 and parenttype = 'Sales Invoice'
-		and amount != 0 and base_amount = 0
-	""")
-
-	count = 0
-	for d in si_list:
-		si = frappe.get_doc("Sales Invoice", d[0])
-		for p in si.get("payments"):
-			if p.amount and not p.base_amount:
-				base_amount = flt(p.amount*si.conversion_rate, si.precision("base_paid_amount"))
-				frappe.db.set_value("Sales Invoice Payment", p.name, "base_amount", base_amount, update_modified=False)
-
-		count +=1
-			
-		if count % 200 == 0:
-			frappe.db.commit()
diff --git a/erpnext/patches/v7_0/set_is_group_for_warehouse.py b/erpnext/patches/v7_0/set_is_group_for_warehouse.py
deleted file mode 100644
index 3e69616..0000000
--- a/erpnext/patches/v7_0/set_is_group_for_warehouse.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc("stock", "doctype", "warehouse")
-	frappe.db.sql("""update tabWarehouse
-		set is_group = if ((ifnull(is_group, "No") = "Yes" or ifnull(is_group, 0) = 1), 1, 0)""")
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/set_material_request_type_in_item.py b/erpnext/patches/v7_0/set_material_request_type_in_item.py
deleted file mode 100644
index 5fb14ad..0000000
--- a/erpnext/patches/v7_0/set_material_request_type_in_item.py
+++ /dev/null
@@ -1,16 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype("Item")
-	if "default_bom" in frappe.db.get_table_columns("Item"):
-		frappe.db.sql("""update `tabItem` 
-			set default_material_request_type = (
-				case 
-					when (default_bom is not null and default_bom != '')
-					then 'Manufacture' 
-					else 'Purchase' 
-				end )""")
-				
-	else:
-		frappe.db.sql("update tabItem set default_material_request_type='Purchase'")
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/set_naming_series_for_timesheet.py b/erpnext/patches/v7_0/set_naming_series_for_timesheet.py
deleted file mode 100644
index d4d1a69..0000000
--- a/erpnext/patches/v7_0/set_naming_series_for_timesheet.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-
-import frappe
-from frappe.custom.doctype.property_setter.property_setter import make_property_setter
-
-def execute():
-	frappe.reload_doc('projects', 'doctype', 'timesheet')
-	frappe.reload_doc('projects', 'doctype', 'timesheet_detail')
-	frappe.reload_doc('accounts', 'doctype', 'sales_invoice_timesheet')
-	
-	make_property_setter('Timesheet', "naming_series", "options", 'TS-', "Text")
-	make_property_setter('Timesheet', "naming_series", "default", 'TS-', "Text")
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/set_party_name_in_payment_entry.py b/erpnext/patches/v7_0/set_party_name_in_payment_entry.py
deleted file mode 100644
index bbdcf5c..0000000
--- a/erpnext/patches/v7_0/set_party_name_in_payment_entry.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-
-import frappe
-
-def execute():
-	customers = frappe._dict(frappe.db.sql("select name, customer_name from tabCustomer"))
-	suppliers = frappe._dict(frappe.db.sql("select name, supplier_name from tabSupplier"))
-	
-	frappe.reload_doc('accounts', 'doctype', 'payment_entry')
-	
-	pe_list = frappe.db.sql("""select name, party_type, party from `tabPayment Entry` 
-		where party is not null and party != ''""", as_dict=1)
-	for pe in pe_list:
-		party_name = customers.get(pe.party) if pe.party_type=="Customer" else suppliers.get(pe.party)
-		
-		frappe.db.set_value("Payment Entry", pe.name, "party_name", party_name, update_modified=False)
-	
diff --git a/erpnext/patches/v7_0/set_portal_settings.py b/erpnext/patches/v7_0/set_portal_settings.py
deleted file mode 100644
index 5259d4f..0000000
--- a/erpnext/patches/v7_0/set_portal_settings.py
+++ /dev/null
@@ -1,28 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-
-import frappe
-
-def execute():
-	frappe.reload_doctype('Role')
-	for dt in ("assessment", "course", "fees"):
-		# 'Schools' module changed to the 'Education'
-		# frappe.reload_doc("schools", "doctype", dt)
-		frappe.reload_doc("education", "doctype", dt)
-
-	for dt in ("domain", "has_domain", "domain_settings"):
-		frappe.reload_doc("core", "doctype", dt)
-
-	frappe.reload_doc('website', 'doctype', 'portal_menu_item')
-
-	frappe.get_doc('Portal Settings').sync_menu()
-
-	if 'schools' in frappe.get_installed_apps():
-		domain = frappe.get_doc('Domain', 'Education')
-		domain.setup_domain()
-	else:
-		domain = frappe.get_doc('Domain', 'Manufacturing')
-		domain.setup_data()
-		domain.setup_sidebar_items()
diff --git a/erpnext/patches/v7_0/setup_account_table_for_expense_claim_type_if_exists.py b/erpnext/patches/v7_0/setup_account_table_for_expense_claim_type_if_exists.py
deleted file mode 100644
index c565707..0000000
--- a/erpnext/patches/v7_0/setup_account_table_for_expense_claim_type_if_exists.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc("hr", "doctype", "expense_claim_type")
-	frappe.reload_doc("hr", "doctype", "expense_claim_account")
-
-	if not frappe.db.has_column('Expense Claim Type', 'default_account'):
-		return
-
-	for expense_claim_type in frappe.get_all("Expense Claim Type", fields=["name", "default_account"]):
-		if expense_claim_type.default_account \
-				and frappe.db.exists("Account", expense_claim_type.default_account):
-			doc = frappe.get_doc("Expense Claim Type", expense_claim_type.name)
-			doc.append("accounts", {
-				"company": frappe.db.get_value("Account", expense_claim_type.default_account, "company"),
-				"default_account": expense_claim_type.default_account,
-			})
-			doc.flags.ignore_mandatory = True
-			doc.save(ignore_permissions=True)
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/system_settings_setup_complete.py b/erpnext/patches/v7_0/system_settings_setup_complete.py
deleted file mode 100644
index 0feeee9..0000000
--- a/erpnext/patches/v7_0/system_settings_setup_complete.py
+++ /dev/null
@@ -1,16 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype('System Settings')
-	companies = frappe.db.sql("""select name, country
-		from tabCompany order by creation asc""", as_dict=True)
-	if companies:
-		frappe.db.set_value('System Settings', 'System Settings', 'setup_complete', 1)
-
-	for company in companies:
-		if company.country:
-			frappe.db.set_value('System Settings', 'System Settings', 'country', company.country)
-			break
-
-
diff --git a/erpnext/patches/v7_0/update_autoname_field.py b/erpnext/patches/v7_0/update_autoname_field.py
deleted file mode 100644
index bfa9b28..0000000
--- a/erpnext/patches/v7_0/update_autoname_field.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	doctypes = frappe.db.sql(""" select name, autoname from `tabDocType`
-		where autoname like 'field:%' and allow_rename = 1""", as_dict=1)
-
-	for doctype in doctypes:
-		fieldname = doctype.autoname.split(":")[1]
-		if fieldname:
-			frappe.db.sql(""" update `tab%s` set %s = name """%(doctype.name, fieldname))
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/update_change_amount_account.py b/erpnext/patches/v7_0/update_change_amount_account.py
deleted file mode 100644
index 1741095..0000000
--- a/erpnext/patches/v7_0/update_change_amount_account.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from erpnext.accounts.doctype.journal_entry.journal_entry import get_default_bank_cash_account
-
-def execute():
-	frappe.reload_doc('accounts', 'doctype', 'sales_invoice')
-
-	for company in frappe.db.sql("""select company from `tabSales Invoice` 
-		where change_amount <> 0 and account_for_change_amount is null group by company""", as_list = 1):
-		cash_account = get_default_bank_cash_account(company[0], 'Cash').get('account')
-		if not cash_account:
-			bank_account = get_default_bank_cash_account(company[0], 'Bank').get('account')
-			cash_account = bank_account
-
-		if cash_account:
-			frappe.db.sql("""update `tabSales Invoice` 
-				set account_for_change_amount = %(cash_account)s where change_amount <> 0 
-				and company = %(company)s and account_for_change_amount is null""",
-				{'cash_account': cash_account, 'company': company[0]})
diff --git a/erpnext/patches/v7_0/update_conversion_factor_in_supplier_quotation_item.py b/erpnext/patches/v7_0/update_conversion_factor_in_supplier_quotation_item.py
deleted file mode 100644
index 24da4b1..0000000
--- a/erpnext/patches/v7_0/update_conversion_factor_in_supplier_quotation_item.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc('buying', 'doctype', 'supplier_quotation_item')
-
-	frappe.db.sql("""update 
-			`tabSupplier Quotation Item` as sqi_t,
-			(select sqi.item_code as item_code, sqi.uom as uom, ucd.conversion_factor as conversion_factor  
-				from `tabSupplier Quotation Item` sqi left join `tabUOM Conversion Detail` ucd  
-				on ucd.uom = sqi.uom and sqi.item_code = ucd.parent) as conversion_data,
-			`tabItem` as item
-		set 
-			sqi_t.conversion_factor= ifnull(conversion_data.conversion_factor, 1), 
-			sqi_t.stock_qty = (ifnull(conversion_data.conversion_factor, 1) * sqi_t.qty), 
-			sqi_t.stock_uom = item.stock_uom  
-		where 
-			sqi_t.item_code = conversion_data.item_code and
-			sqi_t.uom = conversion_data.uom and sqi_t.item_code = item.name""")
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/update_home_page.py b/erpnext/patches/v7_0/update_home_page.py
deleted file mode 100644
index 909825c..0000000
--- a/erpnext/patches/v7_0/update_home_page.py
+++ /dev/null
@@ -1,27 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-import erpnext
-
-def execute():
-	frappe.reload_doc('portal', 'doctype', 'homepage_featured_product')
-	frappe.reload_doc('portal', 'doctype', 'homepage')
-	frappe.reload_doc('portal', 'doctype', 'products_settings')
-	frappe.reload_doctype('Item')
-	frappe.reload_doctype('Item Group')
-
-	website_settings = frappe.get_doc('Website Settings', 'Website Settings')
-	if frappe.db.exists('Web Page', website_settings.home_page):
-		header = frappe.db.get_value('Web Page', website_settings.home_page, 'header')
-		if header and header.startswith("<div class='hero text-center'>"):
-			homepage = frappe.get_doc('Homepage', 'Homepage')
-			homepage.company = erpnext.get_default_company() or frappe.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()
-
diff --git a/erpnext/patches/v7_0/update_maintenance_module_in_doctype.py b/erpnext/patches/v7_0/update_maintenance_module_in_doctype.py
deleted file mode 100644
index 4c0c6a9..0000000
--- a/erpnext/patches/v7_0/update_maintenance_module_in_doctype.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.db.set_value("DocType", "Maintenance Schedule", "module", "Maintenance")
-	frappe.db.set_value("DocType", "Maintenance Schedule Detail", "module", "Maintenance")
-	frappe.db.set_value("DocType", "Maintenance Schedule Item", "module", "Maintenance")
-	frappe.db.set_value("DocType", "Maintenance Visit", "module", "Maintenance")
-	frappe.db.set_value("DocType", "Maintenance Visit Purpose", "module", "Maintenance")
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/update_mins_to_first_response.py b/erpnext/patches/v7_0/update_mins_to_first_response.py
deleted file mode 100644
index 1668135..0000000
--- a/erpnext/patches/v7_0/update_mins_to_first_response.py
+++ /dev/null
@@ -1,24 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-from frappe.core.doctype.communication.communication import update_mins_to_first_communication
-
-def execute():
-	frappe.reload_doctype('Issue')
-	frappe.reload_doctype('Opportunity')
-
-	for doctype in ('Issue', 'Opportunity'):
-		frappe.db.sql('update tab{0} set mins_to_first_response=0'.format(doctype))
-		for parent in frappe.get_all(doctype, order_by='creation desc', limit=500):
-			parent_doc = frappe.get_doc(doctype, parent.name)
-			for communication in frappe.get_all('Communication',
-				filters={'reference_doctype': doctype, 'reference_name': parent.name,
-				'communication_medium': 'Email'},
-				order_by = 'creation asc', limit=2):
-
-				communication_doc = frappe.get_doc('Communication', communication.name)
-
-				update_mins_to_first_communication(parent_doc, communication_doc)
-
-				if parent_doc.mins_to_first_response:
-					continue
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/update_missing_employee_in_timesheet.py b/erpnext/patches/v7_0/update_missing_employee_in_timesheet.py
deleted file mode 100644
index 54d492b..0000000
--- a/erpnext/patches/v7_0/update_missing_employee_in_timesheet.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	if frappe.db.table_exists("Time Log") and "employee" in frappe.db.get_table_columns("Time Log"):
-		timesheet = frappe.db.sql("""select tl.employee as employee, ts.name as name,
-				tl.modified as modified, tl.modified_by as modified_by, tl.creation as creation, tl.owner as owner
-			from 
-				`tabTimesheet` ts, `tabTimesheet Detail` tsd, `tabTime Log` tl
-			where 
-				tsd.parent = ts.name and tl.from_time = tsd.from_time and tl.to_time = tsd.to_time 
-				and tl.hours = tsd.hours and tl.billing_rate = tsd.billing_rate and tsd.idx=1 
-				and tl.docstatus < 2 and (ts.employee = '' or ts.employee is null)""", as_dict=1)
-		
-		for data in timesheet:
-			ts_doc = frappe.get_doc('Timesheet', data.name)
-			if len(ts_doc.time_logs) == 1:
-				frappe.db.sql(""" update `tabTimesheet` set creation = %(creation)s,
-					owner = %(owner)s, modified = %(modified)s, modified_by = %(modified_by)s,
-					employee = %(employee)s where name = %(name)s""", data)
diff --git a/erpnext/patches/v7_0/update_mode_of_payment_type.py b/erpnext/patches/v7_0/update_mode_of_payment_type.py
deleted file mode 100644
index 9292a1b..0000000
--- a/erpnext/patches/v7_0/update_mode_of_payment_type.py
+++ /dev/null
@@ -1,29 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import flt
-
-def execute():
-	frappe.reload_doc('accounts', 'doctype', 'mode_of_payment')
-
-	frappe.db.sql(""" update `tabMode of Payment` set type = 'Cash' where (type is null or type = '') and name = 'Cash'""")
-
-	for data in frappe.db.sql("""select name from `tabSales Invoice` where is_pos=1 and docstatus<2 and
-		(ifnull(paid_amount, 0) - ifnull(change_amount, 0)) > ifnull(grand_total, 0) and modified > '2016-05-01'""", as_dict=1):
-		if data.name:
-			si_doc = frappe.get_doc("Sales Invoice", data.name)
-			remove_payment = []
-			mode_of_payment = [d.mode_of_payment for d in si_doc.payments if flt(d.amount) > 0]
-			if mode_of_payment != set(mode_of_payment):
-				for payment_data in si_doc.payments:
-					if payment_data.idx != 1 and payment_data.amount == si_doc.grand_total:
-						remove_payment.append(payment_data)
-						frappe.db.sql(""" delete from `tabSales Invoice Payment` 
-							where name = %(name)s""", {'name': payment_data.name})
-
-			if len(remove_payment) > 0:
-				for d in remove_payment:
-					si_doc.remove(d)
-
-				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)
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/update_party_status.py b/erpnext/patches/v7_0/update_party_status.py
deleted file mode 100644
index 0c6b4ea..0000000
--- a/erpnext/patches/v7_0/update_party_status.py
+++ /dev/null
@@ -1,21 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	return
-	# for party_type in ('Customer', 'Supplier'):
-	# 	frappe.reload_doctype(party_type)
-	#
-	# 	# set all as default status
-	# 	frappe.db.sql('update `tab{0}` set status=%s'.format(party_type), default_status[party_type])
-	#
-	# 	for doctype in status_depends_on[party_type]:
-	# 		filters = get_filters_for(doctype)
-	# 		parties = frappe.get_all(doctype, fields="{0} as party".format(party_type.lower()),
-	# 			filters=filters, limit_page_length=1)
-	#
-	# 		parties = filter(None, [p.party for p in parties])
-	#
-	# 		if parties:
-	# 			frappe.db.sql('update `tab{0}` set status="Open" where name in ({1})'.format(party_type,
-	# 				', '.join(len(parties) * ['%s'])), parties)
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/update_prevdoc_values_for_supplier_quotation_item.py b/erpnext/patches/v7_0/update_prevdoc_values_for_supplier_quotation_item.py
deleted file mode 100644
index e90de50..0000000
--- a/erpnext/patches/v7_0/update_prevdoc_values_for_supplier_quotation_item.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-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)
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/update_project_in_gl_entry.py b/erpnext/patches/v7_0/update_project_in_gl_entry.py
deleted file mode 100644
index d99e9a4..0000000
--- a/erpnext/patches/v7_0/update_project_in_gl_entry.py
+++ /dev/null
@@ -1,21 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype("GL Entry")
-	
-	for doctype in ("Delivery Note", "Sales Invoice", "Stock Entry"):
-		frappe.db.sql("""
-			update `tabGL Entry` gle, `tab{0}` dt
-			set gle.project = dt.project
-			where gle.voucher_type=%s and gle.voucher_no = dt.name
-				and ifnull(gle.cost_center, '') != '' and ifnull(dt.project, '') != ''
-		""".format(doctype), doctype)
-		
-	for doctype in ("Purchase Receipt", "Purchase Invoice"):
-		frappe.db.sql("""
-			update `tabGL Entry` gle, `tab{0} Item` dt
-			set gle.project = dt.project
-			where gle.voucher_type=%s and gle.voucher_no = dt.parent and gle.cost_center=dt.cost_center 
-				and ifnull(gle.cost_center, '') != '' and ifnull(dt.project, '') != ''
-		""".format(doctype), doctype)
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/update_refdoc_in_landed_cost_voucher.py b/erpnext/patches/v7_0/update_refdoc_in_landed_cost_voucher.py
deleted file mode 100644
index 2d562bb..0000000
--- a/erpnext/patches/v7_0/update_refdoc_in_landed_cost_voucher.py
+++ /dev/null
@@ -1,15 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-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 != '')
-	""")
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/update_status_for_timesheet.py b/erpnext/patches/v7_0/update_status_for_timesheet.py
deleted file mode 100644
index 117c40c..0000000
--- a/erpnext/patches/v7_0/update_status_for_timesheet.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.db.sql("""update 
-		`tabTimesheet` as ts,
-		(
-			select min(from_time)as from_time, max(to_time) as to_time, parent from `tabTimesheet Detail` group by parent
-		) as tsd
-		set ts.status = 'Submitted', ts.start_date = tsd.from_time, ts.end_date = tsd.to_time 
-		where tsd.parent = ts.name and ts.status = 'Draft' and ts.docstatus =1""")
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/update_status_of_po_so.py b/erpnext/patches/v7_0/update_status_of_po_so.py
deleted file mode 100644
index d630e8f..0000000
--- a/erpnext/patches/v7_0/update_status_of_po_so.py
+++ /dev/null
@@ -1,68 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import cint, flt
-
-def execute():
-	update_po_per_received_per_billed()
-	update_so_per_delivered_per_billed()
-	update_status()
-
-def update_po_per_received_per_billed():
-	frappe.db.sql(""" 
-		update
-			`tabPurchase Order`
-		set
-			`tabPurchase Order`.per_received = round((select sum(if(qty > ifnull(received_qty, 0),
-					ifnull(received_qty, 0), qty)) / sum(qty) *100 from `tabPurchase Order Item`
-					where parent = `tabPurchase Order`.name), 2),
-			`tabPurchase Order`.per_billed = ifnull(round((select sum( if(amount > ifnull(billed_amt, 0),
-					ifnull(billed_amt, 0), amount)) / sum(amount) *100 from `tabPurchase Order Item`
-					where parent = `tabPurchase Order`.name), 2), 0)
-		where
-			net_total > 0
-	""")
-
-def update_so_per_delivered_per_billed():
-	frappe.db.sql(""" 
-		update
-			`tabSales Order`
-		set 
-			`tabSales Order`.per_delivered = round((select sum( if(qty > ifnull(delivered_qty, 0),
-					ifnull(delivered_qty, 0), qty)) / sum(qty) *100 from `tabSales Order Item` 
-					where parent = `tabSales Order`.name), 2), 
-			`tabSales Order`.per_billed = ifnull(round((select sum( if(amount > ifnull(billed_amt, 0),
-					ifnull(billed_amt, 0), amount)) / sum(amount) *100 from `tabSales Order Item`
-					where parent = `tabSales Order`.name), 2), 0)
-		where
-			net_total > 0
-	""")
-
-def update_status():
-	frappe.db.sql("""
-		update
-			`tabSales Order`
-		set status = (Case when status = 'Closed' then 'Closed'
-			When per_delivered < 100 and per_billed < 100 and docstatus = 1 then 'To Deliver and Bill'
-			when per_delivered = 100 and per_billed < 100 and docstatus = 1 then 'To Bill'
-			when per_delivered < 100 and per_billed = 100 and docstatus = 1 then 'To Deliver'
-			when per_delivered = 100 and per_billed = 100 and docstatus = 1 then 'Completed'
-			when order_type = 'Maintenance' and per_billed = 100 and docstatus = 1 then 'Completed'
-			when docstatus = 2 then 'Cancelled'
-			else 'Draft'
-		End)""")
-
-	frappe.db.sql("""
-		update 
-			`tabPurchase Order` 
-		set status = (Case when status = 'Closed' then 'Closed'
-			when status = 'Delivered' then 'Delivered'
-			When per_received < 100 and per_billed < 100 and docstatus = 1 then 'To Receive and Bill'
-			when per_received = 100 and per_billed < 100 and docstatus = 1 then 'To Bill'
-			when per_received < 100 and per_billed = 100 and docstatus = 1 then 'To Receive'
-			when per_received = 100 and per_billed = 100 and docstatus = 1 then 'Completed'
-			when docstatus = 2 then 'Cancelled'
-			else 'Draft'
-		End)""")
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/update_status_of_zero_amount_sales_order.py b/erpnext/patches/v7_0/update_status_of_zero_amount_sales_order.py
deleted file mode 100644
index 9b2b247..0000000
--- a/erpnext/patches/v7_0/update_status_of_zero_amount_sales_order.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	for data in frappe.get_all('Sales Order', fields = ["name"], filters = [["docstatus", "=", "1"], ["grand_total", "=", "0"]]):
-		sales_order = frappe.get_doc('Sales Order', data.name)
-		sales_order.set_status(update=True, update_modified = False)
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/update_timesheet_communications.py b/erpnext/patches/v7_0/update_timesheet_communications.py
deleted file mode 100644
index 203471e..0000000
--- a/erpnext/patches/v7_0/update_timesheet_communications.py
+++ /dev/null
@@ -1,27 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	if frappe.db.table_exists("Time Log"):
-		timesheet = frappe.db.sql("""SELECT ts.name AS name, tl.name AS timelogname,
-				tl.modified AS modified, tl.modified_by AS modified_by, tl.creation AS creation, tl.owner AS owner
-			FROM 
-				`tabTimesheet` ts, `tabTimesheet Detail` tsd, `tabTime Log` tl
-			WHERE 
-				tsd.parent = ts.name AND tl.from_time = tsd.from_time AND tl.to_time = tsd.to_time 
-				AND tl.hours = tsd.hours AND tl.billing_rate = tsd.billing_rate AND tsd.idx=1 
-				AND tl.docstatus < 2""", as_dict=1)
-				
-		for data in timesheet:
-			frappe.db.sql(""" update `tabTimesheet` set creation = %(creation)s,
-				owner = %(owner)s, modified = %(modified)s, modified_by = %(modified_by)s
-				where name = %(name)s""", data)
-								
-			frappe.db.sql("""
-				update 
-					tabCommunication 
-				set 
-					reference_doctype = "Timesheet", reference_name = %(timesheet)s
-				where 
-					reference_doctype = "Time Log" and reference_name = %(timelog)s
-			""", {'timesheet': data.name, 'timelog': data.timelogname}, auto_commit=1)
diff --git a/erpnext/patches/v7_1/__init__.py b/erpnext/patches/v7_1/__init__.py
deleted file mode 100644
index 519ff49..0000000
--- a/erpnext/patches/v7_1/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
\ No newline at end of file
diff --git a/erpnext/patches/v7_1/add_account_user_role_for_timesheet.py b/erpnext/patches/v7_1/add_account_user_role_for_timesheet.py
deleted file mode 100644
index 7372b0c..0000000
--- a/erpnext/patches/v7_1/add_account_user_role_for_timesheet.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	if not frappe.db.get_value('DocPerm', {'parent': 'Timesheet', 'role': 'Accounts User', 'permlevel': 1}):
-		doc = frappe.get_doc('DocType', 'Timesheet')
-		doc.append('permissions', {
-			'role': "Accounts User",
-			'permlevel': 0,
-			'read': 1,
-			'write': 1,
-			'create': 1,
-			'delete': 1,
-			'submit': 1,
-			'cancel': 1,
-			'amend': 1,
-			'report': 1,
-			'email': 1
-		})
-
-		doc.append('permissions', {
-			'role': "Accounts User",
-			'permlevel': 1,
-			'read': 1,
-			'write': 1
-		})
-
-		doc.save(ignore_permissions=True)
\ No newline at end of file
diff --git a/erpnext/patches/v7_1/add_field_for_task_dependent.py b/erpnext/patches/v7_1/add_field_for_task_dependent.py
deleted file mode 100644
index 65b1c74..0000000
--- a/erpnext/patches/v7_1/add_field_for_task_dependent.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-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)
diff --git a/erpnext/patches/v7_1/fix_link_for_customer_from_lead.py b/erpnext/patches/v7_1/fix_link_for_customer_from_lead.py
deleted file mode 100644
index 33f809f..0000000
--- a/erpnext/patches/v7_1/fix_link_for_customer_from_lead.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	for c in frappe.db.sql('select name from tabCustomer where ifnull(lead_name,"")!=""'):
-		customer = frappe.get_doc('Customer', c[0])
-		customer.update_lead_status()
\ No newline at end of file
diff --git a/erpnext/patches/v7_1/move_sales_invoice_from_parent_to_child_timesheet.py b/erpnext/patches/v7_1/move_sales_invoice_from_parent_to_child_timesheet.py
deleted file mode 100644
index d1ec7c6..0000000
--- a/erpnext/patches/v7_1/move_sales_invoice_from_parent_to_child_timesheet.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc('projects', 'doctype', 'timesheet_detail')
-	frappe.reload_doc('accounts', 'doctype', 'sales_invoice_timesheet')
-
-	frappe.db.sql(""" update 
-			`tabTimesheet` as ts, 
-		(select 
-			sum(billing_amount) as billing_amount, sum(billing_hours) as billing_hours, time_sheet 
-			from `tabSales Invoice Timesheet` where docstatus = 1 group by time_sheet
-		) as sit
-		set 
-			ts.total_billed_amount = sit.billing_amount, ts.total_billed_hours = sit.billing_hours, 
-			ts.per_billed = ((sit.billing_amount * 100)/ts.total_billable_amount)
-		where ts.name = sit.time_sheet and ts.docstatus = 1""")
-
-	frappe.db.sql(""" update `tabTimesheet Detail` tsd, `tabTimesheet` ts set tsd.sales_invoice = ts.sales_invoice
-		where tsd.parent = ts.name and ts.sales_invoice is not null""")
\ No newline at end of file
diff --git a/erpnext/patches/v7_1/rename_field_timesheet.py b/erpnext/patches/v7_1/rename_field_timesheet.py
deleted file mode 100644
index 3690a2e..0000000
--- a/erpnext/patches/v7_1/rename_field_timesheet.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import rename_field
-
-def execute():
-	doctype = 'Timesheet'
-	fields_dict = {'total_billing_amount': 'total_billable_amount', 'total_billing_hours': 'total_billable_hours'}
-
-	for old_fieldname, new_fieldname in fields_dict.items():
-		if old_fieldname in frappe.db.get_table_columns(doctype):
-			rename_field(doctype, old_fieldname, new_fieldname)
diff --git a/erpnext/patches/v7_1/rename_quality_inspection_field.py b/erpnext/patches/v7_1/rename_quality_inspection_field.py
deleted file mode 100644
index 3b5a7d9..0000000
--- a/erpnext/patches/v7_1/rename_quality_inspection_field.py
+++ /dev/null
@@ -1,38 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import *
-
-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")
diff --git a/erpnext/patches/v7_1/repost_stock_for_deleted_bins_for_merging_items.py b/erpnext/patches/v7_1/repost_stock_for_deleted_bins_for_merging_items.py
deleted file mode 100644
index aca2108..0000000
--- a/erpnext/patches/v7_1/repost_stock_for_deleted_bins_for_merging_items.py
+++ /dev/null
@@ -1,44 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from erpnext.stock.stock_balance import repost_stock
-
-def execute():
-	frappe.reload_doc('manufacturing', 'doctype', 'work_order_item')
-	frappe.reload_doc('manufacturing', 'doctype', 'work_order')
-	
-	modified_items = frappe.db.sql_list("""
-		select name from `tabItem` 
-		where is_stock_item=1 and modified >= '2016-10-31'
-	""")
-	
-	if not modified_items:
-		return
-	
-	item_warehouses_with_transactions = []
-	transactions = ("Sales Order Item", "Material Request Item", "Purchase Order Item", 
-		"Stock Ledger Entry", "Packed Item")
-	
-	for doctype in transactions:
-		item_warehouses_with_transactions += list(frappe.db.sql("""
-			select distinct item_code, warehouse
-			from `tab{0}` where docstatus=1 and item_code in ({1})"""
-			.format(doctype, ', '.join(['%s']*len(modified_items))), tuple(modified_items)))
-			
-	item_warehouses_with_transactions += list(frappe.db.sql("""
-		select distinct production_item, fg_warehouse 
-		from `tabWork Order` where docstatus=1 and production_item in ({0})"""
-		.format(', '.join(['%s']*len(modified_items))), tuple(modified_items)))
-	
-	item_warehouses_with_transactions += list(frappe.db.sql("""
-		select distinct pr_item.item_code, pr_item.source_warehouse 
-		from `tabWork Order` pr, `tabWork Order Item` pr_item 
-		where pr_item.parent and pr.name and pr.docstatus=1 and pr_item.item_code in ({0})"""
-		.format(', '.join(['%s']*len(modified_items))), tuple(modified_items)))
-	
-	item_warehouses_with_bin = list(frappe.db.sql("select distinct item_code, warehouse from `tabBin`"))
-	
-	item_warehouses_with_missing_bin = list(
-		set(item_warehouses_with_transactions) - set(item_warehouses_with_bin))	
-	
-	for item_code, warehouse in item_warehouses_with_missing_bin:
-		repost_stock(item_code, warehouse)
diff --git a/erpnext/patches/v7_1/save_stock_settings.py b/erpnext/patches/v7_1/save_stock_settings.py
deleted file mode 100644
index d3f0263..0000000
--- a/erpnext/patches/v7_1/save_stock_settings.py
+++ /dev/null
@@ -1,15 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	stock_settings = frappe.get_doc('Stock Settings')
-	
-	if stock_settings.default_warehouse \
-		and not frappe.db.exists("Warehouse", stock_settings.default_warehouse):
-			stock_settings.default_warehouse = None
-			
-	if stock_settings.stock_uom and not frappe.db.exists("UOM", stock_settings.stock_uom):
-		stock_settings.stock_uom = None
-		
-	stock_settings.flags.ignore_mandatory = True
-	stock_settings.save()
diff --git a/erpnext/patches/v7_1/set_budget_against_as_cost_center.py b/erpnext/patches/v7_1/set_budget_against_as_cost_center.py
deleted file mode 100644
index dd9a432..0000000
--- a/erpnext/patches/v7_1/set_budget_against_as_cost_center.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc("accounts", "doctype", "budget")
-	frappe.db.sql("""
-		update
-			`tabBudget`
-		set
-			budget_against = 'Cost Center'
-		""")
diff --git a/erpnext/patches/v7_1/set_currency_exchange_date.py b/erpnext/patches/v7_1/set_currency_exchange_date.py
deleted file mode 100644
index 2a2d420..0000000
--- a/erpnext/patches/v7_1/set_currency_exchange_date.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype("Currency Exchange")
-	frappe.db.sql("""
-		update `tabCurrency Exchange` 
-		set `date` = '2010-01-01' 
-		where date is null or date = '0000-00-00'
-	""")
\ No newline at end of file
diff --git a/erpnext/patches/v7_1/set_prefered_contact_email.py b/erpnext/patches/v7_1/set_prefered_contact_email.py
deleted file mode 100644
index 3b68e22..0000000
--- a/erpnext/patches/v7_1/set_prefered_contact_email.py
+++ /dev/null
@@ -1,17 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype('User')
-	for d in frappe.get_all("Employee"):
-		employee = frappe.get_doc("Employee", d.name)
-		if employee.company_email:
-			employee.prefered_contact_email = "Company Email"
-			employee.prefered_email = employee.company_email
-		elif employee.personal_email:
-			employee.prefered_contact_email = "Personal Email"
-			employee.prefered_email = employee.personal_email
-		elif employee.user_id:
-			employee.prefered_contact_email = "User ID"
-			employee.prefered_email = employee.user_id
-		employee.db_update()
diff --git a/erpnext/patches/v7_1/set_sales_person_status.py b/erpnext/patches/v7_1/set_sales_person_status.py
deleted file mode 100644
index 929beac..0000000
--- a/erpnext/patches/v7_1/set_sales_person_status.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc('setup','doctype','sales_person')
-	frappe.db.sql("""update `tabSales Person` set enabled=1 
-		where (employee is null or employee = '' 
-			or employee IN (select employee from tabEmployee where status != "Left"))""")
diff --git a/erpnext/patches/v7_1/set_student_guardian.py b/erpnext/patches/v7_1/set_student_guardian.py
deleted file mode 100644
index 093c0bf..0000000
--- a/erpnext/patches/v7_1/set_student_guardian.py
+++ /dev/null
@@ -1,23 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	if frappe.db.exists("DocType", "Guardian"):
-
-		# 'Schools' module changed to the 'Education'
-		# frappe.reload_doc("schools", "doctype", "student")
-		# frappe.reload_doc("schools", "doctype", "student_guardian")
-		# frappe.reload_doc("schools", "doctype", "student_sibling")
-
-		frappe.reload_doc("education", "doctype", "student")
-		frappe.reload_doc("education", "doctype", "student_guardian")
-		frappe.reload_doc("education", "doctype", "student_sibling")
-		if "student" not in frappe.db.get_table_columns("Guardian"):
-			return
-		guardian = frappe.get_all("Guardian", fields=["name", "student"])
-		for d in guardian:
-			if d.student:
-				student = frappe.get_doc("Student", d.student)
-				if student:
-					student.append("guardians", {"guardian": d.name})
-					student.save()
diff --git a/erpnext/patches/v7_1/set_total_amount_currency_in_je.py b/erpnext/patches/v7_1/set_total_amount_currency_in_je.py
deleted file mode 100644
index 8426ddcd..0000000
--- a/erpnext/patches/v7_1/set_total_amount_currency_in_je.py
+++ /dev/null
@@ -1,24 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from erpnext import get_default_currency
-
-def execute():
-	frappe.reload_doc("accounts", "doctype", "journal_entry")
-
-	frappe.db.sql(""" update `tabJournal Entry` set total_amount_currency = %s
-		where ifnull(multi_currency, 0) = 0
-		and (pay_to_recd_from is not null or pay_to_recd_from != "") """, get_default_currency())
-
-	for je in frappe.db.sql(""" select name from `tabJournal Entry` where multi_currency = 1
-		and (pay_to_recd_from is not null or pay_to_recd_from != "")""", as_dict=1):
-
-		doc = frappe.get_doc("Journal Entry", je.name)
-		for d in doc.get('accounts'):
-			if d.party_type and d.party:
-				total_amount_currency = d.account_currency
-
-			elif frappe.db.get_value("Account", d.account, "account_type") in ["Bank", "Cash"]:
-				total_amount_currency = d.account_currency
-
-		frappe.db.set_value("Journal Entry", je.name, "total_amount_currency",
-			total_amount_currency, update_modified=False)
diff --git a/erpnext/patches/v7_1/update_bom_base_currency.py b/erpnext/patches/v7_1/update_bom_base_currency.py
deleted file mode 100644
index 9a59209..0000000
--- a/erpnext/patches/v7_1/update_bom_base_currency.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from erpnext import get_default_currency
-
-def execute():
-	frappe.reload_doc("manufacturing", "doctype", "bom")
-	frappe.reload_doc("manufacturing", "doctype", "bom_item")
-	frappe.reload_doc("manufacturing", "doctype", "bom_explosion_item")
-	frappe.reload_doc("manufacturing", "doctype", "bom_operation")
-	frappe.reload_doc("manufacturing", "doctype", "bom_scrap_item")
-
-	frappe.db.sql(""" update `tabBOM Operation` set base_hour_rate = hour_rate,
-		base_operating_cost = operating_cost """)
-
-	frappe.db.sql(""" update `tabBOM Item` set base_rate = rate, base_amount = amount """)
-	frappe.db.sql(""" update `tabBOM Scrap Item` set base_rate = rate, base_amount = amount """)
-
-	frappe.db.sql(""" update `tabBOM` set `tabBOM`.base_operating_cost = `tabBOM`.operating_cost, 
-		`tabBOM`.base_raw_material_cost = `tabBOM`.raw_material_cost,
-		`tabBOM`.currency = (select default_currency from `tabCompany` where name = `tabBOM`.company)""")
diff --git a/erpnext/patches/v7_1/update_component_type.py b/erpnext/patches/v7_1/update_component_type.py
deleted file mode 100644
index 24ca057..0000000
--- a/erpnext/patches/v7_1/update_component_type.py
+++ /dev/null
@@ -1,15 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import flt
-
-def execute():
-	frappe.reload_doc('Payroll', 'doctype', 'salary_component')
-	sal_components = frappe.db.sql("""
-		select DISTINCT salary_component, parentfield from `tabSalary Detail`""", as_dict=True)
-
-	if sal_components:
-		for sal_component in sal_components:
-			if sal_component.parentfield == "earnings":
-				frappe.db.sql("""update `tabSalary Component` set type='Earning' where salary_component=%(sal_comp)s""",{"sal_comp": sal_component.salary_component})
-			else:
-				frappe.db.sql("""update `tabSalary Component` set type='Deduction' where salary_component=%(sal_comp)s""",{"sal_comp": sal_component.salary_component})
\ No newline at end of file
diff --git a/erpnext/patches/v7_1/update_invoice_status.py b/erpnext/patches/v7_1/update_invoice_status.py
deleted file mode 100644
index 851af80..0000000
--- a/erpnext/patches/v7_1/update_invoice_status.py
+++ /dev/null
@@ -1,34 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc('accounts', 'doctype', 'sales_invoice')
-	frappe.reload_doc('accounts', 'doctype', 'purchase_invoice')
-
-	frappe.db.sql(""" 
-		update 
-			`tabPurchase Invoice` 
-		set 
-			status = (Case When outstanding_amount = 0 and docstatus = 1 and is_return = 0 then 'Paid'
-			when due_date < CURDATE() and outstanding_amount > 0 and docstatus =1 then 'Overdue'
-			when due_date >= CURDATE() and outstanding_amount > 0 and docstatus =1 then 'Unpaid'
-			when outstanding_amount < 0 and docstatus =1 then 'Debit Note Issued'
-			when is_return = 1 and docstatus =1 then 'Return'
-			when docstatus = 2 then 'Cancelled'
-			else 'Draft'
-		End)""")
-
-	frappe.db.sql(""" 
-		update 
-			`tabSales Invoice` 
-		set status = (Case When outstanding_amount = 0 and docstatus = 1 and is_return = 0 then 'Paid'
-			when due_date < CURDATE() and outstanding_amount > 0 and docstatus =1 then 'Overdue'
-			when due_date >= CURDATE() and outstanding_amount > 0 and docstatus =1 then 'Unpaid'
-			when outstanding_amount < 0 and docstatus =1 then 'Credit Note Issued'
-			when is_return = 1 and docstatus =1 then 'Return'
-			when docstatus = 2 then 'Cancelled'
-			else 'Draft'
-		End)""")
\ No newline at end of file
diff --git a/erpnext/patches/v7_1/update_lead_source.py b/erpnext/patches/v7_1/update_lead_source.py
deleted file mode 100644
index a2a48a6..0000000
--- a/erpnext/patches/v7_1/update_lead_source.py
+++ /dev/null
@@ -1,29 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe import _
-
-def execute():
-	from erpnext.setup.setup_wizard.operations.install_fixtures import default_lead_sources
-
-	frappe.reload_doc('crm', 'doctype', 'lead_source')
-
-	frappe.local.lang = frappe.db.get_default("lang") or 'en'
-
-	for s in default_lead_sources:
-		insert_lead_source(_(s))
-
-	# get lead sources in existing forms (customized)
-	# and create a document if not created
-	for d in ['Lead', 'Opportunity', 'Quotation', 'Sales Order', 'Delivery Note', 'Sales Invoice']:
-		sources = frappe.db.sql_list('select distinct source from `tab{0}`'.format(d))
-		for s in sources:
-			if s and s not in default_lead_sources:
-				insert_lead_source(s)
-
-		# remove customization for source
-		for p in frappe.get_all('Property Setter', {'doc_type':d, 'field_name':'source', 'property':'options'}):
-			frappe.delete_doc('Property Setter', p.name)
-
-def insert_lead_source(s):
-	if not frappe.db.exists('Lead Source', s):
-		frappe.get_doc(dict(doctype='Lead Source', source_name=s)).insert()
diff --git a/erpnext/patches/v7_1/update_missing_salary_component_type.py b/erpnext/patches/v7_1/update_missing_salary_component_type.py
deleted file mode 100644
index 824f2b8..0000000
--- a/erpnext/patches/v7_1/update_missing_salary_component_type.py
+++ /dev/null
@@ -1,50 +0,0 @@
-from __future__ import unicode_literals
-
-import frappe
-from frappe.utils import cstr
-
-'''
-Some components do not have type set, try and guess whether they turn up in
-earnings or deductions in existing salary slips
-'''
-
-def execute():
-	frappe.reload_doc("accounts", "doctype", "salary_component_account")
-	frappe.reload_doc("Payroll", "doctype", "salary_component")
-	frappe.reload_doc("Payroll", "doctype", "taxable_salary_slab")
-
-	for s in frappe.db.sql('''select name, type, salary_component_abbr from `tabSalary Component`
-			where ifnull(type, "")="" or ifnull(salary_component_abbr, "") = ""''', as_dict=1):
-
-		component = frappe.get_doc('Salary Component', s.name)
-
-		# guess
-		if not s.type:
-			guess = frappe.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 = frappe.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()
diff --git a/erpnext/patches/v7_1/update_portal_roles.py b/erpnext/patches/v7_1/update_portal_roles.py
deleted file mode 100644
index 482586b..0000000
--- a/erpnext/patches/v7_1/update_portal_roles.py
+++ /dev/null
@@ -1,21 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype('Role')
-	frappe.reload_doctype('User')
-	for role_name in ('Customer', 'Supplier', 'Student'):
-		if frappe.db.exists('Role', role_name):
-			frappe.db.set_value('Role', role_name, 'desk_access', 0)
-		else:
-			frappe.get_doc(dict(doctype='Role', role_name=role_name, desk_access=0)).insert()
-
-
-	# set customer, supplier roles
-	for c in frappe.get_all('Contact', fields=['user'], filters={'ifnull(user, "")': ('!=', '')}):
-		user = frappe.get_doc('User', c.user)
-		user.flags.ignore_validate = True
-		user.flags.ignore_mandatory = True
-		user.save()
-
-
diff --git a/erpnext/patches/v7_1/update_total_billing_hours.py b/erpnext/patches/v7_1/update_total_billing_hours.py
deleted file mode 100644
index b9c9602..0000000
--- a/erpnext/patches/v7_1/update_total_billing_hours.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc('projects', 'doctype', 'timesheet_detail')
-	frappe.reload_doc('accounts', 'doctype', 'sales_invoice_timesheet')
-
-	frappe.db.sql("""update tabTimesheet set total_billable_hours=total_hours 
-		where total_billable_amount>0 and docstatus = 1""")
-
-	frappe.db.sql("""update `tabTimesheet Detail` set billing_hours=hours where docstatus < 2""")
-
-	frappe.db.sql(""" update `tabSales Invoice Timesheet` set billing_hours = (select total_billable_hours from `tabTimesheet`
-		where name = time_sheet) where time_sheet is not null""")
\ No newline at end of file
diff --git a/erpnext/patches/v7_2/__init__.py b/erpnext/patches/v7_2/__init__.py
deleted file mode 100644
index baffc48..0000000
--- a/erpnext/patches/v7_2/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v7_2/arrear_leave_encashment_as_salary_component.py b/erpnext/patches/v7_2/arrear_leave_encashment_as_salary_component.py
deleted file mode 100644
index d2583b9..0000000
--- a/erpnext/patches/v7_2/arrear_leave_encashment_as_salary_component.py
+++ /dev/null
@@ -1,36 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	# frappe.reload_doctype('Salary Slip', 'Salary Component')
-	frappe.reload_doc("Payroll", "doctype", "Salary Slip")
-	frappe.reload_doc("Payroll", "doctype", "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()
\ No newline at end of file
diff --git a/erpnext/patches/v7_2/contact_address_links.py b/erpnext/patches/v7_2/contact_address_links.py
deleted file mode 100644
index 200434c..0000000
--- a/erpnext/patches/v7_2/contact_address_links.py
+++ /dev/null
@@ -1,32 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.core.doctype.dynamic_link.dynamic_link import deduplicate_dynamic_links
-from frappe.utils import update_progress_bar
-
-def execute():
-	frappe.reload_doc('core', 'doctype', 'dynamic_link')
-	frappe.reload_doc('contacts', 'doctype', 'contact')
-	frappe.reload_doc('contacts', 'doctype', 'address')
-	map_fields = (
-		('Customer', 'customer'),
-		('Supplier', 'supplier'),
-		('Lead', 'lead'),
-		('Sales Partner', 'sales_partner')
-	)
-	for doctype in ('Contact', 'Address'):
-		if frappe.db.has_column(doctype, 'customer'):
-			items = frappe.get_all(doctype)
-			for i, doc in enumerate(items):
-				doc = frappe.get_doc(doctype, doc.name)
-				dirty = False
-				for field in map_fields:
-					if doc.get(field[1]):
-						doc.append('links', dict(link_doctype=field[0], link_name=doc.get(field[1])))
-						dirty = True
-
-					if dirty:
-						deduplicate_dynamic_links(doc)
-						doc.update_children()
-
-					update_progress_bar('Updating {0}'.format(doctype), i, len(items))
-			print
\ No newline at end of file
diff --git a/erpnext/patches/v7_2/delete_fleet_management_module_def.py b/erpnext/patches/v7_2/delete_fleet_management_module_def.py
deleted file mode 100644
index 542ac11..0000000
--- a/erpnext/patches/v7_2/delete_fleet_management_module_def.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	if frappe.db.exists('Module Def', 'Fleet Management'):
-		frappe.db.sql("""delete from `tabModule Def`
-			where module_name = 'Fleet Management'""")
\ No newline at end of file
diff --git a/erpnext/patches/v7_2/empty_supplied_items_for_non_subcontracted.py b/erpnext/patches/v7_2/empty_supplied_items_for_non_subcontracted.py
deleted file mode 100644
index ec6f8af..0000000
--- a/erpnext/patches/v7_2/empty_supplied_items_for_non_subcontracted.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	for doctype in ["Purchase Order", "Purchase Invoice", "Purchase Receipt"]:
-		child_table = 'Purchase Receipt Item Supplied' if doctype != 'Purchase Order' else 'Purchase Order Item Supplied'
-		for data in frappe.db.sql(""" select distinct `tab{doctype}`.name from `tab{doctype}` , `tab{child_table}`
-			where `tab{doctype}`.name = `tab{child_table}`.parent and `tab{doctype}`.docstatus != 2
-			and `tab{doctype}`.is_subcontracted = 'No' """.format(doctype = doctype, child_table = child_table), as_dict=1):
-			frappe.db.sql(""" delete from `tab{child_table}` 
-				where parent = %s and parenttype = %s""".format(child_table= child_table), (data.name, doctype))
\ No newline at end of file
diff --git a/erpnext/patches/v7_2/make_all_assessment_group.py b/erpnext/patches/v7_2/make_all_assessment_group.py
deleted file mode 100644
index f3ec628..0000000
--- a/erpnext/patches/v7_2/make_all_assessment_group.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	if not frappe.db.exists({"doctype": "Assessment Group","assessment_group_name": "All Assessment Groups"}):
-		frappe.reload_doc("education", "doctype", "assessment_group")
-		doc = frappe.new_doc("Assessment Group")
-		doc.assessment_group_name = "All Assessment Groups"
-		doc.is_group = 1
-		doc.flags.ignore_mandatory = True
-		doc.save()
\ No newline at end of file
diff --git a/erpnext/patches/v7_2/mark_students_active.py b/erpnext/patches/v7_2/mark_students_active.py
deleted file mode 100644
index 7289e4a..0000000
--- a/erpnext/patches/v7_2/mark_students_active.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	# 'Schools' module changed to the 'Education'
-	# frappe.reload_doc('schools', 'doctype', 'student_group_student')
-
-	frappe.reload_doc('education', 'doctype', 'student_group_student')
-	frappe.db.sql("update `tabStudent Group Student` set active=1")
diff --git a/erpnext/patches/v7_2/rename_att_date_attendance.py b/erpnext/patches/v7_2/rename_att_date_attendance.py
deleted file mode 100644
index 7f06d8f..0000000
--- a/erpnext/patches/v7_2/rename_att_date_attendance.py
+++ /dev/null
@@ -1,15 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import update_reports, update_users_report_view_settings, update_property_setters
-
-def execute():
-	if "att_date" not in frappe.db.get_table_columns("Attendance"):
-		return
-	frappe.reload_doc("hr", "doctype", "attendance")
-	frappe.db.sql("""update `tabAttendance` 
-	 		set attendance_date = att_date
-			where attendance_date is null or attendance_date = '0000-00-00'""")
-	
-	update_reports("Attendance", "att_date", "attendance_date")
-	update_users_report_view_settings("Attendance", "att_date", "attendance_date")
-	update_property_setters("Attendance", "att_date", "attendance_date")
diff --git a/erpnext/patches/v7_2/rename_evaluation_criteria.py b/erpnext/patches/v7_2/rename_evaluation_criteria.py
deleted file mode 100644
index c6520b1..0000000
--- a/erpnext/patches/v7_2/rename_evaluation_criteria.py
+++ /dev/null
@@ -1,39 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import rename_field
-
-def execute():
-	# 'Schools' module changed to the 'Education'
-
-
-	frappe.rename_doc("DocType", "Evaluation Criteria", "Assessment Criteria", force=True)
-	# frappe.reload_doc("schools", "doctype", "assessment_criteria")
-	frappe.reload_doc("education", "doctype", "assessment_criteria")
-	if 'evaluation_criteria' in frappe.db.get_table_columns('Assessment Criteria'):
-		rename_field("Assessment Criteria", "evaluation_criteria", "assessment_criteria")
-
-	frappe.rename_doc("DocType", "Assessment Evaluation Criteria", "Assessment Plan Criteria", force=True)
-	# frappe.reload_doc("schools", "doctype", "assessment_plan_criteria")
-	frappe.reload_doc("education", "doctype", "assessment_plan_criteria")
-	if 'evaluation_criteria' in frappe.db.get_table_columns('Assessment Plan'):
-		rename_field("Assessment Plan Criteria", "evaluation_criteria", "assessment_criteria")
-
-	# frappe.reload_doc("schools", "doctype", "assessment_plan")
-	frappe.reload_doc("education", "doctype", "assessment_plan")
-	rename_field("Assessment Plan", "evaluation_criterias", "assessment_criteria")
-
-	# frappe.reload_doc("schools", "doctype", "assessment_result_detail")
-	frappe.reload_doc("education", "doctype", "assessment_result_detail")
-	if 'evaluation_criteria' in frappe.db.get_table_columns('Assessment Result Detail'):
-		rename_field("Assessment Result Detail", "evaluation_criteria", "assessment_criteria")
-
-	frappe.rename_doc("DocType", "Course Evaluation Criteria", "Course Assessment Criteria", force=True)
-	# frappe.reload_doc("schools", "doctype", "course_assessment_criteria")
-	frappe.reload_doc("education", "doctype", "course_assessment_criteria")
-	if 'evaluation_criteria' in frappe.db.get_table_columns('Course Assessment Criteria'):
-		rename_field("Course Assessment Criteria", "evaluation_criteria", "assessment_criteria")
-
-	# frappe.reload_doc("schools", "doctype", "course")
-	frappe.reload_doc("education", "doctype", "course")
-	if 'evaluation_criteria' in frappe.db.get_table_columns('Course'):
-		rename_field("Course", "evaluation_criterias", "assessment_criteria")
diff --git a/erpnext/patches/v7_2/set_null_value_to_fields.py b/erpnext/patches/v7_2/set_null_value_to_fields.py
deleted file mode 100644
index 6388be4..0000000
--- a/erpnext/patches/v7_2/set_null_value_to_fields.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	fields = {"Cost Center": "project", "Project": "cost_center"}
-	for budget_against, field in fields.items():
-		frappe.db.sql(""" update `tabBudget` set {field} = null
-			where budget_against = %s """.format(field = field), budget_against)
diff --git a/erpnext/patches/v7_2/setup_auto_close_settings.py b/erpnext/patches/v7_2/setup_auto_close_settings.py
deleted file mode 100644
index 4eef2b9..0000000
--- a/erpnext/patches/v7_2/setup_auto_close_settings.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	# update the selling settings and set the close_opportunity_after_days
-	frappe.reload_doc("selling", "doctype", "selling_settings")
-	frappe.db.set_value("Selling Settings", "Selling Settings", "close_opportunity_after_days", 15)
-
-	# Auto close Replied opportunity
-	frappe.db.sql("""update `tabOpportunity` set status='Closed' where status='Replied'
-		 and date_sub(curdate(), interval 15 Day)>modified""")
-
-	# create Support Settings doctype and update close_issue_after_days
-	frappe.reload_doc("support", "doctype", "support_settings")
-	frappe.db.set_value("Support Settings", "Support Settings", "close_issue_after_days", 7)
\ No newline at end of file
diff --git a/erpnext/patches/v7_2/stock_uom_in_selling.py b/erpnext/patches/v7_2/stock_uom_in_selling.py
deleted file mode 100644
index d029555..0000000
--- a/erpnext/patches/v7_2/stock_uom_in_selling.py
+++ /dev/null
@@ -1,15 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype('Sales Order')
-	frappe.reload_doctype('Sales Invoice')
-	frappe.reload_doctype('Quotation')
-	frappe.reload_doctype('Delivery Note')
-
-	doctype_list = ['Sales Order Item', 'Delivery Note Item', 'Quotation Item', 'Sales Invoice Item']
-
-	for doctype in doctype_list:
-		frappe.reload_doctype(doctype)
-		frappe.db.sql("""update `tab{doctype}` 
-		 		set uom = stock_uom, conversion_factor = 1, stock_qty = qty""".format(doctype=doctype))
\ No newline at end of file
diff --git a/erpnext/patches/v7_2/update_abbr_in_salary_slips.py b/erpnext/patches/v7_2/update_abbr_in_salary_slips.py
deleted file mode 100644
index 57432fe..0000000
--- a/erpnext/patches/v7_2/update_abbr_in_salary_slips.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc('Payroll', '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))
\ No newline at end of file
diff --git a/erpnext/patches/v7_2/update_assessment_modules.py b/erpnext/patches/v7_2/update_assessment_modules.py
deleted file mode 100644
index 2b5e774..0000000
--- a/erpnext/patches/v7_2/update_assessment_modules.py
+++ /dev/null
@@ -1,51 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import rename_field
-
-def execute():
-	#Rename Grading Structure to Grading Scale
-	if not frappe.db.exists("DocType", "Grading Scale"):
-		frappe.rename_doc("DocType", "Grading Structure", "Grading Scale", force=True)
-	if not frappe.db.exists("DocType", "Grading Scale Interval"):
-		frappe.rename_doc("DocType", "Grade Interval", "Grading Scale Interval", force=True)
-
-	# frappe.reload_doc("schools", "doctype", "grading_scale_interval")
-	frappe.reload_doc("education", "doctype", "grading_scale_interval")
-	if "to_score" in frappe.db.get_table_columns("Grading Scale Interval"):
-		rename_field("Grading Scale Interval", "to_score", "threshold")
-
-	if not frappe.db.exists("DocType", "Assessment Plan"):
-		frappe.rename_doc("DocType", "Assessment", "Assessment Plan", force=True)
-
-	# 'Schools' module changed to the 'Education'
-	# frappe.reload_doc("schools", "doctype", "assessment_plan")
-
-	#Rename Assessment Results
-	frappe.reload_doc("education", "doctype", "assessment_plan")
-	if "grading_structure" in frappe.db.get_table_columns("Assessment Plan"):
-		rename_field("Assessment Plan", "grading_structure", "grading_scale")
-
-	# frappe.reload_doc("schools", "doctype", "assessment_result")
-	# frappe.reload_doc("schools", "doctype", "assessment_result_detail")
-	# frappe.reload_doc("schools", "doctype", "assessment_criteria")
-	frappe.reload_doc("education", "doctype", "assessment_result")
-	frappe.reload_doc("education", "doctype", "assessment_result_detail")
-	frappe.reload_doc("education", "doctype", "assessment_criteria")
-
-
-	for assessment in frappe.get_all("Assessment Plan", 
-			fields=["name", "grading_scale"], filters = [["docstatus", "!=", 2 ]]):
-		for stud_result in frappe.db.sql("select * from `tabAssessment Result` where parent= %s", 
-				assessment.name, as_dict=True):
-			if stud_result.result:
-				assessment_result = frappe.new_doc("Assessment Result")
-				assessment_result.student = stud_result.student
-				assessment_result.student_name = stud_result.student_name
-				assessment_result.assessment_plan = assessment.name
-				assessment_result.grading_scale = assessment.grading_scale
-				assessment_result.total_score = stud_result.result
-				assessment_result.flags.ignore_validate = True
-				assessment_result.flags.ignore_mandatory = True
-				assessment_result.save()
-	
-	frappe.db.sql("""delete from `tabAssessment Result` where parent != '' or parent is not null""")
\ No newline at end of file
diff --git a/erpnext/patches/v7_2/update_attendance_docstatus.py b/erpnext/patches/v7_2/update_attendance_docstatus.py
deleted file mode 100644
index a690526..0000000
--- a/erpnext/patches/v7_2/update_attendance_docstatus.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc("education", "doctype", "student_attendance")
-	frappe.db.sql('''
-		update `tabStudent Attendance` set
-			docstatus=0
-		where
-			docstatus=1''')
\ No newline at end of file
diff --git a/erpnext/patches/v7_2/update_doctype_status.py b/erpnext/patches/v7_2/update_doctype_status.py
deleted file mode 100644
index c66f3f2..0000000
--- a/erpnext/patches/v7_2/update_doctype_status.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	doctypes = ["Opportunity", "Quotation", "Sales Order", "Sales Invoice", "Purchase Invoice", "Purchase Order", "Delivery Note", "Purchase Receipt"]
-	for doctype in doctypes:
-		frappe.db.sql(""" update `tab{doctype}` set status = 'Draft'
-			where status = 'Cancelled' and docstatus = 0 """.format(doctype = doctype))
\ No newline at end of file
diff --git a/erpnext/patches/v7_2/update_guardian_name_in_student_master.py b/erpnext/patches/v7_2/update_guardian_name_in_student_master.py
deleted file mode 100644
index 9f589ef..0000000
--- a/erpnext/patches/v7_2/update_guardian_name_in_student_master.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import rename_field
-
-def execute():
-	# 'Schools' module changed to the 'Education'
-	# frappe.reload_doc("schools", "doctype", "student_guardian")
-	frappe.reload_doc("education", "doctype", "student_guardian")
-
-	student_guardians = frappe.get_all("Student Guardian", fields=["guardian"])
-	for student_guardian in student_guardians:
-		guardian_name = frappe.db.get_value("Guardian", student_guardian.guardian, "guardian_name")
-		frappe.db.sql("update `tabStudent Guardian` set guardian_name = %s where guardian= %s",
-			(guardian_name, student_guardian.guardian))
\ No newline at end of file
diff --git a/erpnext/patches/v7_2/update_party_type.py b/erpnext/patches/v7_2/update_party_type.py
deleted file mode 100644
index 147f5a3..0000000
--- a/erpnext/patches/v7_2/update_party_type.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc('setup', 'doctype', 'party_type')
-	make_party_type()
-
-def make_party_type():
-	for party_type in ["Customer", "Supplier", "Employee"]:
-		if not frappe.db.get_value("Party Type", party_type):
-			doc = frappe.new_doc("Party Type")
-			doc.party_type = party_type
-			doc.save(ignore_permissions=True)
\ No newline at end of file
diff --git a/erpnext/patches/v7_2/update_salary_slips.py b/erpnext/patches/v7_2/update_salary_slips.py
deleted file mode 100644
index 9fcce62..0000000
--- a/erpnext/patches/v7_2/update_salary_slips.py
+++ /dev/null
@@ -1,22 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from erpnext.payroll.doctype.payroll_entry.payroll_entry import get_month_details
-from frappe.utils import cint
-
-def execute():
-	frappe.reload_doc("Payroll", "doctype", "Salary Slip")
-	if not frappe.db.has_column('Salary Slip', 'fiscal_year'):
-		return
-
-	salary_slips = frappe.db.sql("""select month, name, fiscal_year from `tabSalary Slip`
-				where (month is not null and month != '') and
-				start_date is null and end_date is null and docstatus != 2""", as_dict=True)
-
-	for salary_slip in salary_slips:
-		if not cint(salary_slip.month):
-			continue
-		get_start_end_date = get_month_details(salary_slip.fiscal_year, cint(salary_slip.month))
-		start_date = get_start_end_date['month_start_date']
-		end_date = get_start_end_date['month_end_date']
-		frappe.db.sql("""update `tabSalary Slip` set start_date = %s, end_date = %s where name = %s""",
-		(start_date, end_date, salary_slip.name))
\ No newline at end of file
diff --git a/erpnext/patches/v7_2/update_website_for_variant.py b/erpnext/patches/v7_2/update_website_for_variant.py
deleted file mode 100644
index e8eef6e..0000000
--- a/erpnext/patches/v7_2/update_website_for_variant.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	# variant must have show_in_website = 0
-	frappe.reload_doctype('Item')
-	frappe.db.sql('''
-		update tabItem set
-			show_variant_in_website = 1,
-			show_in_website = 0
-		where
-			show_in_website=1
-			and ifnull(variant_of, "")!=""''')
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/__init__.py b/erpnext/patches/v8_0/__init__.py
deleted file mode 100644
index baffc48..0000000
--- a/erpnext/patches/v8_0/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v8_0/addresses_linked_to_lead.py b/erpnext/patches/v8_0/addresses_linked_to_lead.py
deleted file mode 100644
index b5f2234..0000000
--- a/erpnext/patches/v8_0/addresses_linked_to_lead.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.db.sql("""UPDATE `tabDynamic Link` SET link_doctype = 'Lead' WHERE link_doctype = 'Load'""")
diff --git a/erpnext/patches/v8_0/change_in_words_varchar_length.py b/erpnext/patches/v8_0/change_in_words_varchar_length.py
deleted file mode 100644
index 68ff95b..0000000
--- a/erpnext/patches/v8_0/change_in_words_varchar_length.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	doctypes = frappe.db.sql_list("""select parent from tabDocField where fieldname = 'in_words'""")
-		
-	for dt in doctypes:
-		for fieldname in ("in_words", "base_in_words"):
-			frappe.db.sql("alter table `tab{0}` change column `{1}` `{2}` varchar(255)"
-				.format(dt, fieldname, fieldname))
-				
-	frappe.db.sql("""alter table `tabJournal Entry` 
-		change column `total_amount_in_words` `total_amount_in_words` varchar(255)""")
diff --git a/erpnext/patches/v8_0/create_address_doc_from_address_field_in_company.py b/erpnext/patches/v8_0/create_address_doc_from_address_field_in_company.py
deleted file mode 100644
index cf1bc5a..0000000
--- a/erpnext/patches/v8_0/create_address_doc_from_address_field_in_company.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	# new field address_html is created in place of address field for the company's address in PR #8754 (without patch)
-	# so here is the patch for moving the address details in the address doc
-	company_list = []
-	if 'address' in frappe.db.get_table_columns('Company'):
-		company_list = frappe.db.sql('''select name, address from `tabCompany` 
-			where address is not null and address != ""''', as_dict=1)
-
-	for company in company_list:
-		add_list = company.address.split(" ")
-		if ',' in company.address:
-			add_list = company.address.rpartition(',')
-		elif ' ' in company.address:
-			add_list = company.address.rpartition(' ')
-		else:
-			add_list = [company.address, None, company.address]
-
-		doc = frappe.get_doc({
-			"doctype":"Address",
-			"address_line1": add_list[0],
-			"city": add_list[2],
-			"links": [{
-				"link_doctype": "Company",
-				"link_name": company.name
-				}]
-			})
-		doc.save()
diff --git a/erpnext/patches/v8_0/create_domain_docs.py b/erpnext/patches/v8_0/create_domain_docs.py
deleted file mode 100644
index 3ef4f3c..0000000
--- a/erpnext/patches/v8_0/create_domain_docs.py
+++ /dev/null
@@ -1,53 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-import erpnext
-
-def execute():
-	"""Create domain documents"""
-	frappe.reload_doc("core", "doctype", "domain")
-	frappe.reload_doc("core", "doctype", "domain_settings")
-	frappe.reload_doc("core", "doctype", "has_domain")
-	frappe.reload_doc("core", "doctype", "role")
-
-	for domain in ("Distribution", "Manufacturing", "Retail", "Services", "Education"):
-		if not frappe.db.exists({"doctype": "Domain", "domain": domain}):
-			create_domain(domain)
-
-	# set domain in domain settings based on company domain
-
-	domains = []
-	condition = ""
-	company = erpnext.get_default_company()
-	if company:
-		condition = " and name={0}".format(frappe.db.escape(company))
-
-	domains = frappe.db.sql_list("select distinct domain from `tabCompany` where domain != 'Other' {0}".format(condition))
-
-	if not domains:
-		return
-
-	domain_settings = frappe.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 frappe.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 create_domain(domain):
-	# create new domain
-
-	doc = frappe.new_doc("Domain")
-	doc.domain = domain
-	doc.db_update()
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/delete_bin_indexes.py b/erpnext/patches/v8_0/delete_bin_indexes.py
deleted file mode 100644
index 12cacdb..0000000
--- a/erpnext/patches/v8_0/delete_bin_indexes.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-# -*- coding: utf-8 -*-
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	# delete bin indexes
-	unwanted_indexes = ["item_code", "warehouse"]
-
-	for k in unwanted_indexes:
-		try:
-			frappe.db.sql("drop index {0} on `tabBin`".format(k))
-		except:
-			pass
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/delete_schools_depricated_doctypes.py b/erpnext/patches/v8_0/delete_schools_depricated_doctypes.py
deleted file mode 100644
index 09a78ed..0000000
--- a/erpnext/patches/v8_0/delete_schools_depricated_doctypes.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2017, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	""" delete doctypes """
-
-	if frappe.db.exists("DocType", "Grading Structure"):
-		frappe.delete_doc("DocType", "Grading Structure", force=1)
-
-	if frappe.db.exists("DocType", "Grade Interval"):
-		frappe.delete_doc("DocType", "Grade Interval", force=1)
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/disable_instructor_role.py b/erpnext/patches/v8_0/disable_instructor_role.py
deleted file mode 100644
index 4ba78d1..0000000
--- a/erpnext/patches/v8_0/disable_instructor_role.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	""" 
-		disable the instructor role for companies with domain other than
-		Education.
-	"""
-
-	domains = frappe.db.sql_list("select domain from tabCompany")
-	if "Education" not in domains:
-		if frappe.db.exists("Role", "Instructor"):
-			role = frappe.get_doc("Role", "Instructor")
-			role.disabled = 1
-			role.save(ignore_permissions=True)
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/enable_booking_asset_depreciation_automatically.py b/erpnext/patches/v8_0/enable_booking_asset_depreciation_automatically.py
deleted file mode 100644
index 1088d70..0000000
--- a/erpnext/patches/v8_0/enable_booking_asset_depreciation_automatically.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.db.set_value("Accounts Settings", None, 
-		"book_asset_depreciation_entry_automatically", 1)
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/fix_status_for_invoices_with_negative_outstanding.py b/erpnext/patches/v8_0/fix_status_for_invoices_with_negative_outstanding.py
deleted file mode 100644
index 2e7f360..0000000
--- a/erpnext/patches/v8_0/fix_status_for_invoices_with_negative_outstanding.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	for dt, status in [["Sales Invoice", "Credit Note Issued"], ["Purchase Invoice", "Debit Note Issued"]]:
-		invoices = frappe.db.sql("""
-			select name 
-			from `tab{0}`
-			where 
-				status = %s
-				and outstanding_amount < 0
-				and docstatus=1
-				and is_return=0
-		""".format(dt), status)
-		
-		for inv in invoices:
-			return_inv = frappe.db.sql("""select name from `tab{0}` 
-				where is_return=1 and return_against=%s and docstatus=1""".format(dt), inv[0])
-			if not return_inv:
-				frappe.db.sql("update `tab{0}` set status='Paid' where name = %s".format(dt), inv[0])
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/make_payments_table_blank_for_non_pos_invoice.py b/erpnext/patches/v8_0/make_payments_table_blank_for_non_pos_invoice.py
deleted file mode 100644
index 9750fb7..0000000
--- a/erpnext/patches/v8_0/make_payments_table_blank_for_non_pos_invoice.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype('Sales Invoice')
-
-	frappe.db.sql("""
-		delete from 
-			`tabSales Invoice Payment` 
-		where 
-			parent in (select name from `tabSales Invoice` where is_pos = 0)
-	""")
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/merge_student_batch_and_student_group.py b/erpnext/patches/v8_0/merge_student_batch_and_student_group.py
deleted file mode 100644
index fb9021f..0000000
--- a/erpnext/patches/v8_0/merge_student_batch_and_student_group.py
+++ /dev/null
@@ -1,73 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import *
-from frappe.model.mapper import get_mapped_doc
-
-
-def execute():
-	# for converting student batch into student group
-	for doctype in ["Student Group", "Student Group Student", 'Program Enrollment',
-		"Student Group Instructor", "Student Attendance", "Student", "Student Batch Name"]:
-		# 'Schools' module changed to the 'Education'
-		# frappe.reload_doc("schools", "doctype", frappe.scrub(doctype))
-
-		frappe.reload_doc("education", "doctype", frappe.scrub(doctype))
-
-	if frappe.db.table_exists("Student Batch"):
-		student_batches = frappe.db.sql('''select name as student_group_name, student_batch_name as batch,
-			program, academic_year, academic_term from `tabStudent Batch`''', as_dict=1)
-
-		for student_batch in student_batches:
-			# create student batch name if does not exists !!
-			if student_batch.get("batch") and not frappe.db.exists("Student Batch Name", student_batch.get("batch")):
-				frappe.get_doc({
-					"doctype": "Student Batch Name",
-					"batch_name": student_batch.get("batch")
-				}).insert(ignore_permissions=True)
-
-			student_batch.update({"doctype":"Student Group", "group_based_on": "Batch"})
-			doc = frappe.get_doc(student_batch)
-
-			if frappe.db.sql("SHOW COLUMNS FROM `tabStudent Batch Student` LIKE 'active'"):
-				cond = ", active"
-			else:
-				cond = " "
-			student_list = frappe.db.sql('''select student, student_name {cond} from `tabStudent Batch Student`
-				where parent=%s'''.format(cond=cond), (doc.student_group_name), as_dict=1)
-
-			if student_list:
-				for i, student in enumerate(student_list):
-					student.update({"group_roll_number": i+1})
-				doc.extend("students", student_list)
-
-			instructor_list = None
-			if frappe.db.table_exists("Student Batch Instructor"):
-				instructor_list = frappe.db.sql('''select instructor, instructor_name from `tabStudent Batch Instructor`
-					where parent=%s''', (doc.student_group_name), as_dict=1)
-			if instructor_list:
-				doc.extend("instructors", instructor_list)
-			doc.save()
-
-	# delete the student batch and child-table
-	if frappe.db.table_exists("Student Batch"):
-		frappe.delete_doc("DocType", "Student Batch", force=1)
-	if frappe.db.table_exists("Student Batch Student"):
-		frappe.delete_doc("DocType", "Student Batch Student", force=1)
-	if frappe.db.table_exists("Student Batch Instructor"):
-		frappe.delete_doc("DocType", "Student Batch Instructor", force=1)
-
-	# delete the student batch creation tool
-	if frappe.db.table_exists("Student Batch Creation Tool"):
-		frappe.delete_doc("DocType", "Student Batch Creation Tool", force=1)
-
-	# delete the student batch creation tool
-	if frappe.db.table_exists("Attendance Tool Student"):
-		frappe.delete_doc("DocType", "Attendance Tool Student", force=1)
-
-	# change the student batch to student group in the student attendance
-	table_columns = frappe.db.get_table_columns("Student Attendance")
-	if "student_batch" in table_columns:
-		rename_field("Student Attendance", "student_batch", "student_group")
diff --git a/erpnext/patches/v8_0/move_account_head_from_account_to_warehouse_for_inventory.py b/erpnext/patches/v8_0/move_account_head_from_account_to_warehouse_for_inventory.py
deleted file mode 100644
index b59d818..0000000
--- a/erpnext/patches/v8_0/move_account_head_from_account_to_warehouse_for_inventory.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype("Warehouse")
-	frappe.db.sql("""
-		update 
-			`tabWarehouse` 
-		set 
-			account = (select name from `tabAccount` 
-				where account_type = 'Stock' and 
-				warehouse = `tabWarehouse`.name and is_group = 0 limit 1)""")
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/move_perpetual_inventory_setting.py b/erpnext/patches/v8_0/move_perpetual_inventory_setting.py
deleted file mode 100644
index 78322d4..0000000
--- a/erpnext/patches/v8_0/move_perpetual_inventory_setting.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-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()
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/rename_is_sample_item_to_allow_zero_valuation_rate.py b/erpnext/patches/v8_0/rename_is_sample_item_to_allow_zero_valuation_rate.py
deleted file mode 100644
index e517df5..0000000
--- a/erpnext/patches/v8_0/rename_is_sample_item_to_allow_zero_valuation_rate.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import rename_field
-
-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")
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/rename_items_in_status_field_of_material_request.py b/erpnext/patches/v8_0/rename_items_in_status_field_of_material_request.py
deleted file mode 100644
index 5ad862a..0000000
--- a/erpnext/patches/v8_0/rename_items_in_status_field_of_material_request.py
+++ /dev/null
@@ -1,25 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.db.sql(
-		"""
-		UPDATE `tabMaterial Request`
-			SET status = CASE
-							WHEN docstatus = 2 THEN 'Cancelled'
-							WHEN docstatus = 0 THEN 'Draft'
-							ELSE CASE
-								WHEN status = 'Stopped' THEN 'Stopped'
-								WHEN status != 'Stopped' AND per_ordered = 0 THEN 'Pending'
-								WHEN per_ordered < 100 AND per_ordered > 0 AND status != 'Stopped'
-									THEN 'Partially Ordered'
-								WHEN per_ordered = 100 AND material_request_type = 'Purchase'
-									AND status != 'Stopped' THEN 'Ordered'
-								WHEN per_ordered = 100 AND material_request_type = 'Material Transfer'
-									AND status != 'Stopped' THEN 'Transferred'
-								WHEN per_ordered = 100 AND material_request_type = 'Material Issue'
-									AND status != 'Stopped' THEN 'Issued'
-							END
-			END
-		"""
-	)
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/rename_total_margin_to_rate_with_margin.py b/erpnext/patches/v8_0/rename_total_margin_to_rate_with_margin.py
deleted file mode 100644
index 4065438..0000000
--- a/erpnext/patches/v8_0/rename_total_margin_to_rate_with_margin.py
+++ /dev/null
@@ -1,24 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-from frappe.model.utils.rename_field import rename_field
-
-def execute():
-	""" 
-		Rename Total Margin field to Rate With Margin in
-		"Sales Order Item", "Sales Invoice Item", "Delivery Note Item",
-		"Quotation Item"
-	"""
-
-	for d in ("Sales Order Item", "Sales Invoice Item",
-		"Delivery Note Item", "Quotation Item"):
-		frappe.reload_doctype(d)
-		rename_field_if_exists(d, "total_margin", "rate_with_margin")
-
-
-def rename_field_if_exists(doctype, old_fieldname, new_fieldname):
-	try:
-		rename_field(doctype, old_fieldname, new_fieldname)
-	except Exception as e:
-		if e.args[0] != 1054:
-			raise
diff --git a/erpnext/patches/v8_0/repost_reserved_qty_for_multiple_sales_uom.py b/erpnext/patches/v8_0/repost_reserved_qty_for_multiple_sales_uom.py
deleted file mode 100644
index 3030b8e..0000000
--- a/erpnext/patches/v8_0/repost_reserved_qty_for_multiple_sales_uom.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from erpnext.stock.stock_balance import update_bin_qty, get_reserved_qty
-
-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)
-		})
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/revert_manufacturers_table_from_item.py b/erpnext/patches/v8_0/revert_manufacturers_table_from_item.py
deleted file mode 100644
index 60cbb33..0000000
--- a/erpnext/patches/v8_0/revert_manufacturers_table_from_item.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	if frappe.db.exists("DocType", "Item Manufacturer"):
-		frappe.reload_doctype("Item")
-		item_manufacturers = frappe.db.sql("""
-			select parent, manufacturer, manufacturer_part_no 
-			from `tabItem Manufacturer`
-		""", as_dict=1)
-		
-		for im in item_manufacturers:
-			frappe.db.sql("""
-				update tabItem 
-				set manufacturer=%s, manufacturer_part_no=%s
-				where name=%s
-			""", (im.manufacturer, im.manufacturer_part_no, im.parent))
-		
-		frappe.delete_doc("DocType", "Item Manufacturer")
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/save_system_settings.py b/erpnext/patches/v8_0/save_system_settings.py
deleted file mode 100644
index d479ece..0000000
--- a/erpnext/patches/v8_0/save_system_settings.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import cint
-
-def execute():
-	"""
-		save system settings document
-	"""
-
-	frappe.reload_doc("core", "doctype", "system_settings")
-	doc = frappe.get_doc("System Settings")
-	doc.flags.ignore_mandatory = True
-
-	if cint(doc.currency_precision) == 0:
-		doc.currency_precision = ''
-
-	doc.save(ignore_permissions=True)
diff --git a/erpnext/patches/v8_0/set_null_to_serial_nos_for_disabled_sales_invoices.py b/erpnext/patches/v8_0/set_null_to_serial_nos_for_disabled_sales_invoices.py
deleted file mode 100644
index 197d6de..0000000
--- a/erpnext/patches/v8_0/set_null_to_serial_nos_for_disabled_sales_invoices.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from erpnext.stock.stock_balance import update_bin_qty, get_reserved_qty
-
-def execute():
-	frappe.db.sql("""
-		update 
-			`tabSales Invoice Item` 
-		set serial_no = NULL
-		where 
-			parent in (select name from `tabSales Invoice` where update_stock = 0 and docstatus = 1)""")
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/set_project_copied_from.py b/erpnext/patches/v8_0/set_project_copied_from.py
deleted file mode 100644
index d428797..0000000
--- a/erpnext/patches/v8_0/set_project_copied_from.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype("Project")
-	
-	frappe.db.sql('''
-		UPDATE `tabProject`
-		SET copied_from=name
-		WHERE copied_from is NULL
-	''')
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/set_sales_invoice_serial_number_from_delivery_note.py b/erpnext/patches/v8_0/set_sales_invoice_serial_number_from_delivery_note.py
deleted file mode 100644
index 8a4ef40..0000000
--- a/erpnext/patches/v8_0/set_sales_invoice_serial_number_from_delivery_note.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from erpnext.stock.stock_balance import update_bin_qty, get_reserved_qty
-
-def execute():
-	""" Set the Serial Numbers in Sales Invoice Item from Delivery Note Item """
-
-	frappe.reload_doc("stock", "doctype", "serial_no")
-
-	frappe.db.sql(""" update `tabSales Invoice Item` sii inner join
-		`tabDelivery Note Item` dni on sii.dn_detail=dni.name and  sii.qty=dni.qty
-		set sii.serial_no=dni.serial_no where sii.parent IN (select si.name
-			from `tabSales Invoice` si where si.update_stock=0 and si.docstatus=1)""")
-
-	items = frappe.db.sql(""" select  sii.parent, sii.serial_no from  `tabSales Invoice Item` sii
-		left join `tabSales Invoice` si on sii.parent=si.name
-		where si.docstatus=1 and si.update_stock=0""", as_dict=True)
-
-	for item in items:
-		sales_invoice = item.get("parent", None)
-		serial_nos = item.get("serial_no", "")
-
-		if not sales_invoice or not serial_nos:
-			continue
-
-		serial_nos = ["{}".format(frappe.db.escape(no)) for no in serial_nos.split("\n")]
-
-		frappe.db.sql("""
-			UPDATE
-				`tabSerial No`
-			SET
-				sales_invoice={sales_invoice}
-			WHERE
-				name in ({serial_nos})
-			""".format(
-				sales_invoice=frappe.db.escape(sales_invoice),
-				serial_nos=",".join(serial_nos)
-			)
-		)
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/update_customer_pos_id.py b/erpnext/patches/v8_0/update_customer_pos_id.py
deleted file mode 100644
index a772ae9..0000000
--- a/erpnext/patches/v8_0/update_customer_pos_id.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype("Customer")
-	frappe.db.sql(""" update `tabCustomer` set customer_pos_id = name """)
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/update_production_orders.py b/erpnext/patches/v8_0/update_production_orders.py
deleted file mode 100644
index 8e993cc..0000000
--- a/erpnext/patches/v8_0/update_production_orders.py
+++ /dev/null
@@ -1,49 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	# reload schema
-	for doctype in ("Work Order", "Work Order Item", "Work Order Operation", 
-		"BOM Item", "BOM Explosion Item", "BOM"):
-			frappe.reload_doctype(doctype)
-
-	frappe.reload_doc("stock", "doctype", "item")
-	frappe.reload_doc("stock", "doctype", "item_default")
-
-	# fetch all draft and submitted work orders
-	fields = ["name"]
-	if "source_warehouse" in frappe.db.get_table_columns("Work Order"):
-		fields.append("source_warehouse")
-		
-	wo_orders = frappe.get_all("Work Order", filters={"docstatus": ["!=", 2]}, fields=fields)
-	
-	count = 0
-	for p in wo_orders:
-		wo_order = frappe.get_doc("Work Order", p.name)
-		count += 1
-
-		# set required items table
-		wo_order.set_required_items()
-		
-		for item in wo_order.get("required_items"):
-			# set source warehouse based on parent
-			if not item.source_warehouse and "source_warehouse" in fields:
-				item.source_warehouse = wo_order.get("source_warehouse")
-			item.db_update()
-		
-		if wo_order.docstatus == 1:
-			# update transferred qty based on Stock Entry, it also updates db
-			wo_order.update_transaferred_qty_for_required_items()
-			
-			# Set status where it was 'Unstopped', as it is deprecated
-			if wo_order.status == "Unstopped":
-				status = wo_order.get_status()
-				wo_order.db_set("status", status)
-			elif wo_order.status == "Stopped":
-				wo_order.update_reserved_qty_for_production()
-		
-		if count % 200 == 0:
-			frappe.db.commit()
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/update_sales_cost_in_project.py b/erpnext/patches/v8_0/update_sales_cost_in_project.py
deleted file mode 100644
index 1a29fc4..0000000
--- a/erpnext/patches/v8_0/update_sales_cost_in_project.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc("projects", "doctype", "project")
-
-	frappe.db.sql("""
-		update `tabProject` p
-		set total_sales_amount = ifnull((select sum(base_grand_total)
-			from `tabSales Order` where project=p.name and docstatus=1), 0)
-	""")
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/update_status_as_paid_for_completed_expense_claim.py b/erpnext/patches/v8_0/update_status_as_paid_for_completed_expense_claim.py
deleted file mode 100644
index 19d27b2..0000000
--- a/erpnext/patches/v8_0/update_status_as_paid_for_completed_expense_claim.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-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
-	""")
diff --git a/erpnext/patches/v8_0/update_stock_qty_value_in_bom_item.py b/erpnext/patches/v8_0/update_stock_qty_value_in_bom_item.py
deleted file mode 100644
index 1f937bb..0000000
--- a/erpnext/patches/v8_0/update_stock_qty_value_in_bom_item.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc('manufacturing', 'doctype', 'bom_item')
-	frappe.reload_doc('manufacturing', 'doctype', 'bom_explosion_item')
-	frappe.reload_doc('manufacturing', 'doctype', 'bom_scrap_item')
-	frappe.db.sql("update `tabBOM Item` set stock_qty = qty, uom = stock_uom, conversion_factor = 1")
-	frappe.db.sql("update `tabBOM Explosion Item` set stock_qty = qty")
-	if "qty" in frappe.db.get_table_columns("BOM Scrap Item"):
-		frappe.db.sql("update `tabBOM Scrap Item` set stock_qty = qty")
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/update_stock_qty_value_in_purchase_invoice.py b/erpnext/patches/v8_0/update_stock_qty_value_in_purchase_invoice.py
deleted file mode 100644
index be5cf3a..0000000
--- a/erpnext/patches/v8_0/update_stock_qty_value_in_purchase_invoice.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc('accounts', 'doctype', 'purchase_invoice_item')
-	frappe.db.sql("update `tabPurchase Invoice Item` set stock_qty = qty, stock_uom = uom")
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/update_student_groups_from_student_batches.py b/erpnext/patches/v8_0/update_student_groups_from_student_batches.py
deleted file mode 100644
index ae24fe4..0000000
--- a/erpnext/patches/v8_0/update_student_groups_from_student_batches.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import *
-from frappe.model.mapper import get_mapped_doc
-
-
-def execute():
-	if frappe.db.table_exists("Student Batch"):
-		student_batches = frappe.db.sql('''select name from `tabStudent Batch`''', as_dict=1)
-
-		for student_batch in student_batches:
-			if frappe.db.exists("Student Group", student_batch.get("name")):
-				student_group = frappe.get_doc("Student Group", student_batch.get("name"))
-
-				if frappe.db.table_exists("Student Batch Student"):
-					current_student_list = frappe.db.sql_list('''select student from `tabStudent Group Student`
-						where parent=%s''', (student_group.name))
-					batch_student_list = frappe.db.sql_list('''select student from `tabStudent Batch Student`
-						where parent=%s''', (student_group.name))
-
-					student_list = list(set(batch_student_list)-set(current_student_list))
-					if student_list:
-						student_group.extend("students", [{"student":d} for d in student_list])
-
-				if frappe.db.table_exists("Student Batch Instructor"):
-					current_instructor_list = frappe.db.sql_list('''select instructor from `tabStudent Group Instructor`
-						where parent=%s''', (student_group.name))
-					batch_instructor_list = frappe.db.sql_list('''select instructor from `tabStudent Batch Instructor`
-						where parent=%s''', (student_group.name))
-
-					instructor_list = list(set(batch_instructor_list)-set(current_instructor_list))
-					if instructor_list:
-						student_group.extend("instructors", [{"instructor":d} for d in instructor_list])
-
-				student_group.save()
diff --git a/erpnext/patches/v8_0/update_supplier_address_in_stock_entry.py b/erpnext/patches/v8_0/update_supplier_address_in_stock_entry.py
deleted file mode 100644
index a217304..0000000
--- a/erpnext/patches/v8_0/update_supplier_address_in_stock_entry.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	# copy supplier_address to address_display, and set supplier_address to blank
-
-	stock_entries = frappe.db.sql(""" select name, purchase_order, supplier_address from `tabStock Entry`
-		where ifnull(supplier_address, '') <> ''""", as_dict=True)
-
-	frappe.reload_doc('stock', 'doctype', 'stock_entry')
-
-	for stock_entry in stock_entries:
-		# move supplier address to address_display, and fetch the supplier address from purchase order
-
-		se = frappe.get_doc("Stock Entry", stock_entry.get("name"))
-		se.address_display = stock_entry.get("supplier_address")
-		se.supplier_address = frappe.db.get_value("Purchase Order", stock_entry.get("purchase_order"),"supplier_address") or None
-
-		se.db_update()
diff --git a/erpnext/patches/v8_1/__init__.py b/erpnext/patches/v8_1/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/patches/v8_1/__init__.py
+++ /dev/null
diff --git a/erpnext/patches/v8_1/add_hsn_sac_codes.py b/erpnext/patches/v8_1/add_hsn_sac_codes.py
deleted file mode 100644
index 0fce96a..0000000
--- a/erpnext/patches/v8_1/add_hsn_sac_codes.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from erpnext.regional.india.setup import setup
-
-def execute():
-	company = frappe.get_all('Company', filters = {'country': 'India'})
-	if not company:
-		return
-
-	# call setup for india
-	setup(patch=True)
\ No newline at end of file
diff --git a/erpnext/patches/v8_1/add_indexes_in_transaction_doctypes.py b/erpnext/patches/v8_1/add_indexes_in_transaction_doctypes.py
deleted file mode 100644
index 4631602..0000000
--- a/erpnext/patches/v8_1/add_indexes_in_transaction_doctypes.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	for dt in ("Sales Order Item", "Purchase Order Item",
-		"Material Request Item", "Work Order Item", "Packed Item"):
-			frappe.get_doc("DocType", dt).run_module_method("on_doctype_update")
\ No newline at end of file
diff --git a/erpnext/patches/v8_1/allow_invoice_copy_to_edit_after_submit.py b/erpnext/patches/v8_1/allow_invoice_copy_to_edit_after_submit.py
deleted file mode 100644
index 4c606af..0000000
--- a/erpnext/patches/v8_1/allow_invoice_copy_to_edit_after_submit.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	inv_copy_options = "ORIGINAL FOR RECIPIENT\nDUPLICATE FOR TRANSPORTER\nDUPLICATE FOR SUPPLIER\nTRIPLICATE FOR SUPPLIER"
-	
-	frappe.db.sql("""update `tabCustom Field` set allow_on_submit=1, options=%s
-		where fieldname='invoice_copy' and dt = 'Sales Invoice'
-	""", inv_copy_options)
-	
-	frappe.db.sql("""update `tabCustom Field` set read_only=1
-		where fieldname='gst_state_number' and dt = 'Address'
-	""")
diff --git a/erpnext/patches/v8_1/delete_deprecated_reports.py b/erpnext/patches/v8_1/delete_deprecated_reports.py
deleted file mode 100644
index 3e0fdee..0000000
--- a/erpnext/patches/v8_1/delete_deprecated_reports.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	""" delete deprecated reports """
-
-	reports = [
-		"Monthly Salary Register", "Customer Addresses And Contacts",
-		"Supplier Addresses And Contacts"
-	]
-
-	for report in reports:
-		if frappe.db.exists("Report", report):
-			check_and_update_auto_email_report(report)
-			frappe.db.commit()
-
-			frappe.delete_doc("Report", report, ignore_permissions=True)
-
-def check_and_update_auto_email_report(report):
-	""" delete or update auto email report for deprecated report """
-
-	auto_email_report = frappe.db.get_value("Auto Email Report", {"report": report})
-	if not auto_email_report:
-		return
-
-	if report == "Monthly Salary Register":
-		frappe.delete_doc("Auto Email Report", auto_email_report)
-
-	elif report in ["Customer Addresses And Contacts", "Supplier Addresses And Contacts"]:
-		frappe.db.set_value("Auto Email Report", auto_email_report, "report", report)
\ No newline at end of file
diff --git a/erpnext/patches/v8_1/gst_fixes.py b/erpnext/patches/v8_1/gst_fixes.py
deleted file mode 100644
index 34255eb..0000000
--- a/erpnext/patches/v8_1/gst_fixes.py
+++ /dev/null
@@ -1,62 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.custom.doctype.custom_field.custom_field import create_custom_field
-from erpnext.regional.address_template.setup import set_up_address_templates
-
-
-def execute():
-	company = frappe.get_all('Company', filters = {'country': 'India'})
-	if not company:
-		return
-
-	update_existing_custom_fields()
-	add_custom_fields()
-	set_up_address_templates(default_country='India')
-	frappe.reload_doc("regional", "print_format", "gst_tax_invoice")
-
-
-def update_existing_custom_fields():
-	frappe.db.sql("""update `tabCustom Field` set label = 'HSN/SAC'
-		where fieldname='gst_hsn_code' and label='GST HSN Code'
-	""")
-
-	frappe.db.sql("""update `tabCustom Field` set print_hide = 1
-		where fieldname in ('customer_gstin', 'supplier_gstin', 'company_gstin')
-	""")
-
-	frappe.db.sql("""update `tabCustom Field` set insert_after = 'address_display'
-		where fieldname in ('customer_gstin', 'supplier_gstin')
-	""")
-
-	frappe.db.sql("""update `tabCustom Field` set insert_after = 'company_address_display'
-		where fieldname = 'company_gstin'
-	""")
-
-	frappe.db.sql("""update `tabCustom Field` set insert_after = 'description'
-		where fieldname='gst_hsn_code' and dt in ('Sales Invoice Item', 'Purchase Invoice Item')
-	""")
-
-
-def add_custom_fields():
-	hsn_sac_field = dict(fieldname='gst_hsn_code', label='HSN/SAC',
-		fieldtype='Data', options='item_code.gst_hsn_code', insert_after='description')
-
-	custom_fields = {
-		'Address': [
-			dict(fieldname='gst_state_number', label='GST State Number',
-				fieldtype='Int', insert_after='gst_state'),
-		],
-		'Sales Invoice': [
-			dict(fieldname='invoice_copy', label='Invoice Copy',
-				fieldtype='Select', insert_after='project', print_hide=1, allow_on_submit=1,
-				options='ORIGINAL FOR RECIPIENT\nDUPLICATE FOR TRANSPORTER\nTRIPLICATE FOR SUPPLIER'),
-		],
-		'Sales Order Item': [hsn_sac_field],
-		'Delivery Note Item': [hsn_sac_field],
-		'Purchase Order Item': [hsn_sac_field],
-		'Purchase Receipt Item': [hsn_sac_field]
-	}
-
-	for doctype, fields in custom_fields.items():
-		for df in fields:
-			create_custom_field(doctype, df)
diff --git a/erpnext/patches/v8_1/remove_sales_invoice_from_returned_serial_no.py b/erpnext/patches/v8_1/remove_sales_invoice_from_returned_serial_no.py
deleted file mode 100644
index 3962f8f..0000000
--- a/erpnext/patches/v8_1/remove_sales_invoice_from_returned_serial_no.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-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 !='' """)
\ No newline at end of file
diff --git a/erpnext/patches/v8_1/removed_report_support_hours.py b/erpnext/patches/v8_1/removed_report_support_hours.py
deleted file mode 100644
index 0936b22..0000000
--- a/erpnext/patches/v8_1/removed_report_support_hours.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.db.sql(""" update `tabAuto Email Report` set report = %s
-		where name = %s""", ('Support Hour Distribution', 'Support Hours'))
-
-	frappe.db.sql(""" update `tabCustom Role` set report = %s
-		where report = %s""", ('Support Hour Distribution', 'Support Hours'))
-
-	frappe.delete_doc('Report', 'Support Hours')
\ No newline at end of file
diff --git a/erpnext/patches/v8_1/set_delivery_date_in_so_item.py b/erpnext/patches/v8_1/set_delivery_date_in_so_item.py
deleted file mode 100644
index af2d28b..0000000
--- a/erpnext/patches/v8_1/set_delivery_date_in_so_item.py
+++ /dev/null
@@ -1,22 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype("Sales Order")
-	frappe.reload_doctype("Sales Order Item")
-
-	if "final_delivery_date" in frappe.db.get_table_columns("Sales Order"):
-		frappe.db.sql("""
-			update `tabSales Order`
-			set delivery_date = final_delivery_date
-			where (delivery_date is null or delivery_date = '0000-00-00')
-				and order_type = 'Sales'""")
-
-	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
-			and so.order_type = 'Sales'
-			and (so_item.delivery_date is null or so_item.delivery_date = '0000-00-00')
-			and (so.delivery_date is not null and so.delivery_date != '0000-00-00')
-	""")
\ No newline at end of file
diff --git a/erpnext/patches/v8_1/update_expense_claim_status.py b/erpnext/patches/v8_1/update_expense_claim_status.py
deleted file mode 100644
index 4c1b85a..0000000
--- a/erpnext/patches/v8_1/update_expense_claim_status.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype('Expense Claim')
-
-	for data in frappe.db.sql(""" select name from `tabExpense Claim`
-		where (docstatus=1 and total_sanctioned_amount=0 and status = 'Paid') or 
-		(docstatus = 1 and approval_status = 'Rejected' and total_sanctioned_amount > 0)""", as_dict=1):
-		doc = frappe.get_doc('Expense Claim', data.name)
-		if doc.approval_status == 'Rejected':
-			for d in doc.expenses:
-				d.db_set("sanctioned_amount", 0, update_modified = False)
-			doc.db_set("total_sanctioned_amount", 0, update_modified = False)
-
-			frappe.db.sql(""" delete from `tabGL Entry` where voucher_type = 'Expense Claim'
-				and voucher_no = %s""", (doc.name))
-
-		doc.set_status()
-		doc.db_set("status", doc.status, update_modified = False)
\ No newline at end of file
diff --git a/erpnext/patches/v8_1/update_gst_state.py b/erpnext/patches/v8_1/update_gst_state.py
deleted file mode 100644
index 7aaf2d5..0000000
--- a/erpnext/patches/v8_1/update_gst_state.py
+++ /dev/null
@@ -1,15 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from erpnext.regional.india import states
-
-def execute():
-	company = frappe.get_all('Company', filters = {'country': 'India'})
-	if not company:
-		return
-
-	if not frappe.db.get_value("Custom Field", filters={'fieldname':'gst_state'}):
-		return
-
-	frappe.db.sql("update `tabCustom Field` set options=%s where fieldname='gst_state'", '\n'.join(states))
-	frappe.db.sql("update `tabAddress` set gst_state='Chhattisgarh' where gst_state='Chattisgarh'")
-	frappe.db.sql("update `tabAddress` set gst_state_number='05' where gst_state='Uttarakhand'")
diff --git a/erpnext/patches/v8_10/__init__.py b/erpnext/patches/v8_10/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/patches/v8_10/__init__.py
+++ /dev/null
diff --git a/erpnext/patches/v8_10/change_default_customer_credit_days.py b/erpnext/patches/v8_10/change_default_customer_credit_days.py
deleted file mode 100644
index 992be17..0000000
--- a/erpnext/patches/v8_10/change_default_customer_credit_days.py
+++ /dev/null
@@ -1,89 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-
-def execute():
-	frappe.reload_doc("selling", "doctype", "customer")
-	frappe.reload_doc("buying", "doctype", "supplier")
-	frappe.reload_doc("setup", "doctype", "supplier_type")
-	frappe.reload_doc("accounts", "doctype", "payment_term")
-	frappe.reload_doc("accounts", "doctype", "payment_terms_template_detail")
-	frappe.reload_doc("accounts", "doctype", "payment_terms_template")
-
-	payment_terms = []
-	records = []
-	for doctype in ("Customer", "Supplier", "Supplier Type"):
-		credit_days = frappe.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 frappe.db.exists("Payment Terms Template", pyt_template_name):
-				payment_term = make_payment_term(days, based_on)
-				template = make_template(payment_term)
-			else:
-				template = frappe.get_doc("Payment Terms Template", pyt_template_name)
-
-			payment_terms.append('WHEN `name`={0} THEN {1}'.format(frappe.db.escape(party_name), template.template_name))
-			records.append(frappe.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:
-			frappe.db.sql(
-				begin_query_str + value_query_str + cond_query_str + '`name` IN %s',
-				(records,)
-			)
-
-
-def make_template(payment_term):
-	doc = frappe.new_doc('Payment Terms Template Detail')
-	doc.payment_term = payment_term.payment_term_name
-	doc.due_date_based_on = payment_term.due_date_based_on
-	doc.invoice_portion = payment_term.invoice_portion
-	doc.description = payment_term.description
-	doc.credit_days = payment_term.credit_days
-	doc.credit_months = payment_term.credit_months
-
-	template = frappe.new_doc('Payment Terms Template')
-	template.template_name = 'Default Payment Term - {0}'.format(payment_term.payment_term_name)
-	template.append('terms', doc)
-	template.save()
-
-	return template
-
-
-def make_payment_term(days, based_on):
-	based_on_map = {
-		'Fixed Days': 'Day(s) after invoice date',
-		'Last Day of the Next Month': 'Month(s) after the end of the invoice month'
-	}
-
-	doc = frappe.new_doc('Payment Term')
-	doc.due_date_based_on = based_on_map.get(based_on)
-	doc.invoice_portion = 100
-
-	if based_on == 'Fixed Days':
-		doc.credit_days = days
-		doc.description = 'Net payable within {0} days'.format(days)
-		doc.payment_term_name = 'N{0}'.format(days)
-	else:
-		doc.credit_months = 1
-		doc.description = 'Net payable by the end of next month'
-		doc.payment_term_name = 'EO2M'
-
-	doc.save()
-	return doc
diff --git a/erpnext/patches/v8_3/__init__.py b/erpnext/patches/v8_3/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/patches/v8_3/__init__.py
+++ /dev/null
diff --git a/erpnext/patches/v8_3/set_restrict_to_domain_for_module_def.py b/erpnext/patches/v8_3/set_restrict_to_domain_for_module_def.py
deleted file mode 100644
index 6c4c6d5..0000000
--- a/erpnext/patches/v8_3/set_restrict_to_domain_for_module_def.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	""" set the restrict to domain in module def """
-	pass
\ No newline at end of file
diff --git a/erpnext/patches/v8_3/update_company_total_sales.py b/erpnext/patches/v8_3/update_company_total_sales.py
deleted file mode 100644
index 78efecb..0000000
--- a/erpnext/patches/v8_3/update_company_total_sales.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from erpnext.setup.doctype.company.company import update_company_current_month_sales, update_company_monthly_sales
-
-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)
diff --git a/erpnext/patches/v8_4/__init__.py b/erpnext/patches/v8_4/__init__.py
deleted file mode 100644
index baffc48..0000000
--- a/erpnext/patches/v8_4/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v8_4/make_scorecard_records.py b/erpnext/patches/v8_4/make_scorecard_records.py
deleted file mode 100644
index 73afa27..0000000
--- a/erpnext/patches/v8_4/make_scorecard_records.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-from erpnext.buying.doctype.supplier_scorecard.supplier_scorecard import make_default_records
-def execute():
-	frappe.reload_doc('buying', 'doctype', 'supplier_scorecard_variable')
-	frappe.reload_doc('buying', 'doctype', 'supplier_scorecard_standing')
-	make_default_records()
\ No newline at end of file
diff --git a/erpnext/patches/v8_5/__init__.py b/erpnext/patches/v8_5/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/patches/v8_5/__init__.py
+++ /dev/null
diff --git a/erpnext/patches/v8_5/fix_tax_breakup_for_non_invoice_docs.py b/erpnext/patches/v8_5/fix_tax_breakup_for_non_invoice_docs.py
deleted file mode 100644
index 82beba3..0000000
--- a/erpnext/patches/v8_5/fix_tax_breakup_for_non_invoice_docs.py
+++ /dev/null
@@ -1,48 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from erpnext.regional.india.setup import make_custom_fields
-from erpnext.controllers.taxes_and_totals import get_itemised_tax_breakup_html
-
-def execute():
-	companies = [d.name for d in frappe.get_all('Company', filters = {'country': 'India'})]
-	if not companies:
-		return
-
-	make_custom_fields()
-
-	# update invoice copy value
-	values = ["Original for Recipient", "Duplicate for Transporter",
-		"Duplicate for Supplier", "Triplicate for Supplier"]
-	for d in values:
-		frappe.db.sql("update `tabSales Invoice` set invoice_copy=%s where invoice_copy=%s", (d, d))
-
-	# update tax breakup in transactions made after 1st July 2017
-	doctypes = ["Quotation", "Sales Order", "Delivery Note", "Sales Invoice", 
-		"Supplier Quotation", "Purchase Order", "Purchase Receipt", "Purchase Invoice"]
-
-	for doctype in doctypes:
-		frappe.reload_doctype(doctype)
-
-		date_field = "posting_date"
-		if doctype in ["Quotation", "Sales Order", "Supplier Quotation", "Purchase Order"]:
-			date_field = "transaction_date"
-
-		records = [d.name for d in frappe.get_all(doctype, filters={
-			"docstatus": ["!=", 2],
-			date_field: [">=", "2017-07-01"],
-			"company": ["in", companies],
-			"total_taxes_and_charges": [">", 0],
-			"other_charges_calculation": ""
-		})]
-		if records:
-			frappe.db.sql("""
-				update `tab%s Item` dt_item
-				set gst_hsn_code = (select gst_hsn_code from tabItem where name=dt_item.item_code)
-				where parent in (%s)
-					and (gst_hsn_code is null or gst_hsn_code = '')
-			""" % (doctype, ', '.join(['%s']*len(records))), tuple(records))
-
-			for record in records:
-				doc = frappe.get_doc(doctype, record)
-				html = get_itemised_tax_breakup_html(doc)
-				doc.db_set("other_charges_calculation", html, update_modified=False)
\ No newline at end of file
diff --git a/erpnext/patches/v8_5/remove_project_type_property_setter.py b/erpnext/patches/v8_5/remove_project_type_property_setter.py
deleted file mode 100644
index 70a08f5..0000000
--- a/erpnext/patches/v8_5/remove_project_type_property_setter.py
+++ /dev/null
@@ -1,18 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	ps = frappe.db.get_value('Property Setter', dict(doc_type='Project', field_name='project_type',
-		property='options'))
-	if ps:
-		frappe.delete_doc('Property Setter', ps)
-
-	project_types = frappe.db.sql_list('select distinct project_type from tabProject')
-
-	for project_type in project_types:
-		if project_type and not frappe.db.exists("Project Type", project_type):
-			p_type = frappe.get_doc({
-				"doctype": "Project Type",
-				"project_type": project_type
-			})
-			p_type.insert()
\ No newline at end of file
diff --git a/erpnext/patches/v8_5/remove_quotations_route_in_sidebar.py b/erpnext/patches/v8_5/remove_quotations_route_in_sidebar.py
deleted file mode 100644
index 2d7df4a..0000000
--- a/erpnext/patches/v8_5/remove_quotations_route_in_sidebar.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype("Portal Settings")
-
-	frappe.db.sql("""
-		delete from
-			`tabPortal Menu Item`
-		where
-			(route = '/quotations' and title = 'Supplier Quotation')
-		or (route = '/quotation' and title = 'Quotations')
-	""")
\ No newline at end of file
diff --git a/erpnext/patches/v8_5/set_default_mode_of_payment.py b/erpnext/patches/v8_5/set_default_mode_of_payment.py
deleted file mode 100644
index 34ecbb0..0000000
--- a/erpnext/patches/v8_5/set_default_mode_of_payment.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-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""")
\ No newline at end of file
diff --git a/erpnext/patches/v8_5/update_customer_group_in_POS_profile.py b/erpnext/patches/v8_5/update_customer_group_in_POS_profile.py
deleted file mode 100644
index 2661914..0000000
--- a/erpnext/patches/v8_5/update_customer_group_in_POS_profile.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype('POS Profile')
-	customer_group = frappe.db.get_single_value('Selling Settings', 'customer_group')
-	if customer_group:
-		frappe.db.sql(""" update `tabPOS Profile`
-			set customer_group = %s where customer_group is null """, (customer_group))
\ No newline at end of file
diff --git a/erpnext/patches/v8_5/update_existing_data_in_project_type.py b/erpnext/patches/v8_5/update_existing_data_in_project_type.py
deleted file mode 100644
index 497da06..0000000
--- a/erpnext/patches/v8_5/update_existing_data_in_project_type.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc("projects", "doctype", "project_type")
-	frappe.reload_doc("projects", "doctype", "project")
-
-	project_types = ["Internal", "External", "Other"]
-
-	for project_type in project_types:
-		if not frappe.db.exists("Project Type", project_type):
-			p_type = frappe.get_doc({
-				"doctype": "Project Type",
-				"project_type": project_type
-			})
-			p_type.insert()
\ No newline at end of file
diff --git a/erpnext/patches/v8_6/__init__.py b/erpnext/patches/v8_6/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/patches/v8_6/__init__.py
+++ /dev/null
diff --git a/erpnext/patches/v8_6/point_sms_doctype_module_to_frappe_core.py b/erpnext/patches/v8_6/point_sms_doctype_module_to_frappe_core.py
deleted file mode 100644
index 014a74a..0000000
--- a/erpnext/patches/v8_6/point_sms_doctype_module_to_frappe_core.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.db.sql('''UPDATE `tabDocType` SET module="Core" 
-				WHERE name IN ("SMS Parameter", "SMS Settings");''')
\ No newline at end of file
diff --git a/erpnext/patches/v8_6/rename_bom_update_tool.py b/erpnext/patches/v8_6/rename_bom_update_tool.py
deleted file mode 100644
index ef5f335..0000000
--- a/erpnext/patches/v8_6/rename_bom_update_tool.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.delete_doc_if_exists("DocType", "BOM Replace Tool")
-
-	frappe.reload_doctype("BOM")
-	frappe.db.sql("update tabBOM set conversion_rate=1 where conversion_rate is null or conversion_rate=0")
-	frappe.db.sql("update tabBOM set set_rate_of_sub_assembly_item_based_on_bom=1")
\ No newline at end of file
diff --git a/erpnext/patches/v8_6/set_write_permission_for_quotation_for_sales_manager.py b/erpnext/patches/v8_6/set_write_permission_for_quotation_for_sales_manager.py
deleted file mode 100644
index db4f947..0000000
--- a/erpnext/patches/v8_6/set_write_permission_for_quotation_for_sales_manager.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	# Set write permission to permlevel 1 for sales manager role in Quotation doctype
-	frappe.db.sql(""" update `tabCustom DocPerm` set `tabCustom DocPerm`.write = 1
-		where `tabCustom DocPerm`.parent = 'Quotation' and `tabCustom DocPerm`.role = 'Sales Manager'
-		and `tabCustom DocPerm`.permlevel = 1 """)
\ No newline at end of file
diff --git a/erpnext/patches/v8_6/update_timesheet_company_from_PO.py b/erpnext/patches/v8_6/update_timesheet_company_from_PO.py
deleted file mode 100644
index 2d46bee..0000000
--- a/erpnext/patches/v8_6/update_timesheet_company_from_PO.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype('Timesheet')
-	company = frappe.get_all('Company')
-
-	#Check more than one company exists
-	if len(company) > 1:
-		frappe.db.sql(""" update `tabTimesheet` set `tabTimesheet`.company =
-			(select company from `tabWork Order` where name = `tabTimesheet`.work_order)
-			where workn_order is not null and work_order !=''""")
\ No newline at end of file
diff --git a/erpnext/patches/v8_7/__init__.py b/erpnext/patches/v8_7/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/patches/v8_7/__init__.py
+++ /dev/null
diff --git a/erpnext/patches/v8_7/fix_purchase_receipt_status.py b/erpnext/patches/v8_7/fix_purchase_receipt_status.py
deleted file mode 100644
index 99ecb44..0000000
--- a/erpnext/patches/v8_7/fix_purchase_receipt_status.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	# there is no more status called "Submitted", there was an old issue that used
-	# to set it as Submitted, fixed in this commit
-	frappe.db.sql("""
-	update
-		`tabPurchase Receipt`
-	set
-		status = 'To Bill'
-	where
-		status = 'Submitted'""")
\ No newline at end of file
diff --git a/erpnext/patches/v8_7/make_subscription_from_recurring_data.py b/erpnext/patches/v8_7/make_subscription_from_recurring_data.py
deleted file mode 100644
index 2932749..0000000
--- a/erpnext/patches/v8_7/make_subscription_from_recurring_data.py
+++ /dev/null
@@ -1,58 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import today
-
-def execute():
-	frappe.reload_doc('accounts', 'doctype', 'subscription')
-	frappe.reload_doc('selling', 'doctype', 'sales_order')
-	frappe.reload_doc('selling', 'doctype', 'quotation')
-	frappe.reload_doc('buying', 'doctype', 'purchase_order')
-	frappe.reload_doc('buying', 'doctype', 'supplier_quotation')
-	frappe.reload_doc('accounts', 'doctype', 'sales_invoice')
-	frappe.reload_doc('accounts', 'doctype', 'purchase_invoice')
-	frappe.reload_doc('stock', 'doctype', 'purchase_receipt')
-	frappe.reload_doc('stock', 'doctype', 'delivery_note')
-	frappe.reload_doc('accounts', 'doctype', 'journal_entry')
-	frappe.reload_doc('accounts', 'doctype', 'payment_entry')
-
-	for doctype in ['Sales Order', 'Sales Invoice', 'Purchase Order', 'Purchase Invoice']:
-		date_field = "transaction_date"
-		if doctype in ("Sales Invoice", "Purchase Invoice"):
-			date_field = "posting_date"
-
-		for data in get_data(doctype, date_field):
-			make_subscription(doctype, data, date_field)
-
-def get_data(doctype, date_field):
-	return frappe.db.sql(""" select name, from_date, end_date, recurring_type, recurring_id,
-		next_date, notify_by_email, notification_email_address, recurring_print_format,
-		repeat_on_day_of_month, submit_on_creation, docstatus, {0}
-		from `tab{1}` where is_recurring = 1 and next_date >= %s and docstatus < 2
-		order by next_date desc
-	""".format(date_field, doctype), today(), as_dict=1)
-
-def make_subscription(doctype, data, date_field):
-	if data.name == data.recurring_id:
-		start_date = data.get(date_field)
-	else:
-		start_date = frappe.db.get_value(doctype, data.recurring_id, date_field)
-
-	doc = frappe.get_doc({
-		'doctype': 'Subscription',
-		'reference_doctype': doctype,
-		'reference_document': data.recurring_id,
-		'start_date': start_date,
-		'end_date': data.end_date,
-		'frequency': data.recurring_type,
-		'repeat_on_day': data.repeat_on_day_of_month,
-		'notify_by_email': data.notify_by_email,
-		'recipients': data.notification_email_address,
-		'next_schedule_date': data.next_date,
-		'submit_on_creation': data.submit_on_creation
-	}).insert(ignore_permissions=True)
-
-	if data.docstatus == 1:
-		doc.submit()
\ No newline at end of file
diff --git a/erpnext/patches/v8_8/__init__.py b/erpnext/patches/v8_8/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/patches/v8_8/__init__.py
+++ /dev/null
diff --git a/erpnext/patches/v8_8/add_new_fields_in_accounts_settings.py b/erpnext/patches/v8_8/add_new_fields_in_accounts_settings.py
deleted file mode 100644
index bd25f15..0000000
--- a/erpnext/patches/v8_8/add_new_fields_in_accounts_settings.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-
-def execute():
-	frappe.db.sql(
-		"INSERT INTO `tabSingles` (`doctype`, `field`, `value`) VALUES ('Accounts Settings', 'allow_stale', '1'), "
-		"('Accounts Settings', 'stale_days', '1')"
-	)
diff --git a/erpnext/patches/v8_8/set_bom_rate_as_per_uom.py b/erpnext/patches/v8_8/set_bom_rate_as_per_uom.py
deleted file mode 100644
index 5b169cd..0000000
--- a/erpnext/patches/v8_8/set_bom_rate_as_per_uom.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.db.sql("""
-		update `tabBOM Item`
-		set rate = rate * conversion_factor
-		where uom != stock_uom and docstatus < 2
-			and conversion_factor not in (0, 1)
-	""")
\ No newline at end of file
diff --git a/erpnext/patches/v8_9/__init__.py b/erpnext/patches/v8_9/__init__.py
deleted file mode 100644
index 8b13789..0000000
--- a/erpnext/patches/v8_9/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/erpnext/patches/v8_9/add_setup_progress_actions.py b/erpnext/patches/v8_9/add_setup_progress_actions.py
deleted file mode 100644
index 7750107..0000000
--- a/erpnext/patches/v8_9/add_setup_progress_actions.py
+++ /dev/null
@@ -1,47 +0,0 @@
-
-from __future__ import unicode_literals
-import frappe
-from frappe import _
-
-def execute():
-	"""Add setup progress actions"""
-	if not frappe.db.exists('DocType', 'Setup Progress') or not frappe.db.exists('DocType', 'Setup Progress Action'):
-		return
-
-	frappe.reload_doc("setup", "doctype", "setup_progress")
-	frappe.reload_doc("setup", "doctype", "setup_progress_action")
-
-	actions = [
-		{"action_name": "Add Company", "action_doctype": "Company", "min_doc_count": 1, "is_completed": 1,
-			"domains": '[]' },
-		{"action_name": "Set Sales Target", "action_doctype": "Company", "min_doc_count": 99,
-			"action_document": frappe.defaults.get_defaults().get("company") or '',
-			"action_field": "monthly_sales_target", "is_completed": 0,
-			"domains": '["Manufacturing", "Services", "Retail", "Distribution"]' },
-		{"action_name": "Add Customers", "action_doctype": "Customer", "min_doc_count": 1, "is_completed": 0,
-			"domains": '["Manufacturing", "Services", "Retail", "Distribution"]' },
-		{"action_name": "Add Suppliers", "action_doctype": "Supplier", "min_doc_count": 1, "is_completed": 0,
-			"domains": '["Manufacturing", "Services", "Retail", "Distribution"]' },
-		{"action_name": "Add Products", "action_doctype": "Item", "min_doc_count": 1, "is_completed": 0,
-			"domains": '["Manufacturing", "Services", "Retail", "Distribution"]' },
-		{"action_name": "Add Programs", "action_doctype": "Program", "min_doc_count": 1, "is_completed": 0,
-			"domains": '["Education"]' },
-		{"action_name": "Add Instructors", "action_doctype": "Instructor", "min_doc_count": 1, "is_completed": 0,
-			"domains": '["Education"]' },
-		{"action_name": "Add Courses", "action_doctype": "Course", "min_doc_count": 1, "is_completed": 0,
-			"domains": '["Education"]' },
-		{"action_name": "Add Rooms", "action_doctype": "Room", "min_doc_count": 1, "is_completed": 0,
-			"domains": '["Education"]' },
-		{"action_name": "Add Users", "action_doctype": "User", "min_doc_count": 4, "is_completed": 0,
-			"domains": '[]' },
-		{"action_name": "Add Letterhead", "action_doctype": "Letter Head", "min_doc_count": 1, "is_completed": 0,
-			"domains": '[]' }
-	]
-
-	setup_progress = frappe.get_doc("Setup Progress", "Setup Progress")
-	setup_progress.actions = []
-	for action in actions:
-		setup_progress.append("actions", action)
-
-	setup_progress.save(ignore_permissions=True)
-
diff --git a/erpnext/patches/v8_9/delete_gst_doctypes_for_outside_india_accounts.py b/erpnext/patches/v8_9/delete_gst_doctypes_for_outside_india_accounts.py
deleted file mode 100644
index f67af90..0000000
--- a/erpnext/patches/v8_9/delete_gst_doctypes_for_outside_india_accounts.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	company = frappe.get_all('Company', filters = {'country': 'India'})
-	if not company:
-		if frappe.db.exists("DocType", "GST Settings"):
-			frappe.delete_doc("DocType", "GST Settings")
-			frappe.delete_doc("DocType", "GST HSN Code")
-		
-			for report_name in ('GST Sales Register', 'GST Purchase Register',
-				'GST Itemised Sales Register', 'GST Itemised Purchase Register'):
-
-				frappe.delete_doc('Report', report_name)
\ No newline at end of file
diff --git a/erpnext/patches/v8_9/remove_employee_from_salary_structure_parent.py b/erpnext/patches/v8_9/remove_employee_from_salary_structure_parent.py
deleted file mode 100644
index 808ae6d..0000000
--- a/erpnext/patches/v8_9/remove_employee_from_salary_structure_parent.py
+++ /dev/null
@@ -1,6 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	if 'employee' in frappe.db.get_table_columns("Salary Structure"):
-		frappe.db.sql("alter table `tabSalary Structure` drop column employee")
diff --git a/erpnext/patches/v8_9/rename_company_sales_target_field.py b/erpnext/patches/v8_9/rename_company_sales_target_field.py
deleted file mode 100644
index 5433eb6..0000000
--- a/erpnext/patches/v8_9/rename_company_sales_target_field.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import rename_field
-
-def execute():
-	frappe.reload_doc("setup", "doctype", "company")
-	if frappe.db.has_column('Company', 'sales_target'):
-		rename_field("Company", "sales_target", "monthly_sales_target")
diff --git a/erpnext/patches/v8_9/set_default_customer_group.py b/erpnext/patches/v8_9/set_default_customer_group.py
deleted file mode 100644
index cbbe09d..0000000
--- a/erpnext/patches/v8_9/set_default_customer_group.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	selling_settings = frappe.get_single('Selling Settings')
-	selling_settings.set_default_customer_group_and_territory()
-	selling_settings.flags.ignore_mandatory = True
-	selling_settings.save()
diff --git a/erpnext/patches/v8_9/set_default_fields_in_variant_settings.py b/erpnext/patches/v8_9/set_default_fields_in_variant_settings.py
deleted file mode 100644
index a550d09..0000000
--- a/erpnext/patches/v8_9/set_default_fields_in_variant_settings.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc('stock', 'doctype', 'item_variant_settings')
-	frappe.reload_doc('stock', 'doctype', 'variant_field')
-
-	doc = frappe.get_doc('Item Variant Settings')
-	doc.set_default_fields()
-	doc.save()
\ No newline at end of file
diff --git a/erpnext/patches/v8_9/set_member_party_type.py b/erpnext/patches/v8_9/set_member_party_type.py
deleted file mode 100644
index 33bbc11..0000000
--- a/erpnext/patches/v8_9/set_member_party_type.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	if not frappe.db.exists("Party Type", "Member"):
-		frappe.reload_doc("non_profit", "doctype", "member")
-		party = frappe.new_doc("Party Type")
-		party.party_type = "Member"
-		party.save()
diff --git a/erpnext/patches/v8_9/set_print_zero_amount_taxes.py b/erpnext/patches/v8_9/set_print_zero_amount_taxes.py
deleted file mode 100644
index 3c508ea..0000000
--- a/erpnext/patches/v8_9/set_print_zero_amount_taxes.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-from erpnext.setup.install import create_print_zero_amount_taxes_custom_field
-
-def execute():
-	frappe.reload_doc('printing', 'doctype', 'print_style')
-	frappe.reload_doc('printing', 'doctype', 'print_settings')
-	create_print_zero_amount_taxes_custom_field()
\ No newline at end of file
diff --git a/erpnext/patches/v8_9/update_billing_gstin_for_indian_account.py b/erpnext/patches/v8_9/update_billing_gstin_for_indian_account.py
deleted file mode 100644
index 24e2040..0000000
--- a/erpnext/patches/v8_9/update_billing_gstin_for_indian_account.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	company = frappe.get_all('Company', filters = {'country': 'India'})
-
-	if company:
-		for doctype in ['Sales Invoice', 'Delivery Note']:
-			frappe.db.sql(""" update `tab{0}`
-				set billing_address_gstin = (select gstin from `tabAddress` 
-					where name = customer_address) 
-			where customer_address is not null and customer_address != ''""".format(doctype))
\ No newline at end of file
diff --git a/erpnext/patches/v9_0/__init__.py b/erpnext/patches/v9_0/__init__.py
deleted file mode 100644
index baffc48..0000000
--- a/erpnext/patches/v9_0/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v9_0/add_healthcare_domain.py b/erpnext/patches/v9_0/add_healthcare_domain.py
deleted file mode 100644
index 3c0433b..0000000
--- a/erpnext/patches/v9_0/add_healthcare_domain.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	domain = 'Healthcare'
-	if not frappe.db.exists('Domain', domain):
-		frappe.get_doc({
-			'doctype': 'Domain',
-			'domain': domain
-		}).insert(ignore_permissions=True)
\ No newline at end of file
diff --git a/erpnext/patches/v9_0/add_user_to_child_table_in_pos_profile.py b/erpnext/patches/v9_0/add_user_to_child_table_in_pos_profile.py
deleted file mode 100644
index 8a8c806..0000000
--- a/erpnext/patches/v9_0/add_user_to_child_table_in_pos_profile.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	if frappe.db.table_exists("POS Profile User"):
-		frappe.reload_doc('accounts', 'doctype', 'pos_profile_user')
-
-		frappe.db.sql(""" update `tabPOS Profile User`,
-			(select `tabPOS Profile User`.name from `tabPOS Profile User`, `tabPOS Profile`
-				where `tabPOS Profile`.name = `tabPOS Profile User`.parent
-				group by `tabPOS Profile User`.user, `tabPOS Profile`.company) as pfu
-			set
-				`tabPOS Profile User`.default = 1
-			where `tabPOS Profile User`.name = pfu.name""")
-	else:
-		doctype = 'POS Profile'
-		frappe.reload_doc('accounts', 'doctype', doctype)
-		frappe.reload_doc('accounts', 'doctype', 'pos_profile_user')
-		frappe.reload_doc('accounts', 'doctype', 'pos_item_group')
-		frappe.reload_doc('accounts', 'doctype', 'pos_customer_group')
-
-		for doc in frappe.get_all(doctype):
-			_doc = frappe.get_doc(doctype, doc.name)
-			user = frappe.db.get_value(doctype, doc.name, 'user')
-
-			if not user: continue
-
-			_doc.append('applicable_for_users', {
-				'user': user,
-				'default': 1
-			})
-
-			_doc.flags.ignore_validate  = True
-			_doc.flags.ignore_mandatory = True
-			_doc.save()
\ No newline at end of file
diff --git a/erpnext/patches/v9_0/copy_old_fees_field_data.py b/erpnext/patches/v9_0/copy_old_fees_field_data.py
deleted file mode 100644
index 1427820..0000000
--- a/erpnext/patches/v9_0/copy_old_fees_field_data.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	# 'Schools' module changed to the 'Education'
-	# frappe.reload_doc("schools", "doctype", "fees")
-	frappe.reload_doc("education", "doctype", "fees")
-
-	if "total_amount" not in frappe.db.get_table_columns("Fees"):
-		return
-
-	frappe.db.sql("""update tabFees set grand_total=total_amount where grand_total = 0.0""")
\ No newline at end of file
diff --git a/erpnext/patches/v9_0/remove_non_existing_warehouse_from_stock_settings.py b/erpnext/patches/v9_0/remove_non_existing_warehouse_from_stock_settings.py
deleted file mode 100644
index c685bbc..0000000
--- a/erpnext/patches/v9_0/remove_non_existing_warehouse_from_stock_settings.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	default_warehouse = frappe.db.get_value("Stock Settings", None, "default_warehouse")
-	if default_warehouse:
-		if not frappe.db.get_value("Warehouse", {"name": default_warehouse}):
-			frappe.db.set_value("Stock Settings", None, "default_warehouse", "")
\ No newline at end of file
diff --git a/erpnext/patches/v9_0/remove_subscription_module.py b/erpnext/patches/v9_0/remove_subscription_module.py
deleted file mode 100644
index 493873f..0000000
--- a/erpnext/patches/v9_0/remove_subscription_module.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	if frappe.db.exists('Module Def', 'Subscription'):
-		frappe.db.sql(""" delete from `tabModule Def` where name = 'Subscription'""")
\ No newline at end of file
diff --git a/erpnext/patches/v9_0/revert_manufacturing_user_role.py b/erpnext/patches/v9_0/revert_manufacturing_user_role.py
deleted file mode 100644
index f38b7f2..0000000
--- a/erpnext/patches/v9_0/revert_manufacturing_user_role.py
+++ /dev/null
@@ -1,22 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	if 'Manufacturing' in frappe.get_active_domains(): return
-
-	role = 'Manufacturing User'
-	frappe.db.set_value('Role', role, 'restrict_to_domain', '')
-	frappe.db.set_value('Role', role, 'disabled', 0)
-
-	users = frappe.get_all('Has Role', filters = {
-		'parenttype': 'User',
-		'role': ('in', ['System Manager', 'Manufacturing Manager'])
-	}, fields=['parent'], as_list=1)
-
-	for user in users:
-		_user = frappe.get_doc('User', user[0])
-		_user.append('roles', {
-			'role': role
-		})
-		_user.flags.ignore_validate = True
-		_user.save()
diff --git a/erpnext/patches/v9_0/set_pos_profile_name.py b/erpnext/patches/v9_0/set_pos_profile_name.py
deleted file mode 100644
index a3a9735..0000000
--- a/erpnext/patches/v9_0/set_pos_profile_name.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	doctype = 'POS Profile'
-	frappe.reload_doctype(doctype)
-
-	for pos in frappe.get_all(doctype, filters={'disabled': 0}):
-		doc = frappe.get_doc(doctype, pos.name)
-
-		if not doc.user: continue
-
-		try:
-			pos_profile_name = doc.user + ' - ' + doc.company
-			doc.flags.ignore_validate  = True
-			doc.flags.ignore_mandatory = True
-			doc.save()
-
-			frappe.rename_doc(doctype, doc.name, pos_profile_name, force=True)
-		except frappe.LinkValidationError:
-			frappe.db.set_value("POS Profile", doc.name, 'disabled', 1)
diff --git a/erpnext/patches/v9_0/set_schedule_date_for_material_request_and_purchase_order.py b/erpnext/patches/v9_0/set_schedule_date_for_material_request_and_purchase_order.py
deleted file mode 100644
index 3d01297..0000000
--- a/erpnext/patches/v9_0/set_schedule_date_for_material_request_and_purchase_order.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	for doctype in ("Material Request", "Purchase Order"):
-		frappe.reload_doctype(doctype)
-		frappe.reload_doctype(doctype + " Item")
-
-		if not frappe.db.has_column(doctype, "schedule_date"):
-			continue
-
-		#Update only submitted MR
-		for record in frappe.get_all(doctype, filters= [["docstatus", "=", 1]], fields=["name"]):
-			doc = frappe.get_doc(doctype, record)
-			if doc.items:
-				if not doc.schedule_date:
-					schedule_dates = [d.schedule_date for d in doc.items if d.schedule_date]
-					if len(schedule_dates) > 0:
-						min_schedule_date = min(schedule_dates)
-						frappe.db.set_value(doctype, record,
-							"schedule_date", min_schedule_date, update_modified=False)
\ No newline at end of file
diff --git a/erpnext/patches/v9_0/set_shipping_type_for_existing_shipping_rules.py b/erpnext/patches/v9_0/set_shipping_type_for_existing_shipping_rules.py
deleted file mode 100644
index 5092695..0000000
--- a/erpnext/patches/v9_0/set_shipping_type_for_existing_shipping_rules.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-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, '') = '' ''')
diff --git a/erpnext/patches/v9_0/set_uoms_in_variant_field.py b/erpnext/patches/v9_0/set_uoms_in_variant_field.py
deleted file mode 100644
index 9e783d9..0000000
--- a/erpnext/patches/v9_0/set_uoms_in_variant_field.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-
-def execute():
-	doc = frappe.get_doc('Item Variant Settings')
-	variant_field_names = [vf.field_name for vf in doc.fields]
-	if 'uoms' not in variant_field_names:
-		doc.append(
-			'fields', {
-					'field_name': 'uoms'
-				}
-		)
-	doc.save()
diff --git a/erpnext/patches/v9_0/set_variant_item_description.py b/erpnext/patches/v9_0/set_variant_item_description.py
deleted file mode 100644
index 82d6148..0000000
--- a/erpnext/patches/v9_0/set_variant_item_description.py
+++ /dev/null
@@ -1,46 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import cstr
-
-def execute():
-	'''
-	Issue:
-		While copying data from template item to variant item,
-		the system appending description multiple times to the respective variant.
-
-	Purpose:
-		Check variant description,
-		if variant have user defined description remove all system appended descriptions
-		else replace multiple system generated descriptions with single description
-
-	Steps:
-		1. Get all variant items
-		2. Create system generated variant description
-		3. If variant have user defined description, remove all system generated descriptions
-		4. If variant description only contains system generated description,
-			replace multiple descriptions by new description.
-	'''
-	for item in frappe.db.sql(""" select name from tabItem
-		where ifnull(variant_of, '') != '' """,as_dict=1):
-			variant = frappe.get_doc("Item", item.name)
-			temp_variant_description = '\n'
-
-			if variant.attributes:
-				for d in variant.attributes:
-					temp_variant_description += "<div>" + d.attribute + ": " + cstr(d.attribute_value) + "</div>"
-
-				variant_description = variant.description.replace(temp_variant_description, '').rstrip()
-				if variant_description:
-					splitted_desc = variant.description.strip().split(temp_variant_description)
-
-					if len(splitted_desc) > 2:
-						if splitted_desc[0] == '':
-							variant_description = temp_variant_description + variant_description
-						elif splitted_desc[1] == '' or splitted_desc[1] == '\n':
-							variant_description += temp_variant_description
-						variant.db_set('description', variant_description, update_modified=False)
-					else:
-						variant.db_set('description', variant_description, update_modified=False)
-
-				else:
-					variant.db_set('description', temp_variant_description, update_modified=False)
\ No newline at end of file
diff --git a/erpnext/patches/v9_0/student_admission_childtable_migrate.py b/erpnext/patches/v9_0/student_admission_childtable_migrate.py
deleted file mode 100644
index a5712c7..0000000
--- a/erpnext/patches/v9_0/student_admission_childtable_migrate.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	# 'Schools' module changed to the 'Education'
-	# frappe.reload_doc('schools', 'doctype', 'Student Admission Program')
-	# frappe.reload_doc('schools', 'doctype', 'student_admission')
-	frappe.reload_doc('education', 'doctype', 'Student Admission Program')
-	frappe.reload_doc('education', 'doctype', 'student_admission')
-
-	if "program" not in frappe.db.get_table_columns("Student Admission"):
-		return
-
-	student_admissions = frappe.get_all("Student Admission", fields=["name", "application_fee", \
-		"naming_series_for_student_applicant", "program", "introduction", "eligibility"])
-	for student_admission in student_admissions:
-		doc = frappe.get_doc("Student Admission", student_admission.name)
-		doc.append("program_details", {
-			"program": student_admission.get("program"),
-			"application_fee": student_admission.get("application_fee"),
-			"applicant_naming_series": student_admission.get("naming_series_for_student_applicant"),
-		})
-		if student_admission.eligibility and student_admission.introduction:
-			doc.introduction = student_admission.introduction + "<br><div>" + \
-				student_admission.eligibility + "</div>"
-		doc.flags.ignore_validate = True
-		doc.flags.ignore_mandatory = True
-		doc.save()
diff --git a/erpnext/patches/v9_0/update_employee_loan_details.py b/erpnext/patches/v9_0/update_employee_loan_details.py
deleted file mode 100644
index ef8d328..0000000
--- a/erpnext/patches/v9_0/update_employee_loan_details.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc('Payroll', 'doctype', 'salary_slip_loan')
-	frappe.reload_doc('Payroll', 'doctype', 'salary_slip')
-
-	for data in frappe.db.sql(""" select name,
-			start_date, end_date, total_loan_repayment
-		from
-			`tabSalary Slip`
-		where
-			docstatus < 2 and ifnull(total_loan_repayment, 0) > 0""", as_dict=1):
-		salary_slip = frappe.get_doc('Salary Slip', data.name)
-		salary_slip.set_loan_repayment()
-
-		if salary_slip.total_loan_repayment == data.total_loan_repayment:
-			for row in salary_slip.loans:
-				row.db_update()
-
-			salary_slip.db_update()
diff --git a/erpnext/patches/v9_0/update_multi_uom_fields_in_material_request.py b/erpnext/patches/v9_0/update_multi_uom_fields_in_material_request.py
deleted file mode 100644
index 45610ed..0000000
--- a/erpnext/patches/v9_0/update_multi_uom_fields_in_material_request.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doctype('Material Request')
-	frappe.reload_doctype('Material Request Item')
-
-	frappe.db.sql(""" update `tabMaterial Request Item`
-		set stock_uom = uom, stock_qty = qty, conversion_factor = 1.0""")
\ No newline at end of file
diff --git a/erpnext/patches/v9_1/__init__.py b/erpnext/patches/v9_1/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/patches/v9_1/__init__.py
+++ /dev/null
diff --git a/erpnext/patches/v9_1/create_issue_opportunity_type.py b/erpnext/patches/v9_1/create_issue_opportunity_type.py
deleted file mode 100644
index aa8bbd1..0000000
--- a/erpnext/patches/v9_1/create_issue_opportunity_type.py
+++ /dev/null
@@ -1,34 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe import _
-
-def execute():
-	# delete custom field if exists
-	for doctype, fieldname in (('Issue', 'issue_type'), ('Opportunity', 'opportunity_type')):
-		custom_field = frappe.db.get_value("Custom Field", {"fieldname": fieldname, 'dt': doctype})
-		if custom_field:
-			frappe.delete_doc("Custom Field", custom_field, ignore_permissions=True)
-
-	frappe.reload_doc('support', 'doctype', 'issue_type')
-	frappe.reload_doc('support', 'doctype', 'issue')
-	frappe.reload_doc('crm', 'doctype', 'opportunity_type')
-	frappe.reload_doc('crm', 'doctype', 'opportunity')
-
-	# rename enquiry_type -> opportunity_type
-	from frappe.model.utils.rename_field import rename_field
-	rename_field('Opportunity', 'enquiry_type', 'opportunity_type')
-
-	# create values if already set
-	for opts in (('Issue', 'issue_type', 'Issue Type'),
-		('Opportunity', 'opportunity_type', 'Opportunity Type')):
-		for d in frappe.db.sql('select distinct {0} from `tab{1}`'.format(opts[1], opts[0])):
-			if d[0] and not frappe.db.exists(opts[2], d[0]):
-				frappe.get_doc(dict(doctype = opts[2], name=d[0])).insert()
-
-	# fixtures
-	for name in ('Hub', _('Sales'), _('Support'), _('Maintenance')):
-		if not frappe.db.exists('Opportunity Type', name):
-			frappe.get_doc(dict(doctype = 'Opportunity Type', name=name)).insert()
diff --git a/erpnext/patches/v9_2/__init__.py b/erpnext/patches/v9_2/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/patches/v9_2/__init__.py
+++ /dev/null
diff --git a/erpnext/patches/v9_2/delete_healthcare_domain_default_items.py b/erpnext/patches/v9_2/delete_healthcare_domain_default_items.py
deleted file mode 100644
index 54ae18b..0000000
--- a/erpnext/patches/v9_2/delete_healthcare_domain_default_items.py
+++ /dev/null
@@ -1,17 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import getdate
-
-def execute():
-	domain_settings = frappe.get_doc('Domain Settings')
-	active_domains = [d.domain for d in domain_settings.active_domains]
-
-	if "Healthcare" not in active_domains:
-		items = ["TTT", "MCH", "LDL", "GTT", "HDL", "BILT", "BILD", "BP", "BS"]
-		for item_code in items:
-			try:
-				item = frappe.db.get_value("Item", {"item_code": item_code}, ["name", "creation"], as_dict=1)
-				if item and getdate(item.creation) >= getdate("2017-11-10"):
-					frappe.delete_doc("Item", item.name)
-			except:
-				pass
\ No newline at end of file
diff --git a/erpnext/patches/v9_2/delete_process_payroll.py b/erpnext/patches/v9_2/delete_process_payroll.py
deleted file mode 100644
index 91c49f5..0000000
--- a/erpnext/patches/v9_2/delete_process_payroll.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.delete_doc("DocType", "Process Payroll")
diff --git a/erpnext/patches/v9_2/remove_company_from_patient.py b/erpnext/patches/v9_2/remove_company_from_patient.py
deleted file mode 100644
index 1a50088..0000000
--- a/erpnext/patches/v9_2/remove_company_from_patient.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	if frappe.db.exists("DocType", "Patient"):
-		if 'company' in frappe.db.get_table_columns("Patient"):
-			frappe.db.sql("alter table `tabPatient` drop column company")
diff --git a/erpnext/patches/v9_2/rename_net_weight_in_item_master.py b/erpnext/patches/v9_2/rename_net_weight_in_item_master.py
deleted file mode 100644
index cad979d..0000000
--- a/erpnext/patches/v9_2/rename_net_weight_in_item_master.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import rename_field
-
-def execute():
-	frappe.reload_doc("stock", "doctype", "item")
-	if frappe.db.has_column('Item', 'net_weight'):
-		rename_field("Item", "net_weight", "weight_per_unit")
diff --git a/erpnext/patches/v9_2/rename_translated_domains_in_en.py b/erpnext/patches/v9_2/rename_translated_domains_in_en.py
deleted file mode 100644
index e5a9e24..0000000
--- a/erpnext/patches/v9_2/rename_translated_domains_in_en.py
+++ /dev/null
@@ -1,39 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe import _
-from frappe.model.rename_doc import rename_doc
-
-def execute():
-	frappe.reload_doc('stock', 'doctype', 'item')
-	language = frappe.get_single("System Settings").language
-
-	if language and language.startswith('en'): return
-
-	frappe.local.lang = language
-
-	all_domains = frappe.get_hooks("domains")
-
-	for domain in all_domains:
-		translated_domain = _(domain, lang=language)
-		if frappe.db.exists("Domain", translated_domain):
-			#if domain already exists merged translated_domain and domain
-			merge = False
-			if frappe.db.exists("Domain", domain):
-				merge=True
-
-			rename_doc("Domain", translated_domain, domain, ignore_permissions=True, merge=merge)
-
-	domain_settings = frappe.get_single("Domain Settings")
-	active_domains = [d.domain for d in domain_settings.active_domains]
-
-	try:
-		for domain in active_domains:
-			domain = frappe.get_doc("Domain", domain)
-			domain.setup_domain()
-
-			if int(frappe.db.get_single_value('System Settings', 'setup_complete')):
-				domain.setup_sidebar_items()
-				domain.setup_desktop_icons()
-				domain.set_default_portal_role()
-	except frappe.LinkValidationError:
-		pass
\ No newline at end of file
diff --git a/erpnext/patches/v9_2/repost_reserved_qty_for_production.py b/erpnext/patches/v9_2/repost_reserved_qty_for_production.py
deleted file mode 100644
index 040e655..0000000
--- a/erpnext/patches/v9_2/repost_reserved_qty_for_production.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-	frappe.reload_doc("stock", "doctype", "bin")
-	bins = frappe.db.sql("select name from `tabBin` where reserved_qty_for_production > 0")
-	for d in bins:
-		bin_doc = frappe.get_doc("Bin", d[0])
-		bin_doc.update_reserved_qty_for_production()
diff --git a/erpnext/patches/v9_2/set_item_name_in_production_order.py b/erpnext/patches/v9_2/set_item_name_in_production_order.py
deleted file mode 100644
index 1f490e6..0000000
--- a/erpnext/patches/v9_2/set_item_name_in_production_order.py
+++ /dev/null
@@ -1,12 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-
-	frappe.db.sql("""
-		update `tabBOM Item` bom, `tabWork Order Item` po_item
-		set po_item.item_name = bom.item_name,
-			po_item.description = bom.description
-		where po_item.item_code = bom.item_code
-			and (po_item.item_name is null or po_item.description is null)
-	""")
