diff --git a/erpnext/accounts/custom/address.py b/erpnext/accounts/custom/address.py
index 834227b..628b713 100644
--- a/erpnext/accounts/custom/address.py
+++ b/erpnext/accounts/custom/address.py
@@ -31,7 +31,7 @@
 		customers = frappe.db.get_all("Customer", filters=filters, as_list=True)
 		for customer_name in customers:
 			frappe.db.set_value("Customer", customer_name[0], "primary_address", address_display)
-			
+
 @frappe.whitelist()
 def get_shipping_address(company, address = None):
 	filters = [
diff --git a/erpnext/accounts/doctype/bank_transaction/bank_transaction.py b/erpnext/accounts/doctype/bank_transaction/bank_transaction.py
index 7ea71fc..235af2d 100644
--- a/erpnext/accounts/doctype/bank_transaction/bank_transaction.py
+++ b/erpnext/accounts/doctype/bank_transaction/bank_transaction.py
@@ -21,7 +21,7 @@
 		self.update_allocations()
 		self.clear_linked_payment_entries()
 		self.set_status(update=True)
-	
+
 	def on_cancel(self):
 		self.clear_linked_payment_entries(for_cancel=True)
 		self.set_status(update=True)
@@ -45,7 +45,7 @@
 			frappe.db.set_value(self.doctype, self.name, "status", "Reconciled")
 
 		self.reload()
-	
+
 	def clear_linked_payment_entries(self, for_cancel=False):
 		for payment_entry in self.payment_entries:
 			if payment_entry.payment_document in ["Payment Entry", "Journal Entry", "Purchase Invoice", "Expense Claim"]:
@@ -77,7 +77,7 @@
 
 def get_reconciled_bank_transactions(payment_entry):
 	reconciled_bank_transactions = frappe.get_all(
-		'Bank Transaction Payments', 
+		'Bank Transaction Payments',
 		filters = {
 			'payment_entry': payment_entry.payment_entry
 		},
diff --git a/erpnext/accounts/doctype/finance_book/test_finance_book.py b/erpnext/accounts/doctype/finance_book/test_finance_book.py
index 2ba2139..bb9a46d 100644
--- a/erpnext/accounts/doctype/finance_book/test_finance_book.py
+++ b/erpnext/accounts/doctype/finance_book/test_finance_book.py
@@ -40,4 +40,4 @@
 	else:
 		finance_book = frappe.get_doc("Finance Book", "_Test Finance Book")
 
-	return finance_book
\ No newline at end of file
+	return finance_book
diff --git a/erpnext/accounts/doctype/party_link/party_link.py b/erpnext/accounts/doctype/party_link/party_link.py
index 7d58506..9cbba35 100644
--- a/erpnext/accounts/doctype/party_link/party_link.py
+++ b/erpnext/accounts/doctype/party_link/party_link.py
@@ -10,14 +10,14 @@
 		if self.primary_role not in ['Customer', 'Supplier']:
 			frappe.throw(_("Allowed primary roles are 'Customer' and 'Supplier'. Please select one of these roles only."),
 				title=_("Invalid Primary Role"))
-		
+
 		existing_party_link = frappe.get_all('Party Link', {
 			'primary_party': self.secondary_party
 		}, pluck="primary_role")
 		if existing_party_link:
 			frappe.throw(_('{} {} is already linked with another {}')
 				.format(self.secondary_role, self.secondary_party, existing_party_link[0]))
-		
+
 		existing_party_link = frappe.get_all('Party Link', {
 			'secondary_party': self.primary_party
 		}, pluck="primary_role")
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py
index a5fcad4..f9fa63d 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.py
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py
@@ -484,7 +484,7 @@
 
 	def validate_amounts(self):
 		self.validate_received_amount()
-	
+
 	def validate_received_amount(self):
 		if self.paid_from_account_currency == self.paid_to_account_currency:
 			if self.paid_amount != self.received_amount:
diff --git a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py
index 289278e..ebe55f6 100644
--- a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py
+++ b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py
@@ -54,7 +54,7 @@
 		if gl_entries:
 			from erpnext.accounts.general_ledger import make_gl_entries
 			make_gl_entries(gl_entries)
-	
+
 	def get_gl_entries(self):
 		gl_entries = []
 		pl_accounts = self.get_pl_balances()
@@ -77,7 +77,7 @@
 			gl_entries += gle_for_net_pl_bal
 
 		return gl_entries
-	
+
 	def get_pnl_gl_entry(self, pl_accounts):
 		company_cost_center = frappe.db.get_value("Company", self.company, "cost_center")
 		gl_entries = []
diff --git a/erpnext/accounts/doctype/sales_taxes_and_charges_template/sales_taxes_and_charges_template.js b/erpnext/accounts/doctype/sales_taxes_and_charges_template/sales_taxes_and_charges_template.js
index 97a6fdd..066c4ea 100644
--- a/erpnext/accounts/doctype/sales_taxes_and_charges_template/sales_taxes_and_charges_template.js
+++ b/erpnext/accounts/doctype/sales_taxes_and_charges_template/sales_taxes_and_charges_template.js
@@ -4,4 +4,3 @@
 cur_frm.cscript.tax_table = "Sales Taxes and Charges";
 
 {% include "erpnext/public/js/controllers/accounts.js" %}
-
diff --git a/erpnext/accounts/doctype/tax_withholding_category/tax_withholding_category.py b/erpnext/accounts/doctype/tax_withholding_category/tax_withholding_category.py
index 0cb872c..5772ac2 100644
--- a/erpnext/accounts/doctype/tax_withholding_category/tax_withholding_category.py
+++ b/erpnext/accounts/doctype/tax_withholding_category/tax_withholding_category.py
@@ -240,7 +240,7 @@
 def get_tds_amount(ldc, parties, inv, tax_details, fiscal_year_details, tax_deducted, vouchers):
 	tds_amount = 0
 	invoice_filters = {
-		'name': ('in', vouchers), 
+		'name': ('in', vouchers),
 		'docstatus': 1,
 		'apply_tds': 1
 	}
diff --git a/erpnext/controllers/taxes_and_totals.py b/erpnext/controllers/taxes_and_totals.py
index 7c6d355..993c354 100644
--- a/erpnext/controllers/taxes_and_totals.py
+++ b/erpnext/controllers/taxes_and_totals.py
@@ -686,7 +686,7 @@
 				'mode_of_payment': default_mode_of_payment.mode_of_payment,
 				'amount': total_amount_to_pay,
 				'default': 1
-			})	
+			})
 
 def get_itemised_tax_breakup_html(doc):
 	if not doc.taxes:
diff --git a/erpnext/crm/doctype/lead/lead.py b/erpnext/crm/doctype/lead/lead.py
index aa6c07b..e82ae8f 100644
--- a/erpnext/crm/doctype/lead/lead.py
+++ b/erpnext/crm/doctype/lead/lead.py
@@ -371,4 +371,3 @@
 	prospect.save(ignore_permissions=True)
 	frappe.msgprint(_('Lead {0} has been added to prospect {1}.').format(frappe.bold(lead), frappe.bold(prospect.name)),
 		title=_('Lead Added'), indicator='green')
-	
\ No newline at end of file
diff --git a/erpnext/crm/doctype/linkedin_settings/linkedin_settings.py b/erpnext/crm/doctype/linkedin_settings/linkedin_settings.py
index 9b88d78..c56eed8 100644
--- a/erpnext/crm/doctype/linkedin_settings/linkedin_settings.py
+++ b/erpnext/crm/doctype/linkedin_settings/linkedin_settings.py
@@ -146,7 +146,7 @@
 
 		except Exception as e:
 			self.api_error(response)
-		
+
 		return response
 
 	def get_headers(self):
@@ -168,7 +168,7 @@
 				raise
 		except Exception:
 			self.api_error(response)
-	
+
 	def get_post(self, post_id):
 		url = "https://api.linkedin.com/v2/organizationalEntityShareStatistics?q=organizationalEntity&organizationalEntity=urn:li:organization:{0}&shares[0]=urn:li:share:{1}".format(self.company_id, post_id)
 
@@ -176,7 +176,7 @@
 			response = requests.get(url=url, headers=self.get_headers())
 			if response.status_code !=200:
 				raise
-	
+
 		except Exception:
 			self.api_error(response)
 
diff --git a/erpnext/crm/doctype/prospect/prospect.py b/erpnext/crm/doctype/prospect/prospect.py
index 5f5815d..3fa6fe8 100644
--- a/erpnext/crm/doctype/prospect/prospect.py
+++ b/erpnext/crm/doctype/prospect/prospect.py
@@ -15,7 +15,7 @@
 
 	def on_update(self):
 		self.link_with_lead_contact_and_address()
-	
+
 	def on_trash(self):
 		self.unlink_dynamic_links()
 
diff --git a/erpnext/crm/doctype/social_media_post/social_media_post.js b/erpnext/crm/doctype/social_media_post/social_media_post.js
index a8f5dee..6874caa 100644
--- a/erpnext/crm/doctype/social_media_post/social_media_post.js
+++ b/erpnext/crm/doctype/social_media_post/social_media_post.js
@@ -80,10 +80,10 @@
 
 	refresh: function(frm) {
 		frm.trigger('text');
-	
+
 		if (frm.doc.docstatus === 1) {
 			if (!['Posted', 'Deleted'].includes(frm.doc.post_status)) {
-				frm.trigger('add_post_btn'); 
+				frm.trigger('add_post_btn');
 			}
 			if (frm.doc.post_status !='Deleted') {
 				frm.add_custom_button(('Delete Post'), function() {
diff --git a/erpnext/crm/doctype/twitter_settings/twitter_settings.py b/erpnext/crm/doctype/twitter_settings/twitter_settings.py
index 4775656..9c37ffd 100644
--- a/erpnext/crm/doctype/twitter_settings/twitter_settings.py
+++ b/erpnext/crm/doctype/twitter_settings/twitter_settings.py
@@ -53,10 +53,10 @@
 			frappe.throw(_('Invalid Consumer Key or Consumer Secret Key'))
 
 	def get_api(self):
-		# authentication of consumer key and secret 
-		auth = tweepy.OAuthHandler(self.consumer_key, self.get_password(fieldname="consumer_secret")) 
-		# authentication of access token and secret 
-		auth.set_access_token(self.access_token, self.access_token_secret) 
+		# authentication of consumer key and secret
+		auth = tweepy.OAuthHandler(self.consumer_key, self.get_password(fieldname="consumer_secret"))
+		# authentication of access token and secret
+		auth.set_access_token(self.access_token, self.access_token_secret)
 
 		return tweepy.API(auth)
 
@@ -90,20 +90,20 @@
 
 	def delete_tweet(self, tweet_id):
 		api = self.get_api()
-		try: 
+		try:
 			api.destroy_status(tweet_id)
 		except TweepError as e:
 			self.api_error(e)
 
 	def get_tweet(self, tweet_id):
 		api = self.get_api()
-		try: 
+		try:
 			response = api.get_status(tweet_id, trim_user=True, include_entities=True)
 		except TweepError as e:
 			self.api_error(e)
-		
+
 		return response._json
-	
+
 	def api_error(self, e):
 		content = json.loads(e.response.content)
 		content = content["errors"][0]
diff --git a/erpnext/erpnext_integrations/taxjar_integration.py b/erpnext/erpnext_integrations/taxjar_integration.py
index 83764ae..574fe25 100644
--- a/erpnext/erpnext_integrations/taxjar_integration.py
+++ b/erpnext/erpnext_integrations/taxjar_integration.py
@@ -15,7 +15,7 @@
 	"SE", "SI", "SK", "US"]
 SUPPORTED_STATE_CODES = ['AL', 'AK', 'AZ', 'AR', 'CA', 'CO', 'CT', 'DE', 'DC', 'FL', 'GA', 'HI', 'ID', 'IL',
 	'IN', 'IA', 'KS', 'KY', 'LA', 'ME', 'MD', 'MA', 'MI', 'MN', 'MS', 'MO', 'MT', 'NE',
-	'NV', 'NH', 'NJ', 'NM', 'NY', 'NC', 'ND', 'OH', 'OK', 'OR', 'PA', 'RI', 'SC', 'SD', 
+	'NV', 'NH', 'NJ', 'NM', 'NY', 'NC', 'ND', 'OH', 'OK', 'OR', 'PA', 'RI', 'SC', 'SD',
 	'TN', 'TX', 'UT', 'VT', 'VA', 'WA', 'WV', 'WI', 'WY']
 
 
@@ -66,7 +66,7 @@
 	try:
 		if doc.is_return:
 			client.create_refund(tax_dict)
-		else:	
+		else:
 			client.create_order(tax_dict)
 	except taxjar.exceptions.TaxJarResponseError as err:
 		frappe.throw(_(sanitize_error_response(err)))
@@ -108,7 +108,7 @@
 
 	if to_shipping_state not in SUPPORTED_STATE_CODES:
 		to_shipping_state = get_state_code(to_address, 'Shipping')
-	
+
 	tax_dict = {
 		'from_country': from_country_code,
 		'from_zip': from_address.pincode,
@@ -125,7 +125,7 @@
 		'plugin': 'erpnext',
 		'line_items': line_items
 	}
-	return tax_dict	
+	return tax_dict
 
 def get_state_code(address, location):
 	if address is not None:
@@ -134,16 +134,16 @@
 			frappe.throw(_("Please enter a valid State in the {0} Address").format(location))
 	else:
 		frappe.throw(_("Please enter a valid State in the {0} Address").format(location))
-	
+
 	return state_code
 
 def get_line_item_dict(item):
-	return dict( 
+	return dict(
 		id = item.get('idx'),
 		quantity = item.get('qty'),
 		unit_price = item.get('rate'),
 		product_tax_code = item.get('product_tax_category')
-	)  	
+	)
 
 def set_sales_tax(doc, method):
 	if not TAXJAR_CALCULATE_TAX:
@@ -202,7 +202,7 @@
 				break
 		doc.run_method("calculate_taxes_and_totals")
 		return True
-	else: 
+	else:
 		return False
 
 def validate_tax_request(tax_dict):
diff --git a/erpnext/healthcare/doctype/therapy_plan/test_therapy_plan.py b/erpnext/healthcare/doctype/therapy_plan/test_therapy_plan.py
index 983fba9..54e00ea 100644
--- a/erpnext/healthcare/doctype/therapy_plan/test_therapy_plan.py
+++ b/erpnext/healthcare/doctype/therapy_plan/test_therapy_plan.py
@@ -31,7 +31,7 @@
 		self.assertEqual(frappe.db.get_value('Therapy Plan', plan.name, 'status'), 'Completed')
 
 		patient, practitioner = create_healthcare_docs()
-		appointment = create_appointment(patient, practitioner, nowdate())		
+		appointment = create_appointment(patient, practitioner, nowdate())
 
 		session = make_therapy_session(plan.name, plan.patient, 'Basic Rehab', '_Test Company', appointment.name)
 		session = frappe.get_doc(session)
diff --git a/erpnext/healthcare/page/patient_history/patient_history.js b/erpnext/healthcare/page/patient_history/patient_history.js
index bf947ca..ed2dc52 100644
--- a/erpnext/healthcare/page/patient_history/patient_history.js
+++ b/erpnext/healthcare/page/patient_history/patient_history.js
@@ -452,4 +452,4 @@
 			}
 		});
 	}
-}
\ No newline at end of file
+}
diff --git a/erpnext/healthcare/page/patient_history/patient_history_sidebar.html b/erpnext/healthcare/page/patient_history/patient_history_sidebar.html
index 4560e7e..fc7eab0 100644
--- a/erpnext/healthcare/page/patient_history/patient_history_sidebar.html
+++ b/erpnext/healthcare/page/patient_history/patient_history_sidebar.html
@@ -18,4 +18,3 @@
     <div class="patient-details">
     </div>
 </div>
-
diff --git a/erpnext/hr/doctype/employee/test_employee_reminders.py b/erpnext/hr/doctype/employee/test_employee_reminders.py
index 7e560f5..f46a3d1 100644
--- a/erpnext/hr/doctype/employee/test_employee_reminders.py
+++ b/erpnext/hr/doctype/employee/test_employee_reminders.py
@@ -18,7 +18,7 @@
 		# Create a test holiday list
 		test_holiday_dates = cls.get_test_holiday_dates()
 		test_holiday_list = make_holiday_list(
-			'TestHolidayRemindersList', 
+			'TestHolidayRemindersList',
 			holiday_dates=[
 				{'holiday_date': test_holiday_dates[0], 'description': 'test holiday1'},
 				{'holiday_date': test_holiday_dates[1], 'description': 'test holiday2'},
@@ -49,8 +49,8 @@
 	def get_test_holiday_dates(cls):
 		today_date = getdate()
 		return [
-			today_date, 
-			today_date-timedelta(days=4), 
+			today_date,
+			today_date-timedelta(days=4),
 			today_date-timedelta(days=3),
 			today_date+timedelta(days=1),
 			today_date+timedelta(days=3),
@@ -63,7 +63,7 @@
 
 	def test_is_holiday(self):
 		from erpnext.hr.doctype.employee.employee import is_holiday
-		
+
 		self.assertTrue(is_holiday(self.test_employee.name))
 		self.assertTrue(is_holiday(self.test_employee.name, date=self.test_holiday_dates[1]))
 		self.assertFalse(is_holiday(self.test_employee.name, date=getdate()-timedelta(days=1)))
@@ -118,7 +118,7 @@
 
 		email_queue = frappe.db.sql("""select * from `tabEmail Queue`""", as_dict=True)
 		self.assertTrue("Subject: Work Anniversary Reminder" in email_queue[0].message)
-	
+
 	def test_send_holidays_reminder_in_advance(self):
 		from erpnext.hr.utils import get_holidays_for_employee
 		from erpnext.hr.doctype.employee.employee_reminders import send_holidays_reminder_in_advance
@@ -133,10 +133,10 @@
 		holidays = get_holidays_for_employee(
 					self.test_employee.get('name'),
 					getdate(), getdate() + timedelta(days=3),
-					only_non_weekly=True, 
+					only_non_weekly=True,
 					raise_exception=False
 				)
-		
+
 		send_holidays_reminder_in_advance(
 			self.test_employee.get('name'),
 			holidays
@@ -158,7 +158,7 @@
 
 		email_queue = frappe.db.sql("""select * from `tabEmail Queue`""", as_dict=True)
 		self.assertTrue(len(email_queue) > 0)
-	
+
 	def test_advance_holiday_reminders_weekly(self):
 		from erpnext.hr.doctype.employee.employee_reminders import send_reminders_in_advance_weekly
 		# Get HR settings and enable advance holiday reminders
diff --git a/erpnext/hr/doctype/expense_claim/test_expense_claim.py b/erpnext/hr/doctype/expense_claim/test_expense_claim.py
index b5fc1fb..d61c590 100644
--- a/erpnext/hr/doctype/expense_claim/test_expense_claim.py
+++ b/erpnext/hr/doctype/expense_claim/test_expense_claim.py
@@ -144,20 +144,20 @@
 		expense_claim = make_expense_claim(payable_account, 5500, 5500, "_Test Company", "Travel Expenses - _TC")
 		expense_claim.save()
 		expense_claim.submit()
-		
+
 		# Payment entry 1: paying 500
 		make_payment_entry(expense_claim, payable_account,500)
 		outstanding_amount, total_amount_reimbursed = get_outstanding_and_total_reimbursed_amounts(expense_claim)
 		self.assertEqual(outstanding_amount, 5000)
 		self.assertEqual(total_amount_reimbursed, 500)
-		
+
 		# Payment entry 1: paying 2000
 		make_payment_entry(expense_claim, payable_account,2000)
 		outstanding_amount, total_amount_reimbursed = get_outstanding_and_total_reimbursed_amounts(expense_claim)
 		self.assertEqual(outstanding_amount, 3000)
 		self.assertEqual(total_amount_reimbursed, 2500)
-		
-		# Payment entry 1: paying 3000		
+
+		# Payment entry 1: paying 3000
 		make_payment_entry(expense_claim, payable_account,3000)
 		outstanding_amount, total_amount_reimbursed = get_outstanding_and_total_reimbursed_amounts(expense_claim)
 		self.assertEqual(outstanding_amount, 0)
@@ -221,7 +221,7 @@
 	outstanding_amount = flt(frappe.db.get_value("Expense Claim", expense_claim.name, "total_sanctioned_amount")) - \
 			flt(frappe.db.get_value("Expense Claim", expense_claim.name, "total_amount_reimbursed"))
 	total_amount_reimbursed = flt(frappe.db.get_value("Expense Claim", expense_claim.name, "total_amount_reimbursed"))
-	
+
 	return outstanding_amount,total_amount_reimbursed
 
 def make_payment_entry(expense_claim, payable_account, amt):
@@ -234,5 +234,4 @@
 	pe.paid_to = payable_account
 	pe.references[0].allocated_amount = amt
 	pe.insert()
-	pe.submit() 
-	
+	pe.submit()
diff --git a/erpnext/hr/utils.py b/erpnext/hr/utils.py
index 15b237d..eb35e42 100644
--- a/erpnext/hr/utils.py
+++ b/erpnext/hr/utils.py
@@ -337,9 +337,9 @@
 
 def get_holiday_dates_for_employee(employee, start_date, end_date):
 	"""return a list of holiday dates for the given employee between start_date and end_date"""
-	# return only date	
-	holidays = get_holidays_for_employee(employee, start_date, end_date) 
-	
+	# return only date
+	holidays = get_holidays_for_employee(employee, start_date, end_date)
+
 	return [cstr(h.holiday_date) for h in holidays]
 
 
@@ -352,7 +352,7 @@
 		`raise_exception` (bool)
 		`only_non_weekly` (bool)
 
-		return: list of dicts with `holiday_date` and `description` 
+		return: list of dicts with `holiday_date` and `description`
 	"""
 	holiday_list = get_holiday_list_for_employee(employee, raise_exception=raise_exception)
 
@@ -368,11 +368,11 @@
 		filters['weekly_off'] = False
 
 	holidays = frappe.get_all(
-		'Holiday', 
+		'Holiday',
 		fields=['description', 'holiday_date'],
 		filters=filters
 	)
-	
+
 	return holidays
 
 @erpnext.allow_regional
diff --git a/erpnext/manufacturing/doctype/bom/bom.js b/erpnext/manufacturing/doctype/bom/bom.js
index 05123d5..8a92413 100644
--- a/erpnext/manufacturing/doctype/bom/bom.js
+++ b/erpnext/manufacturing/doctype/bom/bom.js
@@ -714,4 +714,4 @@
 		__("Set Process Loss Item Quantity"),
 		__("Set Quantity")
 	);
-}
\ No newline at end of file
+}
diff --git a/erpnext/manufacturing/doctype/operation/operation.js b/erpnext/manufacturing/doctype/operation/operation.js
index 95643bf..ea73fd6 100644
--- a/erpnext/manufacturing/doctype/operation/operation.js
+++ b/erpnext/manufacturing/doctype/operation/operation.js
@@ -29,4 +29,4 @@
 		title: "Sub Operations",
 		description: __("If an operation is divided into sub operations, they can be added here.")
 	}
-];
\ No newline at end of file
+];
diff --git a/erpnext/manufacturing/doctype/routing/routing.js b/erpnext/manufacturing/doctype/routing/routing.js
index c17a8e9..33a313e 100644
--- a/erpnext/manufacturing/doctype/routing/routing.js
+++ b/erpnext/manufacturing/doctype/routing/routing.js
@@ -82,4 +82,3 @@
 		description: __("Enter the Operation, the table will fetch the Operation details like Hourly Rate, Workstation automatically.\n\n After that, set the Operation Time in minutes and the table will calculate the Operation Costs based on the Hourly Rate and Operation Time.")
 	}
 ];
-
diff --git a/erpnext/manufacturing/doctype/workstation/workstation.js b/erpnext/manufacturing/doctype/workstation/workstation.js
index 4f5231e..5b9cedb 100644
--- a/erpnext/manufacturing/doctype/workstation/workstation.js
+++ b/erpnext/manufacturing/doctype/workstation/workstation.js
@@ -41,4 +41,4 @@
 	},
 
 
-];
\ No newline at end of file
+];
diff --git a/erpnext/patches/v13_0/custom_fields_for_taxjar_integration.py b/erpnext/patches/v13_0/custom_fields_for_taxjar_integration.py
index 1d57550..125be9b 100644
--- a/erpnext/patches/v13_0/custom_fields_for_taxjar_integration.py
+++ b/erpnext/patches/v13_0/custom_fields_for_taxjar_integration.py
@@ -14,9 +14,9 @@
 		'Sales Invoice Item': [
 			dict(fieldname='product_tax_category', fieldtype='Link', insert_after='description', options='Product Tax Category',
 				label='Product Tax Category', fetch_from='item_code.product_tax_category'),
-			dict(fieldname='tax_collectable', fieldtype='Currency', insert_after='net_amount', 
+			dict(fieldname='tax_collectable', fieldtype='Currency', insert_after='net_amount',
 				label='Tax Collectable', read_only=1),
-			dict(fieldname='taxable_amount', fieldtype='Currency', insert_after='tax_collectable', 
+			dict(fieldname='taxable_amount', fieldtype='Currency', insert_after='tax_collectable',
 				label='Taxable Amount', read_only=1)
 		],
 		'Item': [
@@ -26,4 +26,4 @@
 	}
 	create_custom_fields(custom_fields, update=True)
 	add_permissions()
-	frappe.enqueue('erpnext.regional.united_states.setup.add_product_tax_categories', now=True)
\ No newline at end of file
+	frappe.enqueue('erpnext.regional.united_states.setup.add_product_tax_categories', now=True)
diff --git a/erpnext/patches/v13_0/rename_stop_to_send_birthday_reminders.py b/erpnext/patches/v13_0/rename_stop_to_send_birthday_reminders.py
index 1787a56..014f026 100644
--- a/erpnext/patches/v13_0/rename_stop_to_send_birthday_reminders.py
+++ b/erpnext/patches/v13_0/rename_stop_to_send_birthday_reminders.py
@@ -7,17 +7,17 @@
 	try:
 		# Rename the field
 		rename_field('HR Settings', 'stop_birthday_reminders', 'send_birthday_reminders')
-		
+
 		# Reverse the value
 		old_value = frappe.db.get_single_value('HR Settings', 'send_birthday_reminders')
 
 		frappe.db.set_value(
-			'HR Settings', 
-			'HR Settings', 
-			'send_birthday_reminders', 
+			'HR Settings',
+			'HR Settings',
+			'send_birthday_reminders',
 			1 if old_value == 0 else 0
 		)
-		
+
 	except Exception as e:
 		if e.args[0] != 1054:
-			raise
\ No newline at end of file
+			raise
diff --git a/erpnext/patches/v13_0/reset_clearance_date_for_intracompany_payment_entries.py b/erpnext/patches/v13_0/reset_clearance_date_for_intracompany_payment_entries.py
index 1da5275..1caa17f 100644
--- a/erpnext/patches/v13_0/reset_clearance_date_for_intracompany_payment_entries.py
+++ b/erpnext/patches/v13_0/reset_clearance_date_for_intracompany_payment_entries.py
@@ -35,11 +35,11 @@
 
     for payment_entry in intra_company_pe:
         reconciled_bank_transactions[payment_entry] = frappe.get_all(
-            'Bank Transaction Payments', 
+            'Bank Transaction Payments',
             filters = {
                 'payment_entry': payment_entry
-            }, 
+            },
             pluck='parent'
         )
 
-    return reconciled_bank_transactions
\ No newline at end of file
+    return reconciled_bank_transactions
diff --git a/erpnext/patches/v13_0/set_operation_time_based_on_operating_cost.py b/erpnext/patches/v13_0/set_operation_time_based_on_operating_cost.py
index 4acbdd6..4fdd82f 100644
--- a/erpnext/patches/v13_0/set_operation_time_based_on_operating_cost.py
+++ b/erpnext/patches/v13_0/set_operation_time_based_on_operating_cost.py
@@ -12,4 +12,4 @@
 		WHERE
 			time_in_mins = 0 AND operating_cost > 0
 			AND hour_rate > 0 AND docstatus = 1 AND parenttype = "BOM"
-	''')
\ No newline at end of file
+	''')
diff --git a/erpnext/patches/v13_0/validate_options_for_data_field.py b/erpnext/patches/v13_0/validate_options_for_data_field.py
index 568d1a4..03f9929 100644
--- a/erpnext/patches/v13_0/validate_options_for_data_field.py
+++ b/erpnext/patches/v13_0/validate_options_for_data_field.py
@@ -3,11 +3,11 @@
 
 from __future__ import unicode_literals
 import frappe
-from frappe.model import data_field_options 
+from frappe.model import data_field_options
 
 def execute():
 
-    for field in frappe.get_all('Custom Field', 
+    for field in frappe.get_all('Custom Field',
                             fields = ['name'],
                             filters = {
                                 'fieldtype': 'Data',
@@ -16,7 +16,7 @@
 
         if field not in data_field_options:
             frappe.db.sql("""
-                UPDATE 
+                UPDATE
                     `tabCustom Field`
                 SET
                     options=NULL
diff --git a/erpnext/patches/v14_0/delete_einvoicing_doctypes.py b/erpnext/patches/v14_0/delete_einvoicing_doctypes.py
index b77d244..6e5775b 100644
--- a/erpnext/patches/v14_0/delete_einvoicing_doctypes.py
+++ b/erpnext/patches/v14_0/delete_einvoicing_doctypes.py
@@ -6,4 +6,4 @@
 	frappe.delete_doc('Report', 'E-Invoice Summary', ignore_missing=True)
 	frappe.delete_doc('Print Format', 'GST E-Invoice', ignore_missing=True)
 	frappe.delete_doc('Custom Field', 'Sales Invoice-eway_bill_cancelled', ignore_missing=True)
-	frappe.delete_doc('Custom Field', 'Sales Invoice-irn_cancelled', ignore_missing=True)
\ No newline at end of file
+	frappe.delete_doc('Custom Field', 'Sales Invoice-irn_cancelled', ignore_missing=True)
diff --git a/erpnext/public/js/utils.js b/erpnext/public/js/utils.js
index 9caf1de..e0610eb 100755
--- a/erpnext/public/js/utils.js
+++ b/erpnext/public/js/utils.js
@@ -86,9 +86,9 @@
 
 	proceed_save_with_reminders_frequency_change: () => {
 		frappe.ui.hide_open_dialog();
-		
+
 		frappe.call({
-			method: 'erpnext.hr.doctype.hr_settings.hr_settings.set_proceed_with_frequency_change', 
+			method: 'erpnext.hr.doctype.hr_settings.hr_settings.set_proceed_with_frequency_change',
 			callback: () => {
 				cur_frm.save();
 			}
diff --git a/erpnext/regional/india/utils.py b/erpnext/regional/india/utils.py
index ce5aa10..ac31f77 100644
--- a/erpnext/regional/india/utils.py
+++ b/erpnext/regional/india/utils.py
@@ -887,4 +887,3 @@
 		gst_settings.remove(d)
 
 	gst_settings.save()
-
diff --git a/erpnext/regional/united_states/setup.py b/erpnext/regional/united_states/setup.py
index c0cec3a..9c183af 100644
--- a/erpnext/regional/united_states/setup.py
+++ b/erpnext/regional/united_states/setup.py
@@ -63,9 +63,9 @@
 		'Sales Invoice Item': [
 			dict(fieldname='product_tax_category', fieldtype='Link', insert_after='description', options='Product Tax Category',
 				label='Product Tax Category', fetch_from='item_code.product_tax_category'),
-			dict(fieldname='tax_collectable', fieldtype='Currency', insert_after='net_amount', 
+			dict(fieldname='tax_collectable', fieldtype='Currency', insert_after='net_amount',
 				label='Tax Collectable', read_only=1),
-			dict(fieldname='taxable_amount', fieldtype='Currency', insert_after='tax_collectable', 
+			dict(fieldname='taxable_amount', fieldtype='Currency', insert_after='tax_collectable',
 				label='Taxable Amount', read_only=1)
 		],
 		'Item': [
diff --git a/erpnext/selling/doctype/customer/test_customer.py b/erpnext/selling/doctype/customer/test_customer.py
index 5b33731..3d3dffa 100644
--- a/erpnext/selling/doctype/customer/test_customer.py
+++ b/erpnext/selling/doctype/customer/test_customer.py
@@ -374,4 +374,4 @@
 	else:
 		customer_name = frappe.db.get_value("Customer", customer_name)
 
-	return customer_name
\ No newline at end of file
+	return customer_name
diff --git a/erpnext/setup/doctype/company/company.js b/erpnext/setup/doctype/company/company.js
index 56700af..8403193 100644
--- a/erpnext/setup/doctype/company/company.js
+++ b/erpnext/setup/doctype/company/company.js
@@ -55,10 +55,10 @@
 				{"fieldtype": "Button", "label": "Update", "fieldname": "update"},
 			]
 		});
-	
+
 		dialog.fields_dict.update.$input.click(function() {
 			var args = dialog.get_values();
-			if (!args) return; 
+			if (!args) return;
 			frappe.show_alert(__("Update in progress. It might take a while."));
 			return frappe.call({
 				method: "erpnext.setup.doctype.company.company.enqueue_replace_abbr",
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js
index 8f34794..908020d 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.js
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.js
@@ -1101,4 +1101,3 @@
 }
 
 $.extend(cur_frm.cscript, new erpnext.stock.StockEntry({frm: cur_frm}));
-
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index 760cb7d..c7e22c2 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -1582,7 +1582,7 @@
 			if material_request and material_request not in material_requests:
 				material_requests.append(material_request)
 				frappe.db.set_value('Material Request', material_request, 'transfer_status', status)
-				
+
 	def update_items_for_process_loss(self):
 		process_loss_dict = {}
 		for d in self.get("items"):
diff --git a/erpnext/stock/doctype/stock_entry/tests/test_stock_entry_for_manufacture.js b/erpnext/stock/doctype/stock_entry/tests/test_stock_entry_for_manufacture.js
index 285ae4f..e51c90c 100644
--- a/erpnext/stock/doctype/stock_entry/tests/test_stock_entry_for_manufacture.js
+++ b/erpnext/stock/doctype/stock_entry/tests/test_stock_entry_for_manufacture.js
@@ -24,4 +24,3 @@
 		() => done()
 	]);
 });
-
diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js
index aa502a4..84f65a0 100644
--- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js
+++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js
@@ -302,4 +302,3 @@
 };
 
 cur_frm.cscript = new erpnext.stock.StockReconciliation({frm: cur_frm});
-
diff --git a/erpnext/stock/doctype/stock_settings/stock_settings.js b/erpnext/stock/doctype/stock_settings/stock_settings.js
index 6167bec..cc0e2cf 100644
--- a/erpnext/stock/doctype/stock_settings/stock_settings.js
+++ b/erpnext/stock/doctype/stock_settings/stock_settings.js
@@ -15,4 +15,3 @@
 		frm.set_query("sample_retention_warehouse", filters);
 	}
 });
-
diff --git a/erpnext/stock/doctype/warehouse/warehouse.js b/erpnext/stock/doctype/warehouse/warehouse.js
index 4e1679c4..9243e1e 100644
--- a/erpnext/stock/doctype/warehouse/warehouse.js
+++ b/erpnext/stock/doctype/warehouse/warehouse.js
@@ -86,4 +86,3 @@
 
 	})
 }
-
diff --git a/erpnext/stock/report/process_loss_report/process_loss_report.py b/erpnext/stock/report/process_loss_report/process_loss_report.py
index 3d48ebd..ebb32f1 100644
--- a/erpnext/stock/report/process_loss_report/process_loss_report.py
+++ b/erpnext/stock/report/process_loss_report/process_loss_report.py
@@ -92,7 +92,7 @@
 
 def run_query(query_args: QueryArgs) -> Data:
 	return frappe.db.sql("""
-		SELECT 
+		SELECT
 			wo.name, wo.status, wo.production_item, wo.qty,
 			wo.produced_qty, wo.process_loss_qty,
 			(wo.produced_qty - wo.process_loss_qty) as actual_produced_qty,
@@ -130,4 +130,3 @@
 			{"work_order_filter": f"AND wo.name='{work_order_name}'"}
 		)
 	return filter_conditions
-
diff --git a/erpnext/templates/emails/anniversary_reminder.html b/erpnext/templates/emails/anniversary_reminder.html
index ac9f7e4..db338dd 100644
--- a/erpnext/templates/emails/anniversary_reminder.html
+++ b/erpnext/templates/emails/anniversary_reminder.html
@@ -22,4 +22,4 @@
 		<span>{{ reminder_text }}</span>
 		<p class="text-muted">{{ message }}</p>
 	</div>
-</div>
\ No newline at end of file
+</div>
