diff --git a/.editorconfig b/.editorconfig
index 24f122a..e7d5cfe 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -9,6 +9,13 @@
 charset = utf-8
 
 # python, js indentation settings
-[{*.py,*.js}]
+[{*.py,*.js,*.vue,*.css,*.scss,*.html}]
 indent_style = tab
 indent_size = 4
+max_line_length = 110
+
+# JSON files - mostly doctype schema files
+[{*.json}]
+insert_final_newline = false
+indent_style = space
+indent_size = 2
diff --git a/.eslintrc b/.eslintrc
index f3d4fd5..1f22552 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -124,6 +124,7 @@
 		"beforeEach": true,
 		"onScan": true,
 		"extend_cscript": true,
-		"localforage": true
+		"localforage": true,
+		"Plaid": true
 	}
 }
diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs
index 275442a..2a85f70 100644
--- a/.git-blame-ignore-revs
+++ b/.git-blame-ignore-revs
@@ -32,3 +32,6 @@
 
 # bulk refactor with sourcery
 eb9ee3f79b94e594fc6dfa4f6514580e125eee8c
+
+# js formatting
+ec74a5e56617bbd76ac402451468fd4668af543d
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 6ea121f..1f11581 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -20,6 +20,23 @@
       - id: check-yaml
       - id: debug-statements
 
+  - repo: https://github.com/pre-commit/mirrors-prettier
+    rev: v2.7.1
+    hooks:
+      - id: prettier
+        types_or: [javascript, vue, scss]
+        # Ignore any files that might contain jinja / bundles
+        exclude: |
+            (?x)^(
+                erpnext/public/dist/.*|
+                cypress/.*|
+                .*node_modules.*|
+                .*boilerplate.*|
+                erpnext/public/js/controllers/.*|
+                erpnext/templates/pages/order.js|
+                erpnext/templates/includes/.*
+            )$
+
   - repo: https://github.com/pre-commit/mirrors-eslint
     rev: v8.44.0
     hooks:
diff --git a/commitlint.config.js b/commitlint.config.js
index 8847564..5670209 100644
--- a/commitlint.config.js
+++ b/commitlint.config.js
@@ -1,25 +1,13 @@
 module.exports = {
-	parserPreset: 'conventional-changelog-conventionalcommits',
+	parserPreset: "conventional-changelog-conventionalcommits",
 	rules: {
-		'subject-empty': [2, 'never'],
-		'type-case': [2, 'always', 'lower-case'],
-		'type-empty': [2, 'never'],
-		'type-enum': [
+		"subject-empty": [2, "never"],
+		"type-case": [2, "always", "lower-case"],
+		"type-empty": [2, "never"],
+		"type-enum": [
 			2,
-			'always',
-			[
-				'build',
-				'chore',
-				'ci',
-				'docs',
-				'feat',
-				'fix',
-				'perf',
-				'refactor',
-				'revert',
-				'style',
-				'test',
-			],
+			"always",
+			["build", "chore", "ci", "docs", "feat", "fix", "perf", "refactor", "revert", "style", "test"],
 		],
 	},
 };
diff --git a/erpnext/accounts/dashboard_chart_source/account_balance_timeline/account_balance_timeline.js b/erpnext/accounts/dashboard_chart_source/account_balance_timeline/account_balance_timeline.js
index d8a83e5..0984611 100644
--- a/erpnext/accounts/dashboard_chart_source/account_balance_timeline/account_balance_timeline.js
+++ b/erpnext/accounts/dashboard_chart_source/account_balance_timeline/account_balance_timeline.js
@@ -1,4 +1,4 @@
-frappe.provide('frappe.dashboards.chart_sources');
+frappe.provide("frappe.dashboards.chart_sources");
 
 frappe.dashboards.chart_sources["Account Balance Timeline"] = {
 	method: "erpnext.accounts.dashboard_chart_source.account_balance_timeline.account_balance_timeline.get",
@@ -9,14 +9,14 @@
 			fieldtype: "Link",
 			options: "Company",
 			default: frappe.defaults.get_user_default("Company"),
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			fieldname: "account",
 			label: __("Account"),
 			fieldtype: "Link",
 			options: "Account",
-			reqd: 1
+			reqd: 1,
 		},
-	]
+	],
 };
diff --git a/erpnext/accounts/doctype/account/account.js b/erpnext/accounts/doctype/account/account.js
index bcf7efc..411b90f 100644
--- a/erpnext/accounts/doctype/account/account.js
+++ b/erpnext/accounts/doctype/account/account.js
@@ -26,19 +26,14 @@
 		frm.toggle_enable(["is_group", "company"], false);
 
 		if (cint(frm.doc.is_group) == 0) {
-			frm.toggle_display(
-				"freeze_account",
-				frm.doc.__onload && frm.doc.__onload.can_freeze_account
-			);
+			frm.toggle_display("freeze_account", frm.doc.__onload && frm.doc.__onload.can_freeze_account);
 		}
 
 		// read-only for root accounts
 		if (!frm.is_new()) {
 			if (!frm.doc.parent_account) {
 				frm.set_read_only();
-				frm.set_intro(
-					__("This is a root account and cannot be edited.")
-				);
+				frm.set_intro(__("This is a root account and cannot be edited."));
 			} else {
 				// credit days and type if customer or supplier
 				frm.set_intro(null);
@@ -80,27 +75,33 @@
 		);
 
 		if (frm.doc.is_group == 1) {
-			frm.add_custom_button(__('Convert to Non-Group'), function () {
-				return frappe.call({
-					doc: frm.doc,
-					method: 'convert_group_to_ledger',
-					callback: function() {
-						frm.refresh();
-					}
-				});
-			}, __('Actions'));
-
-		} else if (cint(frm.doc.is_group) == 0
-			&& frappe.boot.user.can_read.indexOf("GL Entry") !== -1) {
-			frm.add_custom_button(__('General Ledger'), function () {
-				frappe.route_options = {
-					"account": frm.doc.name,
-					"from_date": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
-					"to_date": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
-					"company": frm.doc.company
-				};
-				frappe.set_route("query-report", "General Ledger");
-			}, __('View'));
+			frm.add_custom_button(
+				__("Convert to Non-Group"),
+				function () {
+					return frappe.call({
+						doc: frm.doc,
+						method: "convert_group_to_ledger",
+						callback: function () {
+							frm.refresh();
+						},
+					});
+				},
+				__("Actions")
+			);
+		} else if (cint(frm.doc.is_group) == 0 && frappe.boot.user.can_read.indexOf("GL Entry") !== -1) {
+			frm.add_custom_button(
+				__("General Ledger"),
+				function () {
+					frappe.route_options = {
+						account: frm.doc.name,
+						from_date: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
+						to_date: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
+						company: frm.doc.company,
+					};
+					frappe.set_route("query-report", "General Ledger");
+				},
+				__("View")
+			);
 
 			frm.add_custom_button(
 				__("Convert to Group"),
@@ -193,14 +194,8 @@
 							if (r.message) {
 								frappe.set_route("Form", "Account", r.message);
 							} else {
-								frm.set_value(
-									"account_number",
-									data.account_number
-								);
-								frm.set_value(
-									"account_name",
-									data.account_name
-								);
+								frm.set_value("account_number", data.account_number);
+								frm.set_value("account_name", data.account_name);
 							}
 							d.hide();
 						}
diff --git a/erpnext/accounts/doctype/account/account_tree.js b/erpnext/accounts/doctype/account/account_tree.js
index 0b29769..93de49d 100644
--- a/erpnext/accounts/doctype/account/account_tree.js
+++ b/erpnext/accounts/doctype/account/account_tree.js
@@ -1,4 +1,4 @@
-frappe.provide("frappe.treeview_settings")
+frappe.provide("frappe.treeview_settings");
 
 frappe.treeview_settings["Account"] = {
 	breadcrumb: "Accounts",
@@ -7,12 +7,12 @@
 	filters: [
 		{
 			fieldname: "company",
-			fieldtype:"Select",
+			fieldtype: "Select",
 			options: erpnext.utils.get_tree_options("company"),
 			label: __("Company"),
 			default: erpnext.utils.get_tree_default("company"),
-			on_change: function() {
-				var me = frappe.treeview_settings['Account'].treeview;
+			on_change: function () {
+				var me = frappe.treeview_settings["Account"].treeview;
 				var company = me.page.fields_dict.company.get_value();
 				if (!company) {
 					frappe.throw(__("Please set a Company"));
@@ -22,30 +22,36 @@
 					args: {
 						company: company,
 					},
-					callback: function(r) {
-						if(r.message) {
+					callback: function (r) {
+						if (r.message) {
 							let root_company = r.message.length ? r.message[0] : "";
 							me.page.fields_dict.root_company.set_value(root_company);
 
-							frappe.db.get_value("Company", {"name": company}, "allow_account_creation_against_child_company", (r) => {
-								frappe.flags.ignore_root_company_validation = r.allow_account_creation_against_child_company;
-							});
+							frappe.db.get_value(
+								"Company",
+								{ name: company },
+								"allow_account_creation_against_child_company",
+								(r) => {
+									frappe.flags.ignore_root_company_validation =
+										r.allow_account_creation_against_child_company;
+								}
+							);
 						}
-					}
+					},
 				});
-			}
+			},
 		},
 		{
 			fieldname: "root_company",
-			fieldtype:"Data",
+			fieldtype: "Data",
 			label: __("Root Company"),
 			hidden: true,
-			disable_onchange: true
-		}
+			disable_onchange: true,
+		},
 	],
 	root_label: "Accounts",
-	get_tree_nodes: 'erpnext.accounts.utils.get_children',
-	on_get_node: function(nodes, deep=false) {
+	get_tree_nodes: "erpnext.accounts.utils.get_children",
+	on_get_node: function (nodes, deep = false) {
 		if (frappe.boot.user.can_read.indexOf("GL Entry") == -1) return;
 
 		let accounts = [];
@@ -57,151 +63,231 @@
 		}
 
 		frappe.db.get_single_value("Accounts Settings", "show_balance_in_coa").then((value) => {
-			if(value) {
-
+			if (value) {
 				const get_balances = frappe.call({
-					method: 'erpnext.accounts.utils.get_account_balances',
+					method: "erpnext.accounts.utils.get_account_balances",
 					args: {
 						accounts: accounts,
-						company: cur_tree.args.company
+						company: cur_tree.args.company,
 					},
 				});
 
-				get_balances.then(r => {
+				get_balances.then((r) => {
 					if (!r.message || r.message.length == 0) return;
 
 					for (let account of r.message) {
-
 						const node = cur_tree.nodes && cur_tree.nodes[account.value];
 						if (!node || node.is_root) continue;
 
 						// show Dr if positive since balance is calculated as debit - credit else show Cr
 						const balance = account.balance_in_account_currency || account.balance;
-						const dr_or_cr = balance > 0 ? __("Dr"): __("Cr");
+						const dr_or_cr = balance > 0 ? __("Dr") : __("Cr");
 						const format = (value, currency) => format_currency(Math.abs(value), currency);
 
-						if (account.balance!==undefined) {
-							node.parent && node.parent.find('.balance-area').remove();
-							$('<span class="balance-area pull-right">'
-							  + (account.balance_in_account_currency ?
-							     (format(account.balance_in_account_currency, account.account_currency) + " / ") : "")
-							  + format(account.balance, account.company_currency)
-							  + " " + dr_or_cr
-							  + '</span>').insertBefore(node.$ul);
+						if (account.balance !== undefined) {
+							node.parent && node.parent.find(".balance-area").remove();
+							$(
+								'<span class="balance-area pull-right">' +
+									(account.balance_in_account_currency
+										? format(
+												account.balance_in_account_currency,
+												account.account_currency
+										  ) + " / "
+										: "") +
+									format(account.balance, account.company_currency) +
+									" " +
+									dr_or_cr +
+									"</span>"
+							).insertBefore(node.$ul);
 						}
 					}
 				});
 			}
 		});
 	},
-	add_tree_node: 'erpnext.accounts.utils.add_ac',
-	menu_items:[
+	add_tree_node: "erpnext.accounts.utils.add_ac",
+	menu_items: [
 		{
-			label: __('New Company'),
-			action: function() { frappe.new_doc("Company", true) },
-			condition: 'frappe.boot.user.can_create.indexOf("Company") !== -1'
-		}
+			label: __("New Company"),
+			action: function () {
+				frappe.new_doc("Company", true);
+			},
+			condition: 'frappe.boot.user.can_create.indexOf("Company") !== -1',
+		},
 	],
 	fields: [
-		{fieldtype:'Data', fieldname:'account_name', label:__('New Account Name'), reqd:true,
-			description: __("Name of new Account. Note: Please don't create accounts for Customers and Suppliers")},
-		{fieldtype:'Data', fieldname:'account_number', label:__('Account Number'),
-			description: __("Number of new Account, it will be included in the account name as a prefix")},
-		{fieldtype:'Check', fieldname:'is_group', label:__('Is Group'),
-			description: __('Further accounts can be made under Groups, but entries can be made against non-Groups')},
-		{fieldtype:'Select', fieldname:'root_type', label:__('Root Type'),
-			options: ['Asset', 'Liability', 'Equity', 'Income', 'Expense'].join('\n'),
-			depends_on: 'eval:doc.is_group && !doc.parent_account'},
-		{fieldtype:'Select', fieldname:'account_type', label:__('Account Type'),
-			options: frappe.get_meta("Account").fields.filter(d => d.fieldname=='account_type')[0].options,
-			description: __("Optional. This setting will be used to filter in various transactions.")
+		{
+			fieldtype: "Data",
+			fieldname: "account_name",
+			label: __("New Account Name"),
+			reqd: true,
+			description: __(
+				"Name of new Account. Note: Please don't create accounts for Customers and Suppliers"
+			),
 		},
-		{fieldtype:'Float', fieldname:'tax_rate', label:__('Tax Rate'),
-			depends_on: 'eval:doc.is_group==0&&doc.account_type=="Tax"'},
-		{fieldtype:'Link', fieldname:'account_currency', label:__('Currency'), options:"Currency",
-			description: __("Optional. Sets company's default currency, if not specified.")}
+		{
+			fieldtype: "Data",
+			fieldname: "account_number",
+			label: __("Account Number"),
+			description: __("Number of new Account, it will be included in the account name as a prefix"),
+		},
+		{
+			fieldtype: "Check",
+			fieldname: "is_group",
+			label: __("Is Group"),
+			description: __(
+				"Further accounts can be made under Groups, but entries can be made against non-Groups"
+			),
+		},
+		{
+			fieldtype: "Select",
+			fieldname: "root_type",
+			label: __("Root Type"),
+			options: ["Asset", "Liability", "Equity", "Income", "Expense"].join("\n"),
+			depends_on: "eval:doc.is_group && !doc.parent_account",
+		},
+		{
+			fieldtype: "Select",
+			fieldname: "account_type",
+			label: __("Account Type"),
+			options: frappe.get_meta("Account").fields.filter((d) => d.fieldname == "account_type")[0]
+				.options,
+			description: __("Optional. This setting will be used to filter in various transactions."),
+		},
+		{
+			fieldtype: "Float",
+			fieldname: "tax_rate",
+			label: __("Tax Rate"),
+			depends_on: 'eval:doc.is_group==0&&doc.account_type=="Tax"',
+		},
+		{
+			fieldtype: "Link",
+			fieldname: "account_currency",
+			label: __("Currency"),
+			options: "Currency",
+			description: __("Optional. Sets company's default currency, if not specified."),
+		},
 	],
-	ignore_fields:["parent_account"],
-	onload: function(treeview) {
-		frappe.treeview_settings['Account'].treeview = {};
-		$.extend(frappe.treeview_settings['Account'].treeview, treeview);
+	ignore_fields: ["parent_account"],
+	onload: function (treeview) {
+		frappe.treeview_settings["Account"].treeview = {};
+		$.extend(frappe.treeview_settings["Account"].treeview, treeview);
 		function get_company() {
 			return treeview.page.fields_dict.company.get_value();
 		}
 
 		// tools
-		treeview.page.add_inner_button(__("Chart of Cost Centers"), function() {
-			frappe.set_route('Tree', 'Cost Center', {company: get_company()});
-		}, __('View'));
+		treeview.page.add_inner_button(
+			__("Chart of Cost Centers"),
+			function () {
+				frappe.set_route("Tree", "Cost Center", { company: get_company() });
+			},
+			__("View")
+		);
 
-		treeview.page.add_inner_button(__("Opening Invoice Creation Tool"), function() {
-			frappe.set_route('Form', 'Opening Invoice Creation Tool', {company: get_company()});
-		}, __('View'));
+		treeview.page.add_inner_button(
+			__("Opening Invoice Creation Tool"),
+			function () {
+				frappe.set_route("Form", "Opening Invoice Creation Tool", { company: get_company() });
+			},
+			__("View")
+		);
 
-		treeview.page.add_inner_button(__("Period Closing Voucher"), function() {
-			frappe.set_route('List', 'Period Closing Voucher', {company: get_company()});
-		}, __('View'));
+		treeview.page.add_inner_button(
+			__("Period Closing Voucher"),
+			function () {
+				frappe.set_route("List", "Period Closing Voucher", { company: get_company() });
+			},
+			__("View")
+		);
 
-
-		treeview.page.add_inner_button(__("Journal Entry"), function() {
-			frappe.new_doc('Journal Entry', {company: get_company()});
-		}, __('Create'));
-		treeview.page.add_inner_button(__("Company"), function() {
-			frappe.new_doc('Company');
-		}, __('Create'));
+		treeview.page.add_inner_button(
+			__("Journal Entry"),
+			function () {
+				frappe.new_doc("Journal Entry", { company: get_company() });
+			},
+			__("Create")
+		);
+		treeview.page.add_inner_button(
+			__("Company"),
+			function () {
+				frappe.new_doc("Company");
+			},
+			__("Create")
+		);
 
 		// financial statements
-		for (let report of ['Trial Balance', 'General Ledger', 'Balance Sheet',
-			'Profit and Loss Statement', 'Cash Flow Statement', 'Accounts Payable', 'Accounts Receivable']) {
-			treeview.page.add_inner_button(__(report), function() {
-				frappe.set_route('query-report', report, {company: get_company()});
-			}, __('Financial Statements'));
+		for (let report of [
+			"Trial Balance",
+			"General Ledger",
+			"Balance Sheet",
+			"Profit and Loss Statement",
+			"Cash Flow Statement",
+			"Accounts Payable",
+			"Accounts Receivable",
+		]) {
+			treeview.page.add_inner_button(
+				__(report),
+				function () {
+					frappe.set_route("query-report", report, { company: get_company() });
+				},
+				__("Financial Statements")
+			);
 		}
-
 	},
-	post_render: function(treeview) {
-		frappe.treeview_settings['Account'].treeview["tree"] = treeview.tree;
-		treeview.page.set_primary_action(__("New"), function() {
-			let root_company = treeview.page.fields_dict.root_company.get_value();
+	post_render: function (treeview) {
+		frappe.treeview_settings["Account"].treeview["tree"] = treeview.tree;
+		treeview.page.set_primary_action(
+			__("New"),
+			function () {
+				let root_company = treeview.page.fields_dict.root_company.get_value();
 
-			if(root_company) {
-				frappe.throw(__("Please add the account to root level Company - {0}"), [root_company]);
-			} else {
-				treeview.new_node();
-			}
-		}, "add");
+				if (root_company) {
+					frappe.throw(__("Please add the account to root level Company - {0}"), [root_company]);
+				} else {
+					treeview.new_node();
+				}
+			},
+			"add"
+		);
 	},
 	toolbar: [
 		{
-			label:__("Add Child"),
-			condition: function(node) {
-				return frappe.boot.user.can_create.indexOf("Account") !== -1
-					&& (!frappe.treeview_settings['Account'].treeview.page.fields_dict.root_company.get_value()
-					|| frappe.flags.ignore_root_company_validation)
-					&& node.expandable && !node.hide_add;
+			label: __("Add Child"),
+			condition: function (node) {
+				return (
+					frappe.boot.user.can_create.indexOf("Account") !== -1 &&
+					(!frappe.treeview_settings[
+						"Account"
+					].treeview.page.fields_dict.root_company.get_value() ||
+						frappe.flags.ignore_root_company_validation) &&
+					node.expandable &&
+					!node.hide_add
+				);
 			},
-			click: function() {
-				var me = frappe.views.trees['Account'];
+			click: function () {
+				var me = frappe.views.trees["Account"];
 				me.new_node();
 			},
-			btnClass: "hidden-xs"
+			btnClass: "hidden-xs",
 		},
 		{
-			condition: function(node) {
-				return !node.root && frappe.boot.user.can_read.indexOf("GL Entry") !== -1
+			condition: function (node) {
+				return !node.root && frappe.boot.user.can_read.indexOf("GL Entry") !== -1;
 			},
 			label: __("View Ledger"),
-			click: function(node, btn) {
+			click: function (node, btn) {
 				frappe.route_options = {
-					"account": node.label,
-					"from_date": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
-					"to_date": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
-					"company": frappe.treeview_settings['Account'].treeview.page.fields_dict.company.get_value()
+					account: node.label,
+					from_date: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
+					to_date: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
+					company:
+						frappe.treeview_settings["Account"].treeview.page.fields_dict.company.get_value(),
 				};
 				frappe.set_route("query-report", "General Ledger");
 			},
-			btnClass: "hidden-xs"
-		}
+			btnClass: "hidden-xs",
+		},
 	],
-	extend_toolbar: true
-}
+	extend_toolbar: true,
+};
diff --git a/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.js b/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.js
index 2f53f7b..cd883e5 100644
--- a/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.js
+++ b/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.js
@@ -1,74 +1,86 @@
 // Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Accounting Dimension', {
-	refresh: function(frm) {
-		frm.set_query('document_type', () => {
+frappe.ui.form.on("Accounting Dimension", {
+	refresh: function (frm) {
+		frm.set_query("document_type", () => {
 			let invalid_doctypes = frappe.model.core_doctypes_list;
-			invalid_doctypes.push('Accounting Dimension', 'Project',
-				'Cost Center', 'Accounting Dimension Detail', 'Company');
+			invalid_doctypes.push(
+				"Accounting Dimension",
+				"Project",
+				"Cost Center",
+				"Accounting Dimension Detail",
+				"Company"
+			);
 
 			return {
 				filters: {
-					name: ['not in', invalid_doctypes]
-				}
+					name: ["not in", invalid_doctypes],
+				},
 			};
 		});
 
-		frm.set_query("offsetting_account", "dimension_defaults", function(doc, cdt, cdn) {
+		frm.set_query("offsetting_account", "dimension_defaults", function (doc, cdt, cdn) {
 			let d = locals[cdt][cdn];
 			return {
 				filters: {
 					company: d.company,
 					root_type: ["in", ["Asset", "Liability"]],
-					is_group: 0
-				}
-			}
+					is_group: 0,
+				},
+			};
 		});
 
 		if (!frm.is_new()) {
-			frm.add_custom_button(__('Show {0}', [frm.doc.document_type]), function () {
+			frm.add_custom_button(__("Show {0}", [frm.doc.document_type]), function () {
 				frappe.set_route("List", frm.doc.document_type);
 			});
 
 			let button = frm.doc.disabled ? "Enable" : "Disable";
 
-			frm.add_custom_button(__(button), function() {
-
-				frm.set_value('disabled', 1 - frm.doc.disabled);
+			frm.add_custom_button(__(button), function () {
+				frm.set_value("disabled", 1 - frm.doc.disabled);
 
 				frappe.call({
 					method: "erpnext.accounts.doctype.accounting_dimension.accounting_dimension.disable_dimension",
 					args: {
-						doc: frm.doc
+						doc: frm.doc,
 					},
 					freeze: true,
-					callback: function(r) {
+					callback: function (r) {
 						let message = frm.doc.disabled ? "Dimension Disabled" : "Dimension Enabled";
 						frm.save();
-						frappe.show_alert({message:__(message), indicator:'green'});
-					}
+						frappe.show_alert({ message: __(message), indicator: "green" });
+					},
 				});
 			});
 		}
 	},
 
-	document_type: function(frm) {
+	document_type: function (frm) {
+		frm.set_value("label", frm.doc.document_type);
+		frm.set_value("fieldname", frappe.model.scrub(frm.doc.document_type));
 
-		frm.set_value('label', frm.doc.document_type);
-		frm.set_value('fieldname', frappe.model.scrub(frm.doc.document_type));
-
-		frappe.db.get_value('Accounting Dimension', {'document_type': frm.doc.document_type}, 'document_type', (r) => {
-			if (r && r.document_type) {
-				frm.set_df_property('document_type', 'description', "Document type is already set as dimension");
+		frappe.db.get_value(
+			"Accounting Dimension",
+			{ document_type: frm.doc.document_type },
+			"document_type",
+			(r) => {
+				if (r && r.document_type) {
+					frm.set_df_property(
+						"document_type",
+						"description",
+						"Document type is already set as dimension"
+					);
+				}
 			}
-		});
+		);
 	},
 });
 
-frappe.ui.form.on('Accounting Dimension Detail', {
-	dimension_defaults_add: function(frm, cdt, cdn) {
+frappe.ui.form.on("Accounting Dimension Detail", {
+	dimension_defaults_add: function (frm, cdt, cdn) {
 		let row = locals[cdt][cdn];
 		row.reference_document = frm.doc.document_type;
-	}
+	},
 });
diff --git a/erpnext/accounts/doctype/accounting_dimension_filter/accounting_dimension_filter.js b/erpnext/accounts/doctype/accounting_dimension_filter/accounting_dimension_filter.js
index 6f0b6fc..38ad131 100644
--- a/erpnext/accounts/doctype/accounting_dimension_filter/accounting_dimension_filter.js
+++ b/erpnext/accounts/doctype/accounting_dimension_filter/accounting_dimension_filter.js
@@ -1,10 +1,9 @@
 // Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Accounting Dimension Filter', {
-	refresh: function(frm, cdt, cdn) {
-		let help_content =
-			`<table class="table table-bordered" style="background-color: var(--scrollbar-track-color);">
+frappe.ui.form.on("Accounting Dimension Filter", {
+	refresh: function (frm, cdt, cdn) {
+		let help_content = `<table class="table table-bordered" style="background-color: var(--scrollbar-track-color);">
 				<tr><td>
 					<p>
 						<i class="fa fa-hand-right"></i>
@@ -13,77 +12,80 @@
 				</td></tr>
 			</table>`;
 
-		frm.set_df_property('dimension_filter_help', 'options', help_content);
+		frm.set_df_property("dimension_filter_help", "options", help_content);
 	},
-	onload: function(frm) {
-		frm.set_query('applicable_on_account', 'accounts', function() {
+	onload: function (frm) {
+		frm.set_query("applicable_on_account", "accounts", function () {
 			return {
 				filters: {
-					'company': frm.doc.company
-				}
+					company: frm.doc.company,
+				},
 			};
 		});
 
-		frappe.db.get_list('Accounting Dimension',
-			{fields: ['document_type']}).then((res) => {
-			let options = ['Cost Center', 'Project'];
+		frappe.db.get_list("Accounting Dimension", { fields: ["document_type"] }).then((res) => {
+			let options = ["Cost Center", "Project"];
 
 			res.forEach((dimension) => {
 				options.push(dimension.document_type);
 			});
 
-			frm.set_df_property('accounting_dimension', 'options', options);
+			frm.set_df_property("accounting_dimension", "options", options);
 		});
 
-		frm.trigger('setup_filters');
+		frm.trigger("setup_filters");
 	},
 
-	setup_filters: function(frm) {
+	setup_filters: function (frm) {
 		let filters = {};
 
 		if (frm.doc.accounting_dimension) {
-			frappe.model.with_doctype(frm.doc.accounting_dimension, function() {
+			frappe.model.with_doctype(frm.doc.accounting_dimension, function () {
 				if (frappe.model.is_tree(frm.doc.accounting_dimension)) {
-					filters['is_group'] = 0;
+					filters["is_group"] = 0;
 				}
 
-				if (frappe.meta.has_field(frm.doc.accounting_dimension, 'company')) {
-					filters['company'] = frm.doc.company;
+				if (frappe.meta.has_field(frm.doc.accounting_dimension, "company")) {
+					filters["company"] = frm.doc.company;
 				}
 
-				frm.set_query('dimension_value', 'dimensions', function() {
+				frm.set_query("dimension_value", "dimensions", function () {
 					return {
-						filters: filters
+						filters: filters,
 					};
 				});
 			});
 		}
 	},
 
-	accounting_dimension: function(frm) {
+	accounting_dimension: function (frm) {
 		frm.clear_table("dimensions");
 		let row = frm.add_child("dimensions");
 		row.accounting_dimension = frm.doc.accounting_dimension;
-		frm.fields_dict["dimensions"].grid.update_docfield_property("dimension_value", "label", frm.doc.accounting_dimension);
+		frm.fields_dict["dimensions"].grid.update_docfield_property(
+			"dimension_value",
+			"label",
+			frm.doc.accounting_dimension
+		);
 		frm.refresh_field("dimensions");
-		frm.trigger('setup_filters');
+		frm.trigger("setup_filters");
 	},
-	apply_restriction_on_values: function(frm) {
+	apply_restriction_on_values: function (frm) {
 		/** If restriction on values is not applied, we should set "allow_or_restrict" to "Restrict" with an empty allowed dimension table.
 		 * Hence it's not "restricted" on any value.
-		  */
+		 */
 		if (!frm.doc.apply_restriction_on_values) {
 			frm.set_value("allow_or_restrict", "Restrict");
 			frm.clear_table("dimensions");
 			frm.refresh_field("dimensions");
 		}
-	}
+	},
 });
 
-frappe.ui.form.on('Allowed Dimension', {
-	dimensions_add: function(frm, cdt, cdn) {
+frappe.ui.form.on("Allowed Dimension", {
+	dimensions_add: function (frm, cdt, cdn) {
 		let row = locals[cdt][cdn];
 		row.accounting_dimension = frm.doc.accounting_dimension;
 		frm.refresh_field("dimensions");
-	}
+	},
 });
diff --git a/erpnext/accounts/doctype/accounting_period/accounting_period.js b/erpnext/accounts/doctype/accounting_period/accounting_period.js
index f17b6f9..441471f 100644
--- a/erpnext/accounts/doctype/accounting_period/accounting_period.js
+++ b/erpnext/accounts/doctype/accounting_period/accounting_period.js
@@ -1,30 +1,33 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Accounting Period', {
-	onload: function(frm) {
-		if(frm.doc.closed_documents.length === 0 || (frm.doc.closed_documents.length === 1 && frm.doc.closed_documents[0].document_type == undefined)) {
+frappe.ui.form.on("Accounting Period", {
+	onload: function (frm) {
+		if (
+			frm.doc.closed_documents.length === 0 ||
+			(frm.doc.closed_documents.length === 1 && frm.doc.closed_documents[0].document_type == undefined)
+		) {
 			frappe.call({
 				method: "get_doctypes_for_closing",
-				doc:frm.doc,
-				callback: function(r) {
-					if(r.message) {
+				doc: frm.doc,
+				callback: function (r) {
+					if (r.message) {
 						cur_frm.clear_table("closed_documents");
-						r.message.forEach(function(element) {
+						r.message.forEach(function (element) {
 							var c = frm.add_child("closed_documents");
 							c.document_type = element.document_type;
 							c.closed = element.closed;
 						});
 						refresh_field("closed_documents");
 					}
-				}
+				},
 			});
 		}
 
 		frm.set_query("document_type", "closed_documents", () => {
 			return {
 				query: "erpnext.controllers.queries.get_doctypes_for_closing",
-			}
+			};
 		});
-	}
+	},
 });
diff --git a/erpnext/accounts/doctype/accounts_settings/accounts_settings.js b/erpnext/accounts/doctype/accounts_settings/accounts_settings.js
index 0627675..5b9a52e 100644
--- a/erpnext/accounts/doctype/accounts_settings/accounts_settings.js
+++ b/erpnext/accounts/doctype/accounts_settings/accounts_settings.js
@@ -1,8 +1,6 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Accounts Settings', {
-	refresh: function(frm) {
-
-	}
+frappe.ui.form.on("Accounts Settings", {
+	refresh: function (frm) {},
 });
diff --git a/erpnext/accounts/doctype/accounts_settings/regional/united_states.js b/erpnext/accounts/doctype/accounts_settings/regional/united_states.js
index 3e38386..a522de9 100644
--- a/erpnext/accounts/doctype/accounts_settings/regional/united_states.js
+++ b/erpnext/accounts/doctype/accounts_settings/regional/united_states.js
@@ -1,8 +1,11 @@
-
-frappe.ui.form.on('Accounts Settings', {
-	refresh: function(frm) {
+frappe.ui.form.on("Accounts Settings", {
+	refresh: function (frm) {
 		frm.set_df_property("acc_frozen_upto", "label", "Books Closed Through");
-		frm.set_df_property("frozen_accounts_modifier", "label", "Role Allowed to Close Books & Make Changes to Closed Periods");
+		frm.set_df_property(
+			"frozen_accounts_modifier",
+			"label",
+			"Role Allowed to Close Books & Make Changes to Closed Periods"
+		);
 		frm.set_df_property("credit_controller", "label", "Credit Manager");
-	}
+	},
 });
diff --git a/erpnext/accounts/doctype/bank/bank.js b/erpnext/accounts/doctype/bank/bank.js
index 83bd7fe..77af313 100644
--- a/erpnext/accounts/doctype/bank/bank.js
+++ b/erpnext/accounts/doctype/bank/bank.js
@@ -1,38 +1,36 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
-frappe.provide('erpnext.integrations');
+frappe.provide("erpnext.integrations");
 
-frappe.ui.form.on('Bank', {
-	onload: function(frm) {
+frappe.ui.form.on("Bank", {
+	onload: function (frm) {
 		add_fields_to_mapping_table(frm);
 	},
-	refresh: function(frm) {
+	refresh: function (frm) {
 		add_fields_to_mapping_table(frm);
-		frm.toggle_display(['address_html','contact_html'], !frm.doc.__islocal);
+		frm.toggle_display(["address_html", "contact_html"], !frm.doc.__islocal);
 
 		if (frm.doc.__islocal) {
-			frm.set_df_property('address_and_contact', 'hidden', 1);
+			frm.set_df_property("address_and_contact", "hidden", 1);
 			frappe.contacts.clear_address_and_contact(frm);
-		}
-		else {
-			frm.set_df_property('address_and_contact', 'hidden', 0);
+		} else {
+			frm.set_df_property("address_and_contact", "hidden", 0);
 			frappe.contacts.render_address_and_contact(frm);
 		}
 		if (frm.doc.plaid_access_token) {
-			frm.add_custom_button(__('Refresh Plaid Link'), () => {
+			frm.add_custom_button(__("Refresh Plaid Link"), () => {
 				new erpnext.integrations.refreshPlaidLink(frm.doc.plaid_access_token);
 			});
 		}
-	}
+	},
 });
 
-
 let add_fields_to_mapping_table = function (frm) {
 	let options = [];
 
-	frappe.model.with_doctype("Bank Transaction", function() {
+	frappe.model.with_doctype("Bank Transaction", function () {
 		let meta = frappe.get_meta("Bank Transaction");
-		meta.fields.forEach(value => {
+		meta.fields.forEach((value) => {
 			if (!["Section Break", "Column Break"].includes(value.fieldtype)) {
 				options.push(value.fieldname);
 			}
@@ -40,30 +38,32 @@
 	});
 
 	frm.fields_dict.bank_transaction_mapping.grid.update_docfield_property(
-		'bank_transaction_field', 'options', options
+		"bank_transaction_field",
+		"options",
+		options
 	);
 };
 
 erpnext.integrations.refreshPlaidLink = class refreshPlaidLink {
 	constructor(access_token) {
 		this.access_token = access_token;
-		this.plaidUrl = 'https://cdn.plaid.com/link/v2/stable/link-initialize.js';
+		this.plaidUrl = "https://cdn.plaid.com/link/v2/stable/link-initialize.js";
 		this.init_config();
 	}
 
 	async init_config() {
-		this.plaid_env = await frappe.db.get_single_value('Plaid Settings', 'plaid_env');
+		this.plaid_env = await frappe.db.get_single_value("Plaid Settings", "plaid_env");
 		this.token = await this.get_link_token_for_update();
 		this.init_plaid();
 	}
 
 	async get_link_token_for_update() {
 		const token = frappe.xcall(
-			'erpnext.erpnext_integrations.doctype.plaid_settings.plaid_settings.get_link_token_for_update',
+			"erpnext.erpnext_integrations.doctype.plaid_settings.plaid_settings.get_link_token_for_update",
 			{ access_token: this.access_token }
-		)
+		);
 		if (!token) {
-			frappe.throw(__('Cannot retrieve link token for update. Check Error Log for more information'));
+			frappe.throw(__("Cannot retrieve link token for update. Check Error Log for more information"));
 		}
 		return token;
 	}
@@ -90,35 +90,45 @@
 				resolve();
 				return;
 			}
-			const el = document.createElement('script');
-			el.type = 'text/javascript';
+			const el = document.createElement("script");
+			el.type = "text/javascript";
 			el.async = true;
 			el.src = src;
-			el.addEventListener('load', resolve);
-			el.addEventListener('error', reject);
-			el.addEventListener('abort', reject);
+			el.addEventListener("load", resolve);
+			el.addEventListener("error", reject);
+			el.addEventListener("abort", reject);
 			document.head.appendChild(el);
 		});
 	}
 
 	onScriptLoaded(me) {
-		me.linkHandler = Plaid.create({ // eslint-disable-line no-undef
+		me.linkHandler = Plaid.create({
+			// eslint-disable-line no-undef
 			env: me.plaid_env,
 			token: me.token,
-			onSuccess: me.plaid_success
+			onSuccess: me.plaid_success,
 		});
 	}
 
 	onScriptError(error) {
-		frappe.msgprint(__("There was an issue connecting to Plaid's authentication server. Check browser console for more information"));
+		frappe.msgprint(
+			__(
+				"There was an issue connecting to Plaid's authentication server. Check browser console for more information"
+			)
+		);
 		console.log(error);
 	}
 
 	plaid_success(token, response) {
-		frappe.xcall('erpnext.erpnext_integrations.doctype.plaid_settings.plaid_settings.update_bank_account_ids', {
-			response: response,
-		}).then(() => {
-			frappe.show_alert({ message: __('Plaid Link Updated'), indicator: 'green' });
-		});
+		frappe
+			.xcall(
+				"erpnext.erpnext_integrations.doctype.plaid_settings.plaid_settings.update_bank_account_ids",
+				{
+					response: response,
+				}
+			)
+			.then(() => {
+				frappe.show_alert({ message: __("Plaid Link Updated"), indicator: "green" });
+			});
 	}
 };
diff --git a/erpnext/accounts/doctype/bank_account/bank_account.js b/erpnext/accounts/doctype/bank_account/bank_account.js
index 0598190..202f750 100644
--- a/erpnext/accounts/doctype/bank_account/bank_account.js
+++ b/erpnext/accounts/doctype/bank_account/bank_account.js
@@ -1,45 +1,49 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Bank Account', {
-	setup: function(frm) {
-		frm.set_query("account", function() {
+frappe.ui.form.on("Bank Account", {
+	setup: function (frm) {
+		frm.set_query("account", function () {
 			return {
 				filters: {
-					'account_type': 'Bank',
-					'company': frm.doc.company,
-					'is_group': 0
-				}
+					account_type: "Bank",
+					company: frm.doc.company,
+					is_group: 0,
+				},
 			};
 		});
-		frm.set_query("party_type", function() {
+		frm.set_query("party_type", function () {
 			return {
 				query: "erpnext.setup.doctype.party_type.party_type.get_party_type",
 			};
 		});
 	},
-	refresh: function(frm) {
-		frappe.dynamic_link = { doc: frm.doc, fieldname: 'name', doctype: 'Bank Account' }
+	refresh: function (frm) {
+		frappe.dynamic_link = { doc: frm.doc, fieldname: "name", doctype: "Bank Account" };
 
-		frm.toggle_display(['address_html','contact_html'], !frm.doc.__islocal);
+		frm.toggle_display(["address_html", "contact_html"], !frm.doc.__islocal);
 
 		if (frm.doc.__islocal) {
 			frappe.contacts.clear_address_and_contact(frm);
-		}
-		else {
+		} else {
 			frappe.contacts.render_address_and_contact(frm);
 		}
 
 		if (frm.doc.integration_id) {
-			frm.add_custom_button(__("Unlink external integrations"), function() {
-				frappe.confirm(__("This action will unlink this account from any external service integrating ERPNext with your bank accounts. It cannot be undone. Are you certain ?"), function() {
-					frm.set_value("integration_id", "");
-				});
+			frm.add_custom_button(__("Unlink external integrations"), function () {
+				frappe.confirm(
+					__(
+						"This action will unlink this account from any external service integrating ERPNext with your bank accounts. It cannot be undone. Are you certain ?"
+					),
+					function () {
+						frm.set_value("integration_id", "");
+					}
+				);
 			});
 		}
 	},
 
-	is_company_account: function(frm) {
-		frm.set_df_property('account', 'reqd', frm.doc.is_company_account);
-	}
+	is_company_account: function (frm) {
+		frm.set_df_property("account", "reqd", frm.doc.is_company_account);
+	},
 });
diff --git a/erpnext/accounts/doctype/bank_account_subtype/bank_account_subtype.js b/erpnext/accounts/doctype/bank_account_subtype/bank_account_subtype.js
index f045665..e8fe4e0 100644
--- a/erpnext/accounts/doctype/bank_account_subtype/bank_account_subtype.js
+++ b/erpnext/accounts/doctype/bank_account_subtype/bank_account_subtype.js
@@ -1,8 +1,6 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Bank Account Subtype', {
-	refresh: function() {
-
-	}
+frappe.ui.form.on("Bank Account Subtype", {
+	refresh: function () {},
 });
diff --git a/erpnext/accounts/doctype/bank_account_type/bank_account_type.js b/erpnext/accounts/doctype/bank_account_type/bank_account_type.js
index 4cfabe3..1285fe4 100644
--- a/erpnext/accounts/doctype/bank_account_type/bank_account_type.js
+++ b/erpnext/accounts/doctype/bank_account_type/bank_account_type.js
@@ -1,8 +1,7 @@
 // Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Bank Account Type', {
+frappe.ui.form.on("Bank Account Type", {
 	// refresh: function(frm) {
-
 	// }
 });
diff --git a/erpnext/accounts/doctype/bank_clearance/bank_clearance.js b/erpnext/accounts/doctype/bank_clearance/bank_clearance.js
index 7af635b..2993825 100644
--- a/erpnext/accounts/doctype/bank_clearance/bank_clearance.js
+++ b/erpnext/accounts/doctype/bank_clearance/bank_clearance.js
@@ -2,80 +2,76 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.ui.form.on("Bank Clearance", {
-	setup: function(frm) {
+	setup: function (frm) {
 		frm.add_fetch("account", "account_currency", "account_currency");
 
-		frm.set_query("account", function() {
+		frm.set_query("account", function () {
 			return {
-				"filters": {
-					"account_type": ["in",["Bank","Cash"]],
-					"is_group": 0,
-				}
+				filters: {
+					account_type: ["in", ["Bank", "Cash"]],
+					is_group: 0,
+				},
 			};
 		});
 
 		frm.set_query("bank_account", function () {
 			return {
 				filters: {
-					'is_company_account': 1
+					is_company_account: 1,
 				},
 			};
 		});
 	},
 
-	onload: function(frm) {
-
-		let default_bank_account =  frappe.defaults.get_user_default("Company")?
-			locals[":Company"][frappe.defaults.get_user_default("Company")]["default_bank_account"]: "";
+	onload: function (frm) {
+		let default_bank_account = frappe.defaults.get_user_default("Company")
+			? locals[":Company"][frappe.defaults.get_user_default("Company")]["default_bank_account"]
+			: "";
 		frm.set_value("account", default_bank_account);
 
-
-
 		frm.set_value("from_date", frappe.datetime.month_start());
 		frm.set_value("to_date", frappe.datetime.month_end());
 	},
 
-	refresh: function(frm) {
+	refresh: function (frm) {
 		frm.disable_save();
-		frm.add_custom_button(__('Get Payment Entries'), () =>
-			frm.trigger("get_payment_entries")
-		);
+		frm.add_custom_button(__("Get Payment Entries"), () => frm.trigger("get_payment_entries"));
 
-		frm.change_custom_button_type(__('Get Payment Entries'), null, 'primary');
+		frm.change_custom_button_type(__("Get Payment Entries"), null, "primary");
 	},
 
-	update_clearance_date: function(frm) {
+	update_clearance_date: function (frm) {
 		return frappe.call({
 			method: "update_clearance_date",
 			doc: frm.doc,
-			callback: function(r, rt) {
+			callback: function (r, rt) {
 				frm.refresh_field("payment_entries");
 				frm.refresh_fields();
 
 				if (!frm.doc.payment_entries.length) {
-					frm.change_custom_button_type(__('Get Payment Entries'), null, 'primary');
-					frm.change_custom_button_type(__('Update Clearance Date'), null, 'default');
+					frm.change_custom_button_type(__("Get Payment Entries"), null, "primary");
+					frm.change_custom_button_type(__("Update Clearance Date"), null, "default");
 				}
-			}
+			},
 		});
 	},
 
-	get_payment_entries: function(frm) {
+	get_payment_entries: function (frm) {
 		return frappe.call({
 			method: "get_payment_entries",
 			doc: frm.doc,
-			callback: function(r, rt) {
+			callback: function (r, rt) {
 				frm.refresh_field("payment_entries");
 
 				if (frm.doc.payment_entries.length) {
-					frm.add_custom_button(__('Update Clearance Date'), () =>
+					frm.add_custom_button(__("Update Clearance Date"), () =>
 						frm.trigger("update_clearance_date")
 					);
 
-					frm.change_custom_button_type(__('Get Payment Entries'), null, 'default');
-					frm.change_custom_button_type(__('Update Clearance Date'), null, 'primary');
+					frm.change_custom_button_type(__("Get Payment Entries"), null, "default");
+					frm.change_custom_button_type(__("Update Clearance Date"), null, "primary");
 				}
-			}
+			},
 		});
-	}
+	},
 });
diff --git a/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.js b/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.js
index 99cc0a7..060c4b5 100644
--- a/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.js
+++ b/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.js
@@ -1,39 +1,39 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-cur_frm.add_fetch('bank_account','account','account');
-cur_frm.add_fetch('bank_account','bank_account_no','bank_account_no');
-cur_frm.add_fetch('bank_account','iban','iban');
-cur_frm.add_fetch('bank_account','branch_code','branch_code');
-cur_frm.add_fetch('bank','swift_number','swift_number');
+cur_frm.add_fetch("bank_account", "account", "account");
+cur_frm.add_fetch("bank_account", "bank_account_no", "bank_account_no");
+cur_frm.add_fetch("bank_account", "iban", "iban");
+cur_frm.add_fetch("bank_account", "branch_code", "branch_code");
+cur_frm.add_fetch("bank", "swift_number", "swift_number");
 
-frappe.ui.form.on('Bank Guarantee', {
-	setup: function(frm) {
-		frm.set_query("bank", function() {
-			return {
-				filters: {
-					company: frm.doc.company
-				}
-			};
-		});
-		frm.set_query("bank_account", function() {
+frappe.ui.form.on("Bank Guarantee", {
+	setup: function (frm) {
+		frm.set_query("bank", function () {
 			return {
 				filters: {
 					company: frm.doc.company,
-					bank: frm.doc.bank
-				}
-			}
+				},
+			};
 		});
-		frm.set_query("project", function() {
+		frm.set_query("bank_account", function () {
 			return {
 				filters: {
-					customer: frm.doc.customer
-				}
+					company: frm.doc.company,
+					bank: frm.doc.bank,
+				},
+			};
+		});
+		frm.set_query("project", function () {
+			return {
+				filters: {
+					customer: frm.doc.customer,
+				},
 			};
 		});
 	},
 
-	bg_type: function(frm) {
+	bg_type: function (frm) {
 		if (frm.doc.bg_type == "Receiving") {
 			frm.set_value("reference_doctype", "Sales Order");
 		} else if (frm.doc.bg_type == "Providing") {
@@ -41,34 +41,33 @@
 		}
 	},
 
-	reference_docname: function(frm) {
+	reference_docname: function (frm) {
 		if (frm.doc.reference_docname && frm.doc.reference_doctype) {
 			let party_field = frm.doc.reference_doctype == "Sales Order" ? "customer" : "supplier";
 
 			frappe.call({
 				method: "erpnext.accounts.doctype.bank_guarantee.bank_guarantee.get_voucher_details",
 				args: {
-					"bank_guarantee_type": frm.doc.bg_type,
-					"reference_name": frm.doc.reference_docname
+					bank_guarantee_type: frm.doc.bg_type,
+					reference_name: frm.doc.reference_docname,
 				},
-				callback: function(r) {
+				callback: function (r) {
 					if (r.message) {
 						if (r.message[party_field]) frm.set_value(party_field, r.message[party_field]);
 						if (r.message.project) frm.set_value("project", r.message.project);
 						if (r.message.grand_total) frm.set_value("amount", r.message.grand_total);
 					}
-				}
+				},
 			});
-
 		}
 	},
 
-	start_date: function(frm) {
+	start_date: function (frm) {
 		var end_date = frappe.datetime.add_days(cur_frm.doc.start_date, cur_frm.doc.validity - 1);
 		cur_frm.set_value("end_date", end_date);
 	},
-	validity: function(frm) {
+	validity: function (frm) {
 		var end_date = frappe.datetime.add_days(cur_frm.doc.start_date, cur_frm.doc.validity - 1);
 		cur_frm.set_value("end_date", end_date);
-	}
+	},
 });
diff --git a/erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.js b/erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.js
index 1f2d6ce..a1de91f 100644
--- a/erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.js
+++ b/erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.js
@@ -8,21 +8,22 @@
 			return {
 				filters: {
 					company: frm.doc.company,
-					'is_company_account': 1
+					is_company_account: 1,
 				},
 			};
 		});
-		let no_bank_transactions_text =
-			`<div class="text-muted text-center">${__("No Matching Bank Transactions Found")}</div>`
+		let no_bank_transactions_text = `<div class="text-muted text-center">${__(
+			"No Matching Bank Transactions Found"
+		)}</div>`;
 		set_field_options("no_bank_transactions", no_bank_transactions_text);
 	},
 
 	onload: function (frm) {
 		// Set default filter dates
-		let today = frappe.datetime.get_today()
+		let today = frappe.datetime.get_today();
 		frm.doc.bank_statement_from_date = frappe.datetime.add_months(today, -1);
 		frm.doc.bank_statement_to_date = today;
-		frm.trigger('bank_account');
+		frm.trigger("bank_account");
 	},
 
 	filter_by_reference_date: function (frm) {
@@ -37,34 +38,27 @@
 
 	refresh: function (frm) {
 		frm.disable_save();
-		frappe.require("bank-reconciliation-tool.bundle.js", () =>
-			frm.trigger("make_reconciliation_tool")
-		);
+		frappe.require("bank-reconciliation-tool.bundle.js", () => frm.trigger("make_reconciliation_tool"));
 
 		frm.add_custom_button(__("Upload Bank Statement"), () =>
-				frappe.call({
-					method:
-						"erpnext.accounts.doctype.bank_statement_import.bank_statement_import.upload_bank_statement",
-					args: {
-						dt: frm.doc.doctype,
-						dn: frm.doc.name,
-						company: frm.doc.company,
-						bank_account: frm.doc.bank_account,
-					},
-					callback: function (r) {
-						if (!r.exc) {
-							var doc = frappe.model.sync(r.message);
-							frappe.set_route(
-								"Form",
-								doc[0].doctype,
-								doc[0].name
-							);
-						}
-					},
-				})
+			frappe.call({
+				method: "erpnext.accounts.doctype.bank_statement_import.bank_statement_import.upload_bank_statement",
+				args: {
+					dt: frm.doc.doctype,
+					dn: frm.doc.name,
+					company: frm.doc.company,
+					bank_account: frm.doc.bank_account,
+				},
+				callback: function (r) {
+					if (!r.exc) {
+						var doc = frappe.model.sync(r.message);
+						frappe.set_route("Form", doc[0].doctype, doc[0].name);
+					}
+				},
+			})
 		);
 
-		frm.add_custom_button(__('Auto Reconcile'), function() {
+		frm.add_custom_button(__("Auto Reconcile"), function () {
 			frappe.call({
 				method: "erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.auto_reconcile_vouchers",
 				args: {
@@ -75,33 +69,22 @@
 					from_reference_date: frm.doc.from_reference_date,
 					to_reference_date: frm.doc.to_reference_date,
 				},
-			})
+			});
 		});
 
-		frm.add_custom_button(__('Get Unreconciled Entries'), function() {
+		frm.add_custom_button(__("Get Unreconciled Entries"), function () {
 			frm.trigger("make_reconciliation_tool");
 		});
-		frm.change_custom_button_type(__('Get Unreconciled Entries'), null, 'primary');
-
+		frm.change_custom_button_type(__("Get Unreconciled Entries"), null, "primary");
 	},
 
 	bank_account: function (frm) {
-		frappe.db.get_value(
-			"Bank Account",
-			frm.doc.bank_account,
-			"account",
-			(r) => {
-				frappe.db.get_value(
-					"Account",
-					r.account,
-					"account_currency",
-					(r) => {
-						frm.doc.account_currency = r.account_currency;
-						frm.trigger("render_chart");
-					}
-				);
-			}
-		);
+		frappe.db.get_value("Bank Account", frm.doc.bank_account, "account", (r) => {
+			frappe.db.get_value("Account", r.account, "account_currency", (r) => {
+				frm.doc.account_currency = r.account_currency;
+				frm.trigger("render_chart");
+			});
+		});
 		frm.trigger("get_account_opening_balance");
 	},
 
@@ -120,11 +103,7 @@
 				) {
 					frm.trigger("render_chart");
 					frm.trigger("render");
-					frappe.utils.scroll_to(
-						frm.get_field("reconciliation_tool_cards").$wrapper,
-						true,
-						30
-					);
+					frappe.utils.scroll_to(frm.get_field("reconciliation_tool_cards").$wrapper, true, 30);
 				}
 			});
 		}
@@ -133,11 +112,10 @@
 	get_account_opening_balance(frm) {
 		if (frm.doc.bank_account && frm.doc.bank_statement_from_date) {
 			frappe.call({
-				method:
-					"erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.get_account_balance",
+				method: "erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.get_account_balance",
 				args: {
 					bank_account: frm.doc.bank_account,
-					till_date: frappe.datetime.add_days(frm.doc.bank_statement_from_date, -1)
+					till_date: frappe.datetime.add_days(frm.doc.bank_statement_from_date, -1),
 				},
 				callback: (response) => {
 					frm.set_value("account_opening_balance", response.message);
@@ -149,8 +127,7 @@
 	get_cleared_balance(frm) {
 		if (frm.doc.bank_account && frm.doc.bank_statement_to_date) {
 			return frappe.call({
-				method:
-					"erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.get_account_balance",
+				method: "erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.get_account_balance",
 				args: {
 					bank_account: frm.doc.bank_account,
 					till_date: frm.doc.bank_statement_to_date,
@@ -163,41 +140,30 @@
 	},
 
 	render_chart(frm) {
-		frm.cards_manager = new erpnext.accounts.bank_reconciliation.NumberCardManager(
-			{
-				$reconciliation_tool_cards: frm.get_field(
-					"reconciliation_tool_cards"
-				).$wrapper,
-				bank_statement_closing_balance:
-				frm.doc.bank_statement_closing_balance,
-				cleared_balance: frm.cleared_balance,
-				currency: frm.doc.account_currency,
-			}
-		);
+		frm.cards_manager = new erpnext.accounts.bank_reconciliation.NumberCardManager({
+			$reconciliation_tool_cards: frm.get_field("reconciliation_tool_cards").$wrapper,
+			bank_statement_closing_balance: frm.doc.bank_statement_closing_balance,
+			cleared_balance: frm.cleared_balance,
+			currency: frm.doc.account_currency,
+		});
 	},
 
 	render(frm) {
 		if (frm.doc.bank_account) {
-			frm.bank_reconciliation_data_table_manager = new erpnext.accounts.bank_reconciliation.DataTableManager(
-				{
+			frm.bank_reconciliation_data_table_manager =
+				new erpnext.accounts.bank_reconciliation.DataTableManager({
 					company: frm.doc.company,
 					bank_account: frm.doc.bank_account,
-					$reconciliation_tool_dt: frm.get_field(
-						"reconciliation_tool_dt"
-					).$wrapper,
-					$no_bank_transactions: frm.get_field(
-						"no_bank_transactions"
-					).$wrapper,
+					$reconciliation_tool_dt: frm.get_field("reconciliation_tool_dt").$wrapper,
+					$no_bank_transactions: frm.get_field("no_bank_transactions").$wrapper,
 					bank_statement_from_date: frm.doc.bank_statement_from_date,
 					bank_statement_to_date: frm.doc.bank_statement_to_date,
 					filter_by_reference_date: frm.doc.filter_by_reference_date,
 					from_reference_date: frm.doc.from_reference_date,
 					to_reference_date: frm.doc.to_reference_date,
-					bank_statement_closing_balance:
-						frm.doc.bank_statement_closing_balance,
+					bank_statement_closing_balance: frm.doc.bank_statement_closing_balance,
 					cards_manager: frm.cards_manager,
-				}
-			);
+				});
 		}
 	},
 });
diff --git a/erpnext/accounts/doctype/bank_statement_import/bank_statement_import.js b/erpnext/accounts/doctype/bank_statement_import/bank_statement_import.js
index db68dfa..c4b4420 100644
--- a/erpnext/accounts/doctype/bank_statement_import/bank_statement_import.js
+++ b/erpnext/accounts/doctype/bank_statement_import/bank_statement_import.js
@@ -17,11 +17,9 @@
 			frm.import_in_progress = false;
 			if (data_import !== frm.doc.name) return;
 			frappe.model.clear_doc("Bank Statement Import", frm.doc.name);
-			frappe.model
-				.with_doc("Bank Statement Import", frm.doc.name)
-				.then(() => {
-					frm.refresh();
-				});
+			frappe.model.with_doc("Bank Statement Import", frm.doc.name).then(() => {
+				frm.refresh();
+			});
 		});
 		frappe.realtime.on("data_import_progress", (data) => {
 			frm.import_in_progress = true;
@@ -48,20 +46,9 @@
 						: __("Updating {0} of {1}, {2}", message_args);
 			}
 			if (data.skipping) {
-				message = __(
-					"Skipping {0} of {1}, {2}",
-					[
-						data.current,
-						data.total,
-						eta_message,
-					]
-				);
+				message = __("Skipping {0} of {1}, {2}", [data.current, data.total, eta_message]);
 			}
-			frm.dashboard.show_progress(
-				__("Import Progress"),
-				percent,
-				message
-			);
+			frm.dashboard.show_progress(__("Import Progress"), percent, message);
 			frm.page.set_indicator(__("In Progress"), "orange");
 
 			// hide progress when complete
@@ -103,15 +90,12 @@
 		frm.trigger("show_report_error_button");
 
 		if (frm.doc.status === "Partial Success") {
-			frm.add_custom_button(__("Export Errored Rows"), () =>
-				frm.trigger("export_errored_rows")
-			);
+			frm.add_custom_button(__("Export Errored Rows"), () => frm.trigger("export_errored_rows"));
 		}
 
 		if (frm.doc.status.includes("Success")) {
-			frm.add_custom_button(
-				__("Go to {0} List", [__(frm.doc.reference_doctype)]),
-				() => frappe.set_route("List", frm.doc.reference_doctype)
+			frm.add_custom_button(__("Go to {0} List", [__(frm.doc.reference_doctype)]), () =>
+				frappe.set_route("List", frm.doc.reference_doctype)
 			);
 		}
 	},
@@ -128,13 +112,8 @@
 		frm.disable_save();
 		if (frm.doc.status !== "Success") {
 			if (!frm.is_new() && frm.has_import_file()) {
-				let label =
-					frm.doc.status === "Pending"
-						? __("Start Import")
-						: __("Retry");
-				frm.page.set_primary_action(label, () =>
-					frm.events.start_import(frm)
-				);
+				let label = frm.doc.status === "Pending" ? __("Start Import") : __("Retry");
+				frm.page.set_primary_action(label, () => frm.events.start_import(frm));
 			} else {
 				frm.page.set_primary_action(__("Save"), () => frm.save());
 			}
@@ -176,24 +155,24 @@
 				message =
 					successful_records.length > 1
 						? __(
-							"Successfully imported {0} records out of {1}. Click on Export Errored Rows, fix the errors and import again.",
-							message_args
-						)
+								"Successfully imported {0} records out of {1}. Click on Export Errored Rows, fix the errors and import again.",
+								message_args
+						  )
 						: __(
-							"Successfully imported {0} record out of {1}. Click on Export Errored Rows, fix the errors and import again.",
-							message_args
-						);
+								"Successfully imported {0} record out of {1}. Click on Export Errored Rows, fix the errors and import again.",
+								message_args
+						  );
 			} else {
 				message =
 					successful_records.length > 1
 						? __(
-							"Successfully updated {0} records out of {1}. Click on Export Errored Rows, fix the errors and import again.",
-							message_args
-						)
+								"Successfully updated {0} records out of {1}. Click on Export Errored Rows, fix the errors and import again.",
+								message_args
+						  )
 						: __(
-							"Successfully updated {0} record out of {1}. Click on Export Errored Rows, fix the errors and import again.",
-							message_args
-						);
+								"Successfully updated {0} record out of {1}. Click on Export Errored Rows, fix the errors and import again.",
+								message_args
+						  );
 			}
 		}
 		frm.dashboard.set_headline(message);
@@ -236,8 +215,7 @@
 	},
 
 	download_template() {
-		let method =
-			"/api/method/frappe.core.doctype.data_import.data_import.download_template";
+		let method = "/api/method/frappe.core.doctype.data_import.data_import.download_template";
 
 		open_url_post(method, {
 			doctype: "Bank Transaction",
@@ -250,7 +228,7 @@
 					"description",
 					"reference_number",
 					"bank_account",
-					"currency"
+					"currency",
 				],
 			},
 		});
@@ -321,10 +299,7 @@
 	show_import_preview(frm, preview_data) {
 		let import_log = JSON.parse(frm.doc.statement_import_log || "[]");
 
-		if (
-			frm.import_preview &&
-			frm.import_preview.doctype === frm.doc.reference_doctype
-		) {
+		if (frm.import_preview && frm.import_preview.doctype === frm.doc.reference_doctype) {
 			frm.import_preview.preview_data = preview_data;
 			frm.import_preview.import_log = import_log;
 			frm.import_preview.refresh();
@@ -340,19 +315,10 @@
 				frm,
 				events: {
 					remap_column(changed_map) {
-						let template_options = JSON.parse(
-							frm.doc.template_options || "{}"
-						);
-						template_options.column_to_field_map =
-							template_options.column_to_field_map || {};
-						Object.assign(
-							template_options.column_to_field_map,
-							changed_map
-						);
-						frm.set_value(
-							"template_options",
-							JSON.stringify(template_options)
-						);
+						let template_options = JSON.parse(frm.doc.template_options || "{}");
+						template_options.column_to_field_map = template_options.column_to_field_map || {};
+						Object.assign(template_options.column_to_field_map, changed_map);
+						frm.set_value("template_options", JSON.stringify(template_options));
 						frm.save().then(() => frm.trigger("import_file"));
 					},
 				},
@@ -386,8 +352,7 @@
 		let other_warnings = [];
 		for (let warning of warnings) {
 			if (warning.row) {
-				warnings_by_row[warning.row] =
-					warnings_by_row[warning.row] || [];
+				warnings_by_row[warning.row] = warnings_by_row[warning.row] || [];
 				warnings_by_row[warning.row].push(warning);
 			} else {
 				other_warnings.push(warning);
@@ -402,9 +367,7 @@
 						if (w.field) {
 							let label =
 								w.field.label +
-								(w.field.parent !== frm.doc.reference_doctype
-									? ` (${w.field.parent})`
-									: "");
+								(w.field.parent !== frm.doc.reference_doctype ? ` (${w.field.parent})` : "");
 							return `<li>${label}: ${w.message}</li>`;
 						}
 						return `<li>${w.message}</li>`;
@@ -423,10 +386,9 @@
 			.map((warning) => {
 				let header = "";
 				if (warning.col) {
-					let column_number = `<span class="text-uppercase">${__(
-						"Column {0}",
-						[warning.col]
-					)}</span>`;
+					let column_number = `<span class="text-uppercase">${__("Column {0}", [
+						warning.col,
+					])}</span>`;
 					let column_header = columns[warning.col].header_title;
 					header = `${column_number} (${column_header})`;
 				}
@@ -465,36 +427,28 @@
 				let html = "";
 				if (log.success) {
 					if (frm.doc.import_type === "Insert New Records") {
-						html = __(
-							"Successfully imported {0}", [
-								`<span class="underline">${frappe.utils.get_form_link(
-									frm.doc.reference_doctype,
-									log.docname,
-									true
-								)}<span>`,
-							]
-						);
+						html = __("Successfully imported {0}", [
+							`<span class="underline">${frappe.utils.get_form_link(
+								frm.doc.reference_doctype,
+								log.docname,
+								true
+							)}<span>`,
+						]);
 					} else {
-						html = __(
-							"Successfully updated {0}", [
-								`<span class="underline">${frappe.utils.get_form_link(
-									frm.doc.reference_doctype,
-									log.docname,
-									true
-								)}<span>`,
-							]
-						);
+						html = __("Successfully updated {0}", [
+							`<span class="underline">${frappe.utils.get_form_link(
+								frm.doc.reference_doctype,
+								log.docname,
+								true
+							)}<span>`,
+						]);
 					}
 				} else {
 					let messages = log.messages
 						.map(JSON.parse)
 						.map((m) => {
-							let title = m.title
-								? `<strong>${m.title}</strong>`
-								: "";
-							let message = m.message
-								? `<div>${m.message}</div>`
-								: "";
+							let title = m.title ? `<strong>${m.title}</strong>` : "";
+							let message = m.message ? `<div>${m.message}</div>` : "";
 							return title + message;
 						})
 						.join("");
diff --git a/erpnext/accounts/doctype/bank_statement_import/bank_statement_import_list.js b/erpnext/accounts/doctype/bank_statement_import/bank_statement_import_list.js
index 6c75402..4ab65ff 100644
--- a/erpnext/accounts/doctype/bank_statement_import/bank_statement_import_list.js
+++ b/erpnext/accounts/doctype/bank_statement_import/bank_statement_import_list.js
@@ -1,36 +1,34 @@
 let imports_in_progress = [];
 
-frappe.listview_settings['Bank Statement Import'] = {
+frappe.listview_settings["Bank Statement Import"] = {
 	onload(listview) {
-		frappe.realtime.on('data_import_progress', data => {
+		frappe.realtime.on("data_import_progress", (data) => {
 			if (!imports_in_progress.includes(data.data_import)) {
 				imports_in_progress.push(data.data_import);
 			}
 		});
-		frappe.realtime.on('data_import_refresh', data => {
-			imports_in_progress = imports_in_progress.filter(
-				d => d !== data.data_import
-			);
+		frappe.realtime.on("data_import_refresh", (data) => {
+			imports_in_progress = imports_in_progress.filter((d) => d !== data.data_import);
 			listview.refresh();
 		});
 	},
-	get_indicator: function(doc) {
+	get_indicator: function (doc) {
 		var colors = {
-			'Pending': 'orange',
-			'Not Started': 'orange',
-			'Partial Success': 'orange',
-			'Success': 'green',
-			'In Progress': 'orange',
-			'Error': 'red'
+			Pending: "orange",
+			"Not Started": "orange",
+			"Partial Success": "orange",
+			Success: "green",
+			"In Progress": "orange",
+			Error: "red",
 		};
 		let status = doc.status;
 		if (imports_in_progress.includes(doc.name)) {
-			status = 'In Progress';
+			status = "In Progress";
 		}
-		if (status == 'Pending') {
-			status = 'Not Started';
+		if (status == "Pending") {
+			status = "Not Started";
 		}
-		return [__(status), colors[status], 'status,=,' + doc.status];
+		return [__(status), colors[status], "status,=," + doc.status];
 	},
-	hide_name_column: true
+	hide_name_column: true,
 };
diff --git a/erpnext/accounts/doctype/bank_transaction/bank_transaction.js b/erpnext/accounts/doctype/bank_transaction/bank_transaction.js
index b3cc1cb..d899d42 100644
--- a/erpnext/accounts/doctype/bank_transaction/bank_transaction.js
+++ b/erpnext/accounts/doctype/bank_transaction/bank_transaction.js
@@ -3,7 +3,7 @@
 
 frappe.ui.form.on("Bank Transaction", {
 	onload(frm) {
-		frm.set_query("payment_document", "payment_entries", function() {
+		frm.set_query("payment_document", "payment_entries", function () {
 			const payment_doctypes = frm.events.get_payment_doctypes(frm);
 			return {
 				filters: {
@@ -23,7 +23,7 @@
 		set_bank_statement_filter(frm);
 	},
 
-	setup: function(frm) {
+	setup: function (frm) {
 		frm.set_query("party_type", function () {
 			return {
 				filters: {
@@ -33,16 +33,10 @@
 		});
 	},
 
-	get_payment_doctypes: function() {
+	get_payment_doctypes: function () {
 		// get payment doctypes from all the apps
-		return [
-			"Payment Entry",
-			"Journal Entry",
-			"Sales Invoice",
-			"Purchase Invoice",
-			"Bank Transaction",
-		];
-	}
+		return ["Payment Entry", "Journal Entry", "Sales Invoice", "Purchase Invoice", "Bank Transaction"];
+	},
 });
 
 frappe.ui.form.on("Bank Transaction Payments", {
@@ -54,10 +48,11 @@
 const update_clearance_date = (frm, cdt, cdn) => {
 	if (frm.doc.docstatus === 1) {
 		frappe
-			.xcall(
-				"erpnext.accounts.doctype.bank_transaction.bank_transaction.unclear_reference_payment",
-				{ doctype: cdt, docname: cdn, bt_name: frm.doc.name }
-			)
+			.xcall("erpnext.accounts.doctype.bank_transaction.bank_transaction.unclear_reference_payment", {
+				doctype: cdt,
+				docname: cdn,
+				bt_name: frm.doc.name,
+			})
 			.then((e) => {
 				if (e == "success") {
 					frappe.show_alert({
diff --git a/erpnext/accounts/doctype/bank_transaction/bank_transaction_list.js b/erpnext/accounts/doctype/bank_transaction/bank_transaction_list.js
index 2585ee9..9942c09 100644
--- a/erpnext/accounts/doctype/bank_transaction/bank_transaction_list.js
+++ b/erpnext/accounts/doctype/bank_transaction/bank_transaction_list.js
@@ -1,15 +1,15 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.listview_settings['Bank Transaction'] = {
+frappe.listview_settings["Bank Transaction"] = {
 	add_fields: ["unallocated_amount"],
-	get_indicator: function(doc) {
-		if(doc.docstatus == 2) {
+	get_indicator: function (doc) {
+		if (doc.docstatus == 2) {
 			return [__("Cancelled"), "red", "docstatus,=,2"];
-		} else if(flt(doc.unallocated_amount)<=0) {
+		} else if (flt(doc.unallocated_amount) <= 0) {
 			return [__("Reconciled"), "green", "unallocated_amount,=,0"];
-		} else if(flt(doc.unallocated_amount)>0) {
+		} else if (flt(doc.unallocated_amount) > 0) {
 			return [__("Unreconciled"), "orange", "unallocated_amount,>,0"];
 		}
-	}
+	},
 };
diff --git a/erpnext/accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.js b/erpnext/accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.js
index ece0fb3..f3532e5 100644
--- a/erpnext/accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.js
+++ b/erpnext/accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.js
@@ -6,18 +6,18 @@
 		frm.trigger("render_heatmap");
 	},
 	refresh(frm) {
-		frm.add_custom_button(__('Bisect Left'), () => {
+		frm.add_custom_button(__("Bisect Left"), () => {
 			frm.trigger("bisect_left");
 		});
 
-		frm.add_custom_button(__('Bisect Right'), () => {
+		frm.add_custom_button(__("Bisect Right"), () => {
 			frm.trigger("bisect_right");
 		});
 
-		frm.add_custom_button(__('Up'), () => {
+		frm.add_custom_button(__("Up"), () => {
 			frm.trigger("move_up");
 		});
-		frm.add_custom_button(__('Build Tree'), () => {
+		frm.add_custom_button(__("Build Tree"), () => {
 			frm.trigger("build_tree");
 		});
 	},
@@ -26,16 +26,16 @@
 		bisect_heatmap.addClass("bisect_heatmap_location");
 
 		// milliseconds in a day
-		let msiad=24*60*60*1000;
+		let msiad = 24 * 60 * 60 * 1000;
 		let datapoints = {};
 		let fr_dt = new Date(frm.doc.from_date).getTime();
 		let to_dt = new Date(frm.doc.to_date).getTime();
 		let bisect_start = new Date(frm.doc.current_from_date).getTime();
 		let bisect_end = new Date(frm.doc.current_to_date).getTime();
 
-		for(let x=fr_dt; x <= to_dt; x+=msiad){
-			let epoch_in_seconds = x/1000;
-			if ((bisect_start <= x) && (x <= bisect_end )) {
+		for (let x = fr_dt; x <= to_dt; x += msiad) {
+			let epoch_in_seconds = x / 1000;
+			if (bisect_start <= x && x <= bisect_end) {
 				datapoints[epoch_in_seconds] = 1.0;
 			} else {
 				datapoints[epoch_in_seconds] = 0.0;
@@ -49,19 +49,19 @@
 				start: new Date(frm.doc.from_date),
 				end: new Date(frm.doc.to_date),
 			},
-			countLabel: 'Bisecting',
+			countLabel: "Bisecting",
 			discreteDomains: 1,
 		});
 	},
 	bisect_left(frm) {
 		frm.call({
 			doc: frm.doc,
-			method: 'bisect_left',
+			method: "bisect_left",
 			freeze: true,
 			freeze_message: __("Bisecting Left ..."),
 			callback: (r) => {
 				frm.trigger("render_heatmap");
-			}
+			},
 		});
 	},
 	bisect_right(frm) {
@@ -69,10 +69,10 @@
 			doc: frm.doc,
 			freeze: true,
 			freeze_message: __("Bisecting Right ..."),
-			method: 'bisect_right',
+			method: "bisect_right",
 			callback: (r) => {
 				frm.trigger("render_heatmap");
-			}
+			},
 		});
 	},
 	move_up(frm) {
@@ -80,10 +80,10 @@
 			doc: frm.doc,
 			freeze: true,
 			freeze_message: __("Moving up in tree ..."),
-			method: 'move_up',
+			method: "move_up",
 			callback: (r) => {
 				frm.trigger("render_heatmap");
-			}
+			},
 		});
 	},
 	build_tree(frm) {
@@ -91,10 +91,10 @@
 			doc: frm.doc,
 			freeze: true,
 			freeze_message: __("Rebuilding BTree for period ..."),
-			method: 'build_tree',
+			method: "build_tree",
 			callback: (r) => {
 				frm.trigger("render_heatmap");
-			}
+			},
 		});
 	},
 });
diff --git a/erpnext/accounts/doctype/budget/budget.js b/erpnext/accounts/doctype/budget/budget.js
index e162e32..6e874f7 100644
--- a/erpnext/accounts/doctype/budget/budget.js
+++ b/erpnext/accounts/doctype/budget/budget.js
@@ -2,48 +2,48 @@
 // For license information, please see license.txt
 frappe.provide("erpnext.accounts.dimensions");
 
-frappe.ui.form.on('Budget', {
-	onload: function(frm) {
-		frm.set_query("account", "accounts", function() {
+frappe.ui.form.on("Budget", {
+	onload: function (frm) {
+		frm.set_query("account", "accounts", function () {
 			return {
 				filters: {
 					company: frm.doc.company,
 					report_type: "Profit and Loss",
-					is_group: 0
-				}
+					is_group: 0,
+				},
 			};
 		});
 
-		frm.set_query("monthly_distribution", function() {
+		frm.set_query("monthly_distribution", function () {
 			return {
 				filters: {
-					fiscal_year: frm.doc.fiscal_year
-				}
+					fiscal_year: frm.doc.fiscal_year,
+				},
 			};
 		});
 
 		erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype);
 	},
 
-	refresh: function(frm) {
-		frm.trigger("toggle_reqd_fields")
+	refresh: function (frm) {
+		frm.trigger("toggle_reqd_fields");
 	},
 
-	budget_against: function(frm) {
-		frm.trigger("set_null_value")
-		frm.trigger("toggle_reqd_fields")
+	budget_against: function (frm) {
+		frm.trigger("set_null_value");
+		frm.trigger("toggle_reqd_fields");
 	},
 
-	set_null_value: function(frm) {
-		if(frm.doc.budget_against == 'Cost Center') {
-			frm.set_value('project', null)
+	set_null_value: function (frm) {
+		if (frm.doc.budget_against == "Cost Center") {
+			frm.set_value("project", null);
 		} else {
-			frm.set_value('cost_center', null)
+			frm.set_value("cost_center", null);
 		}
 	},
 
-	toggle_reqd_fields: function(frm) {
-		frm.toggle_reqd("cost_center", frm.doc.budget_against=="Cost Center");
-		frm.toggle_reqd("project", frm.doc.budget_against=="Project");
-	}
+	toggle_reqd_fields: function (frm) {
+		frm.toggle_reqd("cost_center", frm.doc.budget_against == "Cost Center");
+		frm.toggle_reqd("project", frm.doc.budget_against == "Project");
+	},
 });
diff --git a/erpnext/accounts/doctype/cashier_closing/cashier_closing.js b/erpnext/accounts/doctype/cashier_closing/cashier_closing.js
index ce791e4..71664b7 100644
--- a/erpnext/accounts/doctype/cashier_closing/cashier_closing.js
+++ b/erpnext/accounts/doctype/cashier_closing/cashier_closing.js
@@ -1,11 +1,10 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.ui.form.on('Cashier Closing', {
-
-	setup: function(frm){
+frappe.ui.form.on("Cashier Closing", {
+	setup: function (frm) {
 		if (frm.doc.user == "" || frm.doc.user == null) {
 			frm.doc.user = frappe.session.user;
 		}
-	}
+	},
 });
diff --git a/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js b/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js
index 56fa6ce..1d8bb85 100644
--- a/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js
+++ b/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js
@@ -1,4 +1,4 @@
-frappe.ui.form.on('Chart of Accounts Importer', {
+frappe.ui.form.on("Chart of Accounts Importer", {
 	onload: function (frm) {
 		frm.set_value("company", "");
 		frm.set_value("import_file", "");
@@ -8,31 +8,34 @@
 		frm.disable_save();
 
 		// make company mandatory
-		frm.set_df_property('company', 'reqd', frm.doc.company ? 0 : 1);
-		frm.set_df_property('import_file_section', 'hidden', frm.doc.company ? 0 : 1);
+		frm.set_df_property("company", "reqd", frm.doc.company ? 0 : 1);
+		frm.set_df_property("import_file_section", "hidden", frm.doc.company ? 0 : 1);
 
 		if (frm.doc.import_file) {
 			frappe.run_serially([
 				() => generate_tree_preview(frm),
 				() => create_import_button(frm),
-				() => frm.set_df_property('chart_preview', 'hidden', 0)
+				() => frm.set_df_property("chart_preview", "hidden", 0),
 			]);
 		}
 
-		frm.set_df_property('chart_preview', 'hidden',
-			$(frm.fields_dict['chart_tree'].wrapper).html()!="" ? 0 : 1);
+		frm.set_df_property(
+			"chart_preview",
+			"hidden",
+			$(frm.fields_dict["chart_tree"].wrapper).html() != "" ? 0 : 1
+		);
 	},
 
-	download_template: function(frm) {
+	download_template: function (frm) {
 		var d = new frappe.ui.Dialog({
 			title: __("Download Template"),
 			fields: [
 				{
-					label : "File Type",
+					label: "File Type",
 					fieldname: "file_type",
 					fieldtype: "Select",
 					reqd: 1,
-					options: ["Excel", "CSV"]
+					options: ["Excel", "CSV"],
 				},
 				{
 					label: "Template Type",
@@ -41,21 +44,27 @@
 					reqd: 1,
 					options: ["Sample Template", "Blank Template"],
 					change: () => {
-						let template_type = d.get_value('template_type');
+						let template_type = d.get_value("template_type");
 
 						if (template_type === "Sample Template") {
-							d.set_df_property('template_type', 'description',
+							d.set_df_property(
+								"template_type",
+								"description",
 								`The Sample Template contains all the required accounts pre filled in the  template.
-								You can add more accounts or change existing accounts in the template as per your choice.`);
+								You can add more accounts or change existing accounts in the template as per your choice.`
+							);
 						} else {
-							d.set_df_property('template_type', 'description',
+							d.set_df_property(
+								"template_type",
+								"description",
 								`The Blank Template contains just the account type and root type required to build the Chart
-								of Accounts. Please enter the account names and add more rows as per your requirement.`);
+								of Accounts. Please enter the account names and add more rows as per your requirement.`
+							);
 						}
-					}
+					},
 				},
 				{
-					label : "Company",
+					label: "Company",
 					fieldname: "company",
 					fieldtype: "Link",
 					reqd: 1,
@@ -63,25 +72,25 @@
 					default: frm.doc.company,
 				},
 			],
-			primary_action: function() {
+			primary_action: function () {
 				let data = d.get_values();
 
 				if (!data.template_type) {
-					frappe.throw(__('Please select <b>Template Type</b> to download template'));
+					frappe.throw(__("Please select <b>Template Type</b> to download template"));
 				}
 
 				open_url_post(
-					'/api/method/erpnext.accounts.doctype.chart_of_accounts_importer.chart_of_accounts_importer.download_template',
+					"/api/method/erpnext.accounts.doctype.chart_of_accounts_importer.chart_of_accounts_importer.download_template",
 					{
 						file_type: data.file_type,
 						template_type: data.template_type,
-						company: data.company
+						company: data.company,
 					}
 				);
 
 				d.hide();
 			},
-			primary_action_label: __('Download')
+			primary_action_label: __("Download"),
 		});
 		d.show();
 	},
@@ -89,7 +98,7 @@
 	import_file: function (frm) {
 		if (!frm.doc.import_file) {
 			frm.page.set_indicator("");
-			$(frm.fields_dict['chart_tree'].wrapper).empty(); // empty wrapper on removing file
+			$(frm.fields_dict["chart_tree"].wrapper).empty(); // empty wrapper on removing file
 		}
 	},
 
@@ -99,89 +108,97 @@
 			frappe.call({
 				method: "erpnext.accounts.doctype.chart_of_accounts_importer.chart_of_accounts_importer.validate_company",
 				args: {
-					company: frm.doc.company
+					company: frm.doc.company,
 				},
-				callback: function(r) {
-					if(r.message===false) {
+				callback: function (r) {
+					if (r.message === false) {
 						frm.set_value("company", "");
-						frappe.throw(__("Transactions against the Company already exist! Chart of Accounts can only be imported for a Company with no transactions."));
+						frappe.throw(
+							__(
+								"Transactions against the Company already exist! Chart of Accounts can only be imported for a Company with no transactions."
+							)
+						);
 					} else {
 						frm.trigger("refresh");
 					}
-				}
+				},
 			});
 		}
-	}
+	},
 });
 
-var create_import_button = function(frm) {
-	frm.page.set_primary_action(__("Import"), function () {
+var create_import_button = function (frm) {
+	frm.page
+		.set_primary_action(__("Import"), function () {
+			return frappe.call({
+				method: "erpnext.accounts.doctype.chart_of_accounts_importer.chart_of_accounts_importer.import_coa",
+				args: {
+					file_name: frm.doc.import_file,
+					company: frm.doc.company,
+				},
+				freeze: true,
+				freeze_message: __("Creating Accounts..."),
+				callback: function (r) {
+					if (!r.exc) {
+						clearInterval(frm.page["interval"]);
+						frm.page.set_indicator(__("Import Successful"), "blue");
+						create_reset_button(frm);
+					}
+				},
+			});
+		})
+		.addClass("btn btn-primary");
+};
+
+var create_reset_button = function (frm) {
+	frm.page
+		.set_primary_action(__("Reset"), function () {
+			frm.page.clear_primary_action();
+			delete frm.page["show_import_button"];
+			frm.reload_doc();
+		})
+		.addClass("btn btn-primary");
+};
+
+var validate_coa = function (frm) {
+	if (frm.doc.import_file) {
+		let parent = __("All Accounts");
 		return frappe.call({
-			method: "erpnext.accounts.doctype.chart_of_accounts_importer.chart_of_accounts_importer.import_coa",
+			method: "erpnext.accounts.doctype.chart_of_accounts_importer.chart_of_accounts_importer.get_coa",
 			args: {
 				file_name: frm.doc.import_file,
-				company: frm.doc.company
-			},
-			freeze: true,
-			freeze_message: __("Creating Accounts..."),
-			callback: function(r) {
-				if (!r.exc) {
-					clearInterval(frm.page["interval"]);
-					frm.page.set_indicator(__('Import Successful'), 'blue');
-					create_reset_button(frm);
-				}
-			}
-		});
-	}).addClass('btn btn-primary');
-};
-
-var create_reset_button = function(frm) {
-	frm.page.set_primary_action(__("Reset"), function () {
-		frm.page.clear_primary_action();
-		delete frm.page["show_import_button"];
-		frm.reload_doc();
-	}).addClass('btn btn-primary');
-};
-
-var validate_coa = function(frm) {
-	if (frm.doc.import_file) {
-		let parent = __('All Accounts');
-		return frappe.call({
-			'method': 'erpnext.accounts.doctype.chart_of_accounts_importer.chart_of_accounts_importer.get_coa',
-			'args': {
-				file_name: frm.doc.import_file,
 				parent: parent,
-				doctype: 'Chart of Accounts Importer',
+				doctype: "Chart of Accounts Importer",
 				file_type: frm.doc.file_type,
-				for_validate: 1
+				for_validate: 1,
 			},
-			callback: function(r) {
-				if (r.message['show_import_button']) {
-					frm.page['show_import_button'] = Boolean(r.message['show_import_button']);
+			callback: function (r) {
+				if (r.message["show_import_button"]) {
+					frm.page["show_import_button"] = Boolean(r.message["show_import_button"]);
 				}
-			}
+			},
 		});
 	}
 };
 
-var generate_tree_preview = function(frm) {
-	let parent = __('All Accounts');
-	$(frm.fields_dict['chart_tree'].wrapper).empty(); // empty wrapper to load new data
+var generate_tree_preview = function (frm) {
+	let parent = __("All Accounts");
+	$(frm.fields_dict["chart_tree"].wrapper).empty(); // empty wrapper to load new data
 
 	// generate tree structure based on the csv data
 	return new frappe.ui.Tree({
-		parent: $(frm.fields_dict['chart_tree'].wrapper),
+		parent: $(frm.fields_dict["chart_tree"].wrapper),
 		label: parent,
 		expandable: true,
-		method: 'erpnext.accounts.doctype.chart_of_accounts_importer.chart_of_accounts_importer.get_coa',
+		method: "erpnext.accounts.doctype.chart_of_accounts_importer.chart_of_accounts_importer.get_coa",
 		args: {
 			file_name: frm.doc.import_file,
 			parent: parent,
-			doctype: 'Chart of Accounts Importer',
-			file_type: frm.doc.file_type
+			doctype: "Chart of Accounts Importer",
+			file_type: frm.doc.file_type,
 		},
-		onclick: function(node) {
+		onclick: function (node) {
 			parent = node.value;
-		}
+		},
 	});
 };
diff --git a/erpnext/accounts/doctype/cheque_print_template/cheque_print_template.js b/erpnext/accounts/doctype/cheque_print_template/cheque_print_template.js
index d10c618..17cb8d0 100644
--- a/erpnext/accounts/doctype/cheque_print_template/cheque_print_template.js
+++ b/erpnext/accounts/doctype/cheque_print_template/cheque_print_template.js
@@ -3,18 +3,20 @@
 
 frappe.provide("erpnext.cheque_print");
 
-frappe.ui.form.on('Cheque Print Template', {
-	refresh: function(frm) {
-		if(!frm.doc.__islocal) {
-			frm.add_custom_button(frm.doc.has_print_format?__("Update Print Format"):__("Create Print Format"),
-				function() {
+frappe.ui.form.on("Cheque Print Template", {
+	refresh: function (frm) {
+		if (!frm.doc.__islocal) {
+			frm.add_custom_button(
+				frm.doc.has_print_format ? __("Update Print Format") : __("Create Print Format"),
+				function () {
 					erpnext.cheque_print.view_cheque_print(frm);
-				}).addClass("btn-primary");
+				}
+			).addClass("btn-primary");
 
-			$(frm.fields_dict.cheque_print_preview.wrapper).empty()
+			$(frm.fields_dict.cheque_print_preview.wrapper).empty();
 
-
-			var template = '<div style="position: relative; overflow-x: scroll;">\
+			var template =
+				'<div style="position: relative; overflow-x: scroll;">\
 				<div id="cheque_preview" style="width: {{ cheque_width }}cm; \
 					height: {{ cheque_height }}cm;\
 					background-repeat: no-repeat;\
@@ -48,30 +50,30 @@
 				</div>\
 			</div>';
 
-			$(frappe.render(template, frm.doc)).appendTo(frm.fields_dict.cheque_print_preview.wrapper)
+			$(frappe.render(template, frm.doc)).appendTo(frm.fields_dict.cheque_print_preview.wrapper);
 
 			if (frm.doc.scanned_cheque) {
-				$(frm.fields_dict.cheque_print_preview.wrapper).find("#cheque_preview").css('background-image', 'url(' + frm.doc.scanned_cheque + ')');
+				$(frm.fields_dict.cheque_print_preview.wrapper)
+					.find("#cheque_preview")
+					.css("background-image", "url(" + frm.doc.scanned_cheque + ")");
 			}
 		}
-	}
+	},
 });
 
-
-erpnext.cheque_print.view_cheque_print = function(frm) {
+erpnext.cheque_print.view_cheque_print = function (frm) {
 	frappe.call({
 		method: "erpnext.accounts.doctype.cheque_print_template.cheque_print_template.create_or_update_cheque_print_format",
-		args:{
-			"template_name": frm.doc.name
+		args: {
+			template_name: frm.doc.name,
 		},
-		callback: function(r) {
+		callback: function (r) {
 			if (!r.exe && !frm.doc.has_print_format) {
 				var doc = frappe.model.sync(r.message);
 				frappe.set_route("Form", r.message.doctype, r.message.name);
+			} else {
+				frappe.msgprint(__("Print settings updated in respective print format"));
 			}
-			else {
-				frappe.msgprint(__("Print settings updated in respective print format"))
-			}
-		}
-	})
-}
+		},
+	});
+};
diff --git a/erpnext/accounts/doctype/cost_center/cost_center.js b/erpnext/accounts/doctype/cost_center/cost_center.js
index c427cc8..7ccc802 100644
--- a/erpnext/accounts/doctype/cost_center/cost_center.js
+++ b/erpnext/accounts/doctype/cost_center/cost_center.js
@@ -3,75 +3,80 @@
 
 frappe.provide("erpnext.accounts");
 
-
-
-frappe.ui.form.on('Cost Center', {
-	onload: function(frm) {
-		frm.set_query("parent_cost_center", function() {
+frappe.ui.form.on("Cost Center", {
+	onload: function (frm) {
+		frm.set_query("parent_cost_center", function () {
 			return {
 				filters: {
 					company: frm.doc.company,
-					is_group: 1
-				}
-			}
+					is_group: 1,
+				},
+			};
 		});
 	},
-	refresh: function(frm) {
+	refresh: function (frm) {
 		if (!frm.is_new()) {
-			frm.add_custom_button(__('Update Cost Center Name / Number'), function () {
+			frm.add_custom_button(__("Update Cost Center Name / Number"), function () {
 				frm.trigger("update_cost_center_number");
 			});
 		}
 
-		let intro_txt = '';
+		let intro_txt = "";
 		let doc = frm.doc;
-		frm.toggle_display('cost_center_name', doc.__islocal);
-		frm.toggle_enable(['is_group', 'company'], doc.__islocal);
+		frm.toggle_display("cost_center_name", doc.__islocal);
+		frm.toggle_enable(["is_group", "company"], doc.__islocal);
 
-		if(!doc.__islocal && doc.is_group==1) {
-			intro_txt += __('Note: This Cost Center is a Group. Cannot make accounting entries against groups.');
+		if (!doc.__islocal && doc.is_group == 1) {
+			intro_txt += __(
+				"Note: This Cost Center is a Group. Cannot make accounting entries against groups."
+			);
 		}
 
 		frm.events.hide_unhide_group_ledger(frm);
 
-		frm.toggle_display('sb1', doc.is_group==0);
+		frm.toggle_display("sb1", doc.is_group == 0);
 		frm.set_intro(intro_txt);
 
-		if(!frm.doc.__islocal) {
-			frm.add_custom_button(__('Chart of Cost Centers'),
-				function() { frappe.set_route("Tree", "Cost Center"); });
+		if (!frm.doc.__islocal) {
+			frm.add_custom_button(__("Chart of Cost Centers"), function () {
+				frappe.set_route("Tree", "Cost Center");
+			});
 
-			frm.add_custom_button(__('Budget'),
-				function() { frappe.set_route("List", "Budget", {'cost_center': frm.doc.name}); });
+			frm.add_custom_button(__("Budget"), function () {
+				frappe.set_route("List", "Budget", { cost_center: frm.doc.name });
+			});
 		}
 	},
-	update_cost_center_number: function(frm) {
+	update_cost_center_number: function (frm) {
 		var d = new frappe.ui.Dialog({
-			title: __('Update Cost Center Name / Number'),
+			title: __("Update Cost Center Name / Number"),
 			fields: [
 				{
-					"label": "Cost Center Name",
-					"fieldname": "cost_center_name",
-					"fieldtype": "Data",
-					"reqd": 1,
-					"default": frm.doc.cost_center_name
+					label: "Cost Center Name",
+					fieldname: "cost_center_name",
+					fieldtype: "Data",
+					reqd: 1,
+					default: frm.doc.cost_center_name,
 				},
 				{
-					"label": "Cost Center Number",
-					"fieldname": "cost_center_number",
-					"fieldtype": "Data",
-					"default": frm.doc.cost_center_number
+					label: "Cost Center Number",
+					fieldname: "cost_center_number",
+					fieldtype: "Data",
+					default: frm.doc.cost_center_number,
 				},
 				{
-					"label": __("Merge with existing"),
-					"fieldname": "merge",
-					"fieldtype": "Check",
-					"default": 0
-				}
+					label: __("Merge with existing"),
+					fieldname: "merge",
+					fieldtype: "Check",
+					default: 0,
+				},
 			],
-			primary_action: function() {
+			primary_action: function () {
 				let data = d.get_values();
-				if(data.cost_center_name === frm.doc.cost_center_name && data.cost_center_number === frm.doc.cost_center_number) {
+				if (
+					data.cost_center_name === frm.doc.cost_center_name &&
+					data.cost_center_number === frm.doc.cost_center_number
+				) {
 					d.hide();
 					return;
 				}
@@ -83,12 +88,12 @@
 						cost_center_name: data.cost_center_name,
 						cost_center_number: cstr(data.cost_center_number),
 						company: frm.doc.company,
-						merge: data.merge
+						merge: data.merge,
 					},
-					callback: function(r) {
+					callback: function (r) {
 						frappe.dom.unfreeze();
-						if(!r.exc) {
-							if(r.message) {
+						if (!r.exc) {
+							if (r.message) {
 								frappe.set_route("Form", "Cost Center", r.message);
 							} else {
 								frm.set_value("cost_center_name", data.cost_center_name);
@@ -96,44 +101,42 @@
 							}
 							d.hide();
 						}
-					}
+					},
 				});
 			},
-			primary_action_label: __('Update')
+			primary_action_label: __("Update"),
 		});
 		d.show();
 	},
 
 	parent_cost_center(frm) {
-		if(!frm.doc.company) {
-			frappe.msgprint(__('Please enter company name first'));
+		if (!frm.doc.company) {
+			frappe.msgprint(__("Please enter company name first"));
 		}
 	},
 
 	hide_unhide_group_ledger(frm) {
 		let doc = frm.doc;
 		if (doc.is_group == 1) {
-			frm.add_custom_button(__('Convert to Non-Group'),
-				() => frm.events.convert_to_ledger(frm));
+			frm.add_custom_button(__("Convert to Non-Group"), () => frm.events.convert_to_ledger(frm));
 		} else if (doc.is_group == 0) {
-			frm.add_custom_button(__('Convert to Group'),
-				() => frm.events.convert_to_group(frm));
+			frm.add_custom_button(__("Convert to Group"), () => frm.events.convert_to_group(frm));
 		}
 	},
 
 	convert_to_group(frm) {
-		frm.call('convert_ledger_to_group').then(r => {
-			if(r.message === 1) {
+		frm.call("convert_ledger_to_group").then((r) => {
+			if (r.message === 1) {
 				frm.refresh();
 			}
 		});
 	},
 
 	convert_to_ledger(frm) {
-		frm.call('convert_group_to_ledger').then(r => {
-			if(r.message === 1) {
+		frm.call("convert_group_to_ledger").then((r) => {
+			if (r.message === 1) {
 				frm.refresh();
 			}
 		});
-	}
+	},
 });
diff --git a/erpnext/accounts/doctype/cost_center/cost_center_tree.js b/erpnext/accounts/doctype/cost_center/cost_center_tree.js
index 1d482c5..3edeb8e 100644
--- a/erpnext/accounts/doctype/cost_center/cost_center_tree.js
+++ b/erpnext/accounts/doctype/cost_center/cost_center_tree.js
@@ -1,54 +1,84 @@
 frappe.treeview_settings["Cost Center"] = {
 	breadcrumb: "Accounts",
 	get_tree_root: false,
-	filters: [{
-		fieldname: "company",
-		fieldtype:"Select",
-		options: erpnext.utils.get_tree_options("company"),
-		label: __("Company"),
-		default: erpnext.utils.get_tree_default("company")
-	}],
-	root_label: "Cost Centers",
-	get_tree_nodes: 'erpnext.accounts.utils.get_children',
-	add_tree_node: 'erpnext.accounts.utils.add_cc',
-	menu_items:[
+	filters: [
 		{
-			label: __('New Company'),
-			action: function() { frappe.new_doc("Company", true) },
-			condition: 'frappe.boot.user.can_create.indexOf("Company") !== -1'
-		}
+			fieldname: "company",
+			fieldtype: "Select",
+			options: erpnext.utils.get_tree_options("company"),
+			label: __("Company"),
+			default: erpnext.utils.get_tree_default("company"),
+		},
 	],
-	fields:[
-		{fieldtype:'Data', fieldname:'cost_center_name', label:__('New Cost Center Name'), reqd:true},
-		{fieldtype:'Check', fieldname:'is_group', label:__('Is Group'),
-			description:__('Further cost centers can be made under Groups but entries can be made against non-Groups')},
-		{fieldtype:'Data', fieldname:'cost_center_number', label:__('Cost Center Number'),
-			description: __("Number of new Cost Center, it will be included in the cost center name as a prefix")}
+	root_label: "Cost Centers",
+	get_tree_nodes: "erpnext.accounts.utils.get_children",
+	add_tree_node: "erpnext.accounts.utils.add_cc",
+	menu_items: [
+		{
+			label: __("New Company"),
+			action: function () {
+				frappe.new_doc("Company", true);
+			},
+			condition: 'frappe.boot.user.can_create.indexOf("Company") !== -1',
+		},
 	],
-	ignore_fields:["parent_cost_center"],
-	onload: function(treeview) {
+	fields: [
+		{ fieldtype: "Data", fieldname: "cost_center_name", label: __("New Cost Center Name"), reqd: true },
+		{
+			fieldtype: "Check",
+			fieldname: "is_group",
+			label: __("Is Group"),
+			description: __(
+				"Further cost centers can be made under Groups but entries can be made against non-Groups"
+			),
+		},
+		{
+			fieldtype: "Data",
+			fieldname: "cost_center_number",
+			label: __("Cost Center Number"),
+			description: __(
+				"Number of new Cost Center, it will be included in the cost center name as a prefix"
+			),
+		},
+	],
+	ignore_fields: ["parent_cost_center"],
+	onload: function (treeview) {
 		function get_company() {
 			return treeview.page.fields_dict.company.get_value();
 		}
 
 		// tools
-		treeview.page.add_inner_button(__("Chart of Accounts"), function() {
-			frappe.set_route('Tree', 'Account', {company: get_company()});
-		}, __('View'));
+		treeview.page.add_inner_button(
+			__("Chart of Accounts"),
+			function () {
+				frappe.set_route("Tree", "Account", { company: get_company() });
+			},
+			__("View")
+		);
 
 		// make
-		treeview.page.add_inner_button(__("Budget List"), function() {
-			frappe.set_route('List', 'Budget', {company: get_company()});
-		}, __('Budget'));
+		treeview.page.add_inner_button(
+			__("Budget List"),
+			function () {
+				frappe.set_route("List", "Budget", { company: get_company() });
+			},
+			__("Budget")
+		);
 
-		treeview.page.add_inner_button(__("Monthly Distribution"), function() {
-			frappe.set_route('List', 'Monthly Distribution', {company: get_company()});
-		}, __('Budget'));
+		treeview.page.add_inner_button(
+			__("Monthly Distribution"),
+			function () {
+				frappe.set_route("List", "Monthly Distribution", { company: get_company() });
+			},
+			__("Budget")
+		);
 
-		treeview.page.add_inner_button(__("Budget Variance Report"), function() {
-			frappe.set_route('query-report', 'Budget Variance Report', {company: get_company()});
-		}, __('Budget'));
-
-	}
-
-}
+		treeview.page.add_inner_button(
+			__("Budget Variance Report"),
+			function () {
+				frappe.set_route("query-report", "Budget Variance Report", { company: get_company() });
+			},
+			__("Budget")
+		);
+	},
+};
diff --git a/erpnext/accounts/doctype/cost_center_allocation/cost_center_allocation.js b/erpnext/accounts/doctype/cost_center_allocation/cost_center_allocation.js
index 0da9016..8adc5b2 100644
--- a/erpnext/accounts/doctype/cost_center_allocation/cost_center_allocation.js
+++ b/erpnext/accounts/doctype/cost_center_allocation/cost_center_allocation.js
@@ -1,24 +1,24 @@
 // Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Cost Center Allocation', {
-	setup: function(frm) {
-		frm.set_query('main_cost_center', function() {
+frappe.ui.form.on("Cost Center Allocation", {
+	setup: function (frm) {
+		frm.set_query("main_cost_center", function () {
 			return {
 				filters: {
 					company: frm.doc.company,
-					is_group: 0
-				}
+					is_group: 0,
+				},
 			};
 		});
 
-		frm.set_query('cost_center', 'allocation_percentages', function() {
+		frm.set_query("cost_center", "allocation_percentages", function () {
 			return {
 				filters: {
 					company: frm.doc.company,
-					is_group: 0
-				}
+					is_group: 0,
+				},
 			};
 		});
-	}
+	},
 });
diff --git a/erpnext/accounts/doctype/coupon_code/coupon_code.js b/erpnext/accounts/doctype/coupon_code/coupon_code.js
index da3a9f8..f8b5bdc 100644
--- a/erpnext/accounts/doctype/coupon_code/coupon_code.js
+++ b/erpnext/accounts/doctype/coupon_code/coupon_code.js
@@ -1,44 +1,41 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Coupon Code', {
-	setup: function(frm) {
-		frm.set_query("pricing_rule", function() {
+frappe.ui.form.on("Coupon Code", {
+	setup: function (frm) {
+		frm.set_query("pricing_rule", function () {
 			return {
-				filters: [
-					["Pricing Rule","coupon_code_based", "=", "1"]
-				]
+				filters: [["Pricing Rule", "coupon_code_based", "=", "1"]],
 			};
 		});
 	},
-	coupon_name:function(frm){
-		if (frm.doc.__islocal===1) {
+	coupon_name: function (frm) {
+		if (frm.doc.__islocal === 1) {
 			frm.trigger("make_coupon_code");
 		}
 	},
-	coupon_type:function(frm){
-		if (frm.doc.__islocal===1) {
+	coupon_type: function (frm) {
+		if (frm.doc.__islocal === 1) {
 			frm.trigger("make_coupon_code");
 		}
 	},
-	make_coupon_code: function(frm) {
-		var coupon_name=frm.doc.coupon_name;
+	make_coupon_code: function (frm) {
+		var coupon_name = frm.doc.coupon_name;
 		var coupon_code;
-		if (frm.doc.coupon_type=='Gift Card') {
-			coupon_code=Math.random().toString(12).substring(2, 12).toUpperCase();
+		if (frm.doc.coupon_type == "Gift Card") {
+			coupon_code = Math.random().toString(12).substring(2, 12).toUpperCase();
+		} else if (frm.doc.coupon_type == "Promotional") {
+			coupon_name = coupon_name.replace(/\s/g, "");
+			coupon_code = coupon_name.toUpperCase().slice(0, 8);
 		}
-		else if(frm.doc.coupon_type=='Promotional'){
-			coupon_name=coupon_name.replace(/\s/g,'');
-			coupon_code=coupon_name.toUpperCase().slice(0,8);
-		}
-		frm.doc.coupon_code=coupon_code;
-		frm.refresh_field('coupon_code');
+		frm.doc.coupon_code = coupon_code;
+		frm.refresh_field("coupon_code");
 	},
-	refresh: function(frm) {
+	refresh: function (frm) {
 		if (frm.doc.pricing_rule) {
-			frm.add_custom_button(__("Add/Edit Coupon Conditions"), function(){
+			frm.add_custom_button(__("Add/Edit Coupon Conditions"), function () {
 				frappe.set_route("Form", "Pricing Rule", frm.doc.pricing_rule);
 			});
 		}
-	}
+	},
 });
diff --git a/erpnext/accounts/doctype/currency_exchange_settings/currency_exchange_settings.js b/erpnext/accounts/doctype/currency_exchange_settings/currency_exchange_settings.js
index 6c40f2b..d931f62 100644
--- a/erpnext/accounts/doctype/currency_exchange_settings/currency_exchange_settings.js
+++ b/erpnext/accounts/doctype/currency_exchange_settings/currency_exchange_settings.js
@@ -1,28 +1,27 @@
 // Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Currency Exchange Settings', {
-	service_provider: function(frm) {
+frappe.ui.form.on("Currency Exchange Settings", {
+	service_provider: function (frm) {
 		if (frm.doc.service_provider == "exchangerate.host") {
-			let result = ['result'];
+			let result = ["result"];
 			let params = {
-				date: '{transaction_date}',
-				from: '{from_currency}',
-				to: '{to_currency}'
+				date: "{transaction_date}",
+				from: "{from_currency}",
+				to: "{to_currency}",
 			};
 			add_param(frm, "https://api.exchangerate.host/convert", params, result);
 		} else if (frm.doc.service_provider == "frankfurter.app") {
-			let result = ['rates', '{to_currency}'];
+			let result = ["rates", "{to_currency}"];
 			let params = {
-				base: '{from_currency}',
-				symbols: '{to_currency}'
+				base: "{from_currency}",
+				symbols: "{to_currency}",
 			};
 			add_param(frm, "https://frankfurter.app/{transaction_date}", params, result);
 		}
-	}
+	},
 });
 
-
 function add_param(frm, api, params, result) {
 	var row;
 	frm.clear_table("req_params");
@@ -30,13 +29,13 @@
 
 	frm.doc.api_endpoint = api;
 
-	$.each(params, function(key, value) {
+	$.each(params, function (key, value) {
 		row = frm.add_child("req_params");
 		row.key = key;
 		row.value = value;
 	});
 
-	$.each(result, function(key, value) {
+	$.each(result, function (key, value) {
 		row = frm.add_child("result_key");
 		row.key = value;
 	});
diff --git a/erpnext/accounts/doctype/dunning/dunning.js b/erpnext/accounts/doctype/dunning/dunning.js
index 1ac909e..e9d091f 100644
--- a/erpnext/accounts/doctype/dunning/dunning.js
+++ b/erpnext/accounts/doctype/dunning/dunning.js
@@ -10,7 +10,7 @@
 					company: frm.doc.company,
 					customer: frm.doc.customer,
 					outstanding_amount: [">", 0],
-					status: "Overdue"
+					status: "Overdue",
 				},
 			};
 		});
@@ -19,16 +19,16 @@
 				filters: {
 					company: frm.doc.company,
 					root_type: "Income",
-					is_group: 0
-				}
+					is_group: 0,
+				},
 			};
 		});
 		frm.set_query("cost_center", () => {
 			return {
 				filters: {
 					company: frm.doc.company,
-					is_group: 0
-				}
+					is_group: 0,
+				},
 			};
 		});
 
@@ -51,7 +51,8 @@
 				__("Payment"),
 				function () {
 					frm.events.make_payment_entry(frm);
-				}, __("Create")
+				},
+				__("Create")
 			);
 			frm.page.set_inner_btn_group_as_primary(__("Create"));
 		}
@@ -69,7 +70,7 @@
 					get_query_filters: {
 						docstatus: 1,
 						status: "Overdue",
-						company: frm.doc.company
+						company: frm.doc.company,
 					},
 					allow_child_item_selection: true,
 					child_fieldname: "payment_schedule",
@@ -78,9 +79,12 @@
 			});
 		}
 
-		frappe.dynamic_link = { doc: frm.doc, fieldname: 'customer', doctype: 'Customer' };
+		frappe.dynamic_link = { doc: frm.doc, fieldname: "customer", doctype: "Customer" };
 
-		frm.toggle_display("customer_name", (frm.doc.customer_name && frm.doc.customer_name !== frm.doc.customer));
+		frm.toggle_display(
+			"customer_name",
+			frm.doc.customer_name && frm.doc.customer_name !== frm.doc.customer
+		);
 	},
 	// When multiple companies are set up. in case company name is changed set default company address
 	company: function (frm) {
@@ -90,8 +94,8 @@
 				args: { name: frm.doc.company, existing_address: frm.doc.company_address || "" },
 				debounce: 2000,
 				callback: function (r) {
-					frm.set_value("company_address", r && r.message || "");
-				}
+					frm.set_value("company_address", (r && r.message) || "");
+				},
 			});
 
 			if (frm.fields_dict.currency) {
@@ -125,16 +129,16 @@
 					transaction_date: frm.doc.posting_date,
 					from_currency: frm.doc.currency,
 					to_currency: company_currency,
-					args: "for_selling"
+					args: "for_selling",
 				},
 				freeze: true,
 				freeze_message: __("Fetching exchange rates ..."),
-				callback: function(r) {
+				callback: function (r) {
 					const exchange_rate = flt(r.message);
 					if (exchange_rate != frm.doc.conversion_rate) {
 						frm.set_value("conversion_rate", exchange_rate);
 					}
-				}
+				},
 			});
 		} else {
 			frm.trigger("conversion_rate");
@@ -166,8 +170,7 @@
 	get_dunning_letter_text: function (frm) {
 		if (frm.doc.dunning_type) {
 			frappe.call({
-				method:
-					"erpnext.accounts.doctype.dunning.dunning.get_dunning_letter_text",
+				method: "erpnext.accounts.doctype.dunning.dunning.get_dunning_letter_text",
 				args: {
 					dunning_type: frm.doc.dunning_type,
 					language: frm.doc.language,
@@ -204,10 +207,7 @@
 	calculate_overdue_days: function (frm) {
 		frm.doc.overdue_payments.forEach((row) => {
 			if (frm.doc.posting_date && row.due_date) {
-				const overdue_days = moment(frm.doc.posting_date).diff(
-					row.due_date,
-					"days"
-				);
+				const overdue_days = moment(frm.doc.posting_date).diff(row.due_date, "days");
 				frappe.model.set_value(row.doctype, row.name, "overdue_days", overdue_days);
 			}
 		});
@@ -215,15 +215,16 @@
 	calculate_interest: function (frm) {
 		frm.doc.overdue_payments.forEach((row) => {
 			const interest_per_day = frm.doc.rate_of_interest / 100 / 365;
-			const interest = flt((interest_per_day * row.overdue_days * row.outstanding), precision("interest", row));
+			const interest = flt(
+				interest_per_day * row.overdue_days * row.outstanding,
+				precision("interest", row)
+			);
 			frappe.model.set_value(row.doctype, row.name, "interest", interest);
 		});
 	},
 	calculate_totals: function (frm) {
-		const total_interest = frm.doc.overdue_payments
-			.reduce((prev, cur) => prev + cur.interest, 0);
-		const total_outstanding = frm.doc.overdue_payments
-			.reduce((prev, cur) => prev + cur.outstanding, 0);
+		const total_interest = frm.doc.overdue_payments.reduce((prev, cur) => prev + cur.interest, 0);
+		const total_outstanding = frm.doc.overdue_payments.reduce((prev, cur) => prev + cur.outstanding, 0);
 		const dunning_amount = total_interest + frm.doc.dunning_fee;
 		const base_dunning_amount = dunning_amount * frm.doc.conversion_rate;
 		const grand_total = total_outstanding + dunning_amount;
@@ -240,8 +241,7 @@
 	},
 	make_payment_entry: function (frm) {
 		return frappe.call({
-			method:
-				"erpnext.accounts.doctype.payment_entry.payment_entry.get_payment_entry",
+			method: "erpnext.accounts.doctype.payment_entry.payment_entry.get_payment_entry",
 			args: {
 				dt: frm.doc.doctype,
 				dn: frm.doc.name,
@@ -257,5 +257,5 @@
 frappe.ui.form.on("Overdue Payment", {
 	interest: function (frm) {
 		frm.trigger("calculate_totals");
-	}
-});
\ No newline at end of file
+	},
+});
diff --git a/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.js b/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.js
index 1ef5c83..741039a 100644
--- a/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.js
+++ b/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.js
@@ -1,75 +1,79 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Exchange Rate Revaluation', {
-	setup: function(frm) {
-		frm.set_query("party_type", "accounts", function() {
+frappe.ui.form.on("Exchange Rate Revaluation", {
+	setup: function (frm) {
+		frm.set_query("party_type", "accounts", function () {
 			return {
-				"filters": {
-					"name": ["in", Object.keys(frappe.boot.party_account_types)],
-				}
+				filters: {
+					name: ["in", Object.keys(frappe.boot.party_account_types)],
+				},
 			};
 		});
-		frm.set_query("account", "accounts", function(doc) {
+		frm.set_query("account", "accounts", function (doc) {
 			return {
-				"filters": {
-					"company": doc.company
-				}
+				filters: {
+					company: doc.company,
+				},
 			};
 		});
 	},
 
-	refresh: function(frm) {
-		if(frm.doc.docstatus==1) {
+	refresh: function (frm) {
+		if (frm.doc.docstatus == 1) {
 			frappe.call({
-				method: 'check_journal_entry_condition',
+				method: "check_journal_entry_condition",
 				doc: frm.doc,
-				callback: function(r) {
+				callback: function (r) {
 					if (r.message) {
-						frm.add_custom_button(__('Journal Entries'), function() {
-							return frm.events.make_jv(frm);
-						}, __('Create'));
+						frm.add_custom_button(
+							__("Journal Entries"),
+							function () {
+								return frm.events.make_jv(frm);
+							},
+							__("Create")
+						);
 					}
-				}
+				},
 			});
 		}
 	},
 
-	validate_rounding_loss: function(frm) {
+	validate_rounding_loss: function (frm) {
 		let allowance = frm.doc.rounding_loss_allowance;
 		if (!(allowance >= 0 && allowance < 1)) {
 			frappe.throw(__("Rounding Loss Allowance should be between 0 and 1"));
 		}
 	},
 
-	rounding_loss_allowance: function(frm) {
+	rounding_loss_allowance: function (frm) {
 		frm.events.validate_rounding_loss(frm);
 	},
 
-	validate: function(frm) {
+	validate: function (frm) {
 		frm.events.validate_rounding_loss(frm);
 	},
 
-	get_entries: function(frm, account) {
+	get_entries: function (frm, account) {
 		frappe.call({
 			method: "get_accounts_data",
 			doc: cur_frm.doc,
 			account: account,
-			callback: function(r){
+			callback: function (r) {
 				frappe.model.clear_table(frm.doc, "accounts");
-				if(r.message) {
+				if (r.message) {
 					r.message.forEach((d) => {
-						cur_frm.add_child("accounts",d);
+						cur_frm.add_child("accounts", d);
 					});
 					frm.events.get_total_gain_loss(frm);
 					refresh_field("accounts");
 				}
-			}
+			},
 		});
 	},
 
-	get_total_gain_loss: function(frm) {
-		if(!(frm.doc.accounts && frm.doc.accounts.length)) return;
+	get_total_gain_loss: function (frm) {
+		if (!(frm.doc.accounts && frm.doc.accounts.length)) return;
 
 		let total_gain_loss = 0;
 		frm.doc.accounts.forEach((d) => {
@@ -80,7 +84,7 @@
 		frm.refresh_fields();
 	},
 
-	make_jv : function(frm) {
+	make_jv: function (frm) {
 		let revaluation_journal = null;
 		let zero_balance_journal = null;
 		frappe.call({
@@ -88,66 +92,68 @@
 			doc: frm.doc,
 			freeze: true,
 			freeze_message: "Making Journal Entries...",
-			callback: function(r){
+			callback: function (r) {
 				if (r.message) {
 					let response = r.message;
-					if(response['revaluation_jv'] || response['zero_balance_jv']) {
+					if (response["revaluation_jv"] || response["zero_balance_jv"]) {
 						frappe.msgprint(__("Journals have been created"));
 					}
 				}
-			}
+			},
 		});
-	}
+	},
 });
 
 frappe.ui.form.on("Exchange Rate Revaluation Account", {
-	new_exchange_rate: function(frm, cdt, cdn) {
+	new_exchange_rate: function (frm, cdt, cdn) {
 		var row = frappe.get_doc(cdt, cdn);
-		row.new_balance_in_base_currency = flt(row.new_exchange_rate * flt(row.balance_in_account_currency),
-			precision("new_balance_in_base_currency", row));
+		row.new_balance_in_base_currency = flt(
+			row.new_exchange_rate * flt(row.balance_in_account_currency),
+			precision("new_balance_in_base_currency", row)
+		);
 		row.gain_loss = row.new_balance_in_base_currency - flt(row.balance_in_base_currency);
 		refresh_field("accounts");
 		frm.events.get_total_gain_loss(frm);
 	},
 
-	account: function(frm, cdt, cdn) {
+	account: function (frm, cdt, cdn) {
 		var row = locals[cdt][cdn];
 		if (row.account) {
 			get_account_details(frm, cdt, cdn);
 		}
 	},
 
-	party: function(frm, cdt, cdn) {
+	party: function (frm, cdt, cdn) {
 		var row = locals[cdt][cdn];
 		if (row.party && row.account) {
 			get_account_details(frm, cdt, cdn);
 		}
 	},
 
-	accounts_remove: function(frm) {
+	accounts_remove: function (frm) {
 		frm.events.get_total_gain_loss(frm);
-	}
+	},
 });
 
-var get_account_details = function(frm, cdt, cdn) {
+var get_account_details = function (frm, cdt, cdn) {
 	var row = frappe.get_doc(cdt, cdn);
-	if(!frm.doc.company || !frm.doc.posting_date) {
+	if (!frm.doc.company || !frm.doc.posting_date) {
 		frappe.throw(__("Please select Company and Posting Date to getting entries"));
 	}
 	frappe.call({
 		method: "erpnext.accounts.doctype.exchange_rate_revaluation.exchange_rate_revaluation.get_account_details",
-		args:{
+		args: {
 			account: row.account,
 			company: frm.doc.company,
 			posting_date: frm.doc.posting_date,
 			party_type: row.party_type,
 			party: row.party,
-			rounding_loss_allowance: frm.doc.rounding_loss_allowance
+			rounding_loss_allowance: frm.doc.rounding_loss_allowance,
 		},
-		callback: function(r){
+		callback: function (r) {
 			$.extend(row, r.message);
 			refresh_field("accounts");
 			frm.events.get_total_gain_loss(frm);
-		}
+		},
 	});
 };
diff --git a/erpnext/accounts/doctype/finance_book/finance_book.js b/erpnext/accounts/doctype/finance_book/finance_book.js
index 71191bb..ebe1d24 100644
--- a/erpnext/accounts/doctype/finance_book/finance_book.js
+++ b/erpnext/accounts/doctype/finance_book/finance_book.js
@@ -1,8 +1,6 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Finance Book', {
-	refresh: function(frm) {
-
-	}
+frappe.ui.form.on("Finance Book", {
+	refresh: function (frm) {},
 });
diff --git a/erpnext/accounts/doctype/fiscal_year/fiscal_year.js b/erpnext/accounts/doctype/fiscal_year/fiscal_year.js
index 508b2ea..a44b52f 100644
--- a/erpnext/accounts/doctype/fiscal_year/fiscal_year.js
+++ b/erpnext/accounts/doctype/fiscal_year/fiscal_year.js
@@ -1,17 +1,21 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.ui.form.on('Fiscal Year', {
-	onload: function(frm) {
-		if(frm.doc.__islocal) {
-			frm.set_value("year_start_date",
-				frappe.datetime.add_days(frappe.defaults.get_default("year_end_date"), 1));
+frappe.ui.form.on("Fiscal Year", {
+	onload: function (frm) {
+		if (frm.doc.__islocal) {
+			frm.set_value(
+				"year_start_date",
+				frappe.datetime.add_days(frappe.defaults.get_default("year_end_date"), 1)
+			);
 		}
 	},
-	year_start_date: function(frm) {
+	year_start_date: function (frm) {
 		if (!frm.doc.is_short_year) {
-			let year_end_date =
-				frappe.datetime.add_days(frappe.datetime.add_months(frm.doc.year_start_date, 12), -1);
+			let year_end_date = frappe.datetime.add_days(
+				frappe.datetime.add_months(frm.doc.year_start_date, 12),
+				-1
+			);
 			frm.set_value("year_end_date", year_end_date);
 		}
 	},
diff --git a/erpnext/accounts/doctype/gl_entry/gl_entry.js b/erpnext/accounts/doctype/gl_entry/gl_entry.js
index 4d2a513..7f81a2a 100644
--- a/erpnext/accounts/doctype/gl_entry/gl_entry.js
+++ b/erpnext/accounts/doctype/gl_entry/gl_entry.js
@@ -1,8 +1,8 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('GL Entry', {
-	refresh: function(frm) {
-		frm.page.btn_secondary.hide()
-	}
+frappe.ui.form.on("GL Entry", {
+	refresh: function (frm) {
+		frm.page.btn_secondary.hide();
+	},
 });
diff --git a/erpnext/accounts/doctype/invoice_discounting/invoice_discounting.js b/erpnext/accounts/doctype/invoice_discounting/invoice_discounting.js
index c80bf62..6d90c26 100644
--- a/erpnext/accounts/doctype/invoice_discounting/invoice_discounting.js
+++ b/erpnext/accounts/doctype/invoice_discounting/invoice_discounting.js
@@ -1,47 +1,49 @@
 // Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Invoice Discounting', {
+frappe.ui.form.on("Invoice Discounting", {
 	setup: (frm) => {
 		frm.set_query("sales_invoice", "invoices", (doc) => {
 			return {
-				"filters": {
-					"docstatus": 1,
-					"company": doc.company,
-					"outstanding_amount": [">", 0]
+				filters: {
+					docstatus: 1,
+					company: doc.company,
+					outstanding_amount: [">", 0],
 				},
 			};
 		});
 
-
 		frm.events.filter_accounts("bank_account", frm, [["account_type", "=", "Bank"]]);
 		frm.events.filter_accounts("bank_charges_account", frm, [["root_type", "=", "Expense"]]);
 		frm.events.filter_accounts("short_term_loan", frm, [["root_type", "=", "Liability"]]);
-		frm.events.filter_accounts("accounts_receivable_discounted", frm, [["account_type", "=", "Receivable"]]);
+		frm.events.filter_accounts("accounts_receivable_discounted", frm, [
+			["account_type", "=", "Receivable"],
+		]);
 		frm.events.filter_accounts("accounts_receivable_credit", frm, [["account_type", "=", "Receivable"]]);
 		frm.events.filter_accounts("accounts_receivable_unpaid", frm, [["account_type", "=", "Receivable"]]);
-
 	},
 
 	filter_accounts: (fieldname, frm, addl_filters) => {
 		let filters = [
 			["company", "=", frm.doc.company],
-			["is_group", "=", 0]
+			["is_group", "=", 0],
 		];
-		if(addl_filters){
-			filters = $.merge(filters , addl_filters);
+		if (addl_filters) {
+			filters = $.merge(filters, addl_filters);
 		}
 
-		frm.set_query(fieldname, () => { return { "filters": filters }; });
+		frm.set_query(fieldname, () => {
+			return { filters: filters };
+		});
 	},
 
-	refresh_filters: (frm) =>{
-		let invoice_accounts = Object.keys(frm.doc.invoices).map(function(key) {
+	refresh_filters: (frm) => {
+		let invoice_accounts = Object.keys(frm.doc.invoices).map(function (key) {
 			return frm.doc.invoices[key].debit_to;
 		});
 		let filters = [
 			["account_type", "=", "Receivable"],
-			["name", "not in", invoice_accounts]
+			["name", "not in", invoice_accounts],
 		];
 		frm.events.filter_accounts("accounts_receivable_credit", frm, filters);
 		frm.events.filter_accounts("accounts_receivable_discounted", frm, filters);
@@ -52,19 +54,19 @@
 		frm.events.show_general_ledger(frm);
 
 		if (frm.doc.docstatus === 0) {
-			frm.add_custom_button(__('Get Invoices'), function() {
+			frm.add_custom_button(__("Get Invoices"), function () {
 				frm.events.get_invoices(frm);
 			});
 		}
 
 		if (frm.doc.docstatus === 1 && frm.doc.status !== "Settled") {
 			if (frm.doc.status == "Sanctioned") {
-				frm.add_custom_button(__('Disburse Loan'), function() {
+				frm.add_custom_button(__("Disburse Loan"), function () {
 					frm.events.create_disbursement_entry(frm);
 				}).addClass("btn-primary");
 			}
 			if (frm.doc.status == "Disbursed") {
-				frm.add_custom_button(__('Close Loan'), function() {
+				frm.add_custom_button(__("Close Loan"), function () {
 					frm.events.close_loan(frm);
 				}).addClass("btn-primary");
 			}
@@ -92,119 +94,121 @@
 
 	calculate_total_amount: (frm) => {
 		let total_amount = 0.0;
-		for (let row of (frm.doc.invoices || [])) {
+		for (let row of frm.doc.invoices || []) {
 			total_amount += flt(row.outstanding_amount);
 		}
 		frm.set_value("total_amount", total_amount);
 	},
 	get_invoices: (frm) => {
 		var d = new frappe.ui.Dialog({
-			title: __('Get Invoices based on Filters'),
+			title: __("Get Invoices based on Filters"),
 			fields: [
 				{
-					"label": "Customer",
-					"fieldname": "customer",
-					"fieldtype": "Link",
-					"options": "Customer"
+					label: "Customer",
+					fieldname: "customer",
+					fieldtype: "Link",
+					options: "Customer",
 				},
 				{
-					"label": "From Date",
-					"fieldname": "from_date",
-					"fieldtype": "Date"
+					label: "From Date",
+					fieldname: "from_date",
+					fieldtype: "Date",
 				},
 				{
-					"label": "To Date",
-					"fieldname": "to_date",
-					"fieldtype": "Date"
+					label: "To Date",
+					fieldname: "to_date",
+					fieldtype: "Date",
 				},
 				{
-					"fieldname": "col_break",
-					"fieldtype": "Column Break",
+					fieldname: "col_break",
+					fieldtype: "Column Break",
 				},
 				{
-					"label": "Min Amount",
-					"fieldname": "min_amount",
-					"fieldtype": "Currency"
+					label: "Min Amount",
+					fieldname: "min_amount",
+					fieldtype: "Currency",
 				},
 				{
-					"label": "Max Amount",
-					"fieldname": "max_amount",
-					"fieldtype": "Currency"
-				}
+					label: "Max Amount",
+					fieldname: "max_amount",
+					fieldtype: "Currency",
+				},
 			],
-			primary_action: function() {
+			primary_action: function () {
 				var data = d.get_values();
 
 				frappe.call({
 					method: "erpnext.accounts.doctype.invoice_discounting.invoice_discounting.get_invoices",
 					args: {
-						filters: data
+						filters: data,
 					},
-					callback: function(r) {
-						if(!r.exc) {
+					callback: function (r) {
+						if (!r.exc) {
 							d.hide();
-							$.each(r.message, function(i, v) {
-								frm.doc.invoices = frm.doc.invoices.filter(row => row.sales_invoice);
+							$.each(r.message, function (i, v) {
+								frm.doc.invoices = frm.doc.invoices.filter((row) => row.sales_invoice);
 								let row = frm.add_child("invoices");
 								$.extend(row, v);
 								frm.events.refresh_filters(frm);
 							});
 							refresh_field("invoices");
 						}
-					}
+					},
 				});
 			},
-			primary_action_label: __('Get Invoices')
+			primary_action_label: __("Get Invoices"),
 		});
 		d.show();
 	},
 
 	create_disbursement_entry: (frm) => {
 		frappe.call({
-			method:"create_disbursement_entry",
+			method: "create_disbursement_entry",
 			doc: frm.doc,
-			callback: function(r) {
-				if(!r.exc){
+			callback: function (r) {
+				if (!r.exc) {
 					var doclist = frappe.model.sync(r.message);
 					frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
 				}
-			}
+			},
 		});
-
 	},
 
 	close_loan: (frm) => {
 		frappe.call({
-			method:"close_loan",
+			method: "close_loan",
 			doc: frm.doc,
-			callback: function(r) {
-				if(!r.exc){
+			callback: function (r) {
+				if (!r.exc) {
 					var doclist = frappe.model.sync(r.message);
 					frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
 				}
-			}
+			},
 		});
-
 	},
 
 	show_general_ledger: (frm) => {
-		if(frm.doc.docstatus > 0) {
-			cur_frm.add_custom_button(__('Accounting Ledger'), function() {
-				frappe.route_options = {
-					voucher_no: frm.doc.name,
-					from_date: frm.doc.posting_date,
-					to_date: moment(frm.doc.modified).format('YYYY-MM-DD'),
-					company: frm.doc.company,
-					group_by: "Group by Voucher (Consolidated)",
-					show_cancelled_entries: frm.doc.docstatus === 2
-				};
-				frappe.set_route("query-report", "General Ledger");
-			}, __("View"));
+		if (frm.doc.docstatus > 0) {
+			cur_frm.add_custom_button(
+				__("Accounting Ledger"),
+				function () {
+					frappe.route_options = {
+						voucher_no: frm.doc.name,
+						from_date: frm.doc.posting_date,
+						to_date: moment(frm.doc.modified).format("YYYY-MM-DD"),
+						company: frm.doc.company,
+						group_by: "Group by Voucher (Consolidated)",
+						show_cancelled_entries: frm.doc.docstatus === 2,
+					};
+					frappe.set_route("query-report", "General Ledger");
+				},
+				__("View")
+			);
 		}
-	}
+	},
 });
 
-frappe.ui.form.on('Discounted Invoice', {
+frappe.ui.form.on("Discounted Invoice", {
 	sales_invoice: (frm) => {
 		frm.events.calculate_total_amount(frm);
 		frm.events.refresh_filters(frm);
@@ -212,5 +216,5 @@
 	invoices_remove: (frm) => {
 		frm.events.calculate_total_amount(frm);
 		frm.events.refresh_filters(frm);
-	}
+	},
 });
diff --git a/erpnext/accounts/doctype/invoice_discounting/invoice_discounting_list.js b/erpnext/accounts/doctype/invoice_discounting/invoice_discounting_list.js
index 4895efc..0b08e39 100644
--- a/erpnext/accounts/doctype/invoice_discounting/invoice_discounting_list.js
+++ b/erpnext/accounts/doctype/invoice_discounting/invoice_discounting_list.js
@@ -1,21 +1,16 @@
-frappe.listview_settings['Invoice Discounting'] = {
+frappe.listview_settings["Invoice Discounting"] = {
 	add_fields: ["status"],
-	get_indicator: function(doc)
-	{
-		if(doc.status == "Draft") {
+	get_indicator: function (doc) {
+		if (doc.status == "Draft") {
 			return [__("Draft"), "red", "status,=,Draft"];
-		}
-		else if(doc.status == "Sanctioned") {
+		} else if (doc.status == "Sanctioned") {
 			return [__("Sanctioned"), "green", "status,=,Sanctioned"];
-		}
-		else if(doc.status == "Disbursed") {
+		} else if (doc.status == "Disbursed") {
 			return [__("Disbursed"), "blue", "status,=,Disbursed"];
-		}
-		else if(doc.status == "Settled") {
+		} else if (doc.status == "Settled") {
 			return [__("Settled"), "orange", "status,=,Settled"];
-		}
-		else if(doc.status == "Canceled") {
+		} else if (doc.status == "Canceled") {
 			return [__("Canceled"), "red", "status,=,Canceled"];
 		}
-	}
+	},
 };
diff --git a/erpnext/accounts/doctype/item_tax_template/item_tax_template.js b/erpnext/accounts/doctype/item_tax_template/item_tax_template.js
index e921a0d..b608ccd 100644
--- a/erpnext/accounts/doctype/item_tax_template/item_tax_template.js
+++ b/erpnext/accounts/doctype/item_tax_template/item_tax_template.js
@@ -1,27 +1,49 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Item Tax Template', {
-	setup: function(frm) {
-		frm.set_query("tax_type", "taxes", function(doc) {
+frappe.ui.form.on("Item Tax Template", {
+	setup: function (frm) {
+		frm.set_query("tax_type", "taxes", function (doc) {
 			return {
 				filters: [
-					['Account', 'company', '=', frm.doc.company],
-					['Account', 'is_group', '=', 0],
-					['Account', 'account_type', 'in', ['Tax', 'Chargeable', 'Income Account', 'Expense Account', 'Expenses Included In Valuation']]
-				]
-			}
+					["Account", "company", "=", frm.doc.company],
+					["Account", "is_group", "=", 0],
+					[
+						"Account",
+						"account_type",
+						"in",
+						[
+							"Tax",
+							"Chargeable",
+							"Income Account",
+							"Expense Account",
+							"Expenses Included In Valuation",
+						],
+					],
+				],
+			};
 		});
 	},
 	company: function (frm) {
-		frm.set_query("tax_type", "taxes", function(doc) {
+		frm.set_query("tax_type", "taxes", function (doc) {
 			return {
 				filters: [
-					['Account', 'company', '=', frm.doc.company],
-					['Account', 'is_group', '=', 0],
-					['Account', 'account_type', 'in', ['Tax', 'Chargeable', 'Income Account', 'Expense Account', 'Expenses Included In Valuation']]
-				]
-			}
+					["Account", "company", "=", frm.doc.company],
+					["Account", "is_group", "=", 0],
+					[
+						"Account",
+						"account_type",
+						"in",
+						[
+							"Tax",
+							"Chargeable",
+							"Income Account",
+							"Expense Account",
+							"Expenses Included In Valuation",
+						],
+					],
+				],
+			};
 		});
-	}
+	},
 });
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.js b/erpnext/accounts/doctype/journal_entry/journal_entry.js
index 72469ea..f6d35fe 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.js
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.js
@@ -4,58 +4,82 @@
 frappe.provide("erpnext.accounts");
 frappe.provide("erpnext.journal_entry");
 
-
 frappe.ui.form.on("Journal Entry", {
-	setup: function(frm) {
+	setup: function (frm) {
 		frm.add_fetch("bank_account", "account", "account");
-		frm.ignore_doctypes_on_cancel_all = ['Sales Invoice', 'Purchase Invoice', 'Journal Entry', "Repost Payment Ledger", 'Asset', 'Asset Movement', 'Asset Depreciation Schedule', "Repost Accounting Ledger", "Unreconcile Payment", "Unreconcile Payment Entries", "Bank Transaction"];
+		frm.ignore_doctypes_on_cancel_all = [
+			"Sales Invoice",
+			"Purchase Invoice",
+			"Journal Entry",
+			"Repost Payment Ledger",
+			"Asset",
+			"Asset Movement",
+			"Asset Depreciation Schedule",
+			"Repost Accounting Ledger",
+			"Unreconcile Payment",
+			"Unreconcile Payment Entries",
+			"Bank Transaction",
+		];
 	},
 
-	refresh: function(frm) {
+	refresh: function (frm) {
 		erpnext.toggle_naming_series();
 
-		if (frm.doc.repost_required && frm.doc.docstatus===1) {
-			frm.set_intro(__("Accounting entries for this Journal Entry need to be reposted. Please click on 'Repost' button to update."));
-			frm.add_custom_button(__('Repost Accounting Entries'),
-				() => {
-					frm.call({
-						doc: frm.doc,
-						method: 'repost_accounting_entries',
-						freeze: true,
-						freeze_message: __('Reposting...'),
-						callback: (r) => {
-							if (!r.exc) {
-								frappe.msgprint(__('Accounting Entries are reposted.'));
-								frm.refresh();
-							}
+		if (frm.doc.repost_required && frm.doc.docstatus === 1) {
+			frm.set_intro(
+				__(
+					"Accounting entries for this Journal Entry need to be reposted. Please click on 'Repost' button to update."
+				)
+			);
+			frm.add_custom_button(__("Repost Accounting Entries"), () => {
+				frm.call({
+					doc: frm.doc,
+					method: "repost_accounting_entries",
+					freeze: true,
+					freeze_message: __("Reposting..."),
+					callback: (r) => {
+						if (!r.exc) {
+							frappe.msgprint(__("Accounting Entries are reposted."));
+							frm.refresh();
 						}
-					});
-				}).removeClass('btn-default').addClass('btn-warning');
+					},
+				});
+			})
+				.removeClass("btn-default")
+				.addClass("btn-warning");
 		}
 
-		if(frm.doc.docstatus > 0) {
-			frm.add_custom_button(__('Ledger'), function() {
-				frappe.route_options = {
-					"voucher_no": frm.doc.name,
-					"from_date": frm.doc.posting_date,
-					"to_date": moment(frm.doc.modified).format('YYYY-MM-DD'),
-					"company": frm.doc.company,
-					"finance_book": frm.doc.finance_book,
-					"group_by": '',
-					"show_cancelled_entries": frm.doc.docstatus === 2
-				};
-				frappe.set_route("query-report", "General Ledger");
-			}, __('View'));
+		if (frm.doc.docstatus > 0) {
+			frm.add_custom_button(
+				__("Ledger"),
+				function () {
+					frappe.route_options = {
+						voucher_no: frm.doc.name,
+						from_date: frm.doc.posting_date,
+						to_date: moment(frm.doc.modified).format("YYYY-MM-DD"),
+						company: frm.doc.company,
+						finance_book: frm.doc.finance_book,
+						group_by: "",
+						show_cancelled_entries: frm.doc.docstatus === 2,
+					};
+					frappe.set_route("query-report", "General Ledger");
+				},
+				__("View")
+			);
 		}
 
-		if(frm.doc.docstatus==1) {
-			frm.add_custom_button(__('Reverse Journal Entry'), function() {
-				return erpnext.journal_entry.reverse_journal_entry(frm);
-			}, __('Actions'));
+		if (frm.doc.docstatus == 1) {
+			frm.add_custom_button(
+				__("Reverse Journal Entry"),
+				function () {
+					return erpnext.journal_entry.reverse_journal_entry(frm);
+				},
+				__("Actions")
+			);
 		}
 
 		if (frm.doc.__islocal) {
-			frm.add_custom_button(__('Quick Entry'), function() {
+			frm.add_custom_button(__("Quick Entry"), function () {
 				return erpnext.journal_entry.quick_entry(frm);
 			});
 		}
@@ -63,52 +87,63 @@
 		// hide /unhide fields based on currency
 		erpnext.journal_entry.toggle_fields_based_on_currency(frm);
 
-		if ((frm.doc.voucher_type == "Inter Company Journal Entry") && (frm.doc.docstatus == 1) && (!frm.doc.inter_company_journal_entry_reference)) {
-			frm.add_custom_button(__("Create Inter Company Journal Entry"),
-				function() {
+		if (
+			frm.doc.voucher_type == "Inter Company Journal Entry" &&
+			frm.doc.docstatus == 1 &&
+			!frm.doc.inter_company_journal_entry_reference
+		) {
+			frm.add_custom_button(
+				__("Create Inter Company Journal Entry"),
+				function () {
 					frm.trigger("make_inter_company_journal_entry");
-				}, __('Make'));
+				},
+				__("Make")
+			);
 		}
 
 		erpnext.accounts.unreconcile_payment.add_unreconcile_btn(frm);
 	},
-	before_save: function(frm) {
-		if ((frm.doc.docstatus == 0) && (!frm.doc.is_system_generated)) {
-			let payment_entry_references = frm.doc.accounts.filter(elem => (elem.reference_type == "Payment Entry"));
+	before_save: function (frm) {
+		if (frm.doc.docstatus == 0 && !frm.doc.is_system_generated) {
+			let payment_entry_references = frm.doc.accounts.filter(
+				(elem) => elem.reference_type == "Payment Entry"
+			);
 			if (payment_entry_references.length > 0) {
-				let rows = payment_entry_references.map(x => "#"+x.idx);
-				frappe.throw(__("Rows: {0} have 'Payment Entry' as reference_type. This should not be set manually.", [frappe.utils.comma_and(rows)]));
+				let rows = payment_entry_references.map((x) => "#" + x.idx);
+				frappe.throw(
+					__("Rows: {0} have 'Payment Entry' as reference_type. This should not be set manually.", [
+						frappe.utils.comma_and(rows),
+					])
+				);
 			}
 		}
 	},
-	make_inter_company_journal_entry: function(frm) {
+	make_inter_company_journal_entry: function (frm) {
 		var d = new frappe.ui.Dialog({
 			title: __("Select Company"),
 			fields: [
 				{
-					'fieldname': 'company',
-					'fieldtype': 'Link',
-					'label': __('Company'),
-					'options': 'Company',
-					"get_query": function () {
+					fieldname: "company",
+					fieldtype: "Link",
+					label: __("Company"),
+					options: "Company",
+					get_query: function () {
 						return {
-							filters: [
-								["Company", "name", "!=", frm.doc.company]
-							]
+							filters: [["Company", "name", "!=", frm.doc.company]],
 						};
 					},
-					'reqd': 1
-				}
+					reqd: 1,
+				},
 			],
 		});
-		d.set_primary_action(__('Create'), function() {
+		d.set_primary_action(__("Create"), function () {
 			d.hide();
 			var args = d.get_values();
 			frappe.call({
 				args: {
-					"name": frm.doc.name,
-					"voucher_type": frm.doc.voucher_type,
-					"company": args.company
+					name: frm.doc.name,
+					voucher_type: frm.doc.voucher_type,
+					company: args.company,
 				},
 				method: "erpnext.accounts.doctype.journal_entry.journal_entry.make_inter_company_journal_entry",
 				callback: function (r) {
@@ -116,96 +151,101 @@
 						var doc = frappe.model.sync(r.message)[0];
 						frappe.set_route("Form", doc.doctype, doc.name);
 					}
-				}
+				},
 			});
 		});
 		d.show();
 	},
 
-	multi_currency: function(frm) {
+	multi_currency: function (frm) {
 		erpnext.journal_entry.toggle_fields_based_on_currency(frm);
 	},
 
-	posting_date: function(frm) {
-		if(!frm.doc.multi_currency || !frm.doc.posting_date) return;
+	posting_date: function (frm) {
+		if (!frm.doc.multi_currency || !frm.doc.posting_date) return;
 
-		$.each(frm.doc.accounts || [], function(i, row) {
+		$.each(frm.doc.accounts || [], function (i, row) {
 			erpnext.journal_entry.set_exchange_rate(frm, row.doctype, row.name);
-		})
+		});
 	},
 
-	company: function(frm) {
+	company: function (frm) {
 		frappe.call({
 			method: "frappe.client.get_value",
 			args: {
 				doctype: "Company",
-				filters: {"name": frm.doc.company},
-				fieldname: "cost_center"
+				filters: { name: frm.doc.company },
+				fieldname: "cost_center",
 			},
-			callback: function(r){
-				if(r.message){
-					$.each(frm.doc.accounts || [], function(i, jvd) {
+			callback: function (r) {
+				if (r.message) {
+					$.each(frm.doc.accounts || [], function (i, jvd) {
 						frappe.model.set_value(jvd.doctype, jvd.name, "cost_center", r.message.cost_center);
 					});
 				}
-			}
+			},
 		});
 
 		erpnext.accounts.dimensions.update_dimension(frm, frm.doctype);
 	},
 
-	voucher_type: function(frm){
+	voucher_type: function (frm) {
+		if (!frm.doc.company) return null;
 
-		if(!frm.doc.company) return null;
-
-		if((!(frm.doc.accounts || []).length) || ((frm.doc.accounts || []).length === 1 && !frm.doc.accounts[0].account)) {
-			if(in_list(["Bank Entry", "Cash Entry"], frm.doc.voucher_type)) {
+		if (
+			!(frm.doc.accounts || []).length ||
+			((frm.doc.accounts || []).length === 1 && !frm.doc.accounts[0].account)
+		) {
+			if (in_list(["Bank Entry", "Cash Entry"], frm.doc.voucher_type)) {
 				return frappe.call({
 					type: "GET",
 					method: "erpnext.accounts.doctype.journal_entry.journal_entry.get_default_bank_cash_account",
 					args: {
-						"account_type": (frm.doc.voucher_type=="Bank Entry" ?
-							"Bank" : (frm.doc.voucher_type=="Cash Entry" ? "Cash" : null)),
-						"company": frm.doc.company
+						account_type:
+							frm.doc.voucher_type == "Bank Entry"
+								? "Bank"
+								: frm.doc.voucher_type == "Cash Entry"
+								? "Cash"
+								: null,
+						company: frm.doc.company,
 					},
-					callback: function(r) {
-						if(r.message) {
+					callback: function (r) {
+						if (r.message) {
 							// If default company bank account not set
-							if(!$.isEmptyObject(r.message)){
+							if (!$.isEmptyObject(r.message)) {
 								update_jv_details(frm.doc, [r.message]);
 							}
 						}
-					}
+					},
 				});
 			}
 		}
 	},
 
-	from_template: function(frm){
-		if (frm.doc.from_template){
-			frappe.db.get_doc("Journal Entry Template", frm.doc.from_template)
-				.then((doc) => {
-					frappe.model.clear_table(frm.doc, "accounts");
-					frm.set_value({
-						"company": doc.company,
-						"voucher_type": doc.voucher_type,
-						"naming_series": doc.naming_series,
-						"is_opening": doc.is_opening,
-						"multi_currency": doc.multi_currency
-					})
-					update_jv_details(frm.doc, doc.accounts);
+	from_template: function (frm) {
+		if (frm.doc.from_template) {
+			frappe.db.get_doc("Journal Entry Template", frm.doc.from_template).then((doc) => {
+				frappe.model.clear_table(frm.doc, "accounts");
+				frm.set_value({
+					company: doc.company,
+					voucher_type: doc.voucher_type,
+					naming_series: doc.naming_series,
+					is_opening: doc.is_opening,
+					multi_currency: doc.multi_currency,
 				});
+				update_jv_details(frm.doc, doc.accounts);
+			});
 		}
-	}
+	},
 });
 
-var update_jv_details = function(doc, r) {
-	$.each(r, function(i, d) {
+var update_jv_details = function (doc, r) {
+	$.each(r, function (i, d) {
 		var row = frappe.model.add_child(doc, "Journal Entry Account", "accounts");
-		frappe.model.set_value(row.doctype, row.name, "account", d.account)
+		frappe.model.set_value(row.doctype, row.name, "account", d.account);
 	});
 	refresh_field("accounts");
-}
+};
 
 erpnext.accounts.JournalEntry = class JournalEntry extends frappe.ui.form.Controller {
 	onload() {
@@ -220,69 +260,67 @@
 
 	load_defaults() {
 		//this.frm.show_print_first = true;
-		if(this.frm.doc.__islocal && this.frm.doc.company) {
+		if (this.frm.doc.__islocal && this.frm.doc.company) {
 			frappe.model.set_default_values(this.frm.doc);
-			$.each(this.frm.doc.accounts || [], function(i, jvd) {
+			$.each(this.frm.doc.accounts || [], function (i, jvd) {
 				frappe.model.set_default_values(jvd);
 			});
 			var posting_date = this.frm.doc.posting_date;
-			if(!this.frm.doc.amended_from) this.frm.set_value('posting_date', posting_date || frappe.datetime.get_today());
+			if (!this.frm.doc.amended_from)
+				this.frm.set_value("posting_date", posting_date || frappe.datetime.get_today());
 		}
 	}
 
 	setup_queries() {
 		var me = this;
 
-		me.frm.set_query("account", "accounts", function(doc, cdt, cdn) {
+		me.frm.set_query("account", "accounts", function (doc, cdt, cdn) {
 			return erpnext.journal_entry.account_query(me.frm);
 		});
 
-		me.frm.set_query("party_type", "accounts", function(doc, cdt, cdn) {
+		me.frm.set_query("party_type", "accounts", function (doc, cdt, cdn) {
 			const row = locals[cdt][cdn];
 
 			return {
 				query: "erpnext.setup.doctype.party_type.party_type.get_party_type",
 				filters: {
-					'account': row.account
-				}
-			}
+					account: row.account,
+				},
+			};
 		});
 
-		me.frm.set_query("reference_name", "accounts", function(doc, cdt, cdn) {
+		me.frm.set_query("reference_name", "accounts", function (doc, cdt, cdn) {
 			var jvd = frappe.get_doc(cdt, cdn);
 
 			// journal entry
-			if(jvd.reference_type==="Journal Entry") {
+			if (jvd.reference_type === "Journal Entry") {
 				frappe.model.validate_missing(jvd, "account");
 				return {
 					query: "erpnext.accounts.doctype.journal_entry.journal_entry.get_against_jv",
 					filters: {
 						account: jvd.account,
-						party: jvd.party
-					}
+						party: jvd.party,
+					},
 				};
 			}
 
 			var out = {
-				filters: [
-					[jvd.reference_type, "docstatus", "=", 1]
-				]
+				filters: [[jvd.reference_type, "docstatus", "=", 1]],
 			};
 
-			if(in_list(["Sales Invoice", "Purchase Invoice"], jvd.reference_type)) {
+			if (in_list(["Sales Invoice", "Purchase Invoice"], jvd.reference_type)) {
 				out.filters.push([jvd.reference_type, "outstanding_amount", "!=", 0]);
 				// Filter by cost center
-				if(jvd.cost_center) {
+				if (jvd.cost_center) {
 					out.filters.push([jvd.reference_type, "cost_center", "in", ["", jvd.cost_center]]);
 				}
 				// account filter
 				frappe.model.validate_missing(jvd, "account");
-				var party_account_field = jvd.reference_type==="Sales Invoice" ? "debit_to": "credit_to";
+				var party_account_field = jvd.reference_type === "Sales Invoice" ? "debit_to" : "credit_to";
 				out.filters.push([jvd.reference_type, party_account_field, "=", jvd.account]);
-
 			}
 
-			if(in_list(["Sales Order", "Purchase Order"], jvd.reference_type)) {
+			if (in_list(["Sales Order", "Purchase Order"], jvd.reference_type)) {
 				// party_type and party mandatory
 				frappe.model.validate_missing(jvd, "party_type");
 				frappe.model.validate_missing(jvd, "party");
@@ -290,11 +328,11 @@
 				out.filters.push([jvd.reference_type, "per_billed", "<", 100]);
 			}
 
-			if(jvd.party_type && jvd.party) {
+			if (jvd.party_type && jvd.party) {
 				let party_field = "";
-				if(jvd.reference_type.indexOf("Sales")===0) {
+				if (jvd.reference_type.indexOf("Sales") === 0) {
 					party_field = "customer";
-				} else if (jvd.reference_type.indexOf("Purchase")===0) {
+				} else if (jvd.reference_type.indexOf("Purchase") === 0) {
 					party_field = "supplier";
 				}
 
@@ -305,51 +343,49 @@
 
 			return out;
 		});
-
-
 	}
 
 	reference_name(doc, cdt, cdn) {
 		var d = frappe.get_doc(cdt, cdn);
 
-		if(d.reference_name) {
-			if (d.reference_type==="Purchase Invoice" && !flt(d.debit)) {
-				this.get_outstanding('Purchase Invoice', d.reference_name, doc.company, d);
-			} else if (d.reference_type==="Sales Invoice" && !flt(d.credit)) {
-				this.get_outstanding('Sales Invoice', d.reference_name, doc.company, d);
-			} else if (d.reference_type==="Journal Entry" && !flt(d.credit) && !flt(d.debit)) {
-				this.get_outstanding('Journal Entry', d.reference_name, doc.company, d);
+		if (d.reference_name) {
+			if (d.reference_type === "Purchase Invoice" && !flt(d.debit)) {
+				this.get_outstanding("Purchase Invoice", d.reference_name, doc.company, d);
+			} else if (d.reference_type === "Sales Invoice" && !flt(d.credit)) {
+				this.get_outstanding("Sales Invoice", d.reference_name, doc.company, d);
+			} else if (d.reference_type === "Journal Entry" && !flt(d.credit) && !flt(d.debit)) {
+				this.get_outstanding("Journal Entry", d.reference_name, doc.company, d);
 			}
 		}
 	}
 
 	get_outstanding(doctype, docname, company, child) {
 		var args = {
-			"doctype": doctype,
-			"docname": docname,
-			"party": child.party,
-			"account": child.account,
-			"account_currency": child.account_currency,
-			"company": company
-		}
+			doctype: doctype,
+			docname: docname,
+			party: child.party,
+			account: child.account,
+			account_currency: child.account_currency,
+			company: company,
+		};
 
 		return frappe.call({
 			method: "erpnext.accounts.doctype.journal_entry.journal_entry.get_outstanding",
-			args: { args: args},
-			callback: function(r) {
-				if(r.message) {
-					$.each(r.message, function(field, value) {
+			args: { args: args },
+			callback: function (r) {
+				if (r.message) {
+					$.each(r.message, function (field, value) {
 						frappe.model.set_value(child.doctype, child.name, field, value);
-					})
+					});
 				}
-			}
+			},
 		});
 	}
 
 	accounts_add(doc, cdt, cdn) {
 		var row = frappe.get_doc(cdt, cdn);
-		$.each(doc.accounts, function(i, d) {
-			if(d.account && d.party && d.party_type) {
+		$.each(doc.accounts, function (i, d) {
+			if (d.account && d.party && d.party_type) {
 				row.account = d.account;
 				row.party = d.party;
 				row.party_type = d.party_type;
@@ -357,8 +393,8 @@
 		});
 
 		// set difference
-		if(doc.difference) {
-			if(doc.difference > 0) {
+		if (doc.difference) {
+			if (doc.difference > 0) {
 				row.credit_in_account_currency = doc.difference;
 				row.credit = doc.difference;
 			} else {
@@ -368,41 +404,43 @@
 		}
 		cur_frm.cscript.update_totals(doc);
 
-		erpnext.accounts.dimensions.copy_dimension_from_first_row(this.frm, cdt, cdn, 'accounts');
+		erpnext.accounts.dimensions.copy_dimension_from_first_row(this.frm, cdt, cdn, "accounts");
 	}
-
 };
 
 cur_frm.script_manager.make(erpnext.accounts.JournalEntry);
 
-cur_frm.cscript.update_totals = function(doc) {
-	var td=0.0; var tc =0.0;
+cur_frm.cscript.update_totals = function (doc) {
+	var td = 0.0;
+	var tc = 0.0;
 	var accounts = doc.accounts || [];
-	for(var i in accounts) {
+	for (var i in accounts) {
 		td += flt(accounts[i].debit, precision("debit", accounts[i]));
 		tc += flt(accounts[i].credit, precision("credit", accounts[i]));
 	}
 	doc = locals[doc.doctype][doc.name];
 	doc.total_debit = td;
 	doc.total_credit = tc;
-	doc.difference = flt((td - tc), precision("difference"));
-	refresh_many(['total_debit','total_credit','difference']);
-}
+	doc.difference = flt(td - tc, precision("difference"));
+	refresh_many(["total_debit", "total_credit", "difference"]);
+};
 
-cur_frm.cscript.get_balance = function(doc,dt,dn) {
+cur_frm.cscript.get_balance = function (doc, dt, dn) {
 	cur_frm.cscript.update_totals(doc);
-	cur_frm.call('get_balance', null, () => { cur_frm.refresh(); });
-}
+	cur_frm.call("get_balance", null, () => {
+		cur_frm.refresh();
+	});
+};
 
-cur_frm.cscript.validate = function(doc,cdt,cdn) {
+cur_frm.cscript.validate = function (doc, cdt, cdn) {
 	cur_frm.cscript.update_totals(doc);
-}
+};
 
 frappe.ui.form.on("Journal Entry Account", {
-	party: function(frm, cdt, cdn) {
+	party: function (frm, cdt, cdn) {
 		var d = frappe.get_doc(cdt, cdn);
-		if(!d.account && d.party_type && d.party) {
-			if(!frm.doc.company) frappe.throw(__("Please select Company"));
+		if (!d.account && d.party_type && d.party) {
+			if (!frm.doc.company) frappe.throw(__("Please select Company"));
 			return frm.call({
 				method: "erpnext.accounts.doctype.journal_entry.journal_entry.get_party_account_and_currency",
 				child: d,
@@ -410,89 +448,97 @@
 					company: frm.doc.company,
 					party_type: d.party_type,
 					party: d.party,
-				}
+				},
 			});
 		}
 	},
-	cost_center: function(frm, dt, dn) {
+	cost_center: function (frm, dt, dn) {
 		erpnext.journal_entry.set_account_details(frm, dt, dn);
 	},
 
-	account: function(frm, dt, dn) {
+	account: function (frm, dt, dn) {
 		erpnext.journal_entry.set_account_details(frm, dt, dn);
 	},
 
-	debit_in_account_currency: function(frm, cdt, cdn) {
+	debit_in_account_currency: function (frm, cdt, cdn) {
 		erpnext.journal_entry.set_exchange_rate(frm, cdt, cdn);
 	},
 
-	credit_in_account_currency: function(frm, cdt, cdn) {
+	credit_in_account_currency: function (frm, cdt, cdn) {
 		erpnext.journal_entry.set_exchange_rate(frm, cdt, cdn);
 	},
 
-	debit: function(frm, dt, dn) {
+	debit: function (frm, dt, dn) {
 		cur_frm.cscript.update_totals(frm.doc);
 	},
 
-	credit: function(frm, dt, dn) {
+	credit: function (frm, dt, dn) {
 		cur_frm.cscript.update_totals(frm.doc);
 	},
 
-	exchange_rate: function(frm, cdt, cdn) {
+	exchange_rate: function (frm, cdt, cdn) {
 		var company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
 		var row = locals[cdt][cdn];
 
-		if(row.account_currency == company_currency || !frm.doc.multi_currency) {
+		if (row.account_currency == company_currency || !frm.doc.multi_currency) {
 			frappe.model.set_value(cdt, cdn, "exchange_rate", 1);
 		}
 
 		erpnext.journal_entry.set_debit_credit_in_company_currency(frm, cdt, cdn);
-	}
-})
+	},
+});
 
-frappe.ui.form.on("Journal Entry Account", "accounts_remove", function(frm) {
+frappe.ui.form.on("Journal Entry Account", "accounts_remove", function (frm) {
 	cur_frm.cscript.update_totals(frm.doc);
 });
 
 $.extend(erpnext.journal_entry, {
-	toggle_fields_based_on_currency: function(frm) {
+	toggle_fields_based_on_currency: function (frm) {
 		var fields = ["currency_section", "account_currency", "exchange_rate", "debit", "credit"];
 
 		var grid = frm.get_field("accounts").grid;
-		if(grid) grid.set_column_disp(fields, frm.doc.multi_currency);
+		if (grid) grid.set_column_disp(fields, frm.doc.multi_currency);
 
 		// dynamic label
 		var field_label_map = {
-			"debit_in_account_currency": "Debit",
-			"credit_in_account_currency": "Credit"
+			debit_in_account_currency: "Debit",
+			credit_in_account_currency: "Credit",
 		};
 
 		$.each(field_label_map, function (fieldname, label) {
 			frm.fields_dict.accounts.grid.update_docfield_property(
 				fieldname,
-				'label',
-				frm.doc.multi_currency ? (label + " in Account Currency") : label
+				"label",
+				frm.doc.multi_currency ? label + " in Account Currency" : label
 			);
-		})
+		});
 	},
 
-	set_debit_credit_in_company_currency: function(frm, cdt, cdn) {
+	set_debit_credit_in_company_currency: function (frm, cdt, cdn) {
 		var row = locals[cdt][cdn];
 
-		frappe.model.set_value(cdt, cdn, "debit",
-			flt(flt(row.debit_in_account_currency)*row.exchange_rate, precision("debit", row)));
+		frappe.model.set_value(
+			cdt,
+			cdn,
+			"debit",
+			flt(flt(row.debit_in_account_currency) * row.exchange_rate, precision("debit", row))
+		);
 
-		frappe.model.set_value(cdt, cdn, "credit",
-			flt(flt(row.credit_in_account_currency)*row.exchange_rate, precision("credit", row)));
+		frappe.model.set_value(
+			cdt,
+			cdn,
+			"credit",
+			flt(flt(row.credit_in_account_currency) * row.exchange_rate, precision("credit", row))
+		);
 
 		cur_frm.cscript.update_totals(frm.doc);
 	},
 
-	set_exchange_rate: function(frm, cdt, cdn) {
+	set_exchange_rate: function (frm, cdt, cdn) {
 		var company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
 		var row = locals[cdt][cdn];
 
-		if(row.account_currency == company_currency || !frm.doc.multi_currency) {
+		if (row.account_currency == company_currency || !frm.doc.multi_currency) {
 			row.exchange_rate = 1;
 			erpnext.journal_entry.set_debit_credit_in_company_currency(frm, cdt, cdn);
 		} else if (!row.exchange_rate || row.exchange_rate == 1 || row.account_type == "Bank") {
@@ -507,50 +553,70 @@
 					reference_name: cstr(row.reference_name),
 					debit: flt(row.debit_in_account_currency),
 					credit: flt(row.credit_in_account_currency),
-					exchange_rate: row.exchange_rate
+					exchange_rate: row.exchange_rate,
 				},
-				callback: function(r) {
-					if(r.message) {
+				callback: function (r) {
+					if (r.message) {
 						row.exchange_rate = r.message;
 						erpnext.journal_entry.set_debit_credit_in_company_currency(frm, cdt, cdn);
 					}
-				}
-			})
+				},
+			});
 		} else {
 			erpnext.journal_entry.set_debit_credit_in_company_currency(frm, cdt, cdn);
 		}
 		refresh_field("exchange_rate", cdn, "accounts");
 	},
 
-	quick_entry: function(frm) {
+	quick_entry: function (frm) {
 		var naming_series_options = frm.fields_dict.naming_series.df.options;
-		var naming_series_default = frm.fields_dict.naming_series.df.default || naming_series_options.split("\n")[0];
+		var naming_series_default =
+			frm.fields_dict.naming_series.df.default || naming_series_options.split("\n")[0];
 
 		var dialog = new frappe.ui.Dialog({
 			title: __("Quick Journal Entry"),
 			fields: [
-				{fieldtype: "Currency", fieldname: "debit", label: __("Amount"), reqd: 1},
-				{fieldtype: "Link", fieldname: "debit_account", label: __("Debit Account"), reqd: 1,
+				{ fieldtype: "Currency", fieldname: "debit", label: __("Amount"), reqd: 1 },
+				{
+					fieldtype: "Link",
+					fieldname: "debit_account",
+					label: __("Debit Account"),
+					reqd: 1,
 					options: "Account",
-					get_query: function() {
+					get_query: function () {
 						return erpnext.journal_entry.account_query(frm);
-					}
+					},
 				},
-				{fieldtype: "Link", fieldname: "credit_account", label: __("Credit Account"), reqd: 1,
+				{
+					fieldtype: "Link",
+					fieldname: "credit_account",
+					label: __("Credit Account"),
+					reqd: 1,
 					options: "Account",
-					get_query: function() {
+					get_query: function () {
 						return erpnext.journal_entry.account_query(frm);
-					}
+					},
 				},
-				{fieldtype: "Date", fieldname: "posting_date", label: __("Date"), reqd: 1,
-					default: frm.doc.posting_date},
-				{fieldtype: "Small Text", fieldname: "user_remark", label: __("User Remark")},
-				{fieldtype: "Select", fieldname: "naming_series", label: __("Series"), reqd: 1,
-					options: naming_series_options, default: naming_series_default},
-			]
+				{
+					fieldtype: "Date",
+					fieldname: "posting_date",
+					label: __("Date"),
+					reqd: 1,
+					default: frm.doc.posting_date,
+				},
+				{ fieldtype: "Small Text", fieldname: "user_remark", label: __("User Remark") },
+				{
+					fieldtype: "Select",
+					fieldname: "naming_series",
+					label: __("Series"),
+					reqd: 1,
+					options: naming_series_options,
+					default: naming_series_default,
+				},
+			],
 		});
 
-		dialog.set_primary_action(__("Save"), function() {
+		dialog.set_primary_action(__("Save"), function () {
 			var btn = this;
 			var values = dialog.get_values();
 
@@ -567,11 +633,21 @@
 
 			var debit_row = frm.fields_dict.accounts.grid.add_new_row();
 			frappe.model.set_value(debit_row.doctype, debit_row.name, "account", values.debit_account);
-			frappe.model.set_value(debit_row.doctype, debit_row.name, "debit_in_account_currency", values.debit);
+			frappe.model.set_value(
+				debit_row.doctype,
+				debit_row.name,
+				"debit_in_account_currency",
+				values.debit
+			);
 
 			var credit_row = frm.fields_dict.accounts.grid.add_new_row();
 			frappe.model.set_value(credit_row.doctype, credit_row.name, "account", values.credit_account);
-			frappe.model.set_value(credit_row.doctype, credit_row.name, "credit_in_account_currency", values.debit);
+			frappe.model.set_value(
+				credit_row.doctype,
+				credit_row.name,
+				"credit_in_account_currency",
+				values.debit
+			);
 
 			frm.save();
 
@@ -581,33 +657,36 @@
 		dialog.show();
 	},
 
-	account_query: function(frm) {
+	account_query: function (frm) {
 		var filters = {
 			company: frm.doc.company,
-			is_group: 0
+			is_group: 0,
 		};
-		if(!frm.doc.multi_currency) {
+		if (!frm.doc.multi_currency) {
 			$.extend(filters, {
-				account_currency: ['in', [frappe.get_doc(":Company", frm.doc.company).default_currency, null]]
+				account_currency: [
+					"in",
+					[frappe.get_doc(":Company", frm.doc.company).default_currency, null],
+				],
 			});
 		}
 		return { filters: filters };
 	},
 
-	reverse_journal_entry: function() {
+	reverse_journal_entry: function () {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.accounts.doctype.journal_entry.journal_entry.make_reverse_journal_entry",
-			frm: cur_frm
-		})
+			frm: cur_frm,
+		});
 	},
 });
 
 $.extend(erpnext.journal_entry, {
-	set_account_details: function(frm, dt, dn) {
+	set_account_details: function (frm, dt, dn) {
 		var d = locals[dt][dn];
-		if(d.account) {
-			if(!frm.doc.company) frappe.throw(__("Please select Company first"));
-			if(!frm.doc.posting_date) frappe.throw(__("Please select Posting Date first"));
+		if (d.account) {
+			if (!frm.doc.company) frappe.throw(__("Please select Company first"));
+			if (!frm.doc.posting_date) frappe.throw(__("Please select Posting Date first"));
 
 			return frappe.call({
 				method: "erpnext.accounts.doctype.journal_entry.journal_entry.get_account_details_and_party_type",
@@ -619,13 +698,13 @@
 					credit: flt(d.credit_in_account_currency),
 					exchange_rate: d.exchange_rate,
 				},
-				callback: function(r) {
-					if(r.message) {
+				callback: function (r) {
+					if (r.message) {
 						$.extend(d, r.message);
 						erpnext.journal_entry.set_debit_credit_in_company_currency(frm, dt, dn);
-						refresh_field('accounts');
+						refresh_field("accounts");
 					}
-				}
+				},
 			});
 		}
 	},
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry_list.js b/erpnext/accounts/doctype/journal_entry/journal_entry_list.js
index acd17cb..4ef7b99 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry_list.js
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry_list.js
@@ -1,18 +1,8 @@
 frappe.listview_settings["Journal Entry"] = {
-	add_fields: [
-		"voucher_type",
-		"posting_date",
-		"total_debit",
-		"company",
-		"user_remark",
-	],
+	add_fields: ["voucher_type", "posting_date", "total_debit", "company", "user_remark"],
 	get_indicator: function (doc) {
 		if (doc.docstatus === 1) {
-			return [
-				__(doc.voucher_type),
-				"blue",
-				`voucher_type,=,${doc.voucher_type}`,
-			];
+			return [__(doc.voucher_type), "blue", `voucher_type,=,${doc.voucher_type}`];
 		}
 	},
 };
diff --git a/erpnext/accounts/doctype/journal_entry_template/journal_entry_template.js b/erpnext/accounts/doctype/journal_entry_template/journal_entry_template.js
index 7d80754..cfd6ccf 100644
--- a/erpnext/accounts/doctype/journal_entry_template/journal_entry_template.js
+++ b/erpnext/accounts/doctype/journal_entry_template/journal_entry_template.js
@@ -2,78 +2,85 @@
 // For license information, please see license.txt
 
 frappe.ui.form.on("Journal Entry Template", {
-	onload: function(frm) {
-		if(frm.is_new()) {
+	onload: function (frm) {
+		if (frm.is_new()) {
 			frappe.call({
 				type: "GET",
 				method: "erpnext.accounts.doctype.journal_entry_template.journal_entry_template.get_naming_series",
-				callback: function(r){
-					if(r.message) {
+				callback: function (r) {
+					if (r.message) {
 						frm.set_df_property("naming_series", "options", r.message.split("\n"));
 						frm.set_value("naming_series", r.message.split("\n")[0]);
 						frm.refresh_field("naming_series");
 					}
-				}
+				},
 			});
 		}
 	},
-	refresh: function(frm) {
+	refresh: function (frm) {
 		frappe.model.set_default_values(frm.doc);
 
-		frm.set_query("account" ,"accounts", function(){
+		frm.set_query("account", "accounts", function () {
 			var filters = {
 				company: frm.doc.company,
-				is_group: 0
+				is_group: 0,
 			};
 
-			if(!frm.doc.multi_currency) {
+			if (!frm.doc.multi_currency) {
 				$.extend(filters, {
-					account_currency: ['in', [frappe.get_doc(":Company", frm.doc.company).default_currency, null]]
+					account_currency: [
+						"in",
+						[frappe.get_doc(":Company", frm.doc.company).default_currency, null],
+					],
 				});
 			}
 
 			return { filters: filters };
 		});
 	},
-	voucher_type: function(frm) {
-		var add_accounts = function(doc, r) {
-			$.each(r, function(i, d) {
+	voucher_type: function (frm) {
+		var add_accounts = function (doc, r) {
+			$.each(r, function (i, d) {
 				var row = frappe.model.add_child(doc, "Journal Entry Template Account", "accounts");
 				row.account = d.account;
 			});
 			refresh_field("accounts");
 		};
 
-		if(!frm.doc.company) return;
+		if (!frm.doc.company) return;
 
 		frm.trigger("clear_child");
-		switch(frm.doc.voucher_type){
+		switch (frm.doc.voucher_type) {
 			case "Bank Entry":
 			case "Cash Entry":
 				frappe.call({
 					type: "GET",
 					method: "erpnext.accounts.doctype.journal_entry.journal_entry.get_default_bank_cash_account",
 					args: {
-						"account_type": (frm.doc.voucher_type=="Bank Entry" ?
-							"Bank" : (frm.doc.voucher_type=="Cash Entry" ? "Cash" : null)),
-						"company": frm.doc.company
+						account_type:
+							frm.doc.voucher_type == "Bank Entry"
+								? "Bank"
+								: frm.doc.voucher_type == "Cash Entry"
+								? "Cash"
+								: null,
+						company: frm.doc.company,
 					},
-					callback: function(r) {
-						if(r.message) {
+					callback: function (r) {
+						if (r.message) {
 							// If default company bank account not set
-							if(!$.isEmptyObject(r.message)){
+							if (!$.isEmptyObject(r.message)) {
 								add_accounts(frm.doc, [r.message]);
 							}
 						}
-					}
+					},
 				});
 				break;
 			default:
 				frm.trigger("clear_child");
 		}
 	},
-	clear_child: function(frm){
+	clear_child: function (frm) {
 		frappe.model.clear_table(frm.doc, "accounts");
 		frm.refresh_field("accounts");
-	}
+	},
 });
diff --git a/erpnext/accounts/doctype/ledger_merge/ledger_merge.js b/erpnext/accounts/doctype/ledger_merge/ledger_merge.js
index b2db98d..6faae84 100644
--- a/erpnext/accounts/doctype/ledger_merge/ledger_merge.js
+++ b/erpnext/accounts/doctype/ledger_merge/ledger_merge.js
@@ -1,9 +1,9 @@
 // Copyright (c) 2021, Wahni Green Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Ledger Merge', {
-	setup: function(frm) {
-		frappe.realtime.on('ledger_merge_refresh', ({ ledger_merge }) => {
+frappe.ui.form.on("Ledger Merge", {
+	setup: function (frm) {
+		frappe.realtime.on("ledger_merge_refresh", ({ ledger_merge }) => {
 			if (ledger_merge !== frm.doc.name) return;
 			frappe.model.clear_doc(frm.doc.doctype, frm.doc.name);
 			frappe.model.with_doc(frm.doc.doctype, frm.doc.name).then(() => {
@@ -11,29 +11,29 @@
 			});
 		});
 
-		frappe.realtime.on('ledger_merge_progress', data => {
+		frappe.realtime.on("ledger_merge_progress", (data) => {
 			if (data.ledger_merge !== frm.doc.name) return;
-			let message = __('Merging {0} of {1}', [data.current, data.total]);
+			let message = __("Merging {0} of {1}", [data.current, data.total]);
 			let percent = Math.floor((data.current * 100) / data.total);
-			frm.dashboard.show_progress(__('Merge Progress'), percent, message);
-			frm.page.set_indicator(__('In Progress'), 'orange');
+			frm.dashboard.show_progress(__("Merge Progress"), percent, message);
+			frm.page.set_indicator(__("In Progress"), "orange");
 		});
 
-		frm.set_query("account", function(doc) {
-			if (!doc.company) frappe.throw(__('Please set Company'));
-			if (!doc.root_type) frappe.throw(__('Please set Root Type'));
+		frm.set_query("account", function (doc) {
+			if (!doc.company) frappe.throw(__("Please set Company"));
+			if (!doc.root_type) frappe.throw(__("Please set Root Type"));
 			return {
 				filters: {
 					root_type: doc.root_type,
-					company: doc.company
-				}
+					company: doc.company,
+				},
 			};
 		});
 
-		frm.set_query('account', 'merge_accounts', function(doc) {
-			if (!doc.company) frappe.throw(__('Please set Company'));
-			if (!doc.root_type) frappe.throw(__('Please set Root Type'));
-			if (!doc.account) frappe.throw(__('Please set Account'));
+		frm.set_query("account", "merge_accounts", function (doc) {
+			if (!doc.company) frappe.throw(__("Please set Company"));
+			if (!doc.root_type) frappe.throw(__("Please set Root Type"));
+			if (!doc.account) frappe.throw(__("Please set Account"));
 			let acc = [doc.account];
 			frm.doc.merge_accounts.forEach((row) => {
 				acc.push(row.account);
@@ -43,86 +43,86 @@
 					is_group: doc.is_group,
 					root_type: doc.root_type,
 					name: ["not in", acc],
-					company: doc.company
-				}
+					company: doc.company,
+				},
 			};
 		});
 	},
 
-	refresh: function(frm) {
+	refresh: function (frm) {
 		frm.page.hide_icon_group();
-		frm.trigger('set_merge_status');
-		frm.trigger('update_primary_action');
+		frm.trigger("set_merge_status");
+		frm.trigger("update_primary_action");
 	},
 
-	after_save: function(frm) {
+	after_save: function (frm) {
 		setTimeout(() => {
-			frm.trigger('update_primary_action');
+			frm.trigger("update_primary_action");
 		}, 500);
 	},
 
-	update_primary_action: function(frm) {
+	update_primary_action: function (frm) {
 		if (frm.is_dirty()) {
 			frm.enable_save();
 			return;
 		}
 		frm.disable_save();
-		if (frm.doc.status !== 'Success') {
+		if (frm.doc.status !== "Success") {
 			if (!frm.is_new()) {
-				let label = frm.doc.status === 'Pending' ? __('Start Merge') : __('Retry');
+				let label = frm.doc.status === "Pending" ? __("Start Merge") : __("Retry");
 				frm.page.set_primary_action(label, () => frm.events.start_merge(frm));
 			} else {
-				frm.page.set_primary_action(__('Save'), () => frm.save());
+				frm.page.set_primary_action(__("Save"), () => frm.save());
 			}
 		}
 	},
 
-	start_merge: function(frm) {
+	start_merge: function (frm) {
 		frm.call({
-			method: 'form_start_merge',
+			method: "form_start_merge",
 			args: { docname: frm.doc.name },
-			btn: frm.page.btn_primary
-		}).then(r => {
+			btn: frm.page.btn_primary,
+		}).then((r) => {
 			if (r.message === true) {
 				frm.disable_save();
 			}
 		});
 	},
 
-	set_merge_status: function(frm) {
+	set_merge_status: function (frm) {
 		if (frm.doc.status == "Pending") return;
 		let successful_records = 0;
 		frm.doc.merge_accounts.forEach((row) => {
 			if (row.merged) successful_records += 1;
 		});
 		let message_args = [successful_records, frm.doc.merge_accounts.length];
-		frm.dashboard.set_headline(__('Successfully merged {0} out of {1}.', message_args));
+		frm.dashboard.set_headline(__("Successfully merged {0} out of {1}.", message_args));
 	},
 
-	root_type: function(frm) {
-		frm.set_value('account', '');
-		frm.set_value('merge_accounts', []);
+	root_type: function (frm) {
+		frm.set_value("account", "");
+		frm.set_value("merge_accounts", []);
 	},
 
-	company: function(frm) {
-		frm.set_value('account', '');
-		frm.set_value('merge_accounts', []);
-	}
+	company: function (frm) {
+		frm.set_value("account", "");
+		frm.set_value("merge_accounts", []);
+	},
 });
 
-frappe.ui.form.on('Ledger Merge Accounts', {
-	merge_accounts_add: function(frm) {
-		frm.trigger('update_primary_action');
+frappe.ui.form.on("Ledger Merge Accounts", {
+	merge_accounts_add: function (frm) {
+		frm.trigger("update_primary_action");
 	},
 
-	merge_accounts_remove: function(frm) {
-		frm.trigger('update_primary_action');
+	merge_accounts_remove: function (frm) {
+		frm.trigger("update_primary_action");
 	},
 
-	account: function(frm, cdt, cdn) {
+	account: function (frm, cdt, cdn) {
 		let row = frappe.get_doc(cdt, cdn);
 		row.account_name = row.account;
-		frm.refresh_field('merge_accounts');
-		frm.trigger('update_primary_action');
-	}
+		frm.refresh_field("merge_accounts");
+		frm.trigger("update_primary_action");
+	},
 });
diff --git a/erpnext/accounts/doctype/loyalty_point_entry/loyalty_point_entry.js b/erpnext/accounts/doctype/loyalty_point_entry/loyalty_point_entry.js
index d7dc7f3..d522f6d 100644
--- a/erpnext/accounts/doctype/loyalty_point_entry/loyalty_point_entry.js
+++ b/erpnext/accounts/doctype/loyalty_point_entry/loyalty_point_entry.js
@@ -1,8 +1,6 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Loyalty Point Entry', {
-	refresh: function(frm) {
-
-	}
+frappe.ui.form.on("Loyalty Point Entry", {
+	refresh: function (frm) {},
 });
diff --git a/erpnext/accounts/doctype/loyalty_program/loyalty_program.js b/erpnext/accounts/doctype/loyalty_program/loyalty_program.js
index 6951b2a..4c29be3 100644
--- a/erpnext/accounts/doctype/loyalty_program/loyalty_program.js
+++ b/erpnext/accounts/doctype/loyalty_program/loyalty_program.js
@@ -3,30 +3,37 @@
 
 frappe.provide("erpnext.accounts.dimensions");
 
-frappe.ui.form.on('Loyalty Program', {
-	setup: function(frm) {
-		var help_content =
-			`<table class="table table-bordered" style="background-color: var(--scrollbar-track-color);">
+frappe.ui.form.on("Loyalty Program", {
+	setup: function (frm) {
+		var help_content = `<table class="table table-bordered" style="background-color: var(--scrollbar-track-color);">
 				<tr><td>
 					<h4>
 						<i class="fa fa-hand-right"></i>
-						${__('Notes')}
+						${__("Notes")}
 					</h4>
 					<ul>
 						<li>
-							${__("Loyalty Points will be calculated from the spent done (via the Sales Invoice), based on collection factor mentioned.")}
+							${__(
+								"Loyalty Points will be calculated from the spent done (via the Sales Invoice), based on collection factor mentioned."
+							)}
 						</li>
 						<li>
-							${__("There can be multiple tiered collection factor based on the total spent. But the conversion factor for redemption will always be same for all the tier.")}
+							${__(
+								"There can be multiple tiered collection factor based on the total spent. But the conversion factor for redemption will always be same for all the tier."
+							)}
 						</li>
 						<li>
-							${__("In the case of multi-tier program, Customers will be auto assigned to the concerned tier as per their spent")}
+							${__(
+								"In the case of multi-tier program, Customers will be auto assigned to the concerned tier as per their spent"
+							)}
 						</li>
 						<li>
 							${__("If unlimited expiry for the Loyalty Points, keep the Expiry Duration empty or 0.")}
 						</li>
 						<li>
-							${__("If Auto Opt In is checked, then the customers will be automatically linked with the concerned Loyalty Program (on save)")}
+							${__(
+								"If Auto Opt In is checked, then the customers will be automatically linked with the concerned Loyalty Program (on save)"
+							)}
 						</li>
 						<li>
 							${__("One customer can be part of only single Loyalty Program.")}
@@ -37,14 +44,14 @@
 		set_field_options("loyalty_program_help", help_content);
 	},
 
-	onload: function(frm) {
-		frm.set_query("expense_account", function(doc) {
+	onload: function (frm) {
+		frm.set_query("expense_account", function (doc) {
 			return {
 				filters: {
-					"root_type": "Expense",
-					'is_group': 0,
-					'company': doc.company
-				}
+					root_type: "Expense",
+					is_group: 0,
+					company: doc.company,
+				},
 			};
 		});
 
@@ -52,13 +59,15 @@
 		erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype);
 	},
 
-	refresh: function(frm) {
+	refresh: function (frm) {
 		if (frm.doc.loyalty_program_type === "Single Tier Program" && frm.doc.collection_rules.length > 1) {
-			frappe.throw(__("Please select the Multiple Tier Program type for more than one collection rules."));
+			frappe.throw(
+				__("Please select the Multiple Tier Program type for more than one collection rules.")
+			);
 		}
 	},
 
-	company: function(frm) {
+	company: function (frm) {
 		erpnext.accounts.dimensions.update_dimension(frm, frm.doctype);
-	}
+	},
 });
diff --git a/erpnext/accounts/doctype/mode_of_payment/mode_of_payment.js b/erpnext/accounts/doctype/mode_of_payment/mode_of_payment.js
index 103fa96..25d437f 100644
--- a/erpnext/accounts/doctype/mode_of_payment/mode_of_payment.js
+++ b/erpnext/accounts/doctype/mode_of_payment/mode_of_payment.js
@@ -1,16 +1,16 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.ui.form.on('Mode of Payment', {
-	setup: function(frm) {
-		frm.set_query("default_account", "accounts", function(doc, cdt, cdn) {
+frappe.ui.form.on("Mode of Payment", {
+	setup: function (frm) {
+		frm.set_query("default_account", "accounts", function (doc, cdt, cdn) {
 			let d = locals[cdt][cdn];
 			return {
 				filters: [
-					['Account', 'account_type', 'in', 'Bank, Cash, Receivable'],
-					['Account', 'is_group', '=', 0],
-					['Account', 'company', '=', d.company]
-				]
+					["Account", "account_type", "in", "Bank, Cash, Receivable"],
+					["Account", "is_group", "=", 0],
+					["Account", "company", "=", d.company],
+				],
 			};
 		});
 	},
diff --git a/erpnext/accounts/doctype/monthly_distribution/monthly_distribution.js b/erpnext/accounts/doctype/monthly_distribution/monthly_distribution.js
index 569f008..3383534 100644
--- a/erpnext/accounts/doctype/monthly_distribution/monthly_distribution.js
+++ b/erpnext/accounts/doctype/monthly_distribution/monthly_distribution.js
@@ -1,16 +1,16 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.ui.form.on('Monthly Distribution', {
+frappe.ui.form.on("Monthly Distribution", {
 	onload(frm) {
-		if(frm.doc.__islocal) {
-			return frm.call('get_months').then(() => {
-				frm.refresh_field('percentages');
+		if (frm.doc.__islocal) {
+			return frm.call("get_months").then(() => {
+				frm.refresh_field("percentages");
 			});
 		}
 	},
 
 	refresh(frm) {
-		frm.toggle_display('distribution_id', frm.doc.__islocal);
-	}
+		frm.toggle_display("distribution_id", frm.doc.__islocal);
+	},
 });
diff --git a/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.js b/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.js
index 88867d1..f1efba8 100644
--- a/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.js
+++ b/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.js
@@ -1,48 +1,52 @@
 // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Opening Invoice Creation Tool', {
-	setup: function(frm) {
-		frm.set_query('party_type', 'invoices', function(doc, cdt, cdn) {
+frappe.ui.form.on("Opening Invoice Creation Tool", {
+	setup: function (frm) {
+		frm.set_query("party_type", "invoices", function (doc, cdt, cdn) {
 			return {
 				filters: {
-					'name': ['in', 'Customer, Supplier']
-				}
+					name: ["in", "Customer, Supplier"],
+				},
 			};
 		});
 
 		if (frm.doc.company) {
-			frm.trigger('setup_company_filters');
+			frm.trigger("setup_company_filters");
 		}
 
-		frappe.realtime.on('opening_invoice_creation_progress', data => {
+		frappe.realtime.on("opening_invoice_creation_progress", (data) => {
 			if (!frm.doc.import_in_progress) {
 				frm.dashboard.reset();
 				frm.doc.import_in_progress = true;
 			}
 			if (data.count == data.total) {
-				setTimeout(() => {
-					frm.doc.import_in_progress = false;
-					frm.clear_table("invoices");
-					frm.refresh_fields();
-					frm.page.clear_indicator();
-					frm.dashboard.hide_progress();
-					frappe.msgprint(__("Opening {0} Invoices created", [frm.doc.invoice_type]));
-				}, 1500, data.title);
+				setTimeout(
+					() => {
+						frm.doc.import_in_progress = false;
+						frm.clear_table("invoices");
+						frm.refresh_fields();
+						frm.page.clear_indicator();
+						frm.dashboard.hide_progress();
+						frappe.msgprint(__("Opening {0} Invoices created", [frm.doc.invoice_type]));
+					},
+					1500,
+					data.title
+				);
 				return;
 			}
 
 			frm.dashboard.show_progress(data.title, (data.count / data.total) * 100, data.message);
-			frm.page.set_indicator(__('In Progress'), 'orange');
+			frm.page.set_indicator(__("In Progress"), "orange");
 		});
 
 		erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype);
 	},
 
-	refresh: function(frm) {
+	refresh: function (frm) {
 		frm.disable_save();
 		!frm.doc.import_in_progress && frm.trigger("make_dashboard");
-		frm.page.set_primary_action(__('Create Invoices'), () => {
+		frm.page.set_primary_action(__("Create Invoices"), () => {
 			let btn_primary = frm.page.btn_primary.get(0);
 			return frm.call({
 				doc: frm.doc,
@@ -58,100 +62,98 @@
 		}
 	},
 
-	setup_company_filters: function(frm) {
-		frm.set_query('cost_center', 'invoices', function(doc, cdt, cdn) {
+	setup_company_filters: function (frm) {
+		frm.set_query("cost_center", "invoices", function (doc, cdt, cdn) {
 			return {
 				filters: {
-					'company': doc.company
-				}
+					company: doc.company,
+				},
 			};
 		});
 
-		frm.set_query('cost_center', function(doc) {
+		frm.set_query("cost_center", function (doc) {
 			return {
 				filters: {
-					'company': doc.company
-				}
+					company: doc.company,
+				},
 			};
 		});
 
-		frm.set_query('temporary_opening_account', 'invoices', function(doc, cdt, cdn) {
+		frm.set_query("temporary_opening_account", "invoices", function (doc, cdt, cdn) {
 			return {
 				filters: {
-					'company': doc.company
-				}
-			}
+					company: doc.company,
+				},
+			};
 		});
 	},
 
-	company: function(frm) {
+	company: function (frm) {
 		if (frm.doc.company) {
-
-			frm.trigger('setup_company_filters');
+			frm.trigger("setup_company_filters");
 
 			frappe.call({
-				method: 'erpnext.accounts.doctype.opening_invoice_creation_tool.opening_invoice_creation_tool.get_temporary_opening_account',
+				method: "erpnext.accounts.doctype.opening_invoice_creation_tool.opening_invoice_creation_tool.get_temporary_opening_account",
 				args: {
-					company: frm.doc.company
+					company: frm.doc.company,
 				},
 				callback: (r) => {
 					if (r.message) {
 						frm.doc.__onload.temporary_opening_account = r.message;
-						frm.trigger('update_invoice_table');
+						frm.trigger("update_invoice_table");
 					}
-				}
-			})
+				},
+			});
 		}
 		erpnext.accounts.dimensions.update_dimension(frm, frm.doctype);
 	},
 
-	invoice_type: function(frm) {
+	invoice_type: function (frm) {
 		$.each(frm.doc.invoices, (idx, row) => {
-			row.party_type = frm.doc.invoice_type == "Sales"? "Customer": "Supplier";
+			row.party_type = frm.doc.invoice_type == "Sales" ? "Customer" : "Supplier";
 			row.party = "";
 		});
 		frm.refresh_fields();
 	},
 
-	make_dashboard: function(frm) {
+	make_dashboard: function (frm) {
 		let max_count = frm.doc.__onload.max_count;
 		let opening_invoices_summary = frm.doc.__onload.opening_invoices_summary;
-		if(!$.isEmptyObject(opening_invoices_summary)) {
+		if (!$.isEmptyObject(opening_invoices_summary)) {
 			let section = frm.dashboard.add_section(
-				frappe.render_template('opening_invoice_creation_tool_dashboard', {
+				frappe.render_template("opening_invoice_creation_tool_dashboard", {
 					data: opening_invoices_summary,
-					max_count: max_count
+					max_count: max_count,
 				}),
 				__("Opening Invoices Summary")
 			);
 
-			section.on('click', '.invoice-link', function() {
-				let doctype = $(this).attr('data-type');
-				let company = $(this).attr('data-company');
-				frappe.set_route('List', doctype,
-					{'is_opening': 'Yes', 'company': company, 'docstatus': 1});
+			section.on("click", ".invoice-link", function () {
+				let doctype = $(this).attr("data-type");
+				let company = $(this).attr("data-company");
+				frappe.set_route("List", doctype, { is_opening: "Yes", company: company, docstatus: 1 });
 			});
 			frm.dashboard.show();
 		}
 	},
 
-	update_invoice_table: function(frm) {
+	update_invoice_table: function (frm) {
 		$.each(frm.doc.invoices, (idx, row) => {
 			if (!row.temporary_opening_account) {
 				row.temporary_opening_account = frm.doc.__onload.temporary_opening_account;
 			}
 
-			if(!row.cost_center) {
+			if (!row.cost_center) {
 				row.cost_center = frm.doc.cost_center;
 			}
 
-			row.party_type = frm.doc.invoice_type == "Sales"? "Customer": "Supplier";
+			row.party_type = frm.doc.invoice_type == "Sales" ? "Customer" : "Supplier";
 		});
-	}
+	},
 });
 
-frappe.ui.form.on('Opening Invoice Creation Tool Item', {
+frappe.ui.form.on("Opening Invoice Creation Tool Item", {
 	invoices_add: (frm) => {
-		frm.trigger('update_invoice_table');
-	}
+		frm.trigger("update_invoice_table");
+	},
 });
diff --git a/erpnext/accounts/doctype/party_link/party_link.js b/erpnext/accounts/doctype/party_link/party_link.js
index 6da9291..dfa02c4 100644
--- a/erpnext/accounts/doctype/party_link/party_link.js
+++ b/erpnext/accounts/doctype/party_link/party_link.js
@@ -1,33 +1,34 @@
 // Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Party Link', {
-	refresh: function(frm) {
-		frm.set_query('primary_role', () => {
+frappe.ui.form.on("Party Link", {
+	refresh: function (frm) {
+		frm.set_query("primary_role", () => {
 			return {
 				filters: {
-					name: ['in', ['Customer', 'Supplier']]
-				}
+					name: ["in", ["Customer", "Supplier"]],
+				},
 			};
 		});
 
-		frm.set_query('secondary_role', () => {
-			let party_types = Object.keys(frappe.boot.party_account_types)
-				.filter(p => p != frm.doc.primary_role);
+		frm.set_query("secondary_role", () => {
+			let party_types = Object.keys(frappe.boot.party_account_types).filter(
+				(p) => p != frm.doc.primary_role
+			);
 			return {
 				filters: {
-					name: ['in', party_types]
-				}
+					name: ["in", party_types],
+				},
 			};
 		});
 	},
 
 	primary_role(frm) {
-		frm.set_value('primary_party', '');
-		frm.set_value('secondary_role', '');
+		frm.set_value("primary_party", "");
+		frm.set_value("secondary_role", "");
 	},
 
 	secondary_role(frm) {
-		frm.set_value('secondary_party', '');
-	}
+		frm.set_value("secondary_party", "");
+	},
 });
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.js b/erpnext/accounts/doctype/payment_entry/payment_entry.js
index 832b116..ab50c38 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.js
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.js
@@ -7,11 +7,20 @@
 erpnext.accounts.taxes.setup_tax_validations("Payment Entry");
 erpnext.accounts.taxes.setup_tax_filters("Advance Taxes and Charges");
 
-frappe.ui.form.on('Payment Entry', {
-	onload: function(frm) {
-		frm.ignore_doctypes_on_cancel_all = ['Sales Invoice', 'Purchase Invoice', 'Journal Entry', 'Repost Payment Ledger','Repost Accounting Ledger', 'Unreconcile Payment', 'Unreconcile Payment Entries', "Bank Transaction"];
+frappe.ui.form.on("Payment Entry", {
+	onload: function (frm) {
+		frm.ignore_doctypes_on_cancel_all = [
+			"Sales Invoice",
+			"Purchase Invoice",
+			"Journal Entry",
+			"Repost Payment Ledger",
+			"Repost Accounting Ledger",
+			"Unreconcile Payment",
+			"Unreconcile Payment Entries",
+			"Bank Transaction",
+		];
 
-		if(frm.doc.__islocal) {
+		if (frm.doc.__islocal) {
 			if (!frm.doc.paid_from) frm.set_value("paid_from_account_currency", null);
 			if (!frm.doc.paid_to) frm.set_value("paid_to_account_currency", null);
 		}
@@ -19,95 +28,97 @@
 		erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype);
 	},
 
-	setup: function(frm) {
-		frm.set_query("paid_from", function() {
+	setup: function (frm) {
+		frm.set_query("paid_from", function () {
 			frm.events.validate_company(frm);
 
-			var account_types = in_list(["Pay", "Internal Transfer"], frm.doc.payment_type) ?
-				["Bank", "Cash"] : [frappe.boot.party_account_types[frm.doc.party_type]];
+			var account_types = in_list(["Pay", "Internal Transfer"], frm.doc.payment_type)
+				? ["Bank", "Cash"]
+				: [frappe.boot.party_account_types[frm.doc.party_type]];
 			return {
 				filters: {
-					"account_type": ["in", account_types],
-					"is_group": 0,
-					"company": frm.doc.company
-				}
-			}
+					account_type: ["in", account_types],
+					is_group: 0,
+					company: frm.doc.company,
+				},
+			};
 		});
 
-		frm.set_query("party_type", function() {
+		frm.set_query("party_type", function () {
 			frm.events.validate_company(frm);
-			return{
+			return {
 				filters: {
-					"name": ["in", Object.keys(frappe.boot.party_account_types)],
-				}
-			}
+					name: ["in", Object.keys(frappe.boot.party_account_types)],
+				},
+			};
 		});
 
-		frm.set_query("party_bank_account", function() {
+		frm.set_query("party_bank_account", function () {
 			return {
 				filters: {
 					is_company_account: 0,
 					party_type: frm.doc.party_type,
-					party: frm.doc.party
-				}
-			}
+					party: frm.doc.party,
+				},
+			};
 		});
 
-		frm.set_query("bank_account", function() {
+		frm.set_query("bank_account", function () {
 			return {
 				filters: {
 					is_company_account: 1,
-					company: frm.doc.company
-				}
-			}
+					company: frm.doc.company,
+				},
+			};
 		});
 
-		frm.set_query("contact_person", function() {
+		frm.set_query("contact_person", function () {
 			if (frm.doc.party) {
 				return {
-					query: 'frappe.contacts.doctype.contact.contact.contact_query',
+					query: "frappe.contacts.doctype.contact.contact.contact_query",
 					filters: {
 						link_doctype: frm.doc.party_type,
-						link_name: frm.doc.party
-					}
+						link_name: frm.doc.party,
+					},
 				};
 			}
 		});
 
-		frm.set_query("paid_to", function() {
+		frm.set_query("paid_to", function () {
 			frm.events.validate_company(frm);
 
-			var account_types = in_list(["Receive", "Internal Transfer"], frm.doc.payment_type) ?
-				["Bank", "Cash"] : [frappe.boot.party_account_types[frm.doc.party_type]];
+			var account_types = in_list(["Receive", "Internal Transfer"], frm.doc.payment_type)
+				? ["Bank", "Cash"]
+				: [frappe.boot.party_account_types[frm.doc.party_type]];
 			return {
 				filters: {
-					"account_type": ["in", account_types],
-					"is_group": 0,
-					"company": frm.doc.company
-				}
-			}
+					account_type: ["in", account_types],
+					is_group: 0,
+					company: frm.doc.company,
+				},
+			};
 		});
 
-		frm.set_query("account", "deductions", function() {
+		frm.set_query("account", "deductions", function () {
 			return {
 				filters: {
-					"is_group": 0,
-					"company": frm.doc.company
-				}
-			}
+					is_group: 0,
+					company: frm.doc.company,
+				},
+			};
 		});
 
-		frm.set_query("advance_tax_account", function() {
+		frm.set_query("advance_tax_account", function () {
 			return {
 				filters: {
-					"company": frm.doc.company,
-					"root_type": ["in", ["Asset", "Liability"]],
-					"is_group": 0
-				}
-			}
+					company: frm.doc.company,
+					root_type: ["in", ["Asset", "Liability"]],
+					is_group: 0,
+				},
+			};
 		});
 
-		frm.set_query("reference_doctype", "references", function() {
+		frm.set_query("reference_doctype", "references", function () {
 			let doctypes = ["Journal Entry"];
 			if (frm.doc.party_type == "Customer") {
 				doctypes = ["Sales Order", "Sales Invoice", "Journal Entry", "Dunning"];
@@ -116,232 +127,312 @@
 			}
 
 			return {
-				filters: { "name": ["in", doctypes] }
+				filters: { name: ["in", doctypes] },
 			};
 		});
 
-		frm.set_query('payment_term', 'references', function(frm, cdt, cdn) {
+		frm.set_query("payment_term", "references", function (frm, cdt, cdn) {
 			const child = locals[cdt][cdn];
-			if (in_list(['Purchase Invoice', 'Sales Invoice'], child.reference_doctype) && child.reference_name) {
+			if (
+				in_list(["Purchase Invoice", "Sales Invoice"], child.reference_doctype) &&
+				child.reference_name
+			) {
 				return {
 					query: "erpnext.controllers.queries.get_payment_terms_for_references",
 					filters: {
-						'reference': child.reference_name
-					}
-				}
+						reference: child.reference_name,
+					},
+				};
 			}
 		});
 
-		frm.set_query("reference_name", "references", function(doc, cdt, cdn) {
+		frm.set_query("reference_name", "references", function (doc, cdt, cdn) {
 			const child = locals[cdt][cdn];
-			const filters = {"docstatus": 1, "company": doc.company};
-			const party_type_doctypes = ['Sales Invoice', 'Sales Order', 'Purchase Invoice',
-				'Purchase Order', 'Dunning'];
+			const filters = { docstatus: 1, company: doc.company };
+			const party_type_doctypes = [
+				"Sales Invoice",
+				"Sales Order",
+				"Purchase Invoice",
+				"Purchase Order",
+				"Dunning",
+			];
 
 			if (in_list(party_type_doctypes, child.reference_doctype)) {
 				filters[doc.party_type.toLowerCase()] = doc.party;
 			}
 
 			return {
-				filters: filters
+				filters: filters,
 			};
 		});
 	},
 
-	refresh: function(frm) {
+	refresh: function (frm) {
 		erpnext.hide_company(frm);
 		frm.events.hide_unhide_fields(frm);
 		frm.events.set_dynamic_labels(frm);
 		frm.events.show_general_ledger(frm);
 		erpnext.accounts.ledger_preview.show_accounting_ledger_preview(frm);
-		if((frm.doc.references) && (frm.doc.references.find((elem) => {return elem.exchange_gain_loss != 0}))) {
-			frm.add_custom_button(__("View Exchange Gain/Loss Journals"), function() {
-				frappe.set_route("List", "Journal Entry", {"voucher_type": "Exchange Gain Or Loss", "reference_name": frm.doc.name});
-			}, __('Actions'));
-
+		if (
+			frm.doc.references &&
+			frm.doc.references.find((elem) => {
+				return elem.exchange_gain_loss != 0;
+			})
+		) {
+			frm.add_custom_button(
+				__("View Exchange Gain/Loss Journals"),
+				function () {
+					frappe.set_route("List", "Journal Entry", {
+						voucher_type: "Exchange Gain Or Loss",
+						reference_name: frm.doc.name,
+					});
+				},
+				__("Actions")
+			);
 		}
 		erpnext.accounts.unreconcile_payment.add_unreconcile_btn(frm);
 	},
 
 	validate_company: (frm) => {
-		if (!frm.doc.company){
-			frappe.throw({message:__("Please select a Company first."), title: __("Mandatory")});
+		if (!frm.doc.company) {
+			frappe.throw({ message: __("Please select a Company first."), title: __("Mandatory") });
 		}
 	},
 
-	company: function(frm) {
-		frm.trigger('party');
+	company: function (frm) {
+		frm.trigger("party");
 		frm.events.hide_unhide_fields(frm);
 		frm.events.set_dynamic_labels(frm);
 		erpnext.accounts.dimensions.update_dimension(frm, frm.doctype);
 	},
 
-	contact_person: function(frm) {
+	contact_person: function (frm) {
 		frm.set_value("contact_email", "");
 		erpnext.utils.get_contact_details(frm);
 	},
 
-	hide_unhide_fields: function(frm) {
-		var company_currency = frm.doc.company? frappe.get_doc(":Company", frm.doc.company).default_currency: "";
+	hide_unhide_fields: function (frm) {
+		var company_currency = frm.doc.company
+			? frappe.get_doc(":Company", frm.doc.company).default_currency
+			: "";
 
-		frm.toggle_display("source_exchange_rate",
-			(frm.doc.paid_amount && frm.doc.paid_from_account_currency != company_currency));
+		frm.toggle_display(
+			"source_exchange_rate",
+			frm.doc.paid_amount && frm.doc.paid_from_account_currency != company_currency
+		);
 
-		frm.toggle_display("target_exchange_rate", (frm.doc.received_amount &&
-			frm.doc.paid_to_account_currency != company_currency &&
-			frm.doc.paid_from_account_currency != frm.doc.paid_to_account_currency));
+		frm.toggle_display(
+			"target_exchange_rate",
+			frm.doc.received_amount &&
+				frm.doc.paid_to_account_currency != company_currency &&
+				frm.doc.paid_from_account_currency != frm.doc.paid_to_account_currency
+		);
 
 		frm.toggle_display("base_paid_amount", frm.doc.paid_from_account_currency != company_currency);
 
 		if (frm.doc.payment_type == "Pay") {
-			frm.toggle_display("base_total_taxes_and_charges", frm.doc.total_taxes_and_charges &&
-				(frm.doc.paid_to_account_currency != company_currency));
+			frm.toggle_display(
+				"base_total_taxes_and_charges",
+				frm.doc.total_taxes_and_charges && frm.doc.paid_to_account_currency != company_currency
+			);
 		} else {
-			frm.toggle_display("base_total_taxes_and_charges", frm.doc.total_taxes_and_charges &&
-				(frm.doc.paid_from_account_currency != company_currency));
+			frm.toggle_display(
+				"base_total_taxes_and_charges",
+				frm.doc.total_taxes_and_charges && frm.doc.paid_from_account_currency != company_currency
+			);
 		}
 
-		frm.toggle_display("base_received_amount", (
-			frm.doc.paid_to_account_currency != company_currency
-			&& frm.doc.paid_from_account_currency != frm.doc.paid_to_account_currency
-			&& frm.doc.base_paid_amount != frm.doc.base_received_amount
-		));
+		frm.toggle_display(
+			"base_received_amount",
+			frm.doc.paid_to_account_currency != company_currency &&
+				frm.doc.paid_from_account_currency != frm.doc.paid_to_account_currency &&
+				frm.doc.base_paid_amount != frm.doc.base_received_amount
+		);
 
-		frm.toggle_display("received_amount", (frm.doc.payment_type=="Internal Transfer" ||
-			frm.doc.paid_from_account_currency != frm.doc.paid_to_account_currency))
+		frm.toggle_display(
+			"received_amount",
+			frm.doc.payment_type == "Internal Transfer" ||
+				frm.doc.paid_from_account_currency != frm.doc.paid_to_account_currency
+		);
 
-		frm.toggle_display(["base_total_allocated_amount"],
-			(frm.doc.paid_amount && frm.doc.received_amount && frm.doc.base_total_allocated_amount &&
-			((frm.doc.payment_type=="Receive" && frm.doc.paid_from_account_currency != company_currency) ||
-			(frm.doc.payment_type=="Pay" && frm.doc.paid_to_account_currency != company_currency))));
+		frm.toggle_display(
+			["base_total_allocated_amount"],
+			frm.doc.paid_amount &&
+				frm.doc.received_amount &&
+				frm.doc.base_total_allocated_amount &&
+				((frm.doc.payment_type == "Receive" &&
+					frm.doc.paid_from_account_currency != company_currency) ||
+					(frm.doc.payment_type == "Pay" && frm.doc.paid_to_account_currency != company_currency))
+		);
 
-		var party_amount = frm.doc.payment_type=="Receive" ?
-			frm.doc.paid_amount : frm.doc.received_amount;
+		var party_amount = frm.doc.payment_type == "Receive" ? frm.doc.paid_amount : frm.doc.received_amount;
 
-		frm.toggle_display("write_off_difference_amount", (frm.doc.difference_amount && frm.doc.party &&
-			(frm.doc.total_allocated_amount > party_amount)));
+		frm.toggle_display(
+			"write_off_difference_amount",
+			frm.doc.difference_amount && frm.doc.party && frm.doc.total_allocated_amount > party_amount
+		);
 
-		frm.toggle_display("set_exchange_gain_loss",
-			frm.doc.paid_amount && frm.doc.received_amount && frm.doc.difference_amount);
-
+		frm.toggle_display(
+			"set_exchange_gain_loss",
+			frm.doc.paid_amount && frm.doc.received_amount && frm.doc.difference_amount
+		);
 	},
 
-	set_dynamic_labels: function(frm) {
-		var company_currency = frm.doc.company? frappe.get_doc(":Company", frm.doc.company).default_currency: "";
+	set_dynamic_labels: function (frm) {
+		var company_currency = frm.doc.company
+			? frappe.get_doc(":Company", frm.doc.company).default_currency
+			: "";
 
-		frm.set_currency_labels(["base_paid_amount", "base_received_amount", "base_total_allocated_amount",
-			"difference_amount", "base_paid_amount_after_tax", "base_received_amount_after_tax",
-			"base_total_taxes_and_charges"], company_currency);
+		frm.set_currency_labels(
+			[
+				"base_paid_amount",
+				"base_received_amount",
+				"base_total_allocated_amount",
+				"difference_amount",
+				"base_paid_amount_after_tax",
+				"base_received_amount_after_tax",
+				"base_total_taxes_and_charges",
+			],
+			company_currency
+		);
 
 		frm.set_currency_labels(["paid_amount"], frm.doc.paid_from_account_currency);
 		frm.set_currency_labels(["received_amount"], frm.doc.paid_to_account_currency);
 
-		var party_account_currency = frm.doc.payment_type=="Receive" ?
-			frm.doc.paid_from_account_currency : frm.doc.paid_to_account_currency;
+		var party_account_currency =
+			frm.doc.payment_type == "Receive"
+				? frm.doc.paid_from_account_currency
+				: frm.doc.paid_to_account_currency;
 
-		frm.set_currency_labels(["total_allocated_amount", "unallocated_amount",
-			"total_taxes_and_charges"], party_account_currency);
+		frm.set_currency_labels(
+			["total_allocated_amount", "unallocated_amount", "total_taxes_and_charges"],
+			party_account_currency
+		);
 
-		var currency_field = (frm.doc.payment_type=="Receive") ? "paid_from_account_currency" : "paid_to_account_currency"
+		var currency_field =
+			frm.doc.payment_type == "Receive" ? "paid_from_account_currency" : "paid_to_account_currency";
 		frm.set_df_property("total_allocated_amount", "options", currency_field);
 		frm.set_df_property("unallocated_amount", "options", currency_field);
 		frm.set_df_property("total_taxes_and_charges", "options", currency_field);
 		frm.set_df_property("party_balance", "options", currency_field);
 
-		frm.set_currency_labels(["total_amount", "outstanding_amount", "allocated_amount"],
-			party_account_currency, "references");
+		frm.set_currency_labels(
+			["total_amount", "outstanding_amount", "allocated_amount"],
+			party_account_currency,
+			"references"
+		);
 
-		cur_frm.set_df_property("source_exchange_rate", "description",
-			("1 " + frm.doc.paid_from_account_currency + " = [?] " + company_currency));
+		cur_frm.set_df_property(
+			"source_exchange_rate",
+			"description",
+			"1 " + frm.doc.paid_from_account_currency + " = [?] " + company_currency
+		);
 
-		cur_frm.set_df_property("target_exchange_rate", "description",
-			("1 " + frm.doc.paid_to_account_currency + " = [?] " + company_currency));
+		cur_frm.set_df_property(
+			"target_exchange_rate",
+			"description",
+			"1 " + frm.doc.paid_to_account_currency + " = [?] " + company_currency
+		);
 
 		frm.refresh_fields();
 	},
 
-	show_general_ledger: function(frm) {
-		if(frm.doc.docstatus > 0) {
-			frm.add_custom_button(__('Ledger'), function() {
-				frappe.route_options = {
-					"voucher_no": frm.doc.name,
-					"from_date": frm.doc.posting_date,
-					"to_date": moment(frm.doc.modified).format('YYYY-MM-DD'),
-					"company": frm.doc.company,
-					"group_by": "",
-					"show_cancelled_entries": frm.doc.docstatus === 2
-				};
-				frappe.set_route("query-report", "General Ledger");
-			}, "fa fa-table");
+	show_general_ledger: function (frm) {
+		if (frm.doc.docstatus > 0) {
+			frm.add_custom_button(
+				__("Ledger"),
+				function () {
+					frappe.route_options = {
+						voucher_no: frm.doc.name,
+						from_date: frm.doc.posting_date,
+						to_date: moment(frm.doc.modified).format("YYYY-MM-DD"),
+						company: frm.doc.company,
+						group_by: "",
+						show_cancelled_entries: frm.doc.docstatus === 2,
+					};
+					frappe.set_route("query-report", "General Ledger");
+				},
+				"fa fa-table"
+			);
 		}
 	},
 
-	payment_type: function(frm) {
-		if(frm.doc.payment_type == "Internal Transfer") {
-			$.each(["party", "party_balance", "paid_from", "paid_to",
-				"references", "total_allocated_amount"], function(i, field) {
-				frm.set_value(field, null);
-			});
+	payment_type: function (frm) {
+		if (frm.doc.payment_type == "Internal Transfer") {
+			$.each(
+				["party", "party_balance", "paid_from", "paid_to", "references", "total_allocated_amount"],
+				function (i, field) {
+					frm.set_value(field, null);
+				}
+			);
 		} else {
-			if(frm.doc.party) {
+			if (frm.doc.party) {
 				frm.events.party(frm);
 			}
 
-			if(frm.doc.mode_of_payment) {
+			if (frm.doc.mode_of_payment) {
 				frm.events.mode_of_payment(frm);
 			}
 		}
 	},
 
-	mode_of_payment: function(frm) {
-		erpnext.accounts.pos.get_payment_mode_account(frm, frm.doc.mode_of_payment, function(account){
+	mode_of_payment: function (frm) {
+		erpnext.accounts.pos.get_payment_mode_account(frm, frm.doc.mode_of_payment, function (account) {
 			let payment_account_field = frm.doc.payment_type == "Receive" ? "paid_to" : "paid_from";
 			frm.set_value(payment_account_field, account);
-		})
+		});
 	},
 
-	party_type: function(frm) {
-
+	party_type: function (frm) {
 		let party_types = Object.keys(frappe.boot.party_account_types);
-		if(frm.doc.party_type && !party_types.includes(frm.doc.party_type)){
+		if (frm.doc.party_type && !party_types.includes(frm.doc.party_type)) {
 			frm.set_value("party_type", "");
 			frappe.throw(__("Party can only be one of {0}", [party_types.join(", ")]));
 		}
 
-		frm.set_query("party", function() {
-			if(frm.doc.party_type == 'Employee'){
+		frm.set_query("party", function () {
+			if (frm.doc.party_type == "Employee") {
 				return {
-					query: "erpnext.controllers.queries.employee_query"
-				}
-			}
-			else if(frm.doc.party_type == 'Customer'){
+					query: "erpnext.controllers.queries.employee_query",
+				};
+			} else if (frm.doc.party_type == "Customer") {
 				return {
-					query: "erpnext.controllers.queries.customer_query"
-				}
+					query: "erpnext.controllers.queries.customer_query",
+				};
 			}
 		});
 
-		if(frm.doc.party) {
-			$.each(["party", "party_balance", "paid_from", "paid_to",
-				"paid_from_account_currency", "paid_from_account_balance",
-				"paid_to_account_currency", "paid_to_account_balance",
-				"references", "total_allocated_amount"],
-				function(i, field) {
+		if (frm.doc.party) {
+			$.each(
+				[
+					"party",
+					"party_balance",
+					"paid_from",
+					"paid_to",
+					"paid_from_account_currency",
+					"paid_from_account_balance",
+					"paid_to_account_currency",
+					"paid_to_account_balance",
+					"references",
+					"total_allocated_amount",
+				],
+				function (i, field) {
 					frm.set_value(field, null);
-				})
+				}
+			);
 		}
 	},
 
-	party: function(frm) {
+	party: function (frm) {
 		if (frm.doc.contact_email || frm.doc.contact_person) {
 			frm.set_value("contact_email", "");
 			frm.set_value("contact_person", "");
 		}
-		if(frm.doc.payment_type && frm.doc.party_type && frm.doc.party && frm.doc.company) {
-			if(!frm.doc.posting_date) {
-				frappe.msgprint(__("Please select Posting Date before selecting Party"))
+		if (frm.doc.payment_type && frm.doc.party_type && frm.doc.party && frm.doc.company) {
+			if (!frm.doc.posting_date) {
+				frappe.msgprint(__("Please select Posting Date before selecting Party"));
 				frm.set_value("party", "");
-				return ;
+				return;
 			}
 			frm.set_party_account_based_on_party = true;
 
@@ -354,19 +445,25 @@
 					party_type: frm.doc.party_type,
 					party: frm.doc.party,
 					date: frm.doc.posting_date,
-					cost_center: frm.doc.cost_center
+					cost_center: frm.doc.cost_center,
 				},
-				callback: function(r, rt) {
-					if(r.message) {
+				callback: function (r, rt) {
+					if (r.message) {
 						frappe.run_serially([
 							() => {
-								if(frm.doc.payment_type == "Receive") {
+								if (frm.doc.payment_type == "Receive") {
 									frm.set_value("paid_from", r.message.party_account);
-									frm.set_value("paid_from_account_currency", r.message.party_account_currency);
+									frm.set_value(
+										"paid_from_account_currency",
+										r.message.party_account_currency
+									);
 									frm.set_value("paid_from_account_balance", r.message.account_balance);
-								} else if (frm.doc.payment_type == "Pay"){
+								} else if (frm.doc.payment_type == "Pay") {
 									frm.set_value("paid_to", r.message.party_account);
-									frm.set_value("paid_to_account_currency", r.message.party_account_currency);
+									frm.set_value(
+										"paid_to_account_currency",
+										r.message.party_account_currency
+									);
 									frm.set_value("paid_to_account_balance", r.message.account_balance);
 								}
 							},
@@ -381,32 +478,46 @@
 									frm.set_value("bank_account", r.message.bank_account);
 								}
 							},
-							() => frm.events.set_current_exchange_rate(frm, "source_exchange_rate",
-									frm.doc.paid_from_account_currency, company_currency),
-							() => frm.events.set_current_exchange_rate(frm, "target_exchange_rate",
-									frm.doc.paid_to_account_currency, company_currency)
+							() =>
+								frm.events.set_current_exchange_rate(
+									frm,
+									"source_exchange_rate",
+									frm.doc.paid_from_account_currency,
+									company_currency
+								),
+							() =>
+								frm.events.set_current_exchange_rate(
+									frm,
+									"target_exchange_rate",
+									frm.doc.paid_to_account_currency,
+									company_currency
+								),
 						]);
 					}
-				}
+				},
 			});
 		}
 	},
 
-	apply_tax_withholding_amount: function(frm) {
+	apply_tax_withholding_amount: function (frm) {
 		if (!frm.doc.apply_tax_withholding_amount) {
-			frm.set_value("tax_withholding_category", '');
+			frm.set_value("tax_withholding_category", "");
 		} else {
-			frappe.db.get_value('Supplier', frm.doc.party, 'tax_withholding_category', (values) => {
+			frappe.db.get_value("Supplier", frm.doc.party, "tax_withholding_category", (values) => {
 				frm.set_value("tax_withholding_category", values.tax_withholding_category);
 			});
 		}
 	},
 
-	paid_from: function(frm) {
-		if(frm.set_party_account_based_on_party) return;
+	paid_from: function (frm) {
+		if (frm.set_party_account_based_on_party) return;
 
-		frm.events.set_account_currency_and_balance(frm, frm.doc.paid_from,
-			"paid_from_account_currency", "paid_from_account_balance", function(frm) {
+		frm.events.set_account_currency_and_balance(
+			frm,
+			frm.doc.paid_from,
+			"paid_from_account_currency",
+			"paid_from_account_balance",
+			function (frm) {
 				if (frm.doc.payment_type == "Pay") {
 					frm.events.paid_amount(frm);
 				}
@@ -414,18 +525,21 @@
 		);
 	},
 
-	paid_to: function(frm) {
-		if(frm.set_party_account_based_on_party) return;
+	paid_to: function (frm) {
+		if (frm.set_party_account_based_on_party) return;
 
-		frm.events.set_account_currency_and_balance(frm, frm.doc.paid_to,
-			"paid_to_account_currency", "paid_to_account_balance", function(frm) {
+		frm.events.set_account_currency_and_balance(
+			frm,
+			frm.doc.paid_to,
+			"paid_to_account_currency",
+			"paid_to_account_balance",
+			function (frm) {
 				if (frm.doc.payment_type == "Receive") {
-					if(frm.doc.paid_from_account_currency == frm.doc.paid_to_account_currency) {
-						if(frm.doc.source_exchange_rate) {
+					if (frm.doc.paid_from_account_currency == frm.doc.paid_to_account_currency) {
+						if (frm.doc.source_exchange_rate) {
 							frm.set_value("target_exchange_rate", frm.doc.source_exchange_rate);
 						}
 						frm.set_value("received_amount", frm.doc.paid_amount);
-
 					} else {
 						frm.events.received_amount(frm);
 					}
@@ -434,66 +548,85 @@
 		);
 	},
 
-	set_account_currency_and_balance: function(frm, account, currency_field,
-			balance_field, callback_function) {
-
+	set_account_currency_and_balance: function (
+		frm,
+		account,
+		currency_field,
+		balance_field,
+		callback_function
+	) {
 		var company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
 		if (frm.doc.posting_date && account) {
 			frappe.call({
 				method: "erpnext.accounts.doctype.payment_entry.payment_entry.get_account_details",
 				args: {
-					"account": account,
-					"date": frm.doc.posting_date,
-					"cost_center": frm.doc.cost_center
+					account: account,
+					date: frm.doc.posting_date,
+					cost_center: frm.doc.cost_center,
 				},
-				callback: function(r, rt) {
-					if(r.message) {
+				callback: function (r, rt) {
+					if (r.message) {
 						frappe.run_serially([
-							() => frm.set_value(currency_field, r.message['account_currency']),
+							() => frm.set_value(currency_field, r.message["account_currency"]),
 							() => {
-								frm.set_value(balance_field, r.message['account_balance']);
+								frm.set_value(balance_field, r.message["account_balance"]);
 
-								if(frm.doc.payment_type=="Receive" && currency_field=="paid_to_account_currency") {
-									frm.toggle_reqd(["reference_no", "reference_date"],
-										(r.message['account_type'] == "Bank" ? 1 : 0));
-									if(!frm.doc.received_amount && frm.doc.paid_amount)
+								if (
+									frm.doc.payment_type == "Receive" &&
+									currency_field == "paid_to_account_currency"
+								) {
+									frm.toggle_reqd(
+										["reference_no", "reference_date"],
+										r.message["account_type"] == "Bank" ? 1 : 0
+									);
+									if (!frm.doc.received_amount && frm.doc.paid_amount)
 										frm.events.paid_amount(frm);
-								} else if(frm.doc.payment_type=="Pay" && currency_field=="paid_from_account_currency") {
-									frm.toggle_reqd(["reference_no", "reference_date"],
-										(r.message['account_type'] == "Bank" ? 1 : 0));
+								} else if (
+									frm.doc.payment_type == "Pay" &&
+									currency_field == "paid_from_account_currency"
+								) {
+									frm.toggle_reqd(
+										["reference_no", "reference_date"],
+										r.message["account_type"] == "Bank" ? 1 : 0
+									);
 
-									if(!frm.doc.paid_amount && frm.doc.received_amount)
+									if (!frm.doc.paid_amount && frm.doc.received_amount)
 										frm.events.received_amount(frm);
 
-									if (frm.doc.paid_from_account_currency == frm.doc.paid_to_account_currency
-										&& frm.doc.paid_amount != frm.doc.received_amount) {
-											if (company_currency != frm.doc.paid_from_account_currency &&
-												frm.doc.payment_type == "Pay") {
-													frm.doc.paid_amount = frm.doc.received_amount;
-												}
+									if (
+										frm.doc.paid_from_account_currency ==
+											frm.doc.paid_to_account_currency &&
+										frm.doc.paid_amount != frm.doc.received_amount
+									) {
+										if (
+											company_currency != frm.doc.paid_from_account_currency &&
+											frm.doc.payment_type == "Pay"
+										) {
+											frm.doc.paid_amount = frm.doc.received_amount;
 										}
+									}
 								}
 							},
 							() => {
-								if(callback_function) callback_function(frm);
+								if (callback_function) callback_function(frm);
 
 								frm.events.hide_unhide_fields(frm);
 								frm.events.set_dynamic_labels(frm);
-							}
+							},
 						]);
 					}
-				}
+				},
 			});
 		}
 	},
 
-	paid_from_account_currency: function(frm) {
-		if(!frm.doc.paid_from_account_currency || !frm.doc.company) return;
+	paid_from_account_currency: function (frm) {
+		if (!frm.doc.paid_from_account_currency || !frm.doc.company) return;
 		let company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
 
 		if (frm.doc.paid_from_account_currency == company_currency) {
 			frm.set_value("source_exchange_rate", 1);
-		} else if (frm.doc.paid_from){
+		} else if (frm.doc.paid_from) {
 			if (in_list(["Internal Transfer", "Pay"], frm.doc.payment_type)) {
 				let company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
 				frappe.call({
@@ -501,52 +634,60 @@
 					args: {
 						from_currency: frm.doc.paid_from_account_currency,
 						to_currency: company_currency,
-						transaction_date: frm.doc.posting_date
+						transaction_date: frm.doc.posting_date,
 					},
-					callback: function(r, rt) {
+					callback: function (r, rt) {
 						frm.set_value("source_exchange_rate", r.message);
-					}
-				})
+					},
+				});
 			} else {
-				frm.events.set_current_exchange_rate(frm, "source_exchange_rate",
-					frm.doc.paid_from_account_currency, company_currency);
+				frm.events.set_current_exchange_rate(
+					frm,
+					"source_exchange_rate",
+					frm.doc.paid_from_account_currency,
+					company_currency
+				);
 			}
 		}
 	},
 
-	paid_to_account_currency: function(frm) {
-		if(!frm.doc.paid_to_account_currency || !frm.doc.company) return;
+	paid_to_account_currency: function (frm) {
+		if (!frm.doc.paid_to_account_currency || !frm.doc.company) return;
 		let company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
 
-		frm.events.set_current_exchange_rate(frm, "target_exchange_rate",
-			frm.doc.paid_to_account_currency, company_currency);
+		frm.events.set_current_exchange_rate(
+			frm,
+			"target_exchange_rate",
+			frm.doc.paid_to_account_currency,
+			company_currency
+		);
 	},
 
-	set_current_exchange_rate: function(frm, exchange_rate_field, from_currency, to_currency) {
+	set_current_exchange_rate: function (frm, exchange_rate_field, from_currency, to_currency) {
 		frappe.call({
 			method: "erpnext.setup.utils.get_exchange_rate",
 			args: {
 				transaction_date: frm.doc.posting_date,
 				from_currency: from_currency,
-				to_currency: to_currency
+				to_currency: to_currency,
 			},
-			callback: function(r, rt) {
+			callback: function (r, rt) {
 				const ex_rate = flt(r.message, frm.get_field(exchange_rate_field).get_precision());
 				frm.set_value(exchange_rate_field, ex_rate);
-			}
-		})
+			},
+		});
 	},
 
-	posting_date: function(frm) {
+	posting_date: function (frm) {
 		frm.events.paid_from_account_currency(frm);
 	},
 
-	source_exchange_rate: function(frm) {
+	source_exchange_rate: function (frm) {
 		let company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
 		if (frm.doc.paid_amount) {
 			frm.set_value("base_paid_amount", flt(frm.doc.paid_amount) * flt(frm.doc.source_exchange_rate));
 			// target exchange rate should always be same as source if both account currencies is same
-			if(frm.doc.paid_from_account_currency == frm.doc.paid_to_account_currency) {
+			if (frm.doc.paid_from_account_currency == frm.doc.paid_to_account_currency) {
 				frm.set_value("target_exchange_rate", frm.doc.source_exchange_rate);
 				frm.set_value("base_received_amount", frm.doc.base_paid_amount);
 			} else if (company_currency == frm.doc.paid_to_account_currency) {
@@ -563,16 +704,20 @@
 		frm.set_df_property("source_exchange_rate", "read_only", erpnext.stale_rate_allowed() ? 0 : 1);
 	},
 
-	target_exchange_rate: function(frm) {
+	target_exchange_rate: function (frm) {
 		frm.set_paid_amount_based_on_received_amount = true;
 		let company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
 
 		if (frm.doc.received_amount) {
-			frm.set_value("base_received_amount",
-				flt(frm.doc.received_amount) * flt(frm.doc.target_exchange_rate));
+			frm.set_value(
+				"base_received_amount",
+				flt(frm.doc.received_amount) * flt(frm.doc.target_exchange_rate)
+			);
 
-			if(!frm.doc.source_exchange_rate &&
-					(frm.doc.paid_from_account_currency == frm.doc.paid_to_account_currency)) {
+			if (
+				!frm.doc.source_exchange_rate &&
+				frm.doc.paid_from_account_currency == frm.doc.paid_to_account_currency
+			) {
 				frm.set_value("source_exchange_rate", frm.doc.target_exchange_rate);
 				frm.set_value("base_paid_amount", frm.doc.base_received_amount);
 			} else if (company_currency == frm.doc.paid_from_account_currency) {
@@ -590,125 +735,148 @@
 		frm.set_df_property("target_exchange_rate", "read_only", erpnext.stale_rate_allowed() ? 0 : 1);
 	},
 
-	paid_amount: function(frm) {
+	paid_amount: function (frm) {
 		frm.set_value("base_paid_amount", flt(frm.doc.paid_amount) * flt(frm.doc.source_exchange_rate));
 		frm.trigger("reset_received_amount");
 		frm.events.hide_unhide_fields(frm);
 	},
 
-	received_amount: function(frm) {
+	received_amount: function (frm) {
 		frm.set_paid_amount_based_on_received_amount = true;
 
-		if(!frm.doc.paid_amount && frm.doc.paid_from_account_currency == frm.doc.paid_to_account_currency) {
+		if (!frm.doc.paid_amount && frm.doc.paid_from_account_currency == frm.doc.paid_to_account_currency) {
 			frm.set_value("paid_amount", frm.doc.received_amount);
 
-			if(frm.doc.target_exchange_rate) {
+			if (frm.doc.target_exchange_rate) {
 				frm.set_value("source_exchange_rate", frm.doc.target_exchange_rate);
 			}
 			frm.set_value("base_paid_amount", frm.doc.base_received_amount);
 		}
 
-		frm.set_value("base_received_amount",
-			flt(frm.doc.received_amount) * flt(frm.doc.target_exchange_rate));
+		frm.set_value(
+			"base_received_amount",
+			flt(frm.doc.received_amount) * flt(frm.doc.target_exchange_rate)
+		);
 
-		if(frm.doc.payment_type == "Pay")
+		if (frm.doc.payment_type == "Pay")
 			frm.events.allocate_party_amount_against_ref_docs(frm, frm.doc.received_amount, 1);
-		else
-			frm.events.set_unallocated_amount(frm);
+		else frm.events.set_unallocated_amount(frm);
 
 		frm.set_paid_amount_based_on_received_amount = false;
 		frm.events.hide_unhide_fields(frm);
 	},
 
-	reset_received_amount: function(frm) {
-		if(!frm.set_paid_amount_based_on_received_amount &&
-				(frm.doc.paid_from_account_currency == frm.doc.paid_to_account_currency)) {
-
+	reset_received_amount: function (frm) {
+		if (
+			!frm.set_paid_amount_based_on_received_amount &&
+			frm.doc.paid_from_account_currency == frm.doc.paid_to_account_currency
+		) {
 			frm.set_value("received_amount", frm.doc.paid_amount);
 
-			if(frm.doc.source_exchange_rate) {
+			if (frm.doc.source_exchange_rate) {
 				frm.set_value("target_exchange_rate", frm.doc.source_exchange_rate);
 			}
 			frm.set_value("base_received_amount", frm.doc.base_paid_amount);
 		}
 
-		if(frm.doc.payment_type == "Receive")
+		if (frm.doc.payment_type == "Receive")
 			frm.events.allocate_party_amount_against_ref_docs(frm, frm.doc.paid_amount, 1);
-		else
-			frm.events.set_unallocated_amount(frm);
+		else frm.events.set_unallocated_amount(frm);
 	},
 
-	get_outstanding_invoices_or_orders: function(frm, get_outstanding_invoices, get_orders_to_be_billed) {
+	get_outstanding_invoices_or_orders: function (frm, get_outstanding_invoices, get_orders_to_be_billed) {
 		const today = frappe.datetime.get_today();
 		let fields = [
-			{fieldtype:"Section Break", label: __("Posting Date")},
-			{fieldtype:"Date", label: __("From Date"),
-				fieldname:"from_posting_date", default:frappe.datetime.add_days(today, -30)},
-			{fieldtype:"Column Break"},
-			{fieldtype:"Date", label: __("To Date"), fieldname:"to_posting_date", default:today},
-			{fieldtype:"Section Break", label: __("Due Date")},
-			{fieldtype:"Date", label: __("From Date"), fieldname:"from_due_date"},
-			{fieldtype:"Column Break"},
-			{fieldtype:"Date", label: __("To Date"), fieldname:"to_due_date"},
-			{fieldtype:"Section Break", label: __("Outstanding Amount")},
-			{fieldtype:"Float", label: __("Greater Than Amount"),
-				fieldname:"outstanding_amt_greater_than", default: 0},
-			{fieldtype:"Column Break"},
-			{fieldtype:"Float", label: __("Less Than Amount"), fieldname:"outstanding_amt_less_than"},
+			{ fieldtype: "Section Break", label: __("Posting Date") },
+			{
+				fieldtype: "Date",
+				label: __("From Date"),
+				fieldname: "from_posting_date",
+				default: frappe.datetime.add_days(today, -30),
+			},
+			{ fieldtype: "Column Break" },
+			{ fieldtype: "Date", label: __("To Date"), fieldname: "to_posting_date", default: today },
+			{ fieldtype: "Section Break", label: __("Due Date") },
+			{ fieldtype: "Date", label: __("From Date"), fieldname: "from_due_date" },
+			{ fieldtype: "Column Break" },
+			{ fieldtype: "Date", label: __("To Date"), fieldname: "to_due_date" },
+			{ fieldtype: "Section Break", label: __("Outstanding Amount") },
+			{
+				fieldtype: "Float",
+				label: __("Greater Than Amount"),
+				fieldname: "outstanding_amt_greater_than",
+				default: 0,
+			},
+			{ fieldtype: "Column Break" },
+			{ fieldtype: "Float", label: __("Less Than Amount"), fieldname: "outstanding_amt_less_than" },
 		];
 
 		if (frm.dimension_filters) {
-			let column_break_insertion_point = Math.ceil((frm.dimension_filters.length)/2);
+			let column_break_insertion_point = Math.ceil(frm.dimension_filters.length / 2);
 
-			fields.push({fieldtype:"Section Break"});
-			frm.dimension_filters.map((elem, idx)=>{
+			fields.push({ fieldtype: "Section Break" });
+			frm.dimension_filters.map((elem, idx) => {
 				fields.push({
 					fieldtype: "Link",
 					label: elem.document_type == "Cost Center" ? "Cost Center" : elem.label,
 					options: elem.document_type,
-					fieldname: elem.fieldname || elem.document_type
+					fieldname: elem.fieldname || elem.document_type,
 				});
-				if(idx+1 == column_break_insertion_point) {
-					fields.push({fieldtype:"Column Break"});
+				if (idx + 1 == column_break_insertion_point) {
+					fields.push({ fieldtype: "Column Break" });
 				}
 			});
 		}
 
 		fields = fields.concat([
-			{fieldtype:"Section Break"},
-			{fieldtype:"Check", label: __("Allocate Payment Amount"), fieldname:"allocate_payment_amount", default:1},
+			{ fieldtype: "Section Break" },
+			{
+				fieldtype: "Check",
+				label: __("Allocate Payment Amount"),
+				fieldname: "allocate_payment_amount",
+				default: 1,
+			},
 		]);
 
 		let btn_text = "";
 
 		if (get_outstanding_invoices) {
 			btn_text = "Get Outstanding Invoices";
-		}
-		else if (get_orders_to_be_billed) {
+		} else if (get_orders_to_be_billed) {
 			btn_text = "Get Outstanding Orders";
 		}
 
-		frappe.prompt(fields, function(filters){
-			frappe.flags.allocate_payment_amount = true;
-			frm.events.validate_filters_data(frm, filters);
-			frm.doc.cost_center = filters.cost_center;
-			frm.events.get_outstanding_documents(frm, filters, get_outstanding_invoices, get_orders_to_be_billed);
-		}, __("Filters"), __(btn_text));
+		frappe.prompt(
+			fields,
+			function (filters) {
+				frappe.flags.allocate_payment_amount = true;
+				frm.events.validate_filters_data(frm, filters);
+				frm.doc.cost_center = filters.cost_center;
+				frm.events.get_outstanding_documents(
+					frm,
+					filters,
+					get_outstanding_invoices,
+					get_orders_to_be_billed
+				);
+			},
+			__("Filters"),
+			__(btn_text)
+		);
 	},
 
-	get_outstanding_invoices: function(frm) {
+	get_outstanding_invoices: function (frm) {
 		frm.events.get_outstanding_invoices_or_orders(frm, true, false);
 	},
 
-	get_outstanding_orders: function(frm) {
+	get_outstanding_orders: function (frm) {
 		frm.events.get_outstanding_invoices_or_orders(frm, false, true);
 	},
 
-	validate_filters_data: function(frm, filters) {
+	validate_filters_data: function (frm, filters) {
 		const fields = {
-			'Posting Date': ['from_posting_date', 'to_posting_date'],
-			'Due Date': ['from_posting_date', 'to_posting_date'],
-			'Advance Amount': ['from_posting_date', 'to_posting_date'],
+			"Posting Date": ["from_posting_date", "to_posting_date"],
+			"Due Date": ["from_posting_date", "to_posting_date"],
+			"Advance Amount": ["from_posting_date", "to_posting_date"],
 		};
 
 		for (let key in fields) {
@@ -716,21 +884,23 @@
 			let to_field = fields[key][1];
 
 			if (filters[from_field] && !filters[to_field]) {
-				frappe.throw(
-					__("Error: {0} is mandatory field", [to_field.replace(/_/g, " ")])
-				);
+				frappe.throw(__("Error: {0} is mandatory field", [to_field.replace(/_/g, " ")]));
 			} else if (filters[from_field] && filters[from_field] > filters[to_field]) {
 				frappe.throw(
-					__("{0}: {1} must be less than {2}", [key, from_field.replace(/_/g, " "), to_field.replace(/_/g, " ")])
+					__("{0}: {1} must be less than {2}", [
+						key,
+						from_field.replace(/_/g, " "),
+						to_field.replace(/_/g, " "),
+					])
 				);
 			}
 		}
 	},
 
-	get_outstanding_documents: function(frm, filters, get_outstanding_invoices, get_orders_to_be_billed) {
+	get_outstanding_documents: function (frm, filters, get_outstanding_invoices, get_orders_to_be_billed) {
 		frm.clear_table("references");
 
-		if(!frm.doc.party) {
+		if (!frm.doc.party) {
 			return;
 		}
 
@@ -738,14 +908,14 @@
 		var company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
 
 		var args = {
-			"posting_date": frm.doc.posting_date,
-			"company": frm.doc.company,
-			"party_type": frm.doc.party_type,
-			"payment_type": frm.doc.payment_type,
-			"party": frm.doc.party,
-			"party_account": frm.doc.payment_type=="Receive" ? frm.doc.paid_from : frm.doc.paid_to,
-			"cost_center": frm.doc.cost_center
-		}
+			posting_date: frm.doc.posting_date,
+			company: frm.doc.company,
+			party_type: frm.doc.party_type,
+			payment_type: frm.doc.payment_type,
+			party: frm.doc.party,
+			party_account: frm.doc.payment_type == "Receive" ? frm.doc.paid_from : frm.doc.paid_to,
+			cost_center: frm.doc.cost_center,
+		};
 
 		for (let key in filters) {
 			args[key] = filters[key];
@@ -753,8 +923,7 @@
 
 		if (get_outstanding_invoices) {
 			args["get_outstanding_invoices"] = true;
-		}
-		else if (get_orders_to_be_billed) {
+		} else if (get_orders_to_be_billed) {
 			args["get_orders_to_be_billed"] = true;
 		}
 
@@ -762,22 +931,22 @@
 			args["book_advance_payments_in_separate_party_account"] = true;
 		}
 
-		frappe.flags.allocate_payment_amount = filters['allocate_payment_amount'];
+		frappe.flags.allocate_payment_amount = filters["allocate_payment_amount"];
 
-		return  frappe.call({
-			method: 'erpnext.accounts.doctype.payment_entry.payment_entry.get_outstanding_reference_documents',
+		return frappe.call({
+			method: "erpnext.accounts.doctype.payment_entry.payment_entry.get_outstanding_reference_documents",
 			args: {
-				args:args
+				args: args,
 			},
-			callback: function(r, rt) {
-				if(r.message) {
+			callback: function (r, rt) {
+				if (r.message) {
 					var total_positive_outstanding = 0;
 					var total_negative_outstanding = 0;
-					$.each(r.message, function(i, d) {
+					$.each(r.message, function (i, d) {
 						var c = frm.add_child("references");
 						c.reference_doctype = d.voucher_type;
 						c.reference_name = d.voucher_no;
-						c.due_date = d.due_date
+						c.due_date = d.due_date;
 						c.total_amount = d.invoice_amount;
 						c.outstanding_amount = d.outstanding_amount;
 						c.bill_no = d.bill_no;
@@ -785,135 +954,157 @@
 						c.allocated_amount = d.allocated_amount;
 						c.account = d.account;
 
-						if(!in_list(frm.events.get_order_doctypes(frm), d.voucher_type)) {
-							if(flt(d.outstanding_amount) > 0)
+						if (!in_list(frm.events.get_order_doctypes(frm), d.voucher_type)) {
+							if (flt(d.outstanding_amount) > 0)
 								total_positive_outstanding += flt(d.outstanding_amount);
-							else
-								total_negative_outstanding += Math.abs(flt(d.outstanding_amount));
+							else total_negative_outstanding += Math.abs(flt(d.outstanding_amount));
 						}
 
-						var party_account_currency = frm.doc.payment_type=="Receive" ?
-							frm.doc.paid_from_account_currency : frm.doc.paid_to_account_currency;
+						var party_account_currency =
+							frm.doc.payment_type == "Receive"
+								? frm.doc.paid_from_account_currency
+								: frm.doc.paid_to_account_currency;
 
-						if(party_account_currency != company_currency) {
+						if (party_account_currency != company_currency) {
 							c.exchange_rate = d.exchange_rate;
 						} else {
 							c.exchange_rate = 1;
 						}
-						if (in_list(frm.events.get_invoice_doctypes(frm), d.reference_doctype)){
+						if (in_list(frm.events.get_invoice_doctypes(frm), d.reference_doctype)) {
 							c.due_date = d.due_date;
 						}
 					});
 
-					if(
-						(frm.doc.payment_type=="Receive" && frm.doc.party_type=="Customer") ||
-						(frm.doc.payment_type=="Pay" && frm.doc.party_type=="Supplier")  ||
-						(frm.doc.payment_type=="Pay" && frm.doc.party_type=="Employee")
+					if (
+						(frm.doc.payment_type == "Receive" && frm.doc.party_type == "Customer") ||
+						(frm.doc.payment_type == "Pay" && frm.doc.party_type == "Supplier") ||
+						(frm.doc.payment_type == "Pay" && frm.doc.party_type == "Employee")
 					) {
-						if(total_positive_outstanding > total_negative_outstanding)
+						if (total_positive_outstanding > total_negative_outstanding)
 							if (!frm.doc.paid_amount)
-								frm.set_value("paid_amount",
-									total_positive_outstanding - total_negative_outstanding);
+								frm.set_value(
+									"paid_amount",
+									total_positive_outstanding - total_negative_outstanding
+								);
 					} else if (
 						total_negative_outstanding &&
 						total_positive_outstanding < total_negative_outstanding
 					) {
 						if (!frm.doc.received_amount)
-							frm.set_value("received_amount",
-								total_negative_outstanding - total_positive_outstanding);
+							frm.set_value(
+								"received_amount",
+								total_negative_outstanding - total_positive_outstanding
+							);
 					}
 				}
 
-				frm.events.allocate_party_amount_against_ref_docs(frm,
-					(frm.doc.payment_type=="Receive" ? frm.doc.paid_amount : frm.doc.received_amount));
-
-			}
+				frm.events.allocate_party_amount_against_ref_docs(
+					frm,
+					frm.doc.payment_type == "Receive" ? frm.doc.paid_amount : frm.doc.received_amount
+				);
+			},
 		});
 	},
 
-	get_order_doctypes: function(frm) {
+	get_order_doctypes: function (frm) {
 		return ["Sales Order", "Purchase Order"];
 	},
 
-	get_invoice_doctypes: function(frm) {
+	get_invoice_doctypes: function (frm) {
 		return ["Sales Invoice", "Purchase Invoice"];
 	},
 
-	allocate_party_amount_against_ref_docs: function(frm, paid_amount, paid_amount_change) {
+	allocate_party_amount_against_ref_docs: function (frm, paid_amount, paid_amount_change) {
 		var total_positive_outstanding_including_order = 0;
 		var total_negative_outstanding = 0;
-		var total_deductions = frappe.utils.sum($.map(frm.doc.deductions || [],
-			function(d) { return flt(d.amount) }));
+		var total_deductions = frappe.utils.sum(
+			$.map(frm.doc.deductions || [], function (d) {
+				return flt(d.amount);
+			})
+		);
 
 		paid_amount -= total_deductions;
 
-		$.each(frm.doc.references || [], function(i, row) {
-			if(flt(row.outstanding_amount) > 0)
+		$.each(frm.doc.references || [], function (i, row) {
+			if (flt(row.outstanding_amount) > 0)
 				total_positive_outstanding_including_order += flt(row.outstanding_amount);
-			else
-				total_negative_outstanding += Math.abs(flt(row.outstanding_amount));
-		})
+			else total_negative_outstanding += Math.abs(flt(row.outstanding_amount));
+		});
 
 		var allocated_negative_outstanding = 0;
 		if (
-				(frm.doc.payment_type=="Receive" && frm.doc.party_type=="Customer") ||
-				(frm.doc.payment_type=="Pay" && frm.doc.party_type=="Supplier") ||
-				(frm.doc.payment_type=="Pay" && frm.doc.party_type=="Employee")
-			) {
-				if(total_positive_outstanding_including_order > paid_amount) {
-					var remaining_outstanding = total_positive_outstanding_including_order - paid_amount;
-					allocated_negative_outstanding = total_negative_outstanding < remaining_outstanding ?
-						total_negative_outstanding : remaining_outstanding;
+			(frm.doc.payment_type == "Receive" && frm.doc.party_type == "Customer") ||
+			(frm.doc.payment_type == "Pay" && frm.doc.party_type == "Supplier") ||
+			(frm.doc.payment_type == "Pay" && frm.doc.party_type == "Employee")
+		) {
+			if (total_positive_outstanding_including_order > paid_amount) {
+				var remaining_outstanding = total_positive_outstanding_including_order - paid_amount;
+				allocated_negative_outstanding =
+					total_negative_outstanding < remaining_outstanding
+						? total_negative_outstanding
+						: remaining_outstanding;
 			}
 
-			var allocated_positive_outstanding =  paid_amount + allocated_negative_outstanding;
+			var allocated_positive_outstanding = paid_amount + allocated_negative_outstanding;
 		} else if (in_list(["Customer", "Supplier"], frm.doc.party_type)) {
-			total_negative_outstanding = flt(total_negative_outstanding, precision("outstanding_amount"))
-			if(paid_amount > total_negative_outstanding) {
-				if(total_negative_outstanding == 0) {
+			total_negative_outstanding = flt(total_negative_outstanding, precision("outstanding_amount"));
+			if (paid_amount > total_negative_outstanding) {
+				if (total_negative_outstanding == 0) {
 					frappe.msgprint(
-						__("Cannot {0} {1} {2} without any negative outstanding invoice", [frm.doc.payment_type,
-							(frm.doc.party_type=="Customer" ? "to" : "from"), frm.doc.party_type])
+						__("Cannot {0} {1} {2} without any negative outstanding invoice", [
+							frm.doc.payment_type,
+							frm.doc.party_type == "Customer" ? "to" : "from",
+							frm.doc.party_type,
+						])
 					);
-					return false
+					return false;
 				} else {
 					frappe.msgprint(
-						__("Paid Amount cannot be greater than total negative outstanding amount {0}", [total_negative_outstanding])
+						__("Paid Amount cannot be greater than total negative outstanding amount {0}", [
+							total_negative_outstanding,
+						])
 					);
 					return false;
 				}
 			} else {
 				allocated_positive_outstanding = total_negative_outstanding - paid_amount;
-				allocated_negative_outstanding = paid_amount +
-					(total_positive_outstanding_including_order < allocated_positive_outstanding ?
-						total_positive_outstanding_including_order : allocated_positive_outstanding)
+				allocated_negative_outstanding =
+					paid_amount +
+					(total_positive_outstanding_including_order < allocated_positive_outstanding
+						? total_positive_outstanding_including_order
+						: allocated_positive_outstanding);
 			}
 		}
 
-		$.each(frm.doc.references || [], function(i, row) {
+		$.each(frm.doc.references || [], function (i, row) {
 			if (frappe.flags.allocate_payment_amount == 0) {
 				//If allocate payment amount checkbox is unchecked, set zero to allocate amount
 				row.allocated_amount = 0;
-
-			} else if (frappe.flags.allocate_payment_amount != 0 && (!row.allocated_amount || paid_amount_change)) {
+			} else if (
+				frappe.flags.allocate_payment_amount != 0 &&
+				(!row.allocated_amount || paid_amount_change)
+			) {
 				if (row.outstanding_amount > 0 && allocated_positive_outstanding >= 0) {
-					row.allocated_amount = (row.outstanding_amount >= allocated_positive_outstanding) ?
-						allocated_positive_outstanding : row.outstanding_amount;
+					row.allocated_amount =
+						row.outstanding_amount >= allocated_positive_outstanding
+							? allocated_positive_outstanding
+							: row.outstanding_amount;
 					allocated_positive_outstanding -= flt(row.allocated_amount);
-
 				} else if (row.outstanding_amount < 0 && allocated_negative_outstanding) {
-					row.allocated_amount = (Math.abs(row.outstanding_amount) >= allocated_negative_outstanding) ?
-						-1*allocated_negative_outstanding : row.outstanding_amount;
+					row.allocated_amount =
+						Math.abs(row.outstanding_amount) >= allocated_negative_outstanding
+							? -1 * allocated_negative_outstanding
+							: row.outstanding_amount;
 					allocated_negative_outstanding -= Math.abs(flt(row.allocated_amount));
 				}
 			}
-		})
+		});
 
-		frm.refresh_fields()
+		frm.refresh_fields();
 		frm.events.set_total_allocated_amount(frm);
 	},
 
-	set_total_allocated_amount: function(frm) {
+	set_total_allocated_amount: function (frm) {
 		let exchange_rate = 1;
 		if (frm.doc.payment_type == "Receive") {
 			exchange_rate = frm.doc.source_exchange_rate;
@@ -922,11 +1113,13 @@
 		}
 		var total_allocated_amount = 0.0;
 		var base_total_allocated_amount = 0.0;
-		$.each(frm.doc.references || [], function(i, row) {
+		$.each(frm.doc.references || [], function (i, row) {
 			if (row.allocated_amount) {
 				total_allocated_amount += flt(row.allocated_amount);
-				base_total_allocated_amount += flt(flt(row.allocated_amount)*flt(exchange_rate),
-					precision("base_paid_amount"));
+				base_total_allocated_amount += flt(
+					flt(row.allocated_amount) * flt(exchange_rate),
+					precision("base_paid_amount")
+				);
 			}
 		});
 		frm.set_value("total_allocated_amount", Math.abs(total_allocated_amount));
@@ -935,36 +1128,53 @@
 		frm.events.set_unallocated_amount(frm);
 	},
 
-	set_unallocated_amount: function(frm) {
+	set_unallocated_amount: function (frm) {
 		var unallocated_amount = 0;
-		var total_deductions = frappe.utils.sum($.map(frm.doc.deductions || [],
-			function(d) { return flt(d.amount) }));
+		var total_deductions = frappe.utils.sum(
+			$.map(frm.doc.deductions || [], function (d) {
+				return flt(d.amount);
+			})
+		);
 
-		if(frm.doc.party) {
-			if(frm.doc.payment_type == "Receive"
-				&& frm.doc.base_total_allocated_amount < frm.doc.base_received_amount + total_deductions
-				&& frm.doc.total_allocated_amount < frm.doc.paid_amount + (total_deductions / frm.doc.source_exchange_rate)) {
-					unallocated_amount = (frm.doc.base_received_amount + total_deductions - flt(frm.doc.base_total_taxes_and_charges)
-						- frm.doc.base_total_allocated_amount) / frm.doc.source_exchange_rate;
-			} else if (frm.doc.payment_type == "Pay"
-				&& frm.doc.base_total_allocated_amount < frm.doc.base_paid_amount - total_deductions
-				&& frm.doc.total_allocated_amount < frm.doc.received_amount + (total_deductions / frm.doc.target_exchange_rate)) {
-					unallocated_amount = (frm.doc.base_paid_amount + flt(frm.doc.base_total_taxes_and_charges) - (total_deductions
-						+ frm.doc.base_total_allocated_amount)) / frm.doc.target_exchange_rate;
+		if (frm.doc.party) {
+			if (
+				frm.doc.payment_type == "Receive" &&
+				frm.doc.base_total_allocated_amount < frm.doc.base_received_amount + total_deductions &&
+				frm.doc.total_allocated_amount <
+					frm.doc.paid_amount + total_deductions / frm.doc.source_exchange_rate
+			) {
+				unallocated_amount =
+					(frm.doc.base_received_amount +
+						total_deductions -
+						flt(frm.doc.base_total_taxes_and_charges) -
+						frm.doc.base_total_allocated_amount) /
+					frm.doc.source_exchange_rate;
+			} else if (
+				frm.doc.payment_type == "Pay" &&
+				frm.doc.base_total_allocated_amount < frm.doc.base_paid_amount - total_deductions &&
+				frm.doc.total_allocated_amount <
+					frm.doc.received_amount + total_deductions / frm.doc.target_exchange_rate
+			) {
+				unallocated_amount =
+					(frm.doc.base_paid_amount +
+						flt(frm.doc.base_total_taxes_and_charges) -
+						(total_deductions + frm.doc.base_total_allocated_amount)) /
+					frm.doc.target_exchange_rate;
 			}
 		}
 		frm.set_value("unallocated_amount", unallocated_amount);
 		frm.trigger("set_difference_amount");
 	},
 
-	set_difference_amount: function(frm) {
+	set_difference_amount: function (frm) {
 		var difference_amount = 0;
-		var base_unallocated_amount = flt(frm.doc.unallocated_amount) *
-			(frm.doc.payment_type=="Receive" ? frm.doc.source_exchange_rate : frm.doc.target_exchange_rate);
+		var base_unallocated_amount =
+			flt(frm.doc.unallocated_amount) *
+			(frm.doc.payment_type == "Receive" ? frm.doc.source_exchange_rate : frm.doc.target_exchange_rate);
 
 		var base_party_amount = flt(frm.doc.base_total_allocated_amount) + base_unallocated_amount;
 
-		if(frm.doc.payment_type == "Receive") {
+		if (frm.doc.payment_type == "Receive") {
 			difference_amount = base_party_amount - flt(frm.doc.base_received_amount);
 		} else if (frm.doc.payment_type == "Pay") {
 			difference_amount = flt(frm.doc.base_paid_amount) - base_party_amount;
@@ -972,51 +1182,67 @@
 			difference_amount = flt(frm.doc.base_paid_amount) - flt(frm.doc.base_received_amount);
 		}
 
-		var total_deductions = frappe.utils.sum($.map(frm.doc.deductions || [],
-			function(d) { return flt(d.amount) }));
+		var total_deductions = frappe.utils.sum(
+			$.map(frm.doc.deductions || [], function (d) {
+				return flt(d.amount);
+			})
+		);
 
-		frm.set_value("difference_amount", difference_amount - total_deductions +
-			flt(frm.doc.base_total_taxes_and_charges));
+		frm.set_value(
+			"difference_amount",
+			difference_amount - total_deductions + flt(frm.doc.base_total_taxes_and_charges)
+		);
 
 		frm.events.hide_unhide_fields(frm);
 	},
 
-	unallocated_amount: function(frm) {
+	unallocated_amount: function (frm) {
 		frm.trigger("set_difference_amount");
 	},
 
-	check_mandatory_to_fetch: function(frm) {
-		$.each(["Company", "Party Type", "Party", "payment_type"], function(i, field) {
-			if(!frm.doc[frappe.model.scrub(field)]) {
+	check_mandatory_to_fetch: function (frm) {
+		$.each(["Company", "Party Type", "Party", "payment_type"], function (i, field) {
+			if (!frm.doc[frappe.model.scrub(field)]) {
 				frappe.msgprint(__("Please select {0} first", [field]));
 				return false;
 			}
-
 		});
 	},
 
-	validate_reference_document: function(frm, row) {
-		var _validate = function(i, row) {
+	validate_reference_document: function (frm, row) {
+		var _validate = function (i, row) {
 			if (!row.reference_doctype) {
 				return;
 			}
 
-			if(frm.doc.party_type=="Customer" &&
+			if (
+				frm.doc.party_type == "Customer" &&
 				!in_list(["Sales Order", "Sales Invoice", "Journal Entry", "Dunning"], row.reference_doctype)
 			) {
 				frappe.model.set_value(row.doctype, row.name, "reference_doctype", null);
-				frappe.msgprint(__("Row #{0}: Reference Document Type must be one of Sales Order, Sales Invoice, Journal Entry or Dunning", [row.idx]));
+				frappe.msgprint(
+					__(
+						"Row #{0}: Reference Document Type must be one of Sales Order, Sales Invoice, Journal Entry or Dunning",
+						[row.idx]
+					)
+				);
 				return false;
 			}
 
-			if(frm.doc.party_type=="Supplier" &&
+			if (
+				frm.doc.party_type == "Supplier" &&
 				!in_list(["Purchase Order", "Purchase Invoice", "Journal Entry"], row.reference_doctype)
 			) {
 				frappe.model.set_value(row.doctype, row.name, "against_voucher_type", null);
-				frappe.msgprint(__("Row #{0}: Reference Document Type must be one of Purchase Order, Purchase Invoice or Journal Entry", [row.idx]));
+				frappe.msgprint(
+					__(
+						"Row #{0}: Reference Document Type must be one of Purchase Order, Purchase Invoice or Journal Entry",
+						[row.idx]
+					)
+				);
 				return false;
 			}
-		}
+		};
 
 		if (row) {
 			_validate(0, row);
@@ -1025,28 +1251,31 @@
 		}
 	},
 
-	write_off_difference_amount: function(frm) {
+	write_off_difference_amount: function (frm) {
 		frm.events.set_deductions_entry(frm, "write_off_account");
 	},
 
-	set_exchange_gain_loss: function(frm) {
+	set_exchange_gain_loss: function (frm) {
 		frm.events.set_deductions_entry(frm, "exchange_gain_loss_account");
 	},
 
-	set_deductions_entry: function(frm, account) {
-		if(frm.doc.difference_amount) {
+	set_deductions_entry: function (frm, account) {
+		if (frm.doc.difference_amount) {
 			frappe.call({
 				method: "erpnext.accounts.doctype.payment_entry.payment_entry.get_company_defaults",
 				args: {
-					company: frm.doc.company
+					company: frm.doc.company,
 				},
-				callback: function(r, rt) {
-					if(r.message) {
-						const write_off_row = $.map(frm.doc["deductions"] || [], function(t) {
-							return t.account==r.message[account] ? t : null; });
+				callback: function (r, rt) {
+					if (r.message) {
+						const write_off_row = $.map(frm.doc["deductions"] || [], function (t) {
+							return t.account == r.message[account] ? t : null;
+						});
 
-						const difference_amount = flt(frm.doc.difference_amount,
-							precision("difference_amount"));
+						const difference_amount = flt(
+							frm.doc.difference_amount,
+							precision("difference_amount")
+						);
 
 						const add_deductions = (details) => {
 							let row = null;
@@ -1061,73 +1290,77 @@
 							if (row) {
 								row.amount = flt(row.amount) + difference_amount;
 							} else {
-								frappe.msgprint(__("No gain or loss in the exchange rate"))
+								frappe.msgprint(__("No gain or loss in the exchange rate"));
 							}
 							refresh_field("deductions");
 						};
 
 						if (!r.message[account]) {
-							frappe.prompt({
-								label: __("Please Specify Account"),
-								fieldname: account,
-								fieldtype: "Link",
-								options: "Account",
-								get_query: () => ({
-									filters: {
-										company: frm.doc.company,
-									}
-								})
-							}, (values) => {
-								const details = Object.assign({}, r.message, values);
-								add_deductions(details);
-							}, __(frappe.unscrub(account)));
+							frappe.prompt(
+								{
+									label: __("Please Specify Account"),
+									fieldname: account,
+									fieldtype: "Link",
+									options: "Account",
+									get_query: () => ({
+										filters: {
+											company: frm.doc.company,
+										},
+									}),
+								},
+								(values) => {
+									const details = Object.assign({}, r.message, values);
+									add_deductions(details);
+								},
+								__(frappe.unscrub(account))
+							);
 						} else {
 							add_deductions(r.message);
 						}
 
 						frm.events.set_unallocated_amount(frm);
 					}
-				}
-			})
-		}
-	},
-
-	bank_account: function(frm) {
-		const field = frm.doc.payment_type == "Pay" ? "paid_from":"paid_to";
-		if (frm.doc.bank_account && in_list(['Pay', 'Receive'], frm.doc.payment_type)) {
-			frappe.call({
-				method: "erpnext.accounts.doctype.bank_account.bank_account.get_bank_account_details",
-				args: {
-					bank_account: frm.doc.bank_account
 				},
-				callback: function(r) {
-					if (r.message) {
-						frm.set_value(field, r.message.account);
-						frm.set_value('bank', r.message.bank);
-						frm.set_value('bank_account_no', r.message.bank_account_no);
-					}
-				}
 			});
 		}
 	},
 
-	sales_taxes_and_charges_template: function(frm) {
-		frm.trigger('fetch_taxes_from_template');
+	bank_account: function (frm) {
+		const field = frm.doc.payment_type == "Pay" ? "paid_from" : "paid_to";
+		if (frm.doc.bank_account && in_list(["Pay", "Receive"], frm.doc.payment_type)) {
+			frappe.call({
+				method: "erpnext.accounts.doctype.bank_account.bank_account.get_bank_account_details",
+				args: {
+					bank_account: frm.doc.bank_account,
+				},
+				callback: function (r) {
+					if (r.message) {
+						frm.set_value(field, r.message.account);
+						frm.set_value("bank", r.message.bank);
+						frm.set_value("bank_account_no", r.message.bank_account_no);
+					}
+				},
+			});
+		}
 	},
 
-	purchase_taxes_and_charges_template: function(frm) {
-		frm.trigger('fetch_taxes_from_template');
+	sales_taxes_and_charges_template: function (frm) {
+		frm.trigger("fetch_taxes_from_template");
 	},
 
-	fetch_taxes_from_template: function(frm) {
-		let master_doctype = '';
-		let taxes_and_charges = '';
+	purchase_taxes_and_charges_template: function (frm) {
+		frm.trigger("fetch_taxes_from_template");
+	},
 
-		if (frm.doc.party_type == 'Supplier') {
-			master_doctype = 'Purchase Taxes and Charges Template';
+	fetch_taxes_from_template: function (frm) {
+		let master_doctype = "";
+		let taxes_and_charges = "";
+
+		if (frm.doc.party_type == "Supplier") {
+			master_doctype = "Purchase Taxes and Charges Template";
 			taxes_and_charges = frm.doc.purchase_taxes_and_charges_template;
-		} else if (frm.doc.party_type == 'Customer') {
-			master_doctype = 'Sales Taxes and Charges Template';
+		} else if (frm.doc.party_type == "Customer") {
+			master_doctype = "Sales Taxes and Charges Template";
 			taxes_and_charges = frm.doc.sales_taxes_and_charges_template;
 		}
 
@@ -1138,16 +1371,16 @@
 		frappe.call({
 			method: "erpnext.controllers.accounts_controller.get_taxes_and_charges",
 			args: {
-				"master_doctype": master_doctype,
-				"master_name": taxes_and_charges
+				master_doctype: master_doctype,
+				master_name: taxes_and_charges,
 			},
-			callback: function(r) {
-				if(!r.exc && r.message) {
+			callback: function (r) {
+				if (!r.exc && r.message) {
 					// set taxes table
-					if(r.message) {
+					if (r.message) {
 						for (let tax of r.message) {
-							if (tax.charge_type === 'On Net Total') {
-								tax.charge_type = 'On Paid Amount';
+							if (tax.charge_type === "On Net Total") {
+								tax.charge_type = "On Paid Amount";
 							}
 							frm.add_child("taxes", tax);
 						}
@@ -1155,58 +1388,77 @@
 						frm.events.set_unallocated_amount(frm);
 					}
 				}
-			}
+			},
 		});
 	},
 
-	apply_taxes: function(frm) {
+	apply_taxes: function (frm) {
 		frm.events.initialize_taxes(frm);
 		frm.events.determine_exclusive_rate(frm);
 		frm.events.calculate_taxes(frm);
 	},
 
-	initialize_taxes: function(frm) {
-		$.each(frm.doc["taxes"] || [], function(i, tax) {
+	initialize_taxes: function (frm) {
+		$.each(frm.doc["taxes"] || [], function (i, tax) {
 			frm.events.validate_taxes_and_charges(tax);
 			frm.events.validate_inclusive_tax(tax);
 			tax.item_wise_tax_detail = {};
-			let tax_fields = ["total",  "tax_fraction_for_current_item",
-				"grand_total_fraction_for_current_item"];
+			let tax_fields = [
+				"total",
+				"tax_fraction_for_current_item",
+				"grand_total_fraction_for_current_item",
+			];
 
 			if (cstr(tax.charge_type) != "Actual") {
 				tax_fields.push("tax_amount");
 			}
 
-			$.each(tax_fields, function(i, fieldname) { tax[fieldname] = 0.0; });
+			$.each(tax_fields, function (i, fieldname) {
+				tax[fieldname] = 0.0;
+			});
 
 			frm.doc.paid_amount_after_tax = frm.doc.base_paid_amount;
 		});
 	},
 
-	validate_taxes_and_charges: function(d) {
+	validate_taxes_and_charges: function (d) {
 		let msg = "";
 
 		if (d.account_head && !d.description) {
 			// set description from account head
-			d.description = d.account_head.split(' - ').slice(0, -1).join(' - ');
+			d.description = d.account_head.split(" - ").slice(0, -1).join(" - ");
 		}
 
 		if (!d.charge_type && (d.row_id || d.rate || d.tax_amount)) {
 			msg = __("Please select Charge Type first");
 			d.row_id = "";
 			d.rate = d.tax_amount = 0.0;
-		} else if ((d.charge_type == 'Actual' || d.charge_type == 'On Net Total' || d.charge_type == 'On Paid Amount') && d.row_id) {
-			msg = __("Can refer row only if the charge type is 'On Previous Row Amount' or 'Previous Row Total'");
+		} else if (
+			(d.charge_type == "Actual" ||
+				d.charge_type == "On Net Total" ||
+				d.charge_type == "On Paid Amount") &&
+			d.row_id
+		) {
+			msg = __(
+				"Can refer row only if the charge type is 'On Previous Row Amount' or 'Previous Row Total'"
+			);
 			d.row_id = "";
-		} else if ((d.charge_type == 'On Previous Row Amount' || d.charge_type == 'On Previous Row Total') && d.row_id) {
+		} else if (
+			(d.charge_type == "On Previous Row Amount" || d.charge_type == "On Previous Row Total") &&
+			d.row_id
+		) {
 			if (d.idx == 1) {
-				msg = __("Cannot select charge type as 'On Previous Row Amount' or 'On Previous Row Total' for first row");
-				d.charge_type = '';
+				msg = __(
+					"Cannot select charge type as 'On Previous Row Amount' or 'On Previous Row Total' for first row"
+				);
+				d.charge_type = "";
 			} else if (!d.row_id) {
 				msg = __("Please specify a valid Row ID for row {0} in table {1}", [d.idx, __(d.doctype)]);
 				d.row_id = "";
 			} else if (d.row_id && d.row_id >= d.idx) {
-				msg = __("Cannot refer row number greater than or equal to current row number for this Charge type");
+				msg = __(
+					"Cannot refer row number greater than or equal to current row number for this Charge type"
+				);
 				d.row_id = "";
 			}
 		}
@@ -1215,34 +1467,39 @@
 			refresh_field("taxes");
 			frappe.throw(msg);
 		}
-
 	},
 
-	validate_inclusive_tax: function(tax) {
-		let actual_type_error = function() {
-			let msg = __("Actual type tax cannot be included in Item rate in row {0}", [tax.idx])
+	validate_inclusive_tax: function (tax) {
+		let actual_type_error = function () {
+			let msg = __("Actual type tax cannot be included in Item rate in row {0}", [tax.idx]);
 			frappe.throw(msg);
 		};
 
-		let on_previous_row_error = function(row_range) {
-			let msg = __("For row {0} in {1}. To include {2} in Item rate, rows {3} must also be included",
-				[tax.idx, __(tax.doctype), tax.charge_type, row_range])
+		let on_previous_row_error = function (row_range) {
+			let msg = __("For row {0} in {1}. To include {2} in Item rate, rows {3} must also be included", [
+				tax.idx,
+				__(tax.doctype),
+				tax.charge_type,
+				row_range,
+			]);
 			frappe.throw(msg);
 		};
 
-		if(cint(tax.included_in_paid_amount)) {
-			if(tax.charge_type == "Actual") {
+		if (cint(tax.included_in_paid_amount)) {
+			if (tax.charge_type == "Actual") {
 				// inclusive tax cannot be of type Actual
 				actual_type_error();
-			} else if(tax.charge_type == "On Previous Row Amount" &&
+			} else if (
+				tax.charge_type == "On Previous Row Amount" &&
 				!cint(this.frm.doc["taxes"][tax.row_id - 1].included_in_paid_amount)
 			) {
 				// referred row should also be an inclusive tax
 				on_previous_row_error(tax.row_id);
-			} else if(tax.charge_type == "On Previous Row Total") {
-				let taxes_not_included = $.map(this.frm.doc["taxes"].slice(0, tax.row_id),
-					function(t) { return cint(t.included_in_paid_amount) ? null : t; });
-				if(taxes_not_included.length > 0) {
+			} else if (tax.charge_type == "On Previous Row Total") {
+				let taxes_not_included = $.map(this.frm.doc["taxes"].slice(0, tax.row_id), function (t) {
+					return cint(t.included_in_paid_amount) ? null : t;
+				});
+				if (taxes_not_included.length > 0) {
 					// all rows above this tax should be inclusive
 					on_previous_row_error(tax.row_id == 1 ? "1" : "1 - " + tax.row_id);
 				}
@@ -1250,55 +1507,55 @@
 		}
 	},
 
-	determine_exclusive_rate: function(frm) {
+	determine_exclusive_rate: function (frm) {
 		let has_inclusive_tax = false;
-		$.each(frm.doc["taxes"] || [], function(i, row) {
-			if(cint(row.included_in_paid_amount)) has_inclusive_tax = true;
+		$.each(frm.doc["taxes"] || [], function (i, row) {
+			if (cint(row.included_in_paid_amount)) has_inclusive_tax = true;
 		});
-		if(has_inclusive_tax==false) return;
+		if (has_inclusive_tax == false) return;
 
 		let cumulated_tax_fraction = 0.0;
-		$.each(frm.doc["taxes"] || [], function(i, tax) {
+		$.each(frm.doc["taxes"] || [], function (i, tax) {
 			tax.tax_fraction_for_current_item = frm.events.get_current_tax_fraction(frm, tax);
 
-			if(i==0) {
+			if (i == 0) {
 				tax.grand_total_fraction_for_current_item = 1 + tax.tax_fraction_for_current_item;
 			} else {
 				tax.grand_total_fraction_for_current_item =
-					frm.doc["taxes"][i-1].grand_total_fraction_for_current_item +
+					frm.doc["taxes"][i - 1].grand_total_fraction_for_current_item +
 					tax.tax_fraction_for_current_item;
 			}
 
 			cumulated_tax_fraction += tax.tax_fraction_for_current_item;
-			frm.doc.paid_amount_after_tax = flt(frm.doc.base_paid_amount/(1+cumulated_tax_fraction))
+			frm.doc.paid_amount_after_tax = flt(frm.doc.base_paid_amount / (1 + cumulated_tax_fraction));
 		});
 	},
 
-	get_current_tax_fraction: function(frm, tax) {
+	get_current_tax_fraction: function (frm, tax) {
 		let current_tax_fraction = 0.0;
 
-		if(cint(tax.included_in_paid_amount)) {
+		if (cint(tax.included_in_paid_amount)) {
 			let tax_rate = tax.rate;
 
-			if(tax.charge_type == "On Paid Amount") {
-				current_tax_fraction = (tax_rate / 100.0);
-			} else if(tax.charge_type == "On Previous Row Amount") {
-				current_tax_fraction = (tax_rate / 100.0) *
-					frm.doc["taxes"][cint(tax.row_id) - 1].tax_fraction_for_current_item;
-			} else if(tax.charge_type == "On Previous Row Total") {
-				current_tax_fraction = (tax_rate / 100.0) *
+			if (tax.charge_type == "On Paid Amount") {
+				current_tax_fraction = tax_rate / 100.0;
+			} else if (tax.charge_type == "On Previous Row Amount") {
+				current_tax_fraction =
+					(tax_rate / 100.0) * frm.doc["taxes"][cint(tax.row_id) - 1].tax_fraction_for_current_item;
+			} else if (tax.charge_type == "On Previous Row Total") {
+				current_tax_fraction =
+					(tax_rate / 100.0) *
 					frm.doc["taxes"][cint(tax.row_id) - 1].grand_total_fraction_for_current_item;
 			}
 		}
 
-		if(tax.add_deduct_tax && tax.add_deduct_tax == "Deduct") {
+		if (tax.add_deduct_tax && tax.add_deduct_tax == "Deduct") {
 			current_tax_fraction *= -1;
 		}
 		return current_tax_fraction;
 	},
 
-
-	calculate_taxes: function(frm) {
+	calculate_taxes: function (frm) {
 		frm.doc.total_taxes_and_charges = 0.0;
 		frm.doc.base_total_taxes_and_charges = 0.0;
 
@@ -1306,13 +1563,13 @@
 		let actual_tax_dict = {};
 
 		// maintain actual tax rate based on idx
-		$.each(frm.doc["taxes"] || [], function(i, tax) {
+		$.each(frm.doc["taxes"] || [], function (i, tax) {
 			if (tax.charge_type == "Actual") {
 				actual_tax_dict[tax.idx] = flt(tax.tax_amount, precision("tax_amount", tax));
 			}
 		});
 
-		$.each(frm.doc["taxes"] || [], function(i, tax) {
+		$.each(frm.doc["taxes"] || [], function (i, tax) {
 			let current_tax_amount = frm.events.get_current_tax_amount(frm, tax);
 
 			// Adjust divisional loss to the last item
@@ -1325,29 +1582,28 @@
 
 			// tax accounts are only in company currency
 			tax.base_tax_amount = current_tax_amount;
-			current_tax_amount *= (tax.add_deduct_tax == "Deduct") ? -1.0 : 1.0;
+			current_tax_amount *= tax.add_deduct_tax == "Deduct" ? -1.0 : 1.0;
 
-			if(i==0) {
+			if (i == 0) {
 				tax.total = flt(frm.doc.paid_amount_after_tax + current_tax_amount, precision("total", tax));
 			} else {
-				tax.total = flt(frm.doc["taxes"][i-1].total + current_tax_amount, precision("total", tax));
+				tax.total = flt(frm.doc["taxes"][i - 1].total + current_tax_amount, precision("total", tax));
 			}
 
 			// tac accounts are only in company currency
-			tax.base_total = tax.total
+			tax.base_total = tax.total;
 
 			// calculate total taxes and base total taxes
-			if(frm.doc.payment_type == "Pay") {
+			if (frm.doc.payment_type == "Pay") {
 				// tax accounts only have company currency
-				if(tax.currency != frm.doc.paid_to_account_currency) {
+				if (tax.currency != frm.doc.paid_to_account_currency) {
 					//total_taxes_and_charges has the target currency. so using target conversion rate
 					frm.doc.total_taxes_and_charges += flt(current_tax_amount / frm.doc.target_exchange_rate);
-
 				} else {
 					frm.doc.total_taxes_and_charges += current_tax_amount;
 				}
-			} else if(frm.doc.payment_type == "Receive") {
-				if(tax.currency != frm.doc.paid_from_account_currency) {
+			} else if (frm.doc.payment_type == "Receive") {
+				if (tax.currency != frm.doc.paid_from_account_currency) {
 					//total_taxes_and_charges has the target currency. so using source conversion rate
 					frm.doc.total_taxes_and_charges += flt(current_tax_amount / frm.doc.source_exchange_rate);
 				} else {
@@ -1357,49 +1613,48 @@
 
 			frm.doc.base_total_taxes_and_charges += tax.base_tax_amount;
 
-			frm.refresh_field('taxes');
-			frm.refresh_field('total_taxes_and_charges');
-			frm.refresh_field('base_total_taxes_and_charges');
+			frm.refresh_field("taxes");
+			frm.refresh_field("total_taxes_and_charges");
+			frm.refresh_field("base_total_taxes_and_charges");
 		});
 	},
 
-	get_current_tax_amount: function(frm, tax) {
+	get_current_tax_amount: function (frm, tax) {
 		let tax_rate = tax.rate;
 		let current_tax_amount = 0.0;
 
 		// To set row_id by default as previous row.
-		if(["On Previous Row Amount", "On Previous Row Total"].includes(tax.charge_type)) {
+		if (["On Previous Row Amount", "On Previous Row Total"].includes(tax.charge_type)) {
 			if (tax.idx === 1) {
 				frappe.throw(
-					__("Cannot select charge type as 'On Previous Row Amount' or 'On Previous Row Total' for first row"));
+					__(
+						"Cannot select charge type as 'On Previous Row Amount' or 'On Previous Row Total' for first row"
+					)
+				);
 			}
 		}
 
-		if(tax.charge_type == "Actual") {
-			current_tax_amount = flt(tax.tax_amount, precision("tax_amount", tax))
-		} else if(tax.charge_type == "On Paid Amount") {
+		if (tax.charge_type == "Actual") {
+			current_tax_amount = flt(tax.tax_amount, precision("tax_amount", tax));
+		} else if (tax.charge_type == "On Paid Amount") {
 			current_tax_amount = flt((tax_rate / 100.0) * frm.doc.paid_amount_after_tax);
-		} else if(tax.charge_type == "On Previous Row Amount") {
-			current_tax_amount = flt((tax_rate / 100.0) *
-				frm.doc["taxes"][cint(tax.row_id) - 1].tax_amount);
-
-		} else if(tax.charge_type == "On Previous Row Total") {
-			current_tax_amount = flt((tax_rate / 100.0) *
-				frm.doc["taxes"][cint(tax.row_id) - 1].total);
+		} else if (tax.charge_type == "On Previous Row Amount") {
+			current_tax_amount = flt((tax_rate / 100.0) * frm.doc["taxes"][cint(tax.row_id) - 1].tax_amount);
+		} else if (tax.charge_type == "On Previous Row Total") {
+			current_tax_amount = flt((tax_rate / 100.0) * frm.doc["taxes"][cint(tax.row_id) - 1].total);
 		}
 
 		return current_tax_amount;
 	},
 });
 
-
-frappe.ui.form.on('Payment Entry Reference', {
-	reference_doctype: function(frm, cdt, cdn) {
+frappe.ui.form.on("Payment Entry Reference", {
+	reference_doctype: function (frm, cdt, cdn) {
 		var row = locals[cdt][cdn];
 		frm.events.validate_reference_document(frm, row);
 	},
 
-	reference_name: function(frm, cdt, cdn) {
+	reference_name: function (frm, cdt, cdn) {
 		var row = locals[cdt][cdn];
 		if (row.reference_name && row.reference_doctype) {
 			return frappe.call({
@@ -1407,79 +1662,83 @@
 				args: {
 					reference_doctype: row.reference_doctype,
 					reference_name: row.reference_name,
-					party_account_currency: frm.doc.payment_type=="Receive" ?
-						frm.doc.paid_from_account_currency : frm.doc.paid_to_account_currency
+					party_account_currency:
+						frm.doc.payment_type == "Receive"
+							? frm.doc.paid_from_account_currency
+							: frm.doc.paid_to_account_currency,
 				},
-				callback: function(r, rt) {
-					if(r.message) {
-						$.each(r.message, function(field, value) {
+				callback: function (r, rt) {
+					if (r.message) {
+						$.each(r.message, function (field, value) {
 							frappe.model.set_value(cdt, cdn, field, value);
-						})
+						});
 
-						let allocated_amount = frm.doc.unallocated_amount > row.outstanding_amount ?
-							row.outstanding_amount : frm.doc.unallocated_amount;
+						let allocated_amount =
+							frm.doc.unallocated_amount > row.outstanding_amount
+								? row.outstanding_amount
+								: frm.doc.unallocated_amount;
 
-						frappe.model.set_value(cdt, cdn, 'allocated_amount', allocated_amount);
+						frappe.model.set_value(cdt, cdn, "allocated_amount", allocated_amount);
 						frm.refresh_fields();
 					}
-				}
-			})
+				},
+			});
 		}
 	},
 
-	allocated_amount: function(frm) {
+	allocated_amount: function (frm) {
 		frm.events.set_total_allocated_amount(frm);
 	},
 
-	references_remove: function(frm) {
+	references_remove: function (frm) {
 		frm.events.set_total_allocated_amount(frm);
-	}
-})
+	},
+});
 
-frappe.ui.form.on('Advance Taxes and Charges', {
-	rate: function(frm) {
+frappe.ui.form.on("Advance Taxes and Charges", {
+	rate: function (frm) {
 		frm.events.apply_taxes(frm);
 		frm.events.set_unallocated_amount(frm);
 	},
 
-	tax_amount : function(frm) {
+	tax_amount: function (frm) {
 		frm.events.apply_taxes(frm);
 		frm.events.set_unallocated_amount(frm);
 	},
 
-	row_id: function(frm) {
+	row_id: function (frm) {
 		frm.events.apply_taxes(frm);
 		frm.events.set_unallocated_amount(frm);
 	},
 
-	taxes_remove: function(frm) {
+	taxes_remove: function (frm) {
 		frm.events.apply_taxes(frm);
 		frm.events.set_unallocated_amount(frm);
 	},
 
-	included_in_paid_amount: function(frm) {
+	included_in_paid_amount: function (frm) {
 		frm.events.apply_taxes(frm);
 		frm.events.set_unallocated_amount(frm);
 	},
 
-	charge_type: function(frm) {
+	charge_type: function (frm) {
 		frm.events.apply_taxes(frm);
 		frm.events.set_unallocated_amount(frm);
-	}
-})
+	},
+});
 
-frappe.ui.form.on('Payment Entry Deduction', {
-	amount: function(frm) {
+frappe.ui.form.on("Payment Entry Deduction", {
+	amount: function (frm) {
 		frm.events.set_unallocated_amount(frm);
 	},
 
-	deductions_remove: function(frm) {
+	deductions_remove: function (frm) {
 		frm.events.set_unallocated_amount(frm);
-	}
-})
-frappe.ui.form.on('Payment Entry', {
-	cost_center: function(frm){
-		if (frm.doc.posting_date && (frm.doc.paid_from||frm.doc.paid_to)) {
+	},
+});
+frappe.ui.form.on("Payment Entry", {
+	cost_center: function (frm) {
+		if (frm.doc.posting_date && (frm.doc.paid_from || frm.doc.paid_to)) {
 			return frappe.call({
 				method: "erpnext.accounts.doctype.payment_entry.payment_entry.get_party_and_account_balance",
 				args: {
@@ -1489,21 +1748,23 @@
 					paid_to: frm.doc.paid_to,
 					ptype: frm.doc.party_type,
 					pty: frm.doc.party,
-					cost_center: frm.doc.cost_center
+					cost_center: frm.doc.cost_center,
 				},
-				callback: function(r, rt) {
-					if(r.message) {
+				callback: function (r, rt) {
+					if (r.message) {
 						frappe.run_serially([
 							() => {
-								frm.set_value("paid_from_account_balance", r.message.paid_from_account_balance);
+								frm.set_value(
+									"paid_from_account_balance",
+									r.message.paid_from_account_balance
+								);
 								frm.set_value("paid_to_account_balance", r.message.paid_to_account_balance);
 								frm.set_value("party_balance", r.message.party_balance);
-							}
+							},
 						]);
-
 					}
-				}
+				},
 			});
 		}
 	},
-})
+});
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry_list.js b/erpnext/accounts/doctype/payment_entry/payment_entry_list.js
index 2d76fe6..6974e58 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry_list.js
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry_list.js
@@ -1,14 +1,13 @@
-frappe.listview_settings['Payment Entry'] = {
-
-	onload: function(listview) {
+frappe.listview_settings["Payment Entry"] = {
+	onload: function (listview) {
 		if (listview.page.fields_dict.party_type) {
-			listview.page.fields_dict.party_type.get_query = function() {
+			listview.page.fields_dict.party_type.get_query = function () {
 				return {
-					"filters": {
-						"name": ["in", Object.keys(frappe.boot.party_account_types)],
-					}
+					filters: {
+						name: ["in", Object.keys(frappe.boot.party_account_types)],
+					},
 				};
 			};
 		}
-	}
+	},
 };
diff --git a/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.js b/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.js
index aff067e..f15c2bd 100644
--- a/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.js
+++ b/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.js
@@ -1,11 +1,11 @@
 // Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.ui.form.on('Payment Gateway Account', {
+frappe.ui.form.on("Payment Gateway Account", {
 	refresh(frm) {
 		erpnext.utils.check_payments_app();
-		if(!frm.doc.__islocal) {
-			frm.set_df_property('payment_gateway', 'read_only', 1);
+		if (!frm.doc.__islocal) {
+			frm.set_df_property("payment_gateway", "read_only", 1);
 		}
-	}
+	},
 });
diff --git a/erpnext/accounts/doctype/payment_ledger_entry/payment_ledger_entry.js b/erpnext/accounts/doctype/payment_ledger_entry/payment_ledger_entry.js
index 5a7be8e..07fe831 100644
--- a/erpnext/accounts/doctype/payment_ledger_entry/payment_ledger_entry.js
+++ b/erpnext/accounts/doctype/payment_ledger_entry/payment_ledger_entry.js
@@ -1,8 +1,7 @@
 // Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Payment Ledger Entry', {
+frappe.ui.form.on("Payment Ledger Entry", {
 	// refresh: function(frm) {
-
 	// }
 });
diff --git a/erpnext/accounts/doctype/payment_order/payment_order.js b/erpnext/accounts/doctype/payment_order/payment_order.js
index 6630e71..f009de5 100644
--- a/erpnext/accounts/doctype/payment_order/payment_order.js
+++ b/erpnext/accounts/doctype/payment_order/payment_order.js
@@ -1,61 +1,69 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Payment Order', {
-	setup: function(frm) {
-		frm.set_query("company_bank_account", function() {
+frappe.ui.form.on("Payment Order", {
+	setup: function (frm) {
+		frm.set_query("company_bank_account", function () {
 			return {
 				filters: {
-					"is_company_account":1
-				}
-			}
+					is_company_account: 1,
+				},
+			};
 		});
 
-		frm.set_df_property('references', 'cannot_add_rows', true);
+		frm.set_df_property("references", "cannot_add_rows", true);
 	},
-	refresh: function(frm) {
+	refresh: function (frm) {
 		if (frm.doc.docstatus == 0) {
-			frm.add_custom_button(__('Payment Request'), function() {
-				frm.trigger("get_from_payment_request");
-			}, __("Get Payments from"));
+			frm.add_custom_button(
+				__("Payment Request"),
+				function () {
+					frm.trigger("get_from_payment_request");
+				},
+				__("Get Payments from")
+			);
 
-			frm.add_custom_button(__('Payment Entry'), function() {
-				frm.trigger("get_from_payment_entry");
-			}, __("Get Payments from"));
+			frm.add_custom_button(
+				__("Payment Entry"),
+				function () {
+					frm.trigger("get_from_payment_entry");
+				},
+				__("Get Payments from")
+			);
 
-			frm.trigger('remove_button');
+			frm.trigger("remove_button");
 		}
 
 		// payment Entry
-		if (frm.doc.docstatus===1 && frm.doc.payment_order_type==='Payment Request') {
-			frm.add_custom_button(__('Create Payment Entries'), function() {
+		if (frm.doc.docstatus === 1 && frm.doc.payment_order_type === "Payment Request") {
+			frm.add_custom_button(__("Create Payment Entries"), function () {
 				frm.trigger("make_payment_records");
 			});
 		}
 	},
 
-	remove_row_if_empty: function(frm) {
+	remove_row_if_empty: function (frm) {
 		// remove if first row is empty
 		if (frm.doc.references.length > 0 && !frm.doc.references[0].reference_name) {
 			frm.doc.references = [];
 		}
 	},
 
-	remove_button: function(frm) {
+	remove_button: function (frm) {
 		// remove custom button of order type that is not imported
 
 		let label = ["Payment Request", "Payment Entry"];
 
 		if (frm.doc.references.length > 0 && frm.doc.payment_order_type) {
-			label = label.reduce(x => {
-				x!= frm.doc.payment_order_type;
+			label = label.reduce((x) => {
+				x != frm.doc.payment_order_type;
 				return x;
 			});
 			frm.remove_custom_button(label, "Get from");
 		}
 	},
 
-	get_from_payment_entry: function(frm) {
+	get_from_payment_entry: function (frm) {
 		frm.trigger("remove_row_if_empty");
 		erpnext.utils.map_current_doc({
 			method: "erpnext.accounts.doctype.payment_entry.payment_entry.make_payment_order",
@@ -63,7 +71,7 @@
 			target: frm,
 			date_field: "posting_date",
 			setters: {
-				party: frm.doc.supplier || ""
+				party: frm.doc.supplier || "",
 			},
 			get_query_filters: {
 				bank: frm.doc.bank,
@@ -71,70 +79,79 @@
 				payment_type: ["!=", "Receive"],
 				bank_account: frm.doc.company_bank_account,
 				paid_from: frm.doc.account,
-				payment_order_status: ["=", "Initiated"]
-			}
+				payment_order_status: ["=", "Initiated"],
+			},
 		});
 	},
 
-	get_from_payment_request: function(frm) {
+	get_from_payment_request: function (frm) {
 		frm.trigger("remove_row_if_empty");
 		erpnext.utils.map_current_doc({
 			method: "erpnext.accounts.doctype.payment_request.payment_request.make_payment_order",
 			source_doctype: "Payment Request",
 			target: frm,
 			setters: {
-				party: frm.doc.supplier || ""
+				party: frm.doc.supplier || "",
 			},
 			get_query_filters: {
 				bank: frm.doc.bank,
 				docstatus: 1,
 				status: ["=", "Initiated"],
-			}
+			},
 		});
 	},
 
-	make_payment_records: function(frm){
+	make_payment_records: function (frm) {
 		var dialog = new frappe.ui.Dialog({
 			title: __("For Supplier"),
 			fields: [
-				{"fieldtype": "Link", "label": __("Supplier"), "fieldname": "supplier", "options":"Supplier",
-					"get_query": function () {
+				{
+					fieldtype: "Link",
+					label: __("Supplier"),
+					fieldname: "supplier",
+					options: "Supplier",
+					get_query: function () {
 						return {
-							query:"erpnext.accounts.doctype.payment_order.payment_order.get_supplier_query",
-							filters: {'parent': frm.doc.name}
-						}
-					}, "reqd": 1
+							query: "erpnext.accounts.doctype.payment_order.payment_order.get_supplier_query",
+							filters: { parent: frm.doc.name },
+						};
+					},
+					reqd: 1,
 				},
 
-				{"fieldtype": "Link", "label": __("Mode of Payment"), "fieldname": "mode_of_payment", "options":"Mode of Payment",
-					"get_query": function () {
+				{
+					fieldtype: "Link",
+					label: __("Mode of Payment"),
+					fieldname: "mode_of_payment",
+					options: "Mode of Payment",
+					get_query: function () {
 						return {
-							query:"erpnext.accounts.doctype.payment_order.payment_order.get_mop_query",
-							filters: {'parent': frm.doc.name}
-						}
-					}
-				}
-			]
+							query: "erpnext.accounts.doctype.payment_order.payment_order.get_mop_query",
+							filters: { parent: frm.doc.name },
+						};
+					},
+				},
+			],
 		});
 
-		dialog.set_primary_action(__("Submit"), function() {
+		dialog.set_primary_action(__("Submit"), function () {
 			var args = dialog.get_values();
-			if(!args) return;
+			if (!args) return;
 
 			return frappe.call({
 				method: "erpnext.accounts.doctype.payment_order.payment_order.make_payment_records",
 				args: {
-					"name": frm.doc.name,
-					"supplier": args.supplier,
-					"mode_of_payment": args.mode_of_payment
+					name: frm.doc.name,
+					supplier: args.supplier,
+					mode_of_payment: args.mode_of_payment,
 				},
 				freeze: true,
-				callback: function(r) {
+				callback: function (r) {
 					dialog.hide();
 					frm.refresh();
-				}
-			})
-		})
+				},
+			});
+		});
 
 		dialog.show();
 	},
diff --git a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js
index 99593de..cc99fe7 100644
--- a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js
+++ b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js
@@ -2,97 +2,94 @@
 // For license information, please see license.txt
 
 frappe.provide("erpnext.accounts");
-erpnext.accounts.PaymentReconciliationController = class PaymentReconciliationController extends frappe.ui.form.Controller {
+erpnext.accounts.PaymentReconciliationController = class PaymentReconciliationController extends (
+	frappe.ui.form.Controller
+) {
 	onload() {
-		const default_company = frappe.defaults.get_default('company');
-		this.frm.set_value('company', default_company);
+		const default_company = frappe.defaults.get_default("company");
+		this.frm.set_value("company", default_company);
 
-		this.frm.set_value('party_type', '');
-		this.frm.set_value('party', '');
-		this.frm.set_value('receivable_payable_account', '');
+		this.frm.set_value("party_type", "");
+		this.frm.set_value("party", "");
+		this.frm.set_value("receivable_payable_account", "");
 
 		this.frm.set_query("party_type", () => {
 			return {
-				"filters": {
-					"name": ["in", Object.keys(frappe.boot.party_account_types)],
-				}
-			}
-		});
-
-		this.frm.set_query('receivable_payable_account', () => {
-			return {
 				filters: {
-					"company": this.frm.doc.company,
-					"is_group": 0,
-					"account_type": frappe.boot.party_account_types[this.frm.doc.party_type],
-					"root_type": this.frm.doc.party_type == 'Customer' ? "Asset" : "Liability"
-				}
+					name: ["in", Object.keys(frappe.boot.party_account_types)],
+				},
 			};
 		});
 
-		this.frm.set_query('default_advance_account', () => {
+		this.frm.set_query("receivable_payable_account", () => {
 			return {
 				filters: {
-					"company": this.frm.doc.company,
-					"is_group": 0,
-					"account_type": this.frm.doc.party_type == 'Customer' ? "Receivable": "Payable",
-					"root_type": this.frm.doc.party_type == 'Customer' ? "Liability": "Asset"
-				}
+					company: this.frm.doc.company,
+					is_group: 0,
+					account_type: frappe.boot.party_account_types[this.frm.doc.party_type],
+					root_type: this.frm.doc.party_type == "Customer" ? "Asset" : "Liability",
+				},
 			};
 		});
 
-		this.frm.set_query('bank_cash_account', () => {
+		this.frm.set_query("default_advance_account", () => {
 			return {
-				filters:[
-					['Account', 'company', '=', this.frm.doc.company],
-					['Account', 'is_group', '=', 0],
-					['Account', 'account_type', 'in', ['Bank', 'Cash']]
-				]
+				filters: {
+					company: this.frm.doc.company,
+					is_group: 0,
+					account_type: this.frm.doc.party_type == "Customer" ? "Receivable" : "Payable",
+					root_type: this.frm.doc.party_type == "Customer" ? "Liability" : "Asset",
+				},
+			};
+		});
+
+		this.frm.set_query("bank_cash_account", () => {
+			return {
+				filters: [
+					["Account", "company", "=", this.frm.doc.company],
+					["Account", "is_group", "=", 0],
+					["Account", "account_type", "in", ["Bank", "Cash"]],
+				],
 			};
 		});
 
 		this.frm.set_query("cost_center", () => {
 			return {
-				"filters": {
-					"company": this.frm.doc.company,
-					"is_group": 0
-				}
-			}
+				filters: {
+					company: this.frm.doc.company,
+					is_group: 0,
+				},
+			};
 		});
 	}
 
 	refresh() {
 		this.frm.disable_save();
 
-		this.frm.set_df_property('invoices', 'cannot_delete_rows', true);
-		this.frm.set_df_property('payments', 'cannot_delete_rows', true);
-		this.frm.set_df_property('allocation', 'cannot_delete_rows', true);
+		this.frm.set_df_property("invoices", "cannot_delete_rows", true);
+		this.frm.set_df_property("payments", "cannot_delete_rows", true);
+		this.frm.set_df_property("allocation", "cannot_delete_rows", true);
 
-		this.frm.set_df_property('invoices', 'cannot_add_rows', true);
-		this.frm.set_df_property('payments', 'cannot_add_rows', true);
-		this.frm.set_df_property('allocation', 'cannot_add_rows', true);
-
+		this.frm.set_df_property("invoices", "cannot_add_rows", true);
+		this.frm.set_df_property("payments", "cannot_add_rows", true);
+		this.frm.set_df_property("allocation", "cannot_add_rows", true);
 
 		if (this.frm.doc.receivable_payable_account) {
-			this.frm.add_custom_button(__('Get Unreconciled Entries'), () =>
+			this.frm.add_custom_button(__("Get Unreconciled Entries"), () =>
 				this.frm.trigger("get_unreconciled_entries")
 			);
-			this.frm.change_custom_button_type(__('Get Unreconciled Entries'), null, 'primary');
+			this.frm.change_custom_button_type(__("Get Unreconciled Entries"), null, "primary");
 		}
 		if (this.frm.doc.invoices.length && this.frm.doc.payments.length) {
-			this.frm.add_custom_button(__('Allocate'), () =>
-				this.frm.trigger("allocate")
-			);
-			this.frm.change_custom_button_type(__('Allocate'), null, 'primary');
-			this.frm.change_custom_button_type(__('Get Unreconciled Entries'), null, 'default');
+			this.frm.add_custom_button(__("Allocate"), () => this.frm.trigger("allocate"));
+			this.frm.change_custom_button_type(__("Allocate"), null, "primary");
+			this.frm.change_custom_button_type(__("Get Unreconciled Entries"), null, "default");
 		}
 		if (this.frm.doc.allocation.length) {
-			this.frm.add_custom_button(__('Reconcile'), () =>
-				this.frm.trigger("reconcile")
-			);
-			this.frm.change_custom_button_type(__('Reconcile'), null, 'primary');
-			this.frm.change_custom_button_type(__('Get Unreconciled Entries'), null, 'default');
-			this.frm.change_custom_button_type(__('Allocate'), null, 'default');
+			this.frm.add_custom_button(__("Reconcile"), () => this.frm.trigger("reconcile"));
+			this.frm.change_custom_button_type(__("Reconcile"), null, "primary");
+			this.frm.change_custom_button_type(__("Get Unreconciled Entries"), null, "default");
+			this.frm.change_custom_button_type(__("Allocate"), null, "default");
 		}
 
 		this.frm.trigger("set_query_for_dimension_filters");
@@ -101,31 +98,39 @@
 		if (this.frm.doc.receivable_payable_account) {
 			this.frm.call({
 				doc: this.frm.doc,
-				method: 'is_auto_process_enabled',
+				method: "is_auto_process_enabled",
 				callback: (r) => {
 					if (r.message) {
-						this.frm.call({
-							'method': "erpnext.accounts.doctype.process_payment_reconciliation.process_payment_reconciliation.is_any_doc_running",
-							"args": {
-								for_filter: {
-									company: this.frm.doc.company,
-									party_type: this.frm.doc.party_type,
-									party: this.frm.doc.party,
-									receivable_payable_account: this.frm.doc.receivable_payable_account
+						this.frm
+							.call({
+								method: "erpnext.accounts.doctype.process_payment_reconciliation.process_payment_reconciliation.is_any_doc_running",
+								args: {
+									for_filter: {
+										company: this.frm.doc.company,
+										party_type: this.frm.doc.party_type,
+										party: this.frm.doc.party,
+										receivable_payable_account: this.frm.doc.receivable_payable_account,
+									},
+								},
+							})
+							.then((r) => {
+								if (r.message) {
+									let doc_link = frappe.utils.get_form_link(
+										"Process Payment Reconciliation",
+										r.message,
+										true
+									);
+									let msg = __(
+										"Payment Reconciliation Job: {0} is running for this party. Can't reconcile now.",
+										[doc_link]
+									);
+									this.frm.dashboard.add_comment(msg, "yellow");
 								}
-							}
-						}).then(r => {
-							if (r.message) {
-								let doc_link = frappe.utils.get_form_link("Process Payment Reconciliation", r.message, true);
-								let msg = __("Payment Reconciliation Job: {0} is running for this party. Can't reconcile now.", [doc_link]);
-								this.frm.dashboard.add_comment(msg, "yellow");
-							}
-						});
+							});
 					}
-				}
+				},
 			});
 		}
-
 	}
 	set_query_for_dimension_filters() {
 		frappe.call({
@@ -135,29 +140,29 @@
 			},
 			callback: (r) => {
 				if (!r.exc && r.message) {
-					r.message.forEach(x => {
+					r.message.forEach((x) => {
 						this.frm.set_query(x.fieldname, () => {
 							return {
-								'filters': x.filters
+								filters: x.filters,
 							};
 						});
 					});
 				}
-			}
+			},
 		});
 	}
 
 	company() {
-		this.frm.set_value('party', '');
-		this.frm.set_value('receivable_payable_account', '');
+		this.frm.set_value("party", "");
+		this.frm.set_value("receivable_payable_account", "");
 	}
 
 	party_type() {
-		this.frm.set_value('party', '');
+		this.frm.set_value("party", "");
 	}
 
 	party() {
-		this.frm.set_value('receivable_payable_account', '');
+		this.frm.set_value("receivable_payable_account", "");
 		this.frm.trigger("clear_child_tables");
 
 		if (!this.frm.doc.receivable_payable_account && this.frm.doc.party_type && this.frm.doc.party) {
@@ -167,7 +172,7 @@
 					company: this.frm.doc.company,
 					party_type: this.frm.doc.party_type,
 					party: this.frm.doc.party,
-					include_advance: 1
+					include_advance: 1,
 				},
 				callback: (r) => {
 					if (!r.exc && r.message) {
@@ -175,7 +180,7 @@
 						this.frm.set_value("default_advance_account", r.message[1]);
 					}
 					this.frm.refresh();
-				}
+				},
 			});
 		}
 	}
@@ -193,7 +198,6 @@
 		this.frm.trigger("get_unreconciled_entries");
 	}
 
-
 	clear_child_tables() {
 		this.frm.clear_table("invoices");
 		this.frm.clear_table("payments");
@@ -205,52 +209,52 @@
 		this.frm.clear_table("allocation");
 		return this.frm.call({
 			doc: this.frm.doc,
-			method: 'get_unreconciled_entries',
+			method: "get_unreconciled_entries",
 			callback: () => {
 				if (!(this.frm.doc.payments.length || this.frm.doc.invoices.length)) {
-					frappe.throw({message: __("No Unreconciled Invoices and Payments found for this party and account")});
-				} else if (!(this.frm.doc.invoices.length)) {
-					frappe.throw({message: __("No Outstanding Invoices found for this party")});
-				} else if (!(this.frm.doc.payments.length)) {
-					frappe.throw({message: __("No Unreconciled Payments found for this party")});
+					frappe.throw({
+						message: __("No Unreconciled Invoices and Payments found for this party and account"),
+					});
+				} else if (!this.frm.doc.invoices.length) {
+					frappe.throw({ message: __("No Outstanding Invoices found for this party") });
+				} else if (!this.frm.doc.payments.length) {
+					frappe.throw({ message: __("No Unreconciled Payments found for this party") });
 				}
 				this.frm.refresh();
-			}
+			},
 		});
-
 	}
 
 	allocate() {
 		let payments = this.frm.fields_dict.payments.grid.get_selected_children();
-		if (!(payments.length)) {
+		if (!payments.length) {
 			payments = this.frm.doc.payments;
 		}
 		let invoices = this.frm.fields_dict.invoices.grid.get_selected_children();
-		if (!(invoices.length)) {
+		if (!invoices.length) {
 			invoices = this.frm.doc.invoices;
 		}
 		return this.frm.call({
 			doc: this.frm.doc,
-			method: 'allocate_entries',
+			method: "allocate_entries",
 			args: {
 				payments: payments,
-				invoices: invoices
+				invoices: invoices,
 			},
 			callback: () => {
 				this.frm.refresh();
-			}
+			},
 		});
 	}
 
 	reconcile() {
-		var show_dialog = this.frm.doc.allocation.filter(d => d.difference_amount);
+		var show_dialog = this.frm.doc.allocation.filter((d) => d.difference_amount);
 
 		if (show_dialog && show_dialog.length) {
-
 			this.data = [];
 			const dialog = new frappe.ui.Dialog({
 				title: __("Select Difference Account"),
-				size: 'extra-large',
+				size: "extra-large",
 				fields: [
 					{
 						fieldname: "allocation",
@@ -262,77 +266,89 @@
 						get_data: () => {
 							return this.data;
 						},
-						fields: [{
-							fieldtype:'Data',
-							fieldname:"docname",
-							in_list_view: 1,
-							hidden: 1
-						}, {
-							fieldtype:'Data',
-							fieldname:"reference_name",
-							label: __("Voucher No"),
-							in_list_view: 1,
-							read_only: 1
-						}, {
-							fieldtype:'Date',
-							fieldname:"gain_loss_posting_date",
-							label: __("Posting Date"),
-							in_list_view: 1,
-							reqd: 1,
-						}, {
-
-							fieldtype:'Link',
-							options: 'Account',
-							in_list_view: 1,
-							label: __("Difference Account"),
-							fieldname: 'difference_account',
-							reqd: 1,
-							get_query: () => {
-								return {
-									filters: {
-										company: this.frm.doc.company,
-										is_group: 0
-									}
-								}
-							}
-						}, {
-							fieldtype:'Currency',
-							in_list_view: 1,
-							label: __("Difference Amount"),
-							fieldname: 'difference_amount',
-							read_only: 1
-						}]
+						fields: [
+							{
+								fieldtype: "Data",
+								fieldname: "docname",
+								in_list_view: 1,
+								hidden: 1,
+							},
+							{
+								fieldtype: "Data",
+								fieldname: "reference_name",
+								label: __("Voucher No"),
+								in_list_view: 1,
+								read_only: 1,
+							},
+							{
+								fieldtype: "Date",
+								fieldname: "gain_loss_posting_date",
+								label: __("Posting Date"),
+								in_list_view: 1,
+								reqd: 1,
+							},
+							{
+								fieldtype: "Link",
+								options: "Account",
+								in_list_view: 1,
+								label: __("Difference Account"),
+								fieldname: "difference_account",
+								reqd: 1,
+								get_query: () => {
+									return {
+										filters: {
+											company: this.frm.doc.company,
+											is_group: 0,
+										},
+									};
+								},
+							},
+							{
+								fieldtype: "Currency",
+								in_list_view: 1,
+								label: __("Difference Amount"),
+								fieldname: "difference_amount",
+								read_only: 1,
+							},
+						],
 					},
 					{
-						fieldtype: 'HTML',
-						options: "<b> New Journal Entry will be posted for the difference amount </b>"
-					}
+						fieldtype: "HTML",
+						options: "<b> New Journal Entry will be posted for the difference amount </b>",
+					},
 				],
 				primary_action: () => {
 					const args = dialog.get_values()["allocation"];
 
-					args.forEach(d => {
-						frappe.model.set_value("Payment Reconciliation Allocation", d.docname,
-							"difference_account", d.difference_account);
-						frappe.model.set_value("Payment Reconciliation Allocation", d.docname,
-							"gain_loss_posting_date", d.gain_loss_posting_date);
-
+					args.forEach((d) => {
+						frappe.model.set_value(
+							"Payment Reconciliation Allocation",
+							d.docname,
+							"difference_account",
+							d.difference_account
+						);
+						frappe.model.set_value(
+							"Payment Reconciliation Allocation",
+							d.docname,
+							"gain_loss_posting_date",
+							d.gain_loss_posting_date
+						);
 					});
 
 					this.reconcile_payment_entries();
 					dialog.hide();
 				},
-				primary_action_label: __('Reconcile Entries')
+				primary_action_label: __("Reconcile Entries"),
 			});
 
-			this.frm.doc.allocation.forEach(d => {
+			this.frm.doc.allocation.forEach((d) => {
 				if (d.difference_amount) {
 					dialog.fields_dict.allocation.df.data.push({
-						'docname': d.name,
-						'reference_name': d.reference_name,
-						'difference_amount': d.difference_amount,
-						'difference_account': d.difference_account,
-						'gain_loss_posting_date': d.gain_loss_posting_date
+						docname: d.name,
+						reference_name: d.reference_name,
+						difference_amount: d.difference_amount,
+						difference_account: d.difference_account,
+						gain_loss_posting_date: d.gain_loss_posting_date,
 					});
 				}
 			});
@@ -348,41 +364,39 @@
 	reconcile_payment_entries() {
 		return this.frm.call({
 			doc: this.frm.doc,
-			method: 'reconcile',
+			method: "reconcile",
 			callback: () => {
 				this.frm.clear_table("allocation");
 				this.frm.refresh();
-			}
+			},
 		});
 	}
 };
 
-frappe.ui.form.on('Payment Reconciliation Allocation', {
-	allocated_amount: function(frm, cdt, cdn) {
+frappe.ui.form.on("Payment Reconciliation Allocation", {
+	allocated_amount: function (frm, cdt, cdn) {
 		let row = locals[cdt][cdn];
 		// filter invoice
-		let invoice = frm.doc.invoices.filter((x) => (x.invoice_number == row.invoice_number));
+		let invoice = frm.doc.invoices.filter((x) => x.invoice_number == row.invoice_number);
 		// filter payment
-		let payment = frm.doc.payments.filter((x) => (x.reference_name == row.reference_name));
+		let payment = frm.doc.payments.filter((x) => x.reference_name == row.reference_name);
 
 		frm.call({
 			doc: frm.doc,
-			method: 'calculate_difference_on_allocation_change',
+			method: "calculate_difference_on_allocation_change",
 			args: {
 				payment_entry: payment,
 				invoice: invoice,
-				allocated_amount: row.allocated_amount
+				allocated_amount: row.allocated_amount,
 			},
 			callback: (r) => {
 				if (r.message) {
 					row.difference_amount = r.message;
 					frm.refresh();
 				}
-			}
+			},
 		});
-	}
+	},
 });
 
-
-
-extend_cscript(cur_frm.cscript, new erpnext.accounts.PaymentReconciliationController({frm: cur_frm}));
+extend_cscript(cur_frm.cscript, new erpnext.accounts.PaymentReconciliationController({ frm: cur_frm }));
diff --git a/erpnext/accounts/doctype/payment_request/payment_request.js b/erpnext/accounts/doctype/payment_request/payment_request.js
index c85cd42..d07f824 100644
--- a/erpnext/accounts/doctype/payment_request/payment_request.js
+++ b/erpnext/accounts/doctype/payment_request/payment_request.js
@@ -1,87 +1,99 @@
-cur_frm.add_fetch("payment_gateway_account", "payment_account", "payment_account")
-cur_frm.add_fetch("payment_gateway_account", "payment_gateway", "payment_gateway")
-cur_frm.add_fetch("payment_gateway_account", "message", "message")
+cur_frm.add_fetch("payment_gateway_account", "payment_account", "payment_account");
+cur_frm.add_fetch("payment_gateway_account", "payment_gateway", "payment_gateway");
+cur_frm.add_fetch("payment_gateway_account", "message", "message");
 
 frappe.ui.form.on("Payment Request", {
-	setup: function(frm) {
-		frm.set_query("party_type", function() {
+	setup: function (frm) {
+		frm.set_query("party_type", function () {
 			return {
 				query: "erpnext.setup.doctype.party_type.party_type.get_party_type",
 			};
 		});
-	}
-})
+	},
+});
 
-frappe.ui.form.on("Payment Request", "onload", function(frm, dt, dn){
+frappe.ui.form.on("Payment Request", "onload", function (frm, dt, dn) {
 	if (frm.doc.reference_doctype) {
 		frappe.call({
-			method:"erpnext.accounts.doctype.payment_request.payment_request.get_print_format_list",
-			args: {"ref_doctype": frm.doc.reference_doctype},
-			callback:function(r){
-				set_field_options("print_format", r.message["print_format"])
-			}
-		})
+			method: "erpnext.accounts.doctype.payment_request.payment_request.get_print_format_list",
+			args: { ref_doctype: frm.doc.reference_doctype },
+			callback: function (r) {
+				set_field_options("print_format", r.message["print_format"]);
+			},
+		});
 	}
-})
+});
 
-frappe.ui.form.on("Payment Request", "refresh", function(frm) {
-	if(frm.doc.status == 'Failed'){
+frappe.ui.form.on("Payment Request", "refresh", function (frm) {
+	if (frm.doc.status == "Failed") {
 		frm.set_intro(__("Failure: {0}", [frm.doc.failed_reason]), "red");
 	}
 
-	if(frm.doc.payment_request_type == 'Inward' && frm.doc.payment_channel !== "Phone" &&
-		!in_list(["Initiated", "Paid"], frm.doc.status) && !frm.doc.__islocal && frm.doc.docstatus==1){
-		frm.add_custom_button(__('Resend Payment Email'), function(){
+	if (
+		frm.doc.payment_request_type == "Inward" &&
+		frm.doc.payment_channel !== "Phone" &&
+		!in_list(["Initiated", "Paid"], frm.doc.status) &&
+		!frm.doc.__islocal &&
+		frm.doc.docstatus == 1
+	) {
+		frm.add_custom_button(__("Resend Payment Email"), function () {
 			frappe.call({
 				method: "erpnext.accounts.doctype.payment_request.payment_request.resend_payment_email",
-				args: {"docname": frm.doc.name},
+				args: { docname: frm.doc.name },
 				freeze: true,
 				freeze_message: __("Sending"),
-				callback: function(r){
-					if(!r.exc) {
+				callback: function (r) {
+					if (!r.exc) {
 						frappe.msgprint(__("Message Sent"));
 					}
-				}
+				},
 			});
 		});
 	}
 
-	if((!frm.doc.payment_gateway_account || frm.doc.payment_request_type == "Outward") && frm.doc.status == "Initiated") {
-		frm.add_custom_button(__('Create Payment Entry'), function(){
+	if (
+		(!frm.doc.payment_gateway_account || frm.doc.payment_request_type == "Outward") &&
+		frm.doc.status == "Initiated"
+	) {
+		frm.add_custom_button(__("Create Payment Entry"), function () {
 			frappe.call({
 				method: "erpnext.accounts.doctype.payment_request.payment_request.make_payment_entry",
-				args: {"docname": frm.doc.name},
+				args: { docname: frm.doc.name },
 				freeze: true,
-				callback: function(r){
-					if(!r.exc) {
+				callback: function (r) {
+					if (!r.exc) {
 						var doc = frappe.model.sync(r.message);
 						frappe.set_route("Form", r.message.doctype, r.message.name);
 					}
-				}
+				},
 			});
 		}).addClass("btn-primary");
 	}
 });
 
-frappe.ui.form.on("Payment Request", "is_a_subscription", function(frm) {
+frappe.ui.form.on("Payment Request", "is_a_subscription", function (frm) {
 	frm.toggle_reqd("payment_gateway_account", frm.doc.is_a_subscription);
 	frm.toggle_reqd("subscription_plans", frm.doc.is_a_subscription);
 
 	if (frm.doc.is_a_subscription && frm.doc.reference_doctype && frm.doc.reference_name) {
 		frappe.call({
 			method: "erpnext.accounts.doctype.payment_request.payment_request.get_subscription_details",
-			args: {"reference_doctype": frm.doc.reference_doctype, "reference_name": frm.doc.reference_name},
+			args: { reference_doctype: frm.doc.reference_doctype, reference_name: frm.doc.reference_name },
 			freeze: true,
-			callback: function(data){
-				if(!data.exc) {
-					$.each(data.message || [], function(i, v){
-						var d = frappe.model.add_child(frm.doc, "Subscription Plan Detail", "subscription_plans");
+			callback: function (data) {
+				if (!data.exc) {
+					$.each(data.message || [], function (i, v) {
+						var d = frappe.model.add_child(
+							frm.doc,
+							"Subscription Plan Detail",
+							"subscription_plans"
+						);
 						d.qty = v.qty;
 						d.plan = v.plan;
 					});
 					frm.refresh_field("subscription_plans");
 				}
-			}
+			},
 		});
 	}
 });
diff --git a/erpnext/accounts/doctype/payment_request/payment_request_list.js b/erpnext/accounts/doctype/payment_request/payment_request_list.js
index 43f7856..6e3dcef 100644
--- a/erpnext/accounts/doctype/payment_request/payment_request_list.js
+++ b/erpnext/accounts/doctype/payment_request/payment_request_list.js
@@ -1,26 +1,21 @@
-frappe.listview_settings['Payment Request'] = {
+frappe.listview_settings["Payment Request"] = {
 	add_fields: ["status"],
-	get_indicator: function(doc) {
-		if(doc.status == "Draft") {
+	get_indicator: function (doc) {
+		if (doc.status == "Draft") {
 			return [__("Draft"), "gray", "status,=,Draft"];
 		}
-		if(doc.status == "Requested") {
+		if (doc.status == "Requested") {
 			return [__("Requested"), "green", "status,=,Requested"];
-		}
-		else if(doc.status == "Initiated") {
+		} else if (doc.status == "Initiated") {
 			return [__("Initiated"), "green", "status,=,Initiated"];
-		}
-		else if(doc.status == "Partially Paid") {
+		} else if (doc.status == "Partially Paid") {
 			return [__("Partially Paid"), "orange", "status,=,Partially Paid"];
-		}
-		else if(doc.status == "Paid") {
+		} else if (doc.status == "Paid") {
 			return [__("Paid"), "blue", "status,=,Paid"];
-		}
-		else if(doc.status == "Failed") {
+		} else if (doc.status == "Failed") {
 			return [__("Failed"), "red", "status,=,Failed"];
-		}
-		else if(doc.status == "Cancelled") {
+		} else if (doc.status == "Cancelled") {
 			return [__("Cancelled"), "red", "status,=,Cancelled"];
 		}
-	}
-}
+	},
+};
diff --git a/erpnext/accounts/doctype/payment_term/payment_term.js b/erpnext/accounts/doctype/payment_term/payment_term.js
index 0898a09..96cc507 100644
--- a/erpnext/accounts/doctype/payment_term/payment_term.js
+++ b/erpnext/accounts/doctype/payment_term/payment_term.js
@@ -1,22 +1,24 @@
 // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
-frappe.ui.form.on('Payment Term', {
+frappe.ui.form.on("Payment Term", {
 	onload(frm) {
-		frm.trigger('set_dynamic_description');
+		frm.trigger("set_dynamic_description");
 	},
 	discount(frm) {
-		frm.trigger('set_dynamic_description');
+		frm.trigger("set_dynamic_description");
 	},
 	discount_type(frm) {
-		frm.trigger('set_dynamic_description');
+		frm.trigger("set_dynamic_description");
 	},
 	set_dynamic_description(frm) {
 		if (frm.doc.discount) {
-			let description = __("{0}% of total invoice value will be given as discount.", [frm.doc.discount]);
-			if (frm.doc.discount_type == 'Amount') {
+			let description = __("{0}% of total invoice value will be given as discount.", [
+				frm.doc.discount,
+			]);
+			if (frm.doc.discount_type == "Amount") {
 				description = __("{0} will be given as discount.", [frm.doc.discount]);
 			}
 			frm.set_df_property("discount", "description", description);
 		}
-	}
+	},
 });
diff --git a/erpnext/accounts/doctype/payment_terms_template/payment_terms_template.js b/erpnext/accounts/doctype/payment_terms_template/payment_terms_template.js
index 6046c13..b766c3b 100644
--- a/erpnext/accounts/doctype/payment_terms_template/payment_terms_template.js
+++ b/erpnext/accounts/doctype/payment_terms_template/payment_terms_template.js
@@ -1,12 +1,18 @@
 // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Payment Terms Template', {
-	refresh: function(frm) {
-		frm.fields_dict.terms.grid.toggle_reqd("payment_term", frm.doc.allocate_payment_based_on_payment_terms);
+frappe.ui.form.on("Payment Terms Template", {
+	refresh: function (frm) {
+		frm.fields_dict.terms.grid.toggle_reqd(
+			"payment_term",
+			frm.doc.allocate_payment_based_on_payment_terms
+		);
 	},
 
-	allocate_payment_based_on_payment_terms: function(frm) {
-		frm.fields_dict.terms.grid.toggle_reqd("payment_term", frm.doc.allocate_payment_based_on_payment_terms);
-	}
+	allocate_payment_based_on_payment_terms: function (frm) {
+		frm.fields_dict.terms.grid.toggle_reqd(
+			"payment_term",
+			frm.doc.allocate_payment_based_on_payment_terms
+		);
+	},
 });
diff --git a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.js b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.js
index e923d4e..82d8cb3 100644
--- a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.js
+++ b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.js
@@ -1,38 +1,41 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.ui.form.on('Period Closing Voucher', {
-	onload: function(frm) {
+frappe.ui.form.on("Period Closing Voucher", {
+	onload: function (frm) {
 		if (!frm.doc.transaction_date) frm.doc.transaction_date = frappe.datetime.obj_to_str(new Date());
 	},
 
-	setup: function(frm) {
-		frm.set_query("closing_account_head", function() {
+	setup: function (frm) {
+		frm.set_query("closing_account_head", function () {
 			return {
 				filters: [
-					['Account', 'company', '=', frm.doc.company],
-					['Account', 'is_group', '=', '0'],
-					['Account', 'freeze_account', '=', 'No'],
-					['Account', 'root_type', 'in', 'Liability, Equity']
-				]
-			}
+					["Account", "company", "=", frm.doc.company],
+					["Account", "is_group", "=", "0"],
+					["Account", "freeze_account", "=", "No"],
+					["Account", "root_type", "in", "Liability, Equity"],
+				],
+			};
 		});
 	},
 
-	refresh: function(frm) {
-		if(frm.doc.docstatus > 0) {
-			frm.add_custom_button(__('Ledger'), function() {
-				frappe.route_options = {
-					"voucher_no": frm.doc.name,
-					"from_date": frm.doc.posting_date,
-					"to_date": moment(frm.doc.modified).format('YYYY-MM-DD'),
-					"company": frm.doc.company,
-					"group_by": "",
-					"show_cancelled_entries": frm.doc.docstatus === 2
-				};
-				frappe.set_route("query-report", "General Ledger");
-			}, "fa fa-table");
+	refresh: function (frm) {
+		if (frm.doc.docstatus > 0) {
+			frm.add_custom_button(
+				__("Ledger"),
+				function () {
+					frappe.route_options = {
+						voucher_no: frm.doc.name,
+						from_date: frm.doc.posting_date,
+						to_date: moment(frm.doc.modified).format("YYYY-MM-DD"),
+						company: frm.doc.company,
+						group_by: "",
+						show_cancelled_entries: frm.doc.docstatus === 2,
+					};
+					frappe.set_route("query-report", "General Ledger");
+				},
+				"fa fa-table"
+			);
 		}
-	}
-
-})
+	},
+});
diff --git a/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.js b/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.js
index faceaf3..68a85f7 100644
--- a/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.js
+++ b/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.js
@@ -1,36 +1,37 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('POS Closing Entry', {
-	onload: function(frm) {
-		frm.ignore_doctypes_on_cancel_all = ['POS Invoice Merge Log'];
-		frm.set_query("pos_profile", function(doc) {
+frappe.ui.form.on("POS Closing Entry", {
+	onload: function (frm) {
+		frm.ignore_doctypes_on_cancel_all = ["POS Invoice Merge Log"];
+		frm.set_query("pos_profile", function (doc) {
 			return {
-				filters: { 'user': doc.user }
+				filters: { user: doc.user },
 			};
 		});
 
-		frm.set_query("user", function(doc) {
+		frm.set_query("user", function (doc) {
 			return {
 				query: "erpnext.accounts.doctype.pos_closing_entry.pos_closing_entry.get_cashiers",
-				filters: { 'parent': doc.pos_profile }
+				filters: { parent: doc.pos_profile },
 			};
 		});
 
-		frm.set_query("pos_opening_entry", function(doc) {
-			return { filters: { 'status': 'Open', 'docstatus': 1 } };
+		frm.set_query("pos_opening_entry", function (doc) {
+			return { filters: { status: "Open", docstatus: 1 } };
 		});
 
-		if (frm.doc.docstatus === 0 && !frm.doc.amended_from) frm.set_value("period_end_date", frappe.datetime.now_datetime());
+		if (frm.doc.docstatus === 0 && !frm.doc.amended_from)
+			frm.set_value("period_end_date", frappe.datetime.now_datetime());
 
-		frappe.realtime.on('closing_process_complete', async function(data) {
+		frappe.realtime.on("closing_process_complete", async function (data) {
 			await frm.reload_doc();
-			if (frm.doc.status == 'Failed' && frm.doc.error_message) {
+			if (frm.doc.status == "Failed" && frm.doc.error_message) {
 				frappe.msgprint({
-					title: __('POS Closing Failed'),
+					title: __("POS Closing Failed"),
 					message: frm.doc.error_message,
-					indicator: 'orange',
-					clear: true
+					indicator: "orange",
+					clear: true,
 				});
 			}
 		});
@@ -47,23 +48,23 @@
 		}
 	},
 
-	refresh: function(frm) {
-		if (frm.doc.docstatus == 1 && frm.doc.status == 'Failed') {
+	refresh: function (frm) {
+		if (frm.doc.docstatus == 1 && frm.doc.status == "Failed") {
 			const issue = '<a id="jump_to_error" style="text-decoration: underline;">issue</a>';
 			frm.dashboard.set_headline(
-				__('POS Closing failed while running in a background process. You can resolve the {0} and retry the process again.', [issue]));
+				__(
+					"POS Closing failed while running in a background process. You can resolve the {0} and retry the process again.",
+					[issue]
+				)
+			);
 
-			$('#jump_to_error').on('click', (e) => {
+			$("#jump_to_error").on("click", (e) => {
 				e.preventDefault();
-				frappe.utils.scroll_to(
-					cur_frm.get_field("error_message").$wrapper,
-					true,
-					30
-				);
+				frappe.utils.scroll_to(cur_frm.get_field("error_message").$wrapper, true, 30);
 			});
 
-			frm.add_custom_button(__('Retry'), function () {
-				frm.call('retry', {}, () => {
+			frm.add_custom_button(__("Retry"), function () {
+				frm.call("retry", {}, () => {
 					frm.reload_doc();
 				});
 			});
@@ -71,48 +72,54 @@
 	},
 
 	pos_opening_entry(frm) {
-		if (frm.doc.pos_opening_entry && frm.doc.period_start_date && frm.doc.period_end_date && frm.doc.user) {
+		if (
+			frm.doc.pos_opening_entry &&
+			frm.doc.period_start_date &&
+			frm.doc.period_end_date &&
+			frm.doc.user
+		) {
 			reset_values(frm);
 			frappe.run_serially([
 				() => frm.trigger("set_opening_amounts"),
-				() => frm.trigger("get_pos_invoices")
+				() => frm.trigger("get_pos_invoices"),
 			]);
 		}
 	},
 
 	set_opening_amounts(frm) {
-		return frappe.db.get_doc("POS Opening Entry", frm.doc.pos_opening_entry)
+		return frappe.db
+			.get_doc("POS Opening Entry", frm.doc.pos_opening_entry)
 			.then(({ balance_details }) => {
-				balance_details.forEach(detail => {
+				balance_details.forEach((detail) => {
 					frm.add_child("payment_reconciliation", {
 						mode_of_payment: detail.mode_of_payment,
 						opening_amount: detail.opening_amount,
-						expected_amount: detail.opening_amount
+						expected_amount: detail.opening_amount,
 					});
-				})
+				});
 			});
 	},
 
 	get_pos_invoices(frm) {
 		return frappe.call({
-			method: 'erpnext.accounts.doctype.pos_closing_entry.pos_closing_entry.get_pos_invoices',
+			method: "erpnext.accounts.doctype.pos_closing_entry.pos_closing_entry.get_pos_invoices",
 			args: {
 				start: frappe.datetime.get_datetime_as_string(frm.doc.period_start_date),
 				end: frappe.datetime.get_datetime_as_string(frm.doc.period_end_date),
 				pos_profile: frm.doc.pos_profile,
-				user: frm.doc.user
+				user: frm.doc.user,
 			},
 			callback: (r) => {
 				let pos_docs = r.message;
 				set_form_data(pos_docs, frm);
 				refresh_fields(frm);
 				set_html_data(frm);
-			}
+			},
 		});
 	},
 
-	before_save: async function(frm) {
-		frappe.dom.freeze(__('Processing Sales! Please Wait...'));
+	before_save: async function (frm) {
+		frappe.dom.freeze(__("Processing Sales! Please Wait..."));
 
 		frm.set_value("grand_total", 0);
 		frm.set_value("net_total", 0);
@@ -125,12 +132,12 @@
 
 		await Promise.all([
 			frappe.call({
-				method: 'erpnext.accounts.doctype.pos_closing_entry.pos_closing_entry.get_pos_invoices',
+				method: "erpnext.accounts.doctype.pos_closing_entry.pos_closing_entry.get_pos_invoices",
 				args: {
 					start: frappe.datetime.get_datetime_as_string(frm.doc.period_start_date),
 					end: frappe.datetime.get_datetime_as_string(frm.doc.period_end_date),
 					pos_profile: frm.doc.pos_profile,
-					user: frm.doc.user
+					user: frm.doc.user,
 				},
 				callback: (r) => {
 					let pos_invoices = r.message;
@@ -143,22 +150,22 @@
 						refresh_fields(frm);
 						set_html_data(frm);
 					}
-				}
-			})
-		])
+				},
+			}),
+		]);
 		frappe.dom.unfreeze();
-	}
+	},
 });
 
-frappe.ui.form.on('POS Closing Entry Detail', {
+frappe.ui.form.on("POS Closing Entry Detail", {
 	closing_amount: (frm, cdt, cdn) => {
 		const row = locals[cdt][cdn];
 		frappe.model.set_value(cdt, cdn, "difference", flt(row.closing_amount - row.expected_amount));
-	}
-})
+	},
+});
 
 function set_form_data(data, frm) {
-	data.forEach(d => {
+	data.forEach((d) => {
 		add_to_pos_transaction(d, frm);
 		frm.doc.grand_total += flt(d.grand_total);
 		frm.doc.net_total += flt(d.net_total);
@@ -173,13 +180,15 @@
 		pos_invoice: d.name,
 		posting_date: d.posting_date,
 		grand_total: d.grand_total,
-		customer: d.customer
-	})
+		customer: d.customer,
+	});
 }
 
 function refresh_payments(d, frm) {
-	d.payments.forEach(p => {
-		const payment = frm.doc.payment_reconciliation.find(pay => pay.mode_of_payment === p.mode_of_payment);
+	d.payments.forEach((p) => {
+		const payment = frm.doc.payment_reconciliation.find(
+			(pay) => pay.mode_of_payment === p.mode_of_payment
+		);
 		if (p.account == d.account_for_change_amount) {
 			p.amount -= flt(d.change_amount);
 		}
@@ -192,25 +201,25 @@
 				mode_of_payment: p.mode_of_payment,
 				opening_amount: 0,
 				expected_amount: p.amount,
-				closing_amount: 0
-			})
+				closing_amount: 0,
+			});
 		}
-	})
+	});
 }
 
 function refresh_taxes(d, frm) {
-	d.taxes.forEach(t => {
-		const tax = frm.doc.taxes.find(tx => tx.account_head === t.account_head && tx.rate === t.rate);
+	d.taxes.forEach((t) => {
+		const tax = frm.doc.taxes.find((tx) => tx.account_head === t.account_head && tx.rate === t.rate);
 		if (tax) {
 			tax.amount += flt(t.tax_amount);
 		} else {
 			frm.add_child("taxes", {
 				account_head: t.account_head,
 				rate: t.rate,
-				amount: t.tax_amount
-			})
+				amount: t.tax_amount,
+			});
 		}
-	})
+	});
 }
 
 function reset_values(frm) {
@@ -232,13 +241,13 @@
 }
 
 function set_html_data(frm) {
-	if (frm.doc.docstatus === 1 && frm.doc.status == 'Submitted') {
+	if (frm.doc.docstatus === 1 && frm.doc.status == "Submitted") {
 		frappe.call({
 			method: "get_payment_reconciliation_details",
 			doc: frm.doc,
 			callback: (r) => {
 				frm.get_field("payment_reconciliation_details").$wrapper.html(r.message);
-			}
+			},
 		});
 	}
 }
diff --git a/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry_list.js b/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry_list.js
index cffeb4d..29f00fb 100644
--- a/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry_list.js
+++ b/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry_list.js
@@ -2,16 +2,15 @@
 // License: GNU General Public License v3. See license.txt
 
 // render
-frappe.listview_settings['POS Closing Entry'] = {
-	get_indicator: function(doc) {
+frappe.listview_settings["POS Closing Entry"] = {
+	get_indicator: function (doc) {
 		var status_color = {
-			"Draft": "red",
-			"Submitted": "blue",
-			"Queued": "orange",
-			"Failed": "red",
-			"Cancelled": "red"
-
+			Draft: "red",
+			Submitted: "blue",
+			Queued: "orange",
+			Failed: "red",
+			Cancelled: "red",
 		};
-		return [__(doc.status), status_color[doc.status], "status,=,"+doc.status];
-	}
+		return [__(doc.status), status_color[doc.status], "status,=," + doc.status];
+	},
 };
diff --git a/erpnext/accounts/doctype/pos_invoice/pos_invoice.js b/erpnext/accounts/doctype/pos_invoice/pos_invoice.js
index ae132eb..a6e8bfa 100644
--- a/erpnext/accounts/doctype/pos_invoice/pos_invoice.js
+++ b/erpnext/accounts/doctype/pos_invoice/pos_invoice.js
@@ -21,19 +21,23 @@
 
 	onload(doc) {
 		super.onload();
-		this.frm.ignore_doctypes_on_cancel_all = ['POS Invoice Merge Log', 'POS Closing Entry', 'Serial and Batch Bundle'];
+		this.frm.ignore_doctypes_on_cancel_all = [
+			"POS Invoice Merge Log",
+			"POS Closing Entry",
+			"Serial and Batch Bundle",
+		];
 
-		if(doc.__islocal && doc.is_pos && frappe.get_route_str() !== 'point-of-sale') {
+		if (doc.__islocal && doc.is_pos && frappe.get_route_str() !== "point-of-sale") {
 			this.frm.script_manager.trigger("is_pos");
 			this.frm.refresh_fields();
 		}
 
-		this.frm.set_query("set_warehouse", function(doc) {
+		this.frm.set_query("set_warehouse", function (doc) {
 			return {
 				filters: {
-					company: doc.company ? doc.company : '',
-				}
-			}
+					company: doc.company ? doc.company : "",
+				},
+			};
 		});
 
 		erpnext.accounts.dimensions.setup_dimension_filters(this.frm, this.frm.doctype);
@@ -47,26 +51,29 @@
 		super.refresh();
 
 		if (doc.docstatus == 1 && !doc.is_return) {
-			this.frm.add_custom_button(__('Return'), this.make_sales_return, __('Create'));
-			this.frm.page.set_inner_btn_group_as_primary(__('Create'));
+			this.frm.add_custom_button(__("Return"), this.make_sales_return, __("Create"));
+			this.frm.page.set_inner_btn_group_as_primary(__("Create"));
 		}
 
 		if (doc.is_return && doc.__islocal) {
 			this.frm.return_print_format = "Sales Invoice Return";
-			this.frm.set_value('consolidated_invoice', '');
+			this.frm.set_value("consolidated_invoice", "");
 		}
 
-		this.frm.set_query("customer", (function () {
-			const customer_groups = this.settings?.customer_groups;
+		this.frm.set_query(
+			"customer",
+			function () {
+				const customer_groups = this.settings?.customer_groups;
 
-			if (!customer_groups?.length) return {};
+				if (!customer_groups?.length) return {};
 
-			return {
-				filters: {
-					customer_group: ["in", customer_groups],
-				}
-			}
-		}).bind(this));
+				return {
+					filters: {
+						customer_group: ["in", customer_groups],
+					},
+				};
+			}.bind(this)
+		);
 	}
 
 	is_pos() {
@@ -74,19 +81,19 @@
 	}
 
 	async set_pos_data() {
-		if(this.frm.doc.is_pos) {
+		if (this.frm.doc.is_pos) {
 			this.frm.set_value("allocate_advances_automatically", 0);
-			if(!this.frm.doc.company) {
+			if (!this.frm.doc.company) {
 				this.frm.set_value("is_pos", 0);
 				frappe.msgprint(__("Please specify Company to proceed"));
 			} else {
 				const r = await this.frm.call({
 					doc: this.frm.doc,
 					method: "set_missing_values",
-					freeze: true
+					freeze: true,
 				});
-				if(!r.exc) {
-					if(r.message) {
+				if (!r.exc) {
+					if (r.message) {
 						this.frm.pos_print_format = r.message.print_format || "";
 						this.frm.meta.default_print_format = r.message.print_format || "";
 						this.frm.doc.campaign = r.message.campaign;
@@ -103,32 +110,36 @@
 	}
 
 	customer() {
-		if (!this.frm.doc.customer) return
+		if (!this.frm.doc.customer) return;
 		const pos_profile = this.frm.doc.pos_profile;
-		if(this.frm.updating_party_details) return;
-		erpnext.utils.get_party_details(this.frm,
-			"erpnext.accounts.party.get_party_details", {
+		if (this.frm.updating_party_details) return;
+		erpnext.utils.get_party_details(
+			this.frm,
+			"erpnext.accounts.party.get_party_details",
+			{
 				posting_date: this.frm.doc.posting_date,
 				party: this.frm.doc.customer,
 				party_type: "Customer",
 				account: this.frm.doc.debit_to,
 				price_list: this.frm.doc.selling_price_list,
 				pos_profile: pos_profile,
-				company_address: this.frm.doc.company_address
-			}, () => {
+				company_address: this.frm.doc.company_address,
+			},
+			() => {
 				this.apply_pricing_rule();
-			});
+			}
+		);
 	}
 
 	pos_profile(frm) {
-		if (!frm.pos_profile || frm.pos_profile == '') {
+		if (!frm.pos_profile || frm.pos_profile == "") {
 			this.update_customer_groups_settings([]);
 			return;
 		}
 
 		frappe.call({
 			method: "erpnext.selling.page.point_of_sale.point_of_sale.get_pos_profile_data",
-			args: { "pos_profile": frm.pos_profile },
+			args: { pos_profile: frm.pos_profile },
 			callback: ({ message: profile }) => {
 				this.update_customer_groups_settings(profile?.customer_groups);
 				this.frm.set_value("company", profile?.company);
@@ -137,17 +148,17 @@
 	}
 
 	update_customer_groups_settings(customer_groups) {
-		this.settings.customer_groups = customer_groups?.map((group) => group.name)
+		this.settings.customer_groups = customer_groups?.map((group) => group.name);
 	}
 
-	amount(){
-		this.write_off_outstanding_amount_automatically()
+	amount() {
+		this.write_off_outstanding_amount_automatically();
 	}
 
-	change_amount(){
-		if(this.frm.doc.paid_amount > this.frm.doc.grand_total){
+	change_amount() {
+		if (this.frm.doc.paid_amount > this.frm.doc.grand_total) {
 			this.calculate_write_off_amount();
-		}else {
+		} else {
 			this.frm.set_value("change_amount", 0.0);
 			this.frm.set_value("base_change_amount", 0.0);
 		}
@@ -155,7 +166,7 @@
 		this.frm.refresh_fields();
 	}
 
-	loyalty_amount(){
+	loyalty_amount() {
 		this.calculate_outstanding_amount();
 		this.frm.refresh_field("outstanding_amount");
 		this.frm.refresh_field("paid_amount");
@@ -166,8 +177,12 @@
 		if (cint(this.frm.doc.write_off_outstanding_amount_automatically)) {
 			frappe.model.round_floats_in(this.frm.doc, ["grand_total", "paid_amount"]);
 			// this will make outstanding amount 0
-			this.frm.set_value("write_off_amount",
-				flt(this.frm.doc.grand_total - this.frm.doc.paid_amount - this.frm.doc.total_advance, precision("write_off_amount"))
+			this.frm.set_value(
+				"write_off_amount",
+				flt(
+					this.frm.doc.grand_total - this.frm.doc.paid_amount - this.frm.doc.total_advance,
+					precision("write_off_amount")
+				)
 			);
 		}
 
@@ -178,65 +193,69 @@
 	make_sales_return() {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.accounts.doctype.pos_invoice.pos_invoice.make_sales_return",
-			frm: cur_frm
-		})
+			frm: cur_frm,
+		});
 	}
-}
+};
 
-extend_cscript(cur_frm.cscript, new erpnext.selling.POSInvoiceController({ frm: cur_frm }))
+extend_cscript(cur_frm.cscript, new erpnext.selling.POSInvoiceController({ frm: cur_frm }));
 
-frappe.ui.form.on('POS Invoice', {
-	redeem_loyalty_points: function(frm) {
+frappe.ui.form.on("POS Invoice", {
+	redeem_loyalty_points: function (frm) {
 		frm.events.get_loyalty_details(frm);
 	},
 
-	loyalty_points: function(frm) {
+	loyalty_points: function (frm) {
 		if (frm.redemption_conversion_factor) {
 			frm.events.set_loyalty_points(frm);
 		} else {
 			frappe.call({
 				method: "erpnext.accounts.doctype.loyalty_program.loyalty_program.get_redeemption_factor",
 				args: {
-					"loyalty_program": frm.doc.loyalty_program
+					loyalty_program: frm.doc.loyalty_program,
 				},
-				callback: function(r) {
+				callback: function (r) {
 					if (r) {
 						frm.redemption_conversion_factor = r.message;
 						frm.events.set_loyalty_points(frm);
 					}
-				}
+				},
 			});
 		}
 	},
 
-	get_loyalty_details: function(frm) {
+	get_loyalty_details: function (frm) {
 		if (frm.doc.customer && frm.doc.redeem_loyalty_points) {
 			frappe.call({
 				method: "erpnext.accounts.doctype.loyalty_program.loyalty_program.get_loyalty_program_details",
 				args: {
-					"customer": frm.doc.customer,
-					"loyalty_program": frm.doc.loyalty_program,
-					"expiry_date": frm.doc.posting_date,
-					"company": frm.doc.company
+					customer: frm.doc.customer,
+					loyalty_program: frm.doc.loyalty_program,
+					expiry_date: frm.doc.posting_date,
+					company: frm.doc.company,
 				},
-				callback: function(r) {
+				callback: function (r) {
 					if (r) {
 						frm.set_value("loyalty_redemption_account", r.message.expense_account);
 						frm.set_value("loyalty_redemption_cost_center", r.message.cost_center);
 						frm.redemption_conversion_factor = r.message.conversion_factor;
 					}
-				}
+				},
 			});
 		}
 	},
 
-	set_loyalty_points: function(frm) {
+	set_loyalty_points: function (frm) {
 		if (frm.redemption_conversion_factor) {
-			let loyalty_amount = flt(frm.redemption_conversion_factor*flt(frm.doc.loyalty_points), precision("loyalty_amount"));
-			var remaining_amount = flt(frm.doc.grand_total) - flt(frm.doc.total_advance) - flt(frm.doc.write_off_amount);
-			if (frm.doc.grand_total && (remaining_amount < loyalty_amount)) {
-				let redeemable_points = parseInt(remaining_amount/frm.redemption_conversion_factor);
-				frappe.throw(__("You can only redeem max {0} points in this order.",[redeemable_points]));
+			let loyalty_amount = flt(
+				frm.redemption_conversion_factor * flt(frm.doc.loyalty_points),
+				precision("loyalty_amount")
+			);
+			var remaining_amount =
+				flt(frm.doc.grand_total) - flt(frm.doc.total_advance) - flt(frm.doc.write_off_amount);
+			if (frm.doc.grand_total && remaining_amount < loyalty_amount) {
+				let redeemable_points = parseInt(remaining_amount / frm.redemption_conversion_factor);
+				frappe.throw(__("You can only redeem max {0} points in this order.", [redeemable_points]));
 			}
 			frm.set_value("loyalty_amount", loyalty_amount);
 		}
@@ -244,43 +263,49 @@
 
 	request_for_payment: function (frm) {
 		if (!frm.doc.contact_mobile) {
-			frappe.throw(__('Please enter mobile number first.'));
+			frappe.throw(__("Please enter mobile number first."));
 		}
 		frm.dirty();
 		frm.save().then(() => {
-			frappe.dom.freeze(__('Waiting for payment...'));
+			frappe.dom.freeze(__("Waiting for payment..."));
 			frappe
 				.call({
-					method: 'create_payment_request',
-					doc: frm.doc
+					method: "create_payment_request",
+					doc: frm.doc,
 				})
 				.fail(() => {
 					frappe.dom.unfreeze();
-					frappe.msgprint(__('Payment request failed'));
+					frappe.msgprint(__("Payment request failed"));
 				})
 				.then(({ message }) => {
 					const payment_request_name = message.name;
 					setTimeout(() => {
-						frappe.db.get_value('Payment Request', payment_request_name, ['status', 'grand_total']).then(({ message }) => {
-							if (message.status != 'Paid') {
-								frappe.dom.unfreeze();
-								frappe.msgprint({
-									message: __('Payment Request took too long to respond. Please try requesting for payment again.'),
-									title: __('Request Timeout')
-								});
-							} else if (frappe.dom.freeze_count != 0) {
-								frappe.dom.unfreeze();
-								cur_frm.reload_doc();
-								cur_pos.payment.events.submit_invoice();
+						frappe.db
+							.get_value("Payment Request", payment_request_name, ["status", "grand_total"])
+							.then(({ message }) => {
+								if (message.status != "Paid") {
+									frappe.dom.unfreeze();
+									frappe.msgprint({
+										message: __(
+											"Payment Request took too long to respond. Please try requesting for payment again."
+										),
+										title: __("Request Timeout"),
+									});
+								} else if (frappe.dom.freeze_count != 0) {
+									frappe.dom.unfreeze();
+									cur_frm.reload_doc();
+									cur_pos.payment.events.submit_invoice();
 
-								frappe.show_alert({
-									message: __("Payment of {0} received successfully.", [format_currency(message.grand_total, frm.doc.currency, 0)]),
-									indicator: 'green'
-								});
-							}
-						});
+									frappe.show_alert({
+										message: __("Payment of {0} received successfully.", [
+											format_currency(message.grand_total, frm.doc.currency, 0),
+										]),
+										indicator: "green",
+									});
+								}
+							});
 					}, 60000);
 				});
 		});
-	}
+	},
 });
diff --git a/erpnext/accounts/doctype/pos_invoice/pos_invoice_list.js b/erpnext/accounts/doctype/pos_invoice/pos_invoice_list.js
index 2dbf2a4..0379932 100644
--- a/erpnext/accounts/doctype/pos_invoice/pos_invoice_list.js
+++ b/erpnext/accounts/doctype/pos_invoice/pos_invoice_list.js
@@ -2,40 +2,47 @@
 // License: GNU General Public License v3. See license.txt
 
 // render
-frappe.listview_settings['POS Invoice'] = {
-	add_fields: ["customer", "customer_name", "base_grand_total", "outstanding_amount", "due_date", "company",
-		"currency", "is_return"],
-	get_indicator: function(doc) {
+frappe.listview_settings["POS Invoice"] = {
+	add_fields: [
+		"customer",
+		"customer_name",
+		"base_grand_total",
+		"outstanding_amount",
+		"due_date",
+		"company",
+		"currency",
+		"is_return",
+	],
+	get_indicator: function (doc) {
 		var status_color = {
-			"Draft": "red",
-			"Unpaid": "orange",
-			"Paid": "green",
-			"Submitted": "blue",
-			"Consolidated": "green",
-			"Return": "darkgrey",
+			Draft: "red",
+			Unpaid: "orange",
+			Paid: "green",
+			Submitted: "blue",
+			Consolidated: "green",
+			Return: "darkgrey",
 			"Unpaid and Discounted": "orange",
 			"Overdue and Discounted": "red",
-			"Overdue": "red"
-
+			Overdue: "red",
 		};
-		return [__(doc.status), status_color[doc.status], "status,=,"+doc.status];
+		return [__(doc.status), status_color[doc.status], "status,=," + doc.status];
 	},
 	right_column: "grand_total",
-	onload: function(me) {
-		me.page.add_action_item('Make Merge Log', function() {
+	onload: function (me) {
+		me.page.add_action_item("Make Merge Log", function () {
 			const invoices = me.get_checked_items();
 			frappe.call({
 				method: "erpnext.accounts.doctype.pos_invoice.pos_invoice.make_merge_log",
 				freeze: true,
-				args:{
-					"invoices": invoices
+				args: {
+					invoices: invoices,
 				},
 				callback: function (r) {
 					if (r.message) {
 						var doc = frappe.model.sync(r.message)[0];
 						frappe.set_route("Form", doc.doctype, doc.name);
 					}
-				}
+				},
 			});
 		});
 	},
diff --git a/erpnext/accounts/doctype/pos_invoice_merge_log/pos_invoice_merge_log.js b/erpnext/accounts/doctype/pos_invoice_merge_log/pos_invoice_merge_log.js
index 73c6290..8423987 100644
--- a/erpnext/accounts/doctype/pos_invoice_merge_log/pos_invoice_merge_log.js
+++ b/erpnext/accounts/doctype/pos_invoice_merge_log/pos_invoice_merge_log.js
@@ -1,21 +1,21 @@
 // Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('POS Invoice Merge Log', {
-	setup: function(frm) {
-		frm.set_query("pos_invoice", "pos_invoices", doc => {
+frappe.ui.form.on("POS Invoice Merge Log", {
+	setup: function (frm) {
+		frm.set_query("pos_invoice", "pos_invoices", (doc) => {
 			return {
 				filters: {
-					'docstatus': 1,
-					'customer': doc.customer,
-					'consolidated_invoice': ''
-				}
-			}
+					docstatus: 1,
+					customer: doc.customer,
+					consolidated_invoice: "",
+				},
+			};
 		});
 	},
 
-	merge_invoices_based_on: function(frm) {
-		frm.set_value('customer', '');
-		frm.set_value('customer_group', '');
-	}
+	merge_invoices_based_on: function (frm) {
+		frm.set_value("customer", "");
+		frm.set_value("customer_group", "");
+	},
 });
diff --git a/erpnext/accounts/doctype/pos_opening_entry/pos_opening_entry.js b/erpnext/accounts/doctype/pos_opening_entry/pos_opening_entry.js
index d23f348..6a316d5 100644
--- a/erpnext/accounts/doctype/pos_opening_entry/pos_opening_entry.js
+++ b/erpnext/accounts/doctype/pos_opening_entry/pos_opening_entry.js
@@ -1,56 +1,55 @@
 // Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('POS Opening Entry', {
+frappe.ui.form.on("POS Opening Entry", {
 	setup(frm) {
 		if (frm.doc.docstatus == 0) {
-			frm.trigger('set_posting_date_read_only');
-			frm.set_value('period_start_date', frappe.datetime.now_datetime());
-			frm.set_value('user', frappe.session.user);
+			frm.trigger("set_posting_date_read_only");
+			frm.set_value("period_start_date", frappe.datetime.now_datetime());
+			frm.set_value("user", frappe.session.user);
 		}
 
-		frm.set_query("user", function(doc) {
+		frm.set_query("user", function (doc) {
 			return {
 				query: "erpnext.accounts.doctype.pos_closing_entry.pos_closing_entry.get_cashiers",
-				filters: { 'parent': doc.pos_profile }
+				filters: { parent: doc.pos_profile },
 			};
 		});
 	},
 
 	refresh(frm) {
 		// set default posting date / time
-		if(frm.doc.docstatus == 0) {
-			if(!frm.doc.posting_date) {
-				frm.set_value('posting_date', frappe.datetime.nowdate());
+		if (frm.doc.docstatus == 0) {
+			if (!frm.doc.posting_date) {
+				frm.set_value("posting_date", frappe.datetime.nowdate());
 			}
-			frm.trigger('set_posting_date_read_only');
+			frm.trigger("set_posting_date_read_only");
 		}
 	},
 
 	set_posting_date_read_only(frm) {
-		if(frm.doc.docstatus == 0 && frm.doc.set_posting_date) {
-			frm.set_df_property('posting_date', 'read_only', 0);
+		if (frm.doc.docstatus == 0 && frm.doc.set_posting_date) {
+			frm.set_df_property("posting_date", "read_only", 0);
 		} else {
-			frm.set_df_property('posting_date', 'read_only', 1);
+			frm.set_df_property("posting_date", "read_only", 1);
 		}
 	},
 
 	set_posting_date(frm) {
-		frm.trigger('set_posting_date_read_only');
+		frm.trigger("set_posting_date_read_only");
 	},
 
 	pos_profile: (frm) => {
 		if (frm.doc.pos_profile) {
-			frappe.db.get_doc("POS Profile", frm.doc.pos_profile)
-				.then(({ payments }) => {
-					if (payments.length) {
-						frm.doc.balance_details = [];
-						payments.forEach(({ mode_of_payment }) => {
-							frm.add_child("balance_details", { mode_of_payment });
-						})
-						frm.refresh_field("balance_details");
-					}
-				});
+			frappe.db.get_doc("POS Profile", frm.doc.pos_profile).then(({ payments }) => {
+				if (payments.length) {
+					frm.doc.balance_details = [];
+					payments.forEach(({ mode_of_payment }) => {
+						frm.add_child("balance_details", { mode_of_payment });
+					});
+					frm.refresh_field("balance_details");
+				}
+			});
 		}
-	}
+	},
 });
diff --git a/erpnext/accounts/doctype/pos_opening_entry/pos_opening_entry_list.js b/erpnext/accounts/doctype/pos_opening_entry/pos_opening_entry_list.js
index 1ad3c91..7ff9c4b 100644
--- a/erpnext/accounts/doctype/pos_opening_entry/pos_opening_entry_list.js
+++ b/erpnext/accounts/doctype/pos_opening_entry/pos_opening_entry_list.js
@@ -2,15 +2,14 @@
 // License: GNU General Public License v3. See license.txt
 
 // render
-frappe.listview_settings['POS Opening Entry'] = {
-	get_indicator: function(doc) {
+frappe.listview_settings["POS Opening Entry"] = {
+	get_indicator: function (doc) {
 		var status_color = {
-			"Draft": "red",
-			"Open": "orange",
-			"Closed": "green",
-			"Cancelled": "red"
-
+			Draft: "red",
+			Open: "orange",
+			Closed: "green",
+			Cancelled: "red",
 		};
-		return [__(doc.status), status_color[doc.status], "status,=,"+doc.status];
-	}
+		return [__(doc.status), status_color[doc.status], "status,=," + doc.status];
+	},
 };
diff --git a/erpnext/accounts/doctype/pos_profile/pos_profile.js b/erpnext/accounts/doctype/pos_profile/pos_profile.js
index ceaafaa..31f0f07 100755
--- a/erpnext/accounts/doctype/pos_profile/pos_profile.js
+++ b/erpnext/accounts/doctype/pos_profile/pos_profile.js
@@ -1,149 +1,143 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
-frappe.ui.form.on('POS Profile', {
-	setup: function(frm) {
-		frm.set_query("selling_price_list", function() {
+frappe.ui.form.on("POS Profile", {
+	setup: function (frm) {
+		frm.set_query("selling_price_list", function () {
 			return { filters: { selling: 1 } };
 		});
 
-		frm.set_query("tc_name", function() {
+		frm.set_query("tc_name", function () {
 			return { filters: { selling: 1 } };
 		});
 
-		erpnext.queries.setup_queries(frm, "Warehouse", function() {
+		erpnext.queries.setup_queries(frm, "Warehouse", function () {
 			return erpnext.queries.warehouse(frm.doc);
 		});
 
-		frm.set_query("print_format", function() {
+		frm.set_query("print_format", function () {
 			return {
-				filters: [
-					['Print Format', 'doc_type', '=', 'POS Invoice']
-				]
+				filters: [["Print Format", "doc_type", "=", "POS Invoice"]],
 			};
 		});
 
-		frm.set_query("account_for_change_amount", function(doc) {
+		frm.set_query("account_for_change_amount", function (doc) {
 			if (!doc.company) {
-				frappe.throw(__('Please set Company'));
+				frappe.throw(__("Please set Company"));
 			}
 
 			return {
 				filters: {
-					account_type: ['in', ["Cash", "Bank"]],
+					account_type: ["in", ["Cash", "Bank"]],
 					is_group: 0,
-					company: doc.company
-				}
+					company: doc.company,
+				},
 			};
 		});
 
-		frm.set_query("taxes_and_charges", function() {
+		frm.set_query("taxes_and_charges", function () {
 			return {
 				filters: [
-					['Sales Taxes and Charges Template', 'company', '=', frm.doc.company],
-					['Sales Taxes and Charges Template', 'docstatus', '!=', 2]
-				]
+					["Sales Taxes and Charges Template", "company", "=", frm.doc.company],
+					["Sales Taxes and Charges Template", "docstatus", "!=", 2],
+				],
 			};
 		});
 
-		frm.set_query('company_address', function(doc) {
+		frm.set_query("company_address", function (doc) {
 			if (!doc.company) {
-				frappe.throw(__('Please set Company'));
+				frappe.throw(__("Please set Company"));
 			}
 
 			return {
-				query: 'frappe.contacts.doctype.address.address.address_query',
+				query: "frappe.contacts.doctype.address.address.address_query",
 				filters: {
-					link_doctype: 'Company',
-					link_name: doc.company
-				}
+					link_doctype: "Company",
+					link_name: doc.company,
+				},
 			};
 		});
 
-		frm.set_query('income_account', function(doc) {
+		frm.set_query("income_account", function (doc) {
 			if (!doc.company) {
-				frappe.throw(__('Please set Company'));
+				frappe.throw(__("Please set Company"));
 			}
 
 			return {
 				filters: {
-					'is_group': 0,
-					'company': doc.company,
-					'account_type': "Income Account"
-				}
+					is_group: 0,
+					company: doc.company,
+					account_type: "Income Account",
+				},
 			};
 		});
 
-		frm.set_query('cost_center', function(doc) {
+		frm.set_query("cost_center", function (doc) {
 			if (!doc.company) {
-				frappe.throw(__('Please set Company'));
+				frappe.throw(__("Please set Company"));
 			}
 
 			return {
 				filters: {
-					'company': doc.company,
-					'is_group': 0
-				}
+					company: doc.company,
+					is_group: 0,
+				},
 			};
 		});
 
-		frm.set_query('expense_account', function(doc) {
+		frm.set_query("expense_account", function (doc) {
 			if (!doc.company) {
-				frappe.throw(__('Please set Company'));
+				frappe.throw(__("Please set Company"));
 			}
 
 			return {
 				filters: {
-					"report_type": "Profit and Loss",
-					"company": doc.company,
-					"is_group": 0
-				}
+					report_type: "Profit and Loss",
+					company: doc.company,
+					is_group: 0,
+				},
 			};
 		});
 
-		frm.set_query("select_print_heading", function() {
+		frm.set_query("select_print_heading", function () {
 			return {
-				filters: [
-					['Print Heading', 'docstatus', '!=', 2]
-				]
+				filters: [["Print Heading", "docstatus", "!=", 2]],
 			};
 		});
 
-		frm.set_query("write_off_account", function(doc) {
+		frm.set_query("write_off_account", function (doc) {
 			return {
 				filters: {
-					'report_type': 'Profit and Loss',
-					'is_group': 0,
-					'company': doc.company
-				}
+					report_type: "Profit and Loss",
+					is_group: 0,
+					company: doc.company,
+				},
 			};
 		});
 
-		frm.set_query("write_off_cost_center", function(doc) {
+		frm.set_query("write_off_cost_center", function (doc) {
 			return {
 				filters: {
-					'is_group': 0,
-					'company': doc.company
-				}
+					is_group: 0,
+					company: doc.company,
+				},
 			};
 		});
 
 		erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype);
 	},
 
-	refresh: function(frm) {
+	refresh: function (frm) {
 		if (frm.doc.company) {
 			frm.trigger("toggle_display_account_head");
 		}
 	},
 
-	company: function(frm) {
+	company: function (frm) {
 		frm.trigger("toggle_display_account_head");
 		erpnext.accounts.dimensions.update_dimension(frm, frm.doctype);
-
 	},
 
-	toggle_display_account_head: function(frm) {
-		frm.toggle_display('expense_account',
-			erpnext.is_perpetual_inventory_enabled(frm.doc.company));
-	}
-});
\ No newline at end of file
+	toggle_display_account_head: function (frm) {
+		frm.toggle_display("expense_account", erpnext.is_perpetual_inventory_enabled(frm.doc.company));
+	},
+});
diff --git a/erpnext/accounts/doctype/pos_profile_user/pos_profile_user.js b/erpnext/accounts/doctype/pos_profile_user/pos_profile_user.js
index f0884eb..6341674 100644
--- a/erpnext/accounts/doctype/pos_profile_user/pos_profile_user.js
+++ b/erpnext/accounts/doctype/pos_profile_user/pos_profile_user.js
@@ -1,6 +1,4 @@
 // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('POS Profile User', {
-
-});
+frappe.ui.form.on("POS Profile User", {});
diff --git a/erpnext/accounts/doctype/pos_settings/pos_settings.js b/erpnext/accounts/doctype/pos_settings/pos_settings.js
index 7d8f356..a2e5a57 100644
--- a/erpnext/accounts/doctype/pos_settings/pos_settings.js
+++ b/erpnext/accounts/doctype/pos_settings/pos_settings.js
@@ -1,57 +1,91 @@
 // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-let search_fields_datatypes = ['Data', 'Link', 'Dynamic Link', 'Long Text', 'Select', 'Small Text', 'Text', 'Text Editor'];
-let do_not_include_fields = ["naming_series", "item_code", "item_name", "stock_uom", "asset_naming_series",
-	"default_material_request_type", "valuation_method", "warranty_period", "weight_uom", "batch_number_series",
-	"serial_no_series", "purchase_uom", "customs_tariff_number", "sales_uom", "deferred_revenue_account",
-	"deferred_expense_account", "quality_inspection_template", "route", "slideshow", "website_image_alt", "thumbnail",
-	"web_long_description"]
+let search_fields_datatypes = [
+	"Data",
+	"Link",
+	"Dynamic Link",
+	"Long Text",
+	"Select",
+	"Small Text",
+	"Text",
+	"Text Editor",
+];
+let do_not_include_fields = [
+	"naming_series",
+	"item_code",
+	"item_name",
+	"stock_uom",
+	"asset_naming_series",
+	"default_material_request_type",
+	"valuation_method",
+	"warranty_period",
+	"weight_uom",
+	"batch_number_series",
+	"serial_no_series",
+	"purchase_uom",
+	"customs_tariff_number",
+	"sales_uom",
+	"deferred_revenue_account",
+	"deferred_expense_account",
+	"quality_inspection_template",
+	"route",
+	"slideshow",
+	"website_image_alt",
+	"thumbnail",
+	"web_long_description",
+];
 
-frappe.ui.form.on('POS Settings', {
-	onload: function(frm) {
+frappe.ui.form.on("POS Settings", {
+	onload: function (frm) {
 		frm.trigger("get_invoice_fields");
 		frm.trigger("add_search_options");
 	},
 
-	get_invoice_fields: function(frm) {
+	get_invoice_fields: function (frm) {
 		frappe.model.with_doctype("POS Invoice", () => {
-			var fields = $.map(frappe.get_doc("DocType", "POS Invoice").fields, function(d) {
-				if (frappe.model.no_value_type.indexOf(d.fieldtype) === -1 || ['Button'].includes(d.fieldtype)) {
-					return { label: d.label + ' (' + d.fieldtype + ')', value: d.fieldname };
+			var fields = $.map(frappe.get_doc("DocType", "POS Invoice").fields, function (d) {
+				if (
+					frappe.model.no_value_type.indexOf(d.fieldtype) === -1 ||
+					["Button"].includes(d.fieldtype)
+				) {
+					return { label: d.label + " (" + d.fieldtype + ")", value: d.fieldname };
 				} else {
 					return null;
 				}
 			});
 
 			frm.fields_dict.invoice_fields.grid.update_docfield_property(
-				'fieldname', 'options', [""].concat(fields)
+				"fieldname",
+				"options",
+				[""].concat(fields)
 			);
 		});
-
 	},
 
-	add_search_options: function(frm) {
+	add_search_options: function (frm) {
 		frappe.model.with_doctype("Item", () => {
-			var fields = $.map(frappe.get_doc("DocType", "Item").fields, function(d) {
-				if (search_fields_datatypes.includes(d.fieldtype) && !(do_not_include_fields.includes(d.fieldname))) {
+			var fields = $.map(frappe.get_doc("DocType", "Item").fields, function (d) {
+				if (
+					search_fields_datatypes.includes(d.fieldtype) &&
+					!do_not_include_fields.includes(d.fieldname)
+				) {
 					return [d.label];
 				} else {
 					return null;
 				}
 			});
 
-			fields.unshift('');
-			frm.fields_dict.pos_search_fields.grid.update_docfield_property('field', 'options', fields);
+			fields.unshift("");
+			frm.fields_dict.pos_search_fields.grid.update_docfield_property("field", "options", fields);
 		});
-
-	}
+	},
 });
 
 frappe.ui.form.on("POS Search Fields", {
-	field: function(frm, doctype, name) {
+	field: function (frm, doctype, name) {
 		var doc = frappe.get_doc(doctype, name);
-		var df = $.map(frappe.get_doc("DocType", "Item").fields, function(d) {
+		var df = $.map(frappe.get_doc("DocType", "Item").fields, function (d) {
 			if (doc.field == d.label && search_fields_datatypes.includes(d.fieldtype)) {
 				return d;
 			} else {
@@ -61,13 +95,13 @@
 
 		doc.fieldname = df.fieldname;
 		frm.refresh_field("fields");
-	}
+	},
 });
 
 frappe.ui.form.on("POS Field", {
-	fieldname: function(frm, doctype, name) {
+	fieldname: function (frm, doctype, name) {
 		var doc = frappe.get_doc(doctype, name);
-		var df = $.map(frappe.get_doc("DocType", "POS Invoice").fields, function(d) {
+		var df = $.map(frappe.get_doc("DocType", "POS Invoice").fields, function (d) {
 			return doc.fieldname == d.fieldname ? d : null;
 		})[0];
 
@@ -77,5 +111,5 @@
 		doc.fieldtype = df.fieldtype;
 		doc.default_value = df.default;
 		frm.refresh_field("fields");
-	}
+	},
 });
diff --git a/erpnext/accounts/doctype/pricing_rule/pricing_rule.js b/erpnext/accounts/doctype/pricing_rule/pricing_rule.js
index 8267582..cd5b00e 100644
--- a/erpnext/accounts/doctype/pricing_rule/pricing_rule.js
+++ b/erpnext/accounts/doctype/pricing_rule/pricing_rule.js
@@ -1,44 +1,43 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.ui.form.on('Pricing Rule', {
-	setup: function(frm) {
-		frm.fields_dict["for_price_list"].get_query = function(doc){
+frappe.ui.form.on("Pricing Rule", {
+	setup: function (frm) {
+		frm.fields_dict["for_price_list"].get_query = function (doc) {
 			return {
 				filters: {
-					'selling': doc.selling,
-					'buying': doc.buying,
-					'currency': doc.currency
-				}
+					selling: doc.selling,
+					buying: doc.buying,
+					currency: doc.currency,
+				},
 			};
 		};
 
-		['items', 'item_groups', 'brands'].forEach(d => {
-			frm.fields_dict[d].grid.get_field('uom').get_query = function(doc, cdt, cdn){
+		["items", "item_groups", "brands"].forEach((d) => {
+			frm.fields_dict[d].grid.get_field("uom").get_query = function (doc, cdt, cdn) {
 				var row = locals[cdt][cdn];
 				return {
-					query:"erpnext.accounts.doctype.pricing_rule.pricing_rule.get_item_uoms",
-					filters: {'value': row[frappe.scrub(doc.apply_on)], apply_on: doc.apply_on}
-				}
+					query: "erpnext.accounts.doctype.pricing_rule.pricing_rule.get_item_uoms",
+					filters: { value: row[frappe.scrub(doc.apply_on)], apply_on: doc.apply_on },
+				};
 			};
-		})
+		});
 	},
 
-	onload: function(frm) {
-		if(frm.doc.__islocal && !frm.doc.applicable_for && (frm.doc.customer || frm.doc.supplier)) {
-			if(frm.doc.customer) {
+	onload: function (frm) {
+		if (frm.doc.__islocal && !frm.doc.applicable_for && (frm.doc.customer || frm.doc.supplier)) {
+			if (frm.doc.customer) {
 				frm.doc.applicable_for = "Customer";
-				frm.doc.selling = 1
+				frm.doc.selling = 1;
 			} else {
 				frm.doc.applicable_for = "Supplier";
-				frm.doc.buying = 1
+				frm.doc.buying = 1;
 			}
 		}
 	},
 
-	refresh: function(frm) {
-		var help_content =
-			`<table class="table table-bordered" style="background-color: var(--scrollbar-track-color);">
+	refresh: function (frm) {
+		var help_content = `<table class="table table-bordered" style="background-color: var(--scrollbar-track-color);">
 				<tr><td>
 					<h4>
 						<i class="fa fa-hand-right"></i>
@@ -97,61 +96,70 @@
 				</td></tr>
 			</table>`;
 
-		frm.set_df_property('pricing_rule_help', 'options', help_content);
+		frm.set_df_property("pricing_rule_help", "options", help_content);
 		frm.events.set_options_for_applicable_for(frm);
 		frm.trigger("toggle_reqd_apply_on");
 	},
 
-	apply_on: function(frm) {
+	apply_on: function (frm) {
 		frm.trigger("toggle_reqd_apply_on");
 	},
 
-	toggle_reqd_apply_on: function(frm) {
+	toggle_reqd_apply_on: function (frm) {
 		const fields = {
-			'Item Code': 'items',
-			'Item Group': 'item_groups',
-			'Brand': 'brands'
-		}
+			"Item Code": "items",
+			"Item Group": "item_groups",
+			Brand: "brands",
+		};
 
 		for (var key in fields) {
-			frm.toggle_reqd(fields[key],
-				frm.doc.apply_on === key ? 1 : 0);
+			frm.toggle_reqd(fields[key], frm.doc.apply_on === key ? 1 : 0);
 		}
 	},
 
-	rate_or_discount: function(frm) {
-		if(frm.doc.rate_or_discount == 'Rate') {
-			frm.set_value('for_price_list', "");
+	rate_or_discount: function (frm) {
+		if (frm.doc.rate_or_discount == "Rate") {
+			frm.set_value("for_price_list", "");
 		}
 	},
 
-	selling: function(frm) {
+	selling: function (frm) {
 		frm.events.set_options_for_applicable_for(frm);
 	},
 
-	buying: function(frm) {
+	buying: function (frm) {
 		frm.events.set_options_for_applicable_for(frm);
 	},
 
 	//Dynamically change the description based on type of margin
-	margin_type: function(frm){
-		frm.set_df_property('margin_rate_or_amount', 'description', frm.doc.margin_type=='Percentage'?'In Percentage %':'In Amount');
+	margin_type: function (frm) {
+		frm.set_df_property(
+			"margin_rate_or_amount",
+			"description",
+			frm.doc.margin_type == "Percentage" ? "In Percentage %" : "In Amount"
+		);
 	},
 
-	set_options_for_applicable_for: function(frm) {
+	set_options_for_applicable_for: function (frm) {
 		var options = [""];
 		var applicable_for = frm.doc.applicable_for;
 
-		if(frm.doc.selling) {
-			options = $.merge(options, ["Customer", "Customer Group", "Territory", "Sales Partner", "Campaign"]);
+		if (frm.doc.selling) {
+			options = $.merge(options, [
+				"Customer",
+				"Customer Group",
+				"Territory",
+				"Sales Partner",
+				"Campaign",
+			]);
 		}
-		if(frm.doc.buying) {
+		if (frm.doc.buying) {
 			$.merge(options, ["Supplier", "Supplier Group"]);
 		}
 
 		set_field_options("applicable_for", options.join("\n"));
 
-		if(!in_list(options, applicable_for)) applicable_for = null;
+		if (!in_list(options, applicable_for)) applicable_for = null;
 		frm.set_value("applicable_for", applicable_for);
-	}
+	},
 });
diff --git a/erpnext/accounts/doctype/process_deferred_accounting/process_deferred_accounting.js b/erpnext/accounts/doctype/process_deferred_accounting/process_deferred_accounting.js
index 1ec6805..92a6c62 100644
--- a/erpnext/accounts/doctype/process_deferred_accounting/process_deferred_accounting.js
+++ b/erpnext/accounts/doctype/process_deferred_accounting/process_deferred_accounting.js
@@ -1,53 +1,58 @@
 // Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Process Deferred Accounting', {
-	setup: function(frm) {
-		frm.set_query("document_type", function() {
+frappe.ui.form.on("Process Deferred Accounting", {
+	setup: function (frm) {
+		frm.set_query("document_type", function () {
 			return {
 				filters: {
-					'name': ['in', ['Sales Invoice', 'Purchase Invoice']]
-				}
+					name: ["in", ["Sales Invoice", "Purchase Invoice"]],
+				},
 			};
 		});
 	},
 
-	type: function(frm) {
+	type: function (frm) {
 		if (frm.doc.company && frm.doc.type) {
-			frm.set_query("account", function() {
+			frm.set_query("account", function () {
 				return {
 					filters: {
-						'company': frm.doc.company,
-						'root_type': frm.doc.type === 'Income' ? 'Liability' : 'Asset',
-						'is_group': 0
-					}
+						company: frm.doc.company,
+						root_type: frm.doc.type === "Income" ? "Liability" : "Asset",
+						is_group: 0,
+					},
 				};
 			});
 		}
 	},
 
-	validate: function() {
+	validate: function () {
 		return new Promise((resolve) => {
-			return frappe.db.get_single_value('Accounts Settings', 'automatically_process_deferred_accounting_entry')
-				.then(value => {
-					if(value) {
-						frappe.throw(__('Manual entry cannot be created! Disable automatic entry for deferred accounting in accounts settings and try again'));
+			return frappe.db
+				.get_single_value("Accounts Settings", "automatically_process_deferred_accounting_entry")
+				.then((value) => {
+					if (value) {
+						frappe.throw(
+							__(
+								"Manual entry cannot be created! Disable automatic entry for deferred accounting in accounts settings and try again"
+							)
+						);
 					}
 					resolve(value);
 				});
 		});
 	},
 
-	end_date: function(frm) {
+	end_date: function (frm) {
 		if (frm.doc.end_date && frm.doc.end_date < frm.doc.start_date) {
 			frappe.throw(__("End date cannot be before start date"));
 		}
 	},
 
-	onload: function(frm) {
+	onload: function (frm) {
 		if (frm.doc.posting_date && frm.doc.docstatus === 0) {
-			frm.set_value('start_date', frappe.datetime.add_months(frm.doc.posting_date, -1));
-			frm.set_value('end_date', frm.doc.posting_date);
+			frm.set_value("start_date", frappe.datetime.add_months(frm.doc.posting_date, -1));
+			frm.set_value("end_date", frm.doc.posting_date);
 		}
-	}
+	},
 });
diff --git a/erpnext/accounts/doctype/process_payment_reconciliation/process_payment_reconciliation.js b/erpnext/accounts/doctype/process_payment_reconciliation/process_payment_reconciliation.js
index dd601bf..0f52a4d 100644
--- a/erpnext/accounts/doctype/process_payment_reconciliation/process_payment_reconciliation.js
+++ b/erpnext/accounts/doctype/process_payment_reconciliation/process_payment_reconciliation.js
@@ -2,129 +2,128 @@
 // For license information, please see license.txt
 
 frappe.ui.form.on("Process Payment Reconciliation", {
-	onload: function(frm) {
+	onload: function (frm) {
 		// set queries
-		frm.set_query("party_type", function() {
-			return {
-				"filters": {
-					"name": ["in", Object.keys(frappe.boot.party_account_types)],
-				}
-			}
-		});
-		frm.set_query('receivable_payable_account',  function(doc) {
+		frm.set_query("party_type", function () {
 			return {
 				filters: {
-					"company": doc.company,
-					"is_group": 0,
-					"account_type": frappe.boot.party_account_types[doc.party_type]
-				}
+					name: ["in", Object.keys(frappe.boot.party_account_types)],
+				},
 			};
 		});
-		frm.set_query('cost_center', function(doc) {
+		frm.set_query("receivable_payable_account", function (doc) {
 			return {
 				filters: {
-					"company": doc.company,
-					"is_group": 0,
-				}
+					company: doc.company,
+					is_group: 0,
+					account_type: frappe.boot.party_account_types[doc.party_type],
+				},
 			};
 		});
-		frm.set_query('bank_cash_account', function(doc) {
+		frm.set_query("cost_center", function (doc) {
 			return {
-				filters:[
-					['Account', 'company', '=', doc.company],
-					['Account', 'is_group', '=', 0],
-					['Account', 'account_type', 'in', ['Bank', 'Cash']]
-				]
+				filters: {
+					company: doc.company,
+					is_group: 0,
+				},
 			};
 		});
-
+		frm.set_query("bank_cash_account", function (doc) {
+			return {
+				filters: [
+					["Account", "company", "=", doc.company],
+					["Account", "is_group", "=", 0],
+					["Account", "account_type", "in", ["Bank", "Cash"]],
+				],
+			};
+		});
 	},
-	refresh: function(frm) {
-		if (frm.doc.docstatus==1 && ['Queued', 'Paused'].find(x => x == frm.doc.status)) {
-			let execute_btn = __("Start / Resume")
+	refresh: function (frm) {
+		if (frm.doc.docstatus == 1 && ["Queued", "Paused"].find((x) => x == frm.doc.status)) {
+			let execute_btn = __("Start / Resume");
 
 			frm.add_custom_button(execute_btn, () => {
 				frm.call({
-					method: 'erpnext.accounts.doctype.process_payment_reconciliation.process_payment_reconciliation.trigger_job_for_doc',
+					method: "erpnext.accounts.doctype.process_payment_reconciliation.process_payment_reconciliation.trigger_job_for_doc",
 					args: {
-						docname: frm.doc.name
-					}
-				}).then(r => {
-					if(!r.exc) {
+						docname: frm.doc.name,
+					},
+				}).then((r) => {
+					if (!r.exc) {
 						frappe.show_alert(__("Job Started"));
 						frm.reload_doc();
 					}
 				});
 			});
 		}
-		if (frm.doc.docstatus==1 && ['Completed', 'Running', 'Paused', 'Partially Reconciled'].find(x => x == frm.doc.status)) {
+		if (
+			frm.doc.docstatus == 1 &&
+			["Completed", "Running", "Paused", "Partially Reconciled"].find((x) => x == frm.doc.status)
+		) {
 			frm.call({
-				'method': "erpnext.accounts.doctype.process_payment_reconciliation.process_payment_reconciliation.get_reconciled_count",
+				method: "erpnext.accounts.doctype.process_payment_reconciliation.process_payment_reconciliation.get_reconciled_count",
 				args: {
-					"docname": frm.docname,
-				}
-			}).then(r => {
+					docname: frm.docname,
+				},
+			}).then((r) => {
 				if (r.message) {
 					let progress = 0;
 					let description = "";
 
 					if (r.message.processed) {
-						progress = (r.message.processed/r.message.total) * 100;
-						description = r.message.processed + "/" + r.message.total +  " processed";
+						progress = (r.message.processed / r.message.total) * 100;
+						description = r.message.processed + "/" + r.message.total + " processed";
 					} else if (r.message.total == 0 && frm.doc.status == "Completed") {
 						progress = 100;
 					}
 
-
-					frm.dashboard.add_progress('Reconciliation Progress', progress, description);
+					frm.dashboard.add_progress("Reconciliation Progress", progress, description);
 				}
-			})
+			});
 		}
-		if (frm.doc.docstatus==1 && frm.doc.status == 'Running') {
-			let execute_btn = __("Pause")
+		if (frm.doc.docstatus == 1 && frm.doc.status == "Running") {
+			let execute_btn = __("Pause");
 
 			frm.add_custom_button(execute_btn, () => {
 				frm.call({
-					'method': "erpnext.accounts.doctype.process_payment_reconciliation.process_payment_reconciliation.pause_job_for_doc",
+					method: "erpnext.accounts.doctype.process_payment_reconciliation.process_payment_reconciliation.pause_job_for_doc",
 					args: {
-						"docname": frm.docname,
-					}
-				}).then(r => {
+						docname: frm.docname,
+					},
+				}).then((r) => {
 					if (!r.exc) {
 						frappe.show_alert(__("Job Paused"));
-						frm.reload_doc()
+						frm.reload_doc();
 					}
 				});
-
 			});
 		}
 	},
 	company(frm) {
-		frm.set_value('party', '');
-		frm.set_value('receivable_payable_account', '');
+		frm.set_value("party", "");
+		frm.set_value("receivable_payable_account", "");
 	},
 	party_type(frm) {
-		frm.set_value('party', '');
+		frm.set_value("party", "");
 	},
 
 	party(frm) {
-		frm.set_value('receivable_payable_account', '');
+		frm.set_value("receivable_payable_account", "");
 		if (!frm.doc.receivable_payable_account && frm.doc.party_type && frm.doc.party) {
 			return frappe.call({
 				method: "erpnext.accounts.party.get_party_account",
 				args: {
 					company: frm.doc.company,
 					party_type: frm.doc.party_type,
-					party: frm.doc.party
+					party: frm.doc.party,
 				},
 				callback: (r) => {
 					if (!r.exc && r.message) {
 						frm.set_value("receivable_payable_account", r.message);
 					}
 					frm.refresh();
-
-				}
+				},
 			});
 		}
-	}
+	},
 });
diff --git a/erpnext/accounts/doctype/process_payment_reconciliation/process_payment_reconciliation_list.js b/erpnext/accounts/doctype/process_payment_reconciliation/process_payment_reconciliation_list.js
index 8012d6e..ed182ad 100644
--- a/erpnext/accounts/doctype/process_payment_reconciliation/process_payment_reconciliation_list.js
+++ b/erpnext/accounts/doctype/process_payment_reconciliation/process_payment_reconciliation_list.js
@@ -1,15 +1,15 @@
-frappe.listview_settings['Process Payment Reconciliation'] = {
+frappe.listview_settings["Process Payment Reconciliation"] = {
 	add_fields: ["status"],
-	get_indicator: function(doc) {
+	get_indicator: function (doc) {
 		let colors = {
-			'Queued': 'orange',
-			'Paused': 'orange',
-			'Completed': 'green',
-			'Partially Reconciled': 'orange',
-			'Running': 'blue',
-			'Failed': 'red',
+			Queued: "orange",
+			Paused: "orange",
+			Completed: "green",
+			"Partially Reconciled": "orange",
+			Running: "blue",
+			Failed: "red",
 		};
 		let status = doc.status;
-		return [__(status), colors[status], 'status,=,'+status];
+		return [__(status), colors[status], "status,=," + status];
 	},
 };
diff --git a/erpnext/accounts/doctype/process_payment_reconciliation_log/process_payment_reconciliation_log.js b/erpnext/accounts/doctype/process_payment_reconciliation_log/process_payment_reconciliation_log.js
index 2468f10..f483d00 100644
--- a/erpnext/accounts/doctype/process_payment_reconciliation_log/process_payment_reconciliation_log.js
+++ b/erpnext/accounts/doctype/process_payment_reconciliation_log/process_payment_reconciliation_log.js
@@ -3,15 +3,14 @@
 
 frappe.ui.form.on("Process Payment Reconciliation Log", {
 	refresh(frm) {
-		if (['Completed', 'Running', 'Paused', 'Partially Reconciled'].find(x => x == frm.doc.status)) {
+		if (["Completed", "Running", "Paused", "Partially Reconciled"].find((x) => x == frm.doc.status)) {
 			let progress = 0;
 			if (frm.doc.reconciled_entries != 0) {
-				progress = frm.doc.reconciled_entries / frm.doc.total_allocations * 100;
-			} else if(frm.doc.total_allocations == 0 && frm.doc.status == "Completed"){
+				progress = (frm.doc.reconciled_entries / frm.doc.total_allocations) * 100;
+			} else if (frm.doc.total_allocations == 0 && frm.doc.status == "Completed") {
 				progress = 100;
 			}
-			frm.dashboard.add_progress(__('Reconciliation Progress'), progress);
+			frm.dashboard.add_progress(__("Reconciliation Progress"), progress);
 		}
-
 	},
 });
diff --git a/erpnext/accounts/doctype/process_payment_reconciliation_log/process_payment_reconciliation_log_list.js b/erpnext/accounts/doctype/process_payment_reconciliation_log/process_payment_reconciliation_log_list.js
index 5a65204..19c73b2 100644
--- a/erpnext/accounts/doctype/process_payment_reconciliation_log/process_payment_reconciliation_log_list.js
+++ b/erpnext/accounts/doctype/process_payment_reconciliation_log/process_payment_reconciliation_log_list.js
@@ -1,15 +1,15 @@
-frappe.listview_settings['Process Payment Reconciliation Log'] = {
+frappe.listview_settings["Process Payment Reconciliation Log"] = {
 	add_fields: ["status"],
-	get_indicator: function(doc) {
+	get_indicator: function (doc) {
 		var colors = {
-			'Partially Reconciled': 'orange',
-			'Paused': 'orange',
-			'Reconciled': 'green',
-			'Failed': 'red',
-			'Cancelled': 'red',
-			'Running': 'blue',
+			"Partially Reconciled": "orange",
+			Paused: "orange",
+			Reconciled: "green",
+			Failed: "red",
+			Cancelled: "red",
+			Running: "blue",
 		};
 		let status = doc.status;
-		return [__(status), colors[status], "status,=,"+status];
+		return [__(status), colors[status], "status,=," + status];
 	},
 };
diff --git a/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.js b/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.js
index cec48c1..25274f1 100644
--- a/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.js
+++ b/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.js
@@ -1,155 +1,150 @@
 // Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Process Statement Of Accounts', {
-	view_properties: function(frm) {
-		frappe.route_options = {doc_type: 'Customer'};
+frappe.ui.form.on("Process Statement Of Accounts", {
+	view_properties: function (frm) {
+		frappe.route_options = { doc_type: "Customer" };
 		frappe.set_route("Form", "Customize Form");
 	},
-	refresh: function(frm){
-		if(!frm.doc.__islocal) {
-			frm.add_custom_button(__('Send Emails'), function(){
-				if (frm.is_dirty()) frappe.throw(__("Please save before proceeding."))
+	refresh: function (frm) {
+		if (!frm.doc.__islocal) {
+			frm.add_custom_button(__("Send Emails"), function () {
+				if (frm.is_dirty()) frappe.throw(__("Please save before proceeding."));
 				frappe.call({
 					method: "erpnext.accounts.doctype.process_statement_of_accounts.process_statement_of_accounts.send_emails",
 					args: {
-						"document_name": frm.doc.name,
+						document_name: frm.doc.name,
 					},
-					callback: function(r) {
-						if(r && r.message) {
-							frappe.show_alert({message: __('Emails Queued'), indicator: 'blue'});
+					callback: function (r) {
+						if (r && r.message) {
+							frappe.show_alert({ message: __("Emails Queued"), indicator: "blue" });
+						} else {
+							frappe.msgprint(__("No Records for these settings."));
 						}
-						else{
-							frappe.msgprint(__('No Records for these settings.'))
-						}
-					}
+					},
 				});
 			});
-			frm.add_custom_button(__('Download'), function(){
-				if (frm.is_dirty()) frappe.throw(__("Please save before proceeding."))
+			frm.add_custom_button(__("Download"), function () {
+				if (frm.is_dirty()) frappe.throw(__("Please save before proceeding."));
 				let url = frappe.urllib.get_full_url(
-					'/api/method/erpnext.accounts.doctype.process_statement_of_accounts.process_statement_of_accounts.download_statements?'
-					+ 'document_name='+encodeURIComponent(frm.doc.name))
+					"/api/method/erpnext.accounts.doctype.process_statement_of_accounts.process_statement_of_accounts.download_statements?" +
+						"document_name=" +
+						encodeURIComponent(frm.doc.name)
+				);
 				$.ajax({
 					url: url,
-					type: 'GET',
-					success: function(result) {
-						if(jQuery.isEmptyObject(result)){
-							frappe.msgprint(__('No Records for these settings.'));
-						}
-						else{
+					type: "GET",
+					success: function (result) {
+						if (jQuery.isEmptyObject(result)) {
+							frappe.msgprint(__("No Records for these settings."));
+						} else {
 							window.location = url;
 						}
-					}
+					},
 				});
 			});
 		}
 	},
-	onload: function(frm) {
-		frm.set_query('currency', function(){
+	onload: function (frm) {
+		frm.set_query("currency", function () {
 			return {
 				filters: {
-					'enabled': 1
-				}
-			}
-		});
-		frm.set_query("account", function() {
-			return {
-				filters: {
-					'company': frm.doc.company
-				}
+					enabled: 1,
+				},
 			};
 		});
-		if(frm.doc.__islocal){
-			frm.set_value('from_date', frappe.datetime.add_months(frappe.datetime.get_today(), -1));
-			frm.set_value('to_date', frappe.datetime.get_today());
+		frm.set_query("account", function () {
+			return {
+				filters: {
+					company: frm.doc.company,
+				},
+			};
+		});
+		if (frm.doc.__islocal) {
+			frm.set_value("from_date", frappe.datetime.add_months(frappe.datetime.get_today(), -1));
+			frm.set_value("to_date", frappe.datetime.get_today());
 		}
 	},
-	report: function(frm){
+	report: function (frm) {
 		let filters = {
-			'company': frm.doc.company,
+			company: frm.doc.company,
+		};
+		if (frm.doc.report == "Accounts Receivable") {
+			filters["account_type"] = "Receivable";
 		}
-		if(frm.doc.report == 'Accounts Receivable'){
-			filters['account_type'] = 'Receivable';
-		}
-		frm.set_query("account", function() {
+		frm.set_query("account", function () {
 			return {
-				filters: filters
+				filters: filters,
 			};
 		});
-
 	},
-	customer_collection: function(frm){
-		frm.set_value('collection_name', '');
-		if(frm.doc.customer_collection){
-			frm.get_field('collection_name').set_label(frm.doc.customer_collection);
+	customer_collection: function (frm) {
+		frm.set_value("collection_name", "");
+		if (frm.doc.customer_collection) {
+			frm.get_field("collection_name").set_label(frm.doc.customer_collection);
 		}
 	},
-	frequency: function(frm){
-		if(frm.doc.frequency != ''){
-			frm.set_value('start_date', frappe.datetime.get_today());
-		}
-		else{
-			frm.set_value('start_date', '');
+	frequency: function (frm) {
+		if (frm.doc.frequency != "") {
+			frm.set_value("start_date", frappe.datetime.get_today());
+		} else {
+			frm.set_value("start_date", "");
 		}
 	},
-	fetch_customers: function(frm){
-		if(frm.doc.collection_name){
+	fetch_customers: function (frm) {
+		if (frm.doc.collection_name) {
 			frappe.call({
 				method: "erpnext.accounts.doctype.process_statement_of_accounts.process_statement_of_accounts.fetch_customers",
 				args: {
-					'customer_collection': frm.doc.customer_collection,
-					'collection_name': frm.doc.collection_name,
-					'primary_mandatory': frm.doc.primary_mandatory
+					customer_collection: frm.doc.customer_collection,
+					collection_name: frm.doc.collection_name,
+					primary_mandatory: frm.doc.primary_mandatory,
 				},
-				callback: function(r) {
-					if(!r.exc) {
-						if(r.message.length){
-							frm.clear_table('customers');
-							for (const customer of r.message){
-								var row = frm.add_child('customers');
+				callback: function (r) {
+					if (!r.exc) {
+						if (r.message.length) {
+							frm.clear_table("customers");
+							for (const customer of r.message) {
+								var row = frm.add_child("customers");
 								row.customer = customer.name;
 								row.primary_email = customer.primary_email;
 								row.billing_email = customer.billing_email;
 							}
-							frm.refresh_field('customers');
-						}
-						else{
-							frappe.throw(__('No Customers found with selected options.'));
+							frm.refresh_field("customers");
+						} else {
+							frappe.throw(__("No Customers found with selected options."));
 						}
 					}
-				}
+				},
 			});
+		} else {
+			frappe.throw("Enter " + frm.doc.customer_collection + " name.");
 		}
-		else {
-			frappe.throw('Enter ' + frm.doc.customer_collection + ' name.');
-		}
-	}
+	},
 });
 
-frappe.ui.form.on('Process Statement Of Accounts Customer', {
-	customer: function(frm, cdt, cdn){
+frappe.ui.form.on("Process Statement Of Accounts Customer", {
+	customer: function (frm, cdt, cdn) {
 		var row = locals[cdt][cdn];
-		if (!row.customer){
+		if (!row.customer) {
 			return;
 		}
 		frappe.call({
-			method: 'erpnext.accounts.doctype.process_statement_of_accounts.process_statement_of_accounts.get_customer_emails',
+			method: "erpnext.accounts.doctype.process_statement_of_accounts.process_statement_of_accounts.get_customer_emails",
 			args: {
-				'customer_name': row.customer,
-				'primary_mandatory': frm.doc.primary_mandatory
+				customer_name: row.customer,
+				primary_mandatory: frm.doc.primary_mandatory,
 			},
-			callback: function(r){
-				if(!r.exe){
-					if(r.message.length){
-						frappe.model.set_value(cdt, cdn, "primary_email", r.message[0])
-						frappe.model.set_value(cdt, cdn, "billing_email", r.message[1])
-					}
-					else {
-						return
+			callback: function (r) {
+				if (!r.exe) {
+					if (r.message.length) {
+						frappe.model.set_value(cdt, cdn, "primary_email", r.message[0]);
+						frappe.model.set_value(cdt, cdn, "billing_email", r.message[1]);
+					} else {
+						return;
 					}
 				}
-			}
-		})
-	}
+			},
+		});
+	},
 });
diff --git a/erpnext/accounts/doctype/promotional_scheme/promotional_scheme.js b/erpnext/accounts/doctype/promotional_scheme/promotional_scheme.js
index e840c79..7a26c07 100644
--- a/erpnext/accounts/doctype/promotional_scheme/promotional_scheme.js
+++ b/erpnext/accounts/doctype/promotional_scheme/promotional_scheme.js
@@ -1,51 +1,56 @@
 // Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Promotional Scheme', {
-	refresh: function(frm) {
+frappe.ui.form.on("Promotional Scheme", {
+	refresh: function (frm) {
 		frm.trigger("set_options_for_applicable_for");
 		frm.trigger("toggle_reqd_apply_on");
 	},
 
-	selling: function(frm) {
+	selling: function (frm) {
 		frm.trigger("set_options_for_applicable_for");
 	},
 
-	buying: function(frm) {
+	buying: function (frm) {
 		frm.trigger("set_options_for_applicable_for");
 	},
 
-	set_options_for_applicable_for: function(frm) {
+	set_options_for_applicable_for: function (frm) {
 		var options = [""];
 		var applicable_for = frm.doc.applicable_for;
 
-		if(frm.doc.selling) {
-			options = $.merge(options, ["Customer", "Customer Group", "Territory", "Sales Partner", "Campaign"]);
+		if (frm.doc.selling) {
+			options = $.merge(options, [
+				"Customer",
+				"Customer Group",
+				"Territory",
+				"Sales Partner",
+				"Campaign",
+			]);
 		}
-		if(frm.doc.buying) {
+		if (frm.doc.buying) {
 			$.merge(options, ["Supplier", "Supplier Group"]);
 		}
 
 		set_field_options("applicable_for", options.join("\n"));
 
-		if(!in_list(options, applicable_for)) applicable_for = null;
+		if (!in_list(options, applicable_for)) applicable_for = null;
 		frm.set_value("applicable_for", applicable_for);
 	},
 
-	apply_on: function(frm) {
+	apply_on: function (frm) {
 		frm.trigger("toggle_reqd_apply_on");
 	},
 
-	toggle_reqd_apply_on: function(frm) {
+	toggle_reqd_apply_on: function (frm) {
 		const fields = {
-			'Item Code': 'items',
-			'Item Group': 'item_groups',
-			'Brand': 'brands'
+			"Item Code": "items",
+			"Item Group": "item_groups",
+			Brand: "brands",
 		};
 
 		for (var key in fields) {
-			frm.toggle_reqd(fields[key],
-				frm.doc.apply_on === key ? 1 : 0);
+			frm.toggle_reqd(fields[key], frm.doc.apply_on === key ? 1 : 0);
 		}
-	}
+	},
 });
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
index 8f0df3e..d6455b2 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
@@ -14,19 +14,19 @@
 		super.setup(doc);
 
 		// formatter for purchase invoice item
-		if(this.frm.doc.update_stock) {
-			this.frm.set_indicator_formatter('item_code', function(doc) {
-				return (doc.qty<=doc.received_qty) ? "green" : "orange";
+		if (this.frm.doc.update_stock) {
+			this.frm.set_indicator_formatter("item_code", function (doc) {
+				return doc.qty <= doc.received_qty ? "green" : "orange";
 			});
 		}
 
-		this.frm.set_query("unrealized_profit_loss_account", function() {
+		this.frm.set_query("unrealized_profit_loss_account", function () {
 			return {
 				filters: {
 					company: doc.company,
 					is_group: 0,
 					root_type: "Liability",
-				}
+				},
 			};
 		});
 	}
@@ -35,11 +35,21 @@
 		super.onload();
 
 		// Ignore linked advances
-		this.frm.ignore_doctypes_on_cancel_all = ['Journal Entry', 'Payment Entry', 'Purchase Invoice', "Repost Payment Ledger", "Repost Accounting Ledger", "Unreconcile Payment", "Unreconcile Payment Entries", "Serial and Batch Bundle", "Bank Transaction"];
+		this.frm.ignore_doctypes_on_cancel_all = [
+			"Journal Entry",
+			"Payment Entry",
+			"Purchase Invoice",
+			"Repost Payment Ledger",
+			"Repost Accounting Ledger",
+			"Unreconcile Payment",
+			"Unreconcile Payment Entries",
+			"Serial and Batch Bundle",
+			"Bank Transaction",
+		];
 
-		if(!this.frm.doc.__islocal) {
+		if (!this.frm.doc.__islocal) {
 			// show credit_to in print format
-			if(!this.frm.doc.supplier && this.frm.doc.credit_to) {
+			if (!this.frm.doc.supplier && this.frm.doc.credit_to) {
 				this.frm.set_df_property("credit_to", "print_hide", 0);
 			}
 		}
@@ -47,7 +57,7 @@
 		// Trigger supplier event on load if supplier is available
 		// The reason for this is PI can be created from PR or PO and supplier is pre populated
 		if (this.frm.doc.supplier && this.frm.doc.__islocal) {
-			this.frm.trigger('supplier');
+			this.frm.trigger("supplier");
 		}
 	}
 
@@ -60,116 +70,137 @@
 		this.show_general_ledger();
 		erpnext.accounts.ledger_preview.show_accounting_ledger_preview(this.frm);
 
-		if(doc.update_stock==1) {
+		if (doc.update_stock == 1) {
 			this.show_stock_ledger();
 			erpnext.accounts.ledger_preview.show_stock_ledger_preview(this.frm);
 		}
 
-		if (this.frm.doc.repost_required && this.frm.doc.docstatus===1) {
-			this.frm.set_intro(__("Accounting entries for this invoice need to be reposted. Please click on 'Repost' button to update."));
-			this.frm.add_custom_button(__('Repost Accounting Entries'),
-				() => {
+		if (this.frm.doc.repost_required && this.frm.doc.docstatus === 1) {
+			this.frm.set_intro(
+				__(
+					"Accounting entries for this invoice need to be reposted. Please click on 'Repost' button to update."
+				)
+			);
+			this.frm
+				.add_custom_button(__("Repost Accounting Entries"), () => {
 					this.frm.call({
 						doc: this.frm.doc,
-						method: 'repost_accounting_entries',
+						method: "repost_accounting_entries",
 						freeze: true,
-						freeze_message: __('Reposting...'),
+						freeze_message: __("Reposting..."),
 						callback: (r) => {
 							if (!r.exc) {
-								frappe.msgprint(__('Accounting Entries are reposted.'));
+								frappe.msgprint(__("Accounting Entries are reposted."));
 								me.frm.refresh();
 							}
-						}
+						},
 					});
-				}).removeClass('btn-default').addClass('btn-warning');
+				})
+				.removeClass("btn-default")
+				.addClass("btn-warning");
 		}
 
-		if(!doc.is_return && doc.docstatus == 1 && doc.outstanding_amount != 0){
-			if(doc.on_hold) {
+		if (!doc.is_return && doc.docstatus == 1 && doc.outstanding_amount != 0) {
+			if (doc.on_hold) {
 				this.frm.add_custom_button(
-					__('Change Release Date'),
-					function() {me.change_release_date()},
-					__('Hold Invoice')
+					__("Change Release Date"),
+					function () {
+						me.change_release_date();
+					},
+					__("Hold Invoice")
 				);
 				this.frm.add_custom_button(
-					__('Unblock Invoice'),
-					function() {me.unblock_invoice()},
-					__('Create')
+					__("Unblock Invoice"),
+					function () {
+						me.unblock_invoice();
+					},
+					__("Create")
 				);
 			} else if (!doc.on_hold) {
 				this.frm.add_custom_button(
-					__('Block Invoice'),
-					function() {me.block_invoice()},
-					__('Create')
+					__("Block Invoice"),
+					function () {
+						me.block_invoice();
+					},
+					__("Create")
 				);
 			}
 		}
 
-		if(doc.docstatus == 1 && doc.outstanding_amount != 0 && !doc.on_hold) {
-			this.frm.add_custom_button(
-				__('Payment'),
-				() => this.make_payment_entry(),
-				__('Create')
-			);
-			cur_frm.page.set_inner_btn_group_as_primary(__('Create'));
+		if (doc.docstatus == 1 && doc.outstanding_amount != 0 && !doc.on_hold) {
+			this.frm.add_custom_button(__("Payment"), () => this.make_payment_entry(), __("Create"));
+			cur_frm.page.set_inner_btn_group_as_primary(__("Create"));
 		}
 
-		if(!doc.is_return && doc.docstatus==1) {
-			if(doc.outstanding_amount >= 0 || Math.abs(flt(doc.outstanding_amount)) < flt(doc.grand_total)) {
-				cur_frm.add_custom_button(__('Return / Debit Note'),
-					this.make_debit_note, __('Create'));
+		if (!doc.is_return && doc.docstatus == 1) {
+			if (doc.outstanding_amount >= 0 || Math.abs(flt(doc.outstanding_amount)) < flt(doc.grand_total)) {
+				cur_frm.add_custom_button(__("Return / Debit Note"), this.make_debit_note, __("Create"));
 			}
 		}
 
 		if (doc.outstanding_amount > 0 && !cint(doc.is_return) && !doc.on_hold) {
-			cur_frm.add_custom_button(__('Payment Request'), function() {
-				me.make_payment_request()
-			}, __('Create'));
+			cur_frm.add_custom_button(
+				__("Payment Request"),
+				function () {
+					me.make_payment_request();
+				},
+				__("Create")
+			);
 		}
 
-		if(doc.docstatus===0) {
-			this.frm.add_custom_button(__('Purchase Order'), function() {
-				erpnext.utils.map_current_doc({
-					method: "erpnext.buying.doctype.purchase_order.purchase_order.make_purchase_invoice",
-					source_doctype: "Purchase Order",
-					target: me.frm,
-					setters: {
-						supplier: me.frm.doc.supplier || undefined,
-						schedule_date: undefined
-					},
-					get_query_filters: {
-						docstatus: 1,
-						status: ["not in", ["Closed", "On Hold"]],
-						per_billed: ["<", 99.99],
-						company: me.frm.doc.company
-					}
-				})
-			}, __("Get Items From"));
+		if (doc.docstatus === 0) {
+			this.frm.add_custom_button(
+				__("Purchase Order"),
+				function () {
+					erpnext.utils.map_current_doc({
+						method: "erpnext.buying.doctype.purchase_order.purchase_order.make_purchase_invoice",
+						source_doctype: "Purchase Order",
+						target: me.frm,
+						setters: {
+							supplier: me.frm.doc.supplier || undefined,
+							schedule_date: undefined,
+						},
+						get_query_filters: {
+							docstatus: 1,
+							status: ["not in", ["Closed", "On Hold"]],
+							per_billed: ["<", 99.99],
+							company: me.frm.doc.company,
+						},
+					});
+				},
+				__("Get Items From")
+			);
 
-			this.frm.add_custom_button(__('Purchase Receipt'), function() {
-				erpnext.utils.map_current_doc({
-					method: "erpnext.stock.doctype.purchase_receipt.purchase_receipt.make_purchase_invoice",
-					source_doctype: "Purchase Receipt",
-					target: me.frm,
-					setters: {
-						supplier: me.frm.doc.supplier || undefined,
-						posting_date: undefined
-					},
-					get_query_filters: {
-						docstatus: 1,
-						status: ["not in", ["Closed", "Completed", "Return Issued"]],
-						company: me.frm.doc.company,
-						is_return: 0
-					}
-				})
-			}, __("Get Items From"));
+			this.frm.add_custom_button(
+				__("Purchase Receipt"),
+				function () {
+					erpnext.utils.map_current_doc({
+						method: "erpnext.stock.doctype.purchase_receipt.purchase_receipt.make_purchase_invoice",
+						source_doctype: "Purchase Receipt",
+						target: me.frm,
+						setters: {
+							supplier: me.frm.doc.supplier || undefined,
+							posting_date: undefined,
+						},
+						get_query_filters: {
+							docstatus: 1,
+							status: ["not in", ["Closed", "Completed", "Return Issued"]],
+							company: me.frm.doc.company,
+							is_return: 0,
+						},
+					});
+				},
+				__("Get Items From")
+			);
 
 			if (!this.frm.doc.is_return) {
 				frappe.db.get_single_value("Buying Settings", "maintain_same_rate").then((value) => {
 					if (value) {
 						this.frm.doc.items.forEach((item) => {
 							this.frm.fields_dict.items.grid.update_docfield_property(
-								"rate", "read_only", (item.purchase_receipt && item.pr_detail)
+								"rate",
+								"read_only",
+								item.purchase_receipt && item.pr_detail
 							);
 						});
 					}
@@ -179,14 +210,18 @@
 		this.frm.toggle_reqd("supplier_warehouse", this.frm.doc.is_subcontracted);
 
 		if (doc.docstatus == 1 && !doc.inter_company_invoice_reference) {
-			frappe.model.with_doc("Supplier", me.frm.doc.supplier, function() {
+			frappe.model.with_doc("Supplier", me.frm.doc.supplier, function () {
 				var supplier = frappe.model.get_doc("Supplier", me.frm.doc.supplier);
 				var internal = supplier.is_internal_supplier;
 				var disabled = supplier.disabled;
 				if (internal == 1 && disabled == 0) {
-					me.frm.add_custom_button("Inter Company Invoice", function() {
-						me.make_inter_company_invoice(me.frm);
-					}, __('Create'));
+					me.frm.add_custom_button(
+						"Inter Company Invoice",
+						function () {
+							me.make_inter_company_invoice(me.frm);
+						},
+						__("Create")
+					);
 				}
 			});
 		}
@@ -198,9 +233,9 @@
 	unblock_invoice() {
 		const me = this;
 		frappe.call({
-			'method': 'erpnext.accounts.doctype.purchase_invoice.purchase_invoice.unblock_invoice',
-			'args': {'name': me.frm.doc.name},
-			'callback': (r) => me.frm.reload_doc()
+			method: "erpnext.accounts.doctype.purchase_invoice.purchase_invoice.unblock_invoice",
+			args: { name: me.frm.doc.name },
+			callback: (r) => me.frm.reload_doc(),
 		});
 	}
 
@@ -215,50 +250,50 @@
 	can_change_release_date(date) {
 		const diff = frappe.datetime.get_diff(date, frappe.datetime.nowdate());
 		if (diff < 0) {
-			frappe.throw(__('New release date should be in the future'));
+			frappe.throw(__("New release date should be in the future"));
 			return false;
 		} else {
 			return true;
 		}
 	}
 
-	make_comment_dialog_and_block_invoice(){
+	make_comment_dialog_and_block_invoice() {
 		const me = this;
 
-		const title = __('Block Invoice');
+		const title = __("Block Invoice");
 		const fields = [
 			{
-				fieldname: 'release_date',
+				fieldname: "release_date",
 				read_only: 0,
-				fieldtype:'Date',
-				label: __('Release Date'),
+				fieldtype: "Date",
+				label: __("Release Date"),
 				default: me.frm.doc.release_date,
-				reqd: 1
+				reqd: 1,
 			},
 			{
-				fieldname: 'hold_comment',
+				fieldname: "hold_comment",
 				read_only: 0,
-				fieldtype:'Small Text',
-				label: __('Reason For Putting On Hold'),
-				default: ""
+				fieldtype: "Small Text",
+				label: __("Reason For Putting On Hold"),
+				default: "",
 			},
 		];
 
 		this.dialog = new frappe.ui.Dialog({
 			title: title,
-			fields: fields
+			fields: fields,
 		});
 
-		this.dialog.set_primary_action(__('Save'), function() {
+		this.dialog.set_primary_action(__("Save"), function () {
 			const dialog_data = me.dialog.get_values();
 			frappe.call({
-				'method': 'erpnext.accounts.doctype.purchase_invoice.purchase_invoice.block_invoice',
-				'args': {
-					'name': me.frm.doc.name,
-					'hold_comment': dialog_data.hold_comment,
-					'release_date': dialog_data.release_date
+				method: "erpnext.accounts.doctype.purchase_invoice.purchase_invoice.block_invoice",
+				args: {
+					name: me.frm.doc.name,
+					hold_comment: dialog_data.hold_comment,
+					release_date: dialog_data.release_date,
 				},
-				'callback': (r) => me.frm.reload_doc()
+				callback: (r) => me.frm.reload_doc(),
 			});
 			me.dialog.hide();
 		});
@@ -269,25 +304,25 @@
 	make_dialog_and_set_release_date() {
 		const me = this;
 
-		const title = __('Set New Release Date');
+		const title = __("Set New Release Date");
 		const fields = [
 			{
-				fieldname: 'release_date',
+				fieldname: "release_date",
 				read_only: 0,
-				fieldtype:'Date',
-				label: __('Release Date'),
-				default: me.frm.doc.release_date
+				fieldtype: "Date",
+				label: __("Release Date"),
+				default: me.frm.doc.release_date,
 			},
 		];
 
 		this.dialog = new frappe.ui.Dialog({
 			title: title,
-			fields: fields
+			fields: fields,
 		});
 
-		this.dialog.set_primary_action(__('Save'), function() {
+		this.dialog.set_primary_action(__("Save"), function () {
 			me.dialog_data = me.dialog.get_values();
-			if(me.can_change_release_date(me.dialog_data.release_date)) {
+			if (me.can_change_release_date(me.dialog_data.release_date)) {
 				me.dialog_data.name = me.frm.doc.name;
 				me.set_release_date(me.dialog_data);
 				me.dialog.hide();
@@ -299,9 +334,9 @@
 
 	set_release_date(data) {
 		return frappe.call({
-			'method': 'erpnext.accounts.doctype.purchase_invoice.purchase_invoice.change_release_date',
-			'args': data,
-			'callback': (r) => this.frm.reload_doc()
+			method: "erpnext.accounts.doctype.purchase_invoice.purchase_invoice.change_release_date",
+			args: data,
+			callback: (r) => this.frm.reload_doc(),
 		});
 	}
 
@@ -309,12 +344,13 @@
 		var me = this;
 
 		// Do not update if inter company reference is there as the details will already be updated
-		if(this.frm.updating_party_details || this.frm.doc.inter_company_invoice_reference)
-			return;
+		if (this.frm.updating_party_details || this.frm.doc.inter_company_invoice_reference) return;
 
 		if (this.frm.doc.__onload && this.frm.doc.__onload.load_after_mapping) return;
 
-		erpnext.utils.get_party_details(this.frm, "erpnext.accounts.party.get_party_details",
+		erpnext.utils.get_party_details(
+			this.frm,
+			"erpnext.accounts.party.get_party_details",
 			{
 				posting_date: this.frm.doc.posting_date,
 				bill_date: this.frm.doc.bill_date,
@@ -322,21 +358,23 @@
 				party_type: "Supplier",
 				account: this.frm.doc.credit_to,
 				price_list: this.frm.doc.buying_price_list,
-				fetch_payment_terms_template: cint(!this.frm.doc.ignore_default_payment_terms_template)
-			}, function() {
+				fetch_payment_terms_template: cint(!this.frm.doc.ignore_default_payment_terms_template),
+			},
+			function () {
 				me.apply_pricing_rule();
 				me.frm.doc.apply_tds = me.frm.supplier_tds ? 1 : 0;
 				me.frm.doc.tax_withholding_category = me.frm.supplier_tds;
 				me.frm.set_df_property("apply_tds", "read_only", me.frm.supplier_tds ? 0 : 1);
 				me.frm.set_df_property("tax_withholding_category", "hidden", me.frm.supplier_tds ? 0 : 1);
-			})
+			}
+		);
 	}
 
 	apply_tds(frm) {
 		var me = this;
 		me.frm.set_value("tax_withheld_vouchers", []);
 		if (!me.frm.doc.apply_tds) {
-			me.frm.set_value("tax_withholding_category", '');
+			me.frm.set_value("tax_withholding_category", "");
 			me.frm.set_df_property("tax_withholding_category", "hidden", 1);
 		} else {
 			me.frm.set_value("tax_withholding_category", me.frm.supplier_tds);
@@ -346,7 +384,7 @@
 
 	credit_to() {
 		var me = this;
-		if(this.frm.doc.credit_to) {
+		if (this.frm.doc.credit_to) {
 			me.frm.call({
 				method: "frappe.client.get_value",
 				args: {
@@ -354,12 +392,12 @@
 					fieldname: "account_currency",
 					filters: { name: me.frm.doc.credit_to },
 				},
-				callback: function(r, rt) {
-					if(r.message) {
+				callback: function (r, rt) {
+					if (r.message) {
 						me.frm.set_value("party_account_currency", r.message.account_currency);
 						me.set_dynamic_labels();
 					}
-				}
+				},
 			});
 		}
 	}
@@ -367,16 +405,16 @@
 	make_inter_company_invoice(frm) {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.accounts.doctype.purchase_invoice.purchase_invoice.make_inter_company_sales_invoice",
-			frm: frm
+			frm: frm,
 		});
 	}
 
 	is_paid() {
 		hide_fields(this.frm.doc);
-		if(cint(this.frm.doc.is_paid)) {
+		if (cint(this.frm.doc.is_paid)) {
 			this.frm.set_value("allocate_advances_automatically", 0);
-			if(!this.frm.doc.company) {
-				this.frm.set_value("is_paid", 0)
+			if (!this.frm.doc.company) {
+				this.frm.set_value("is_paid", 0);
 				frappe.msgprint(__("Please specify Company to proceed"));
 			}
 		}
@@ -403,23 +441,27 @@
 
 	items_add(doc, cdt, cdn) {
 		var row = frappe.get_doc(cdt, cdn);
-		this.frm.script_manager.copy_from_first_row("items", row,
-			["expense_account", "discount_account", "cost_center", "project"]);
+		this.frm.script_manager.copy_from_first_row("items", row, [
+			"expense_account",
+			"discount_account",
+			"cost_center",
+			"project",
+		]);
 	}
 
 	on_submit() {
 		super.on_submit();
 
-		$.each(this.frm.doc["items"] || [], function(i, row) {
-			if(row.purchase_receipt) frappe.model.clear_doc("Purchase Receipt", row.purchase_receipt)
-		})
+		$.each(this.frm.doc["items"] || [], function (i, row) {
+			if (row.purchase_receipt) frappe.model.clear_doc("Purchase Receipt", row.purchase_receipt);
+		});
 	}
 
 	make_debit_note() {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.accounts.doctype.purchase_invoice.purchase_invoice.make_debit_note",
-			frm: cur_frm
-		})
+			frm: cur_frm,
+		});
 	}
 };
 
@@ -428,172 +470,170 @@
 // Hide Fields
 // ------------
 function hide_fields(doc) {
-	var parent_fields = ['due_date', 'is_opening', 'advances_section', 'from_date', 'to_date'];
+	var parent_fields = ["due_date", "is_opening", "advances_section", "from_date", "to_date"];
 
-	if(cint(doc.is_paid) == 1) {
+	if (cint(doc.is_paid) == 1) {
 		hide_field(parent_fields);
 	} else {
 		for (var i in parent_fields) {
 			var docfield = frappe.meta.docfield_map[doc.doctype][parent_fields[i]];
-			if(!docfield.hidden) unhide_field(parent_fields[i]);
+			if (!docfield.hidden) unhide_field(parent_fields[i]);
 		}
-
 	}
 
-	var item_fields_stock = ['warehouse_section', 'received_qty', 'rejected_qty'];
+	var item_fields_stock = ["warehouse_section", "received_qty", "rejected_qty"];
 
-	cur_frm.fields_dict['items'].grid.set_column_disp(item_fields_stock,
-		(cint(doc.update_stock)==1 || cint(doc.is_return)==1 ? true : false));
+	cur_frm.fields_dict["items"].grid.set_column_disp(
+		item_fields_stock,
+		cint(doc.update_stock) == 1 || cint(doc.is_return) == 1 ? true : false
+	);
 
 	cur_frm.refresh_fields();
 }
 
-cur_frm.fields_dict.cash_bank_account.get_query = function(doc) {
+cur_frm.fields_dict.cash_bank_account.get_query = function (doc) {
 	return {
 		filters: [
 			["Account", "account_type", "in", ["Cash", "Bank"]],
-			["Account", "is_group", "=",0],
+			["Account", "is_group", "=", 0],
 			["Account", "company", "=", doc.company],
-			["Account", "report_type", "=", "Balance Sheet"]
-		]
-	}
-}
+			["Account", "report_type", "=", "Balance Sheet"],
+		],
+	};
+};
 
-cur_frm.fields_dict['items'].grid.get_field("item_code").get_query = function(doc, cdt, cdn) {
+cur_frm.fields_dict["items"].grid.get_field("item_code").get_query = function (doc, cdt, cdn) {
 	return {
 		query: "erpnext.controllers.queries.item_query",
-		filters: {'is_purchase_item': 1}
-	}
-}
+		filters: { is_purchase_item: 1 },
+	};
+};
 
-cur_frm.fields_dict['credit_to'].get_query = function(doc) {
+cur_frm.fields_dict["credit_to"].get_query = function (doc) {
 	// filter on Account
 	return {
 		filters: {
-			'account_type': 'Payable',
-			'is_group': 0,
-			'company': doc.company
-		}
-	}
-}
+			account_type: "Payable",
+			is_group: 0,
+			company: doc.company,
+		},
+	};
+};
 
 // Get Print Heading
-cur_frm.fields_dict['select_print_heading'].get_query = function(doc, cdt, cdn) {
+cur_frm.fields_dict["select_print_heading"].get_query = function (doc, cdt, cdn) {
 	return {
-		filters:[
-			['Print Heading', 'docstatus', '!=', 2]
-		]
-	}
-}
+		filters: [["Print Heading", "docstatus", "!=", 2]],
+	};
+};
 
-cur_frm.set_query("expense_account", "items", function(doc) {
+cur_frm.set_query("expense_account", "items", function (doc) {
 	return {
 		query: "erpnext.controllers.queries.get_expense_account",
-		filters: {'company': doc.company }
-	}
+		filters: { company: doc.company },
+	};
 });
 
-cur_frm.set_query("wip_composite_asset", "items", function() {
+cur_frm.set_query("wip_composite_asset", "items", function () {
 	return {
-		filters: {'is_composite_asset': 1, 'docstatus': 0 }
-	}
+		filters: { is_composite_asset: 1, docstatus: 0 },
+	};
 });
 
-cur_frm.cscript.expense_account = function(doc, cdt, cdn){
+cur_frm.cscript.expense_account = function (doc, cdt, cdn) {
 	var d = locals[cdt][cdn];
-	if(d.idx == 1 && d.expense_account){
+	if (d.idx == 1 && d.expense_account) {
 		var cl = doc.items || [];
-		for(var i = 0; i < cl.length; i++){
-			if(!cl[i].expense_account) cl[i].expense_account = d.expense_account;
+		for (var i = 0; i < cl.length; i++) {
+			if (!cl[i].expense_account) cl[i].expense_account = d.expense_account;
 		}
 	}
-	refresh_field('items');
-}
+	refresh_field("items");
+};
 
-cur_frm.fields_dict["items"].grid.get_field("cost_center").get_query = function(doc) {
+cur_frm.fields_dict["items"].grid.get_field("cost_center").get_query = function (doc) {
 	return {
 		filters: {
-			'company': doc.company,
-			'is_group': 0
-		}
+			company: doc.company,
+			is_group: 0,
+		},
+	};
+};
 
-	}
-}
-
-cur_frm.cscript.cost_center = function(doc, cdt, cdn){
+cur_frm.cscript.cost_center = function (doc, cdt, cdn) {
 	var d = locals[cdt][cdn];
-	if(d.cost_center){
+	if (d.cost_center) {
 		var cl = doc.items || [];
-		for(var i = 0; i < cl.length; i++){
-			if(!cl[i].cost_center) cl[i].cost_center = d.cost_center;
+		for (var i = 0; i < cl.length; i++) {
+			if (!cl[i].cost_center) cl[i].cost_center = d.cost_center;
 		}
 	}
-	refresh_field('items');
-}
+	refresh_field("items");
+};
 
-cur_frm.fields_dict['items'].grid.get_field('project').get_query = function(doc, cdt, cdn) {
-	return{
-		filters:[
-			['Project', 'status', 'not in', 'Completed, Cancelled']
-		]
-	}
-}
+cur_frm.fields_dict["items"].grid.get_field("project").get_query = function (doc, cdt, cdn) {
+	return {
+		filters: [["Project", "status", "not in", "Completed, Cancelled"]],
+	};
+};
 
 frappe.ui.form.on("Purchase Invoice", {
-	setup: function(frm) {
+	setup: function (frm) {
 		frm.custom_make_buttons = {
-			'Purchase Invoice': 'Return / Debit Note',
-			'Payment Entry': 'Payment',
-			'Landed Cost Voucher': function () { frm.trigger('create_landed_cost_voucher') },
-		}
+			"Purchase Invoice": "Return / Debit Note",
+			"Payment Entry": "Payment",
+			"Landed Cost Voucher": function () {
+				frm.trigger("create_landed_cost_voucher");
+			},
+		};
 
-		frm.set_query("additional_discount_account", function() {
+		frm.set_query("additional_discount_account", function () {
 			return {
 				filters: {
 					company: frm.doc.company,
 					is_group: 0,
 					report_type: "Profit and Loss",
-				}
+				},
 			};
 		});
 
-		frm.fields_dict['items'].grid.get_field('deferred_expense_account').get_query = function(doc) {
+		frm.fields_dict["items"].grid.get_field("deferred_expense_account").get_query = function (doc) {
 			return {
 				filters: {
-					'root_type': 'Asset',
-					'company': doc.company,
-					"is_group": 0
-				}
-			}
-		}
+					root_type: "Asset",
+					company: doc.company,
+					is_group: 0,
+				},
+			};
+		};
 
-		frm.fields_dict['items'].grid.get_field('discount_account').get_query = function(doc) {
+		frm.fields_dict["items"].grid.get_field("discount_account").get_query = function (doc) {
 			return {
 				filters: {
-					'report_type': 'Profit and Loss',
-					'company': doc.company,
-					"is_group": 0
-				}
-			}
-		}
+					report_type: "Profit and Loss",
+					company: doc.company,
+					is_group: 0,
+				},
+			};
+		};
 	},
 
-	refresh: function(frm) {
+	refresh: function (frm) {
 		frm.events.add_custom_buttons(frm);
 	},
 
-	mode_of_payment: function(frm) {
-		erpnext.accounts.pos.get_payment_mode_account(frm, frm.doc.mode_of_payment, function(account) {
+	mode_of_payment: function (frm) {
+		erpnext.accounts.pos.get_payment_mode_account(frm, frm.doc.mode_of_payment, function (account) {
 			frm.set_value("cash_bank_account", account);
-		})
+		});
 	},
 
 	create_landed_cost_voucher: function (frm) {
-		let lcv = frappe.model.get_new_doc('Landed Cost Voucher');
+		let lcv = frappe.model.get_new_doc("Landed Cost Voucher");
 		lcv.company = frm.doc.company;
 
-		let lcv_receipt = frappe.model.get_new_doc('Landed Cost Purchase Invoice');
-		lcv_receipt.receipt_document_type = 'Purchase Invoice';
+		let lcv_receipt = frappe.model.get_new_doc("Landed Cost Purchase Invoice");
+		lcv_receipt.receipt_document_type = "Purchase Invoice";
 		lcv_receipt.receipt_document = frm.doc.name;
 		lcv_receipt.supplier = frm.doc.supplier;
 		lcv_receipt.grand_total = frm.doc.grand_total;
@@ -602,35 +642,43 @@
 		frappe.set_route("Form", lcv.doctype, lcv.name);
 	},
 
-	add_custom_buttons: function(frm) {
+	add_custom_buttons: function (frm) {
 		if (frm.doc.docstatus == 1 && frm.doc.per_received < 100) {
-			frm.add_custom_button(__('Purchase Receipt'), () => {
-				frm.events.make_purchase_receipt(frm);
-			}, __('Create'));
+			frm.add_custom_button(
+				__("Purchase Receipt"),
+				() => {
+					frm.events.make_purchase_receipt(frm);
+				},
+				__("Create")
+			);
 		}
 
 		if (frm.doc.docstatus == 1 && frm.doc.per_received > 0) {
-			frm.add_custom_button(__('Purchase Receipt'), () => {
-				frappe.route_options = {
-					'purchase_invoice': frm.doc.name
-				}
+			frm.add_custom_button(
+				__("Purchase Receipt"),
+				() => {
+					frappe.route_options = {
+						purchase_invoice: frm.doc.name,
+					};
 
-				frappe.set_route("List", "Purchase Receipt", "List")
-			}, __('View'));
+					frappe.set_route("List", "Purchase Receipt", "List");
+				},
+				__("View")
+			);
 		}
 	},
 
-	onload: function(frm) {
-		if(frm.doc.__onload && frm.is_new()) {
-			if(frm.doc.supplier) {
+	onload: function (frm) {
+		if (frm.doc.__onload && frm.is_new()) {
+			if (frm.doc.supplier) {
 				frm.doc.apply_tds = frm.doc.__onload.supplier_tds ? 1 : 0;
 			}
-			if(!frm.doc.__onload.supplier_tds) {
+			if (!frm.doc.__onload.supplier_tds) {
 				frm.set_df_property("apply_tds", "read_only", 1);
 			}
 		}
 
-		erpnext.queries.setup_queries(frm, "Warehouse", function() {
+		erpnext.queries.setup_queries(frm, "Warehouse", function () {
 			return erpnext.queries.warehouse(frm.doc);
 		});
 
@@ -639,7 +687,7 @@
 		}
 	},
 
-	is_subcontracted: function(frm) {
+	is_subcontracted: function (frm) {
 		if (frm.doc.is_old_subcontracting_flow) {
 			erpnext.buying.get_default_bom(frm);
 		}
@@ -647,30 +695,29 @@
 		frm.toggle_reqd("supplier_warehouse", frm.doc.is_subcontracted);
 	},
 
-	update_stock: function(frm) {
+	update_stock: function (frm) {
 		hide_fields(frm.doc);
-		frm.fields_dict.items.grid.toggle_reqd("item_code", frm.doc.update_stock? true: false);
+		frm.fields_dict.items.grid.toggle_reqd("item_code", frm.doc.update_stock ? true : false);
 	},
 
-	make_purchase_receipt: function(frm) {
+	make_purchase_receipt: function (frm) {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.accounts.doctype.purchase_invoice.purchase_invoice.make_purchase_receipt",
 			frm: frm,
-			freeze_message: __("Creating Purchase Receipt ...")
-		})
+			freeze_message: __("Creating Purchase Receipt ..."),
+		});
 	},
 
-	company: function(frm) {
+	company: function (frm) {
 		erpnext.accounts.dimensions.update_dimension(frm, frm.doctype);
 
 		if (frm.doc.company) {
 			frappe.call({
-				method:
-					"erpnext.accounts.party.get_party_account",
+				method: "erpnext.accounts.party.get_party_account",
 				args: {
-					party_type: 'Supplier',
+					party_type: "Supplier",
 					party: frm.doc.supplier,
-					company: frm.doc.company
+					company: frm.doc.company,
 				},
 				callback: (response) => {
 					if (response) frm.set_value("credit_to", response.message);
@@ -678,4 +725,4 @@
 			});
 		}
 	},
-})
+});
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice_list.js b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice_list.js
index fa30c37..031b234 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice_list.js
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice_list.js
@@ -22,48 +22,35 @@
 			return [__(doc.status), "gray", "status,=," + doc.status];
 		}
 
-		if (
-			flt(doc.outstanding_amount) > 0 &&
-			doc.docstatus == 1 &&
-			cint(doc.on_hold)
-		) {
+		if (flt(doc.outstanding_amount) > 0 && doc.docstatus == 1 && cint(doc.on_hold)) {
 			if (!doc.release_date) {
 				return [__("On Hold"), "darkgrey"];
-			} else if (
-				frappe.datetime.get_diff(
-					doc.release_date,
-					frappe.datetime.nowdate()
-				) > 0
-			) {
+			} else if (frappe.datetime.get_diff(doc.release_date, frappe.datetime.nowdate()) > 0) {
 				return [__("Temporarily on Hold"), "darkgrey"];
 			}
 		}
 
 		const status_colors = {
-			"Unpaid": "orange",
-			"Paid": "green",
-			"Return": "gray",
-			"Overdue": "red",
+			Unpaid: "orange",
+			Paid: "green",
+			Return: "gray",
+			Overdue: "red",
 			"Partly Paid": "yellow",
 			"Internal Transfer": "darkgrey",
 		};
 
 		if (status_colors[doc.status]) {
-			return [
-				__(doc.status),
-				status_colors[doc.status],
-				"status,=," + doc.status,
-			];
+			return [__(doc.status), status_colors[doc.status], "status,=," + doc.status];
 		}
 	},
 
-	onload: function(listview) {
-		listview.page.add_action_item(__("Purchase Receipt"), ()=>{
+	onload: function (listview) {
+		listview.page.add_action_item(__("Purchase Receipt"), () => {
 			erpnext.bulk_transaction_processing.create(listview, "Purchase Invoice", "Purchase Receipt");
 		});
 
-		listview.page.add_action_item(__("Payment"), ()=>{
+		listview.page.add_action_item(__("Payment"), () => {
 			erpnext.bulk_transaction_processing.create(listview, "Purchase Invoice", "Payment Entry");
 		});
-	}
+	},
 };
diff --git a/erpnext/accounts/doctype/purchase_taxes_and_charges_template/purchase_taxes_and_charges_template.js b/erpnext/accounts/doctype/purchase_taxes_and_charges_template/purchase_taxes_and_charges_template.js
index 78dc4be..66a9cbe 100644
--- a/erpnext/accounts/doctype/purchase_taxes_and_charges_template/purchase_taxes_and_charges_template.js
+++ b/erpnext/accounts/doctype/purchase_taxes_and_charges_template/purchase_taxes_and_charges_template.js
@@ -8,24 +8,23 @@
 	add_deduct_tax(doc, cdt, cdn) {
 		let d = locals[cdt][cdn];
 
-		if(!d.category && d.add_deduct_tax) {
+		if (!d.category && d.add_deduct_tax) {
 			frappe.msgprint(__("Please select Category first"));
-			d.add_deduct_tax = '';
-		}
-		else if(d.category != 'Total' && d.add_deduct_tax == 'Deduct') {
+			d.add_deduct_tax = "";
+		} else if (d.category != "Total" && d.add_deduct_tax == "Deduct") {
 			frappe.msgprint(__("Cannot deduct when category is for 'Valuation' or 'Valuation and Total'"));
-			d.add_deduct_tax = '';
+			d.add_deduct_tax = "";
 		}
-		refresh_field('add_deduct_tax', d.name, 'taxes');
+		refresh_field("add_deduct_tax", d.name, "taxes");
 	},
 
 	category(doc, cdt, cdn) {
 		let d = locals[cdt][cdn];
 
-		if(d.category != 'Total' && d.add_deduct_tax == 'Deduct') {
+		if (d.category != "Total" && d.add_deduct_tax == "Deduct") {
 			frappe.msgprint(__("Cannot deduct when category is for 'Valuation' or 'Valuation and Total'"));
-			d.add_deduct_tax = '';
+			d.add_deduct_tax = "";
 		}
-		refresh_field('add_deduct_tax', d.name, 'taxes');
-	}
+		refresh_field("add_deduct_tax", d.name, "taxes");
+	},
 });
diff --git a/erpnext/accounts/doctype/repost_accounting_ledger/repost_accounting_ledger.js b/erpnext/accounts/doctype/repost_accounting_ledger/repost_accounting_ledger.js
index c7b7a14..c304c7f 100644
--- a/erpnext/accounts/doctype/repost_accounting_ledger/repost_accounting_ledger.js
+++ b/erpnext/accounts/doctype/repost_accounting_ledger/repost_accounting_ledger.js
@@ -2,47 +2,47 @@
 // For license information, please see license.txt
 
 frappe.ui.form.on("Repost Accounting Ledger", {
-	setup: function(frm) {
-		frm.fields_dict['vouchers'].grid.get_field('voucher_type').get_query = function(doc) {
+	setup: function (frm) {
+		frm.fields_dict["vouchers"].grid.get_field("voucher_type").get_query = function (doc) {
 			return {
-				query: "erpnext.accounts.doctype.repost_accounting_ledger.repost_accounting_ledger.get_repost_allowed_types"
-			}
-		}
+				query: "erpnext.accounts.doctype.repost_accounting_ledger.repost_accounting_ledger.get_repost_allowed_types",
+			};
+		};
 
-		frm.fields_dict['vouchers'].grid.get_field('voucher_no').get_query = function(doc) {
+		frm.fields_dict["vouchers"].grid.get_field("voucher_no").get_query = function (doc) {
 			if (doc.company) {
 				return {
 					filters: {
 						company: doc.company,
-						docstatus: 1
-					}
-				}
+						docstatus: 1,
+					},
+				};
 			}
-		}
+		};
 	},
 
-	refresh: function(frm) {
-		frm.add_custom_button(__('Show Preview'), () => {
+	refresh: function (frm) {
+		frm.add_custom_button(__("Show Preview"), () => {
 			frm.call({
-				method: 'generate_preview',
+				method: "generate_preview",
 				doc: frm.doc,
 				freeze: true,
-				freeze_message: __('Generating Preview'),
-				callback: function(r) {
+				freeze_message: __("Generating Preview"),
+				callback: function (r) {
 					if (r && r.message) {
 						let content = r.message;
 						let opts = {
 							title: "Preview",
 							subtitle: "preview",
 							content: content,
-							print_settings: {orientation: "landscape"},
+							print_settings: { orientation: "landscape" },
 							columns: [],
 							data: [],
-						}
+						};
 						frappe.render_grid(opts);
 					}
-				}
+				},
 			});
 		});
-	}
+	},
 });
diff --git a/erpnext/accounts/doctype/repost_payment_ledger/repost_payment_ledger.js b/erpnext/accounts/doctype/repost_payment_ledger/repost_payment_ledger.js
index 6801408..b9621c0 100644
--- a/erpnext/accounts/doctype/repost_payment_ledger/repost_payment_ledger.js
+++ b/erpnext/accounts/doctype/repost_payment_ledger/repost_payment_ledger.js
@@ -1,53 +1,53 @@
 // Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Repost Payment Ledger', {
-	setup: function(frm) {
+frappe.ui.form.on("Repost Payment Ledger", {
+	setup: function (frm) {
 		frm.set_query("voucher_type", () => {
 			return {
 				filters: {
-					name: ['in', ['Purchase Invoice', 'Sales Invoice', 'Payment Entry', 'Journal Entry']]
-				}
+					name: ["in", ["Purchase Invoice", "Sales Invoice", "Payment Entry", "Journal Entry"]],
+				},
 			};
 		});
 
-		frm.fields_dict['repost_vouchers'].grid.get_field('voucher_type').get_query = function(doc) {
+		frm.fields_dict["repost_vouchers"].grid.get_field("voucher_type").get_query = function (doc) {
 			return {
 				filters: {
-					name: ['in', ['Purchase Invoice', 'Sales Invoice', 'Payment Entry', 'Journal Entry']]
-				}
-			}
-		}
+					name: ["in", ["Purchase Invoice", "Sales Invoice", "Payment Entry", "Journal Entry"]],
+				},
+			};
+		};
 
-		frm.fields_dict['repost_vouchers'].grid.get_field('voucher_no').get_query = function(doc) {
+		frm.fields_dict["repost_vouchers"].grid.get_field("voucher_no").get_query = function (doc) {
 			if (doc.company) {
 				return {
 					filters: {
 						company: doc.company,
-						docstatus: 1
-					}
-				}
+						docstatus: 1,
+					},
+				};
 			}
-		}
-
+		};
 	},
-	refresh: function(frm) {
-
-		if (frm.doc.docstatus==1 && ['Queued', 'Failed'].find(x => x == frm.doc.repost_status)) {
-			frm.set_intro(__("Use 'Repost in background' button to trigger background job. Job can only be triggered when document is in Queued or Failed status."));
-			var btn_label = __("Repost in background")
+	refresh: function (frm) {
+		if (frm.doc.docstatus == 1 && ["Queued", "Failed"].find((x) => x == frm.doc.repost_status)) {
+			frm.set_intro(
+				__(
+					"Use 'Repost in background' button to trigger background job. Job can only be triggered when document is in Queued or Failed status."
+				)
+			);
+			var btn_label = __("Repost in background");
 
 			frm.add_custom_button(btn_label, () => {
 				frappe.call({
-					method: 'erpnext.accounts.doctype.repost_payment_ledger.repost_payment_ledger.execute_repost_payment_ledger',
+					method: "erpnext.accounts.doctype.repost_payment_ledger.repost_payment_ledger.execute_repost_payment_ledger",
 					args: {
 						docname: frm.doc.name,
-					}
+					},
 				});
-				frappe.msgprint(__('Reposting in the background.'));
+				frappe.msgprint(__("Reposting in the background."));
 			});
 		}
-
-	}
+	},
 });
-
diff --git a/erpnext/accounts/doctype/repost_payment_ledger/repost_payment_ledger_list.js b/erpnext/accounts/doctype/repost_payment_ledger/repost_payment_ledger_list.js
index e045184..76d17fc 100644
--- a/erpnext/accounts/doctype/repost_payment_ledger/repost_payment_ledger_list.js
+++ b/erpnext/accounts/doctype/repost_payment_ledger/repost_payment_ledger_list.js
@@ -1,12 +1,12 @@
 frappe.listview_settings["Repost Payment Ledger"] = {
 	add_fields: ["repost_status"],
-	get_indicator: function(doc) {
+	get_indicator: function (doc) {
 		var colors = {
-			'Queued': 'orange',
-			'Completed': 'green',
-			'Failed': 'red',
+			Queued: "orange",
+			Completed: "green",
+			Failed: "red",
 		};
 		let status = doc.repost_status;
-		return [__(status), colors[status], 'status,=,'+status];
+		return [__(status), colors[status], "status,=," + status];
 	},
 };
diff --git a/erpnext/accounts/doctype/sales_invoice/regional/italy.js b/erpnext/accounts/doctype/sales_invoice/regional/italy.js
index 2f305b9..a403b444 100644
--- a/erpnext/accounts/doctype/sales_invoice/regional/italy.js
+++ b/erpnext/accounts/doctype/sales_invoice/regional/italy.js
@@ -1,23 +1,23 @@
 frappe.ui.form.on("Sales Invoice", {
-    refresh: (frm) => {
-        if(frm.doc.docstatus == 1) {
-            frm.add_custom_button(__('Generate E-Invoice'), () => {
-                frm.call({
-                    method: "erpnext.regional.italy.utils.generate_single_invoice",
-                    args: {
-                        docname: frm.doc.name
-                    },
-                    callback: function(r) {
-                        frm.reload_doc();
-                        if(r.message) {
-                            open_url_post(frappe.request.url, {
-                                cmd: 'frappe.core.doctype.file.file.download_file',
-                                file_url: r.message
-                            });
-                        }
-                    }
-                });
-            });
-        }
-    }
-});
\ No newline at end of file
+	refresh: (frm) => {
+		if (frm.doc.docstatus == 1) {
+			frm.add_custom_button(__("Generate E-Invoice"), () => {
+				frm.call({
+					method: "erpnext.regional.italy.utils.generate_single_invoice",
+					args: {
+						docname: frm.doc.name,
+					},
+					callback: function (r) {
+						frm.reload_doc();
+						if (r.message) {
+							open_url_post(frappe.request.url, {
+								cmd: "frappe.core.doctype.file.file.download_file",
+								file_url: r.message,
+							});
+						}
+					},
+				});
+			});
+		}
+	},
+});
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
index ef1f6bd..17101cd 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
@@ -8,7 +8,9 @@
 erpnext.accounts.pos.setup("Sales Invoice");
 erpnext.accounts.taxes.setup_tax_filters("Sales Taxes and Charges");
 erpnext.sales_common.setup_selling_controller();
-erpnext.accounts.SalesInvoiceController = class SalesInvoiceController extends erpnext.selling.SellingController {
+erpnext.accounts.SalesInvoiceController = class SalesInvoiceController extends (
+	erpnext.selling.SellingController
+) {
 	setup(doc) {
 		this.setup_posting_date_time_check();
 		super.setup(doc);
@@ -21,20 +23,31 @@
 		var me = this;
 		super.onload();
 
-		this.frm.ignore_doctypes_on_cancel_all = ['POS Invoice', 'Timesheet', 'POS Invoice Merge Log',
-			'POS Closing Entry', 'Journal Entry', 'Payment Entry', "Repost Payment Ledger", "Repost Accounting Ledger", "Unreconcile Payment", "Unreconcile Payment Entries", "Serial and Batch Bundle", "Bank Transaction",
+		this.frm.ignore_doctypes_on_cancel_all = [
+			"POS Invoice",
+			"Timesheet",
+			"POS Invoice Merge Log",
+			"POS Closing Entry",
+			"Journal Entry",
+			"Payment Entry",
+			"Repost Payment Ledger",
+			"Repost Accounting Ledger",
+			"Unreconcile Payment",
+			"Unreconcile Payment Entries",
+			"Serial and Batch Bundle",
+			"Bank Transaction",
 		];
 
-		if(!this.frm.doc.__islocal && !this.frm.doc.customer && this.frm.doc.debit_to) {
+		if (!this.frm.doc.__islocal && !this.frm.doc.customer && this.frm.doc.debit_to) {
 			// show debit_to in print format
 			this.frm.set_df_property("debit_to", "print_hide", 0);
 		}
 
-		erpnext.queries.setup_queries(this.frm, "Warehouse", function() {
+		erpnext.queries.setup_queries(this.frm, "Warehouse", function () {
 			return erpnext.queries.warehouse(me.frm.doc);
 		});
 
-		if(this.frm.doc.__islocal && this.frm.doc.is_pos) {
+		if (this.frm.doc.__islocal && this.frm.doc.is_pos) {
 			//Load pos profile data on the invoice if the default value of Is POS is 1
 
 			me.frm.script_manager.trigger("is_pos");
@@ -46,30 +59,36 @@
 	refresh(doc, dt, dn) {
 		const me = this;
 		super.refresh();
-		if(cur_frm.msgbox && cur_frm.msgbox.$wrapper.is(":visible")) {
+		if (cur_frm.msgbox && cur_frm.msgbox.$wrapper.is(":visible")) {
 			// hide new msgbox
 			cur_frm.msgbox.hide();
 		}
 
 		this.frm.toggle_reqd("due_date", !this.frm.doc.is_return);
 
-		if (this.frm.doc.repost_required && this.frm.doc.docstatus===1) {
-			this.frm.set_intro(__("Accounting entries for this invoice needs to be reposted. Please click on 'Repost' button to update."));
-			this.frm.add_custom_button(__('Repost Accounting Entries'),
-				() => {
+		if (this.frm.doc.repost_required && this.frm.doc.docstatus === 1) {
+			this.frm.set_intro(
+				__(
+					"Accounting entries for this invoice needs to be reposted. Please click on 'Repost' button to update."
+				)
+			);
+			this.frm
+				.add_custom_button(__("Repost Accounting Entries"), () => {
 					this.frm.call({
 						doc: this.frm.doc,
-						method: 'repost_accounting_entries',
+						method: "repost_accounting_entries",
 						freeze: true,
-						freeze_message: __('Reposting...'),
+						freeze_message: __("Reposting..."),
 						callback: (r) => {
 							if (!r.exc) {
-								frappe.msgprint(__('Accounting Entries are reposted'));
+								frappe.msgprint(__("Accounting Entries are reposted"));
 								me.frm.refresh();
 							}
-						}
+						},
 					});
-				}).removeClass('btn-default').addClass('btn-warning');
+				})
+				.removeClass("btn-default")
+				.addClass("btn-warning");
 		}
 
 		if (this.frm.doc.is_return) {
@@ -79,79 +98,89 @@
 		this.show_general_ledger();
 		erpnext.accounts.ledger_preview.show_accounting_ledger_preview(this.frm);
 
-		if(doc.update_stock){
+		if (doc.update_stock) {
 			this.show_stock_ledger();
 			erpnext.accounts.ledger_preview.show_stock_ledger_preview(this.frm);
 		}
 
-		if (doc.docstatus == 1 && doc.outstanding_amount!=0) {
-			this.frm.add_custom_button(
-				__('Payment'),
-				() => this.make_payment_entry(),
-				__('Create')
-			);
-			this.frm.page.set_inner_btn_group_as_primary(__('Create'));
+		if (doc.docstatus == 1 && doc.outstanding_amount != 0) {
+			this.frm.add_custom_button(__("Payment"), () => this.make_payment_entry(), __("Create"));
+			this.frm.page.set_inner_btn_group_as_primary(__("Create"));
 		}
 
-		if(doc.docstatus==1 && !doc.is_return) {
-
+		if (doc.docstatus == 1 && !doc.is_return) {
 			var is_delivered_by_supplier = false;
 
-			is_delivered_by_supplier = cur_frm.doc.items.some(function(item){
+			is_delivered_by_supplier = cur_frm.doc.items.some(function (item) {
 				return item.is_delivered_by_supplier ? true : false;
-			})
+			});
 
-			if(doc.outstanding_amount >= 0 || Math.abs(flt(doc.outstanding_amount)) < flt(doc.grand_total)) {
-				cur_frm.add_custom_button(__('Return / Credit Note'),
-					this.make_sales_return, __('Create'));
-				cur_frm.page.set_inner_btn_group_as_primary(__('Create'));
+			if (doc.outstanding_amount >= 0 || Math.abs(flt(doc.outstanding_amount)) < flt(doc.grand_total)) {
+				cur_frm.add_custom_button(__("Return / Credit Note"), this.make_sales_return, __("Create"));
+				cur_frm.page.set_inner_btn_group_as_primary(__("Create"));
 			}
 
-			if(cint(doc.update_stock)!=1) {
+			if (cint(doc.update_stock) != 1) {
 				// show Make Delivery Note button only if Sales Invoice is not created from Delivery Note
 				var from_delivery_note = false;
-				from_delivery_note = cur_frm.doc.items
-					.some(function(item) {
-						return item.delivery_note ? true : false;
-					});
+				from_delivery_note = cur_frm.doc.items.some(function (item) {
+					return item.delivery_note ? true : false;
+				});
 
-				if(!from_delivery_note && !is_delivered_by_supplier) {
-					cur_frm.add_custom_button(__('Delivery'),
-						cur_frm.cscript['Make Delivery Note'], __('Create'));
+				if (!from_delivery_note && !is_delivered_by_supplier) {
+					cur_frm.add_custom_button(
+						__("Delivery"),
+						cur_frm.cscript["Make Delivery Note"],
+						__("Create")
+					);
 				}
 			}
 
-			if (doc.outstanding_amount>0) {
-				cur_frm.add_custom_button(__('Payment Request'), function() {
-					me.make_payment_request();
-				}, __('Create'));
-
-				cur_frm.add_custom_button(__('Invoice Discounting'), function() {
-					cur_frm.events.create_invoice_discounting(cur_frm);
-				}, __('Create'));
-
-				const payment_is_overdue = doc.payment_schedule.map(
-					row => Date.parse(row.due_date) < Date.now()
-				).reduce(
-					(prev, current) => prev || current
+			if (doc.outstanding_amount > 0) {
+				cur_frm.add_custom_button(
+					__("Payment Request"),
+					function () {
+						me.make_payment_request();
+					},
+					__("Create")
 				);
 
+				cur_frm.add_custom_button(
+					__("Invoice Discounting"),
+					function () {
+						cur_frm.events.create_invoice_discounting(cur_frm);
+					},
+					__("Create")
+				);
+
+				const payment_is_overdue = doc.payment_schedule
+					.map((row) => Date.parse(row.due_date) < Date.now())
+					.reduce((prev, current) => prev || current);
+
 				if (payment_is_overdue) {
-					this.frm.add_custom_button(__('Dunning'), () => {
-						this.frm.events.create_dunning(this.frm);
-					}, __('Create'));
+					this.frm.add_custom_button(
+						__("Dunning"),
+						() => {
+							this.frm.events.create_dunning(this.frm);
+						},
+						__("Create")
+					);
 				}
 			}
 
 			if (doc.docstatus === 1) {
-				cur_frm.add_custom_button(__('Maintenance Schedule'), function () {
-					cur_frm.cscript.make_maintenance_schedule();
-				}, __('Create'));
+				cur_frm.add_custom_button(
+					__("Maintenance Schedule"),
+					function () {
+						cur_frm.cscript.make_maintenance_schedule();
+					},
+					__("Create")
+				);
 			}
 		}
 
 		// Show buttons only when pos view is active
-		if (cint(doc.docstatus==0) && cur_frm.page.current_view_name!=="pos" && !doc.is_return) {
+		if (cint(doc.docstatus == 0) && cur_frm.page.current_view_name !== "pos" && !doc.is_return) {
 			this.frm.cscript.sales_order_btn();
 			this.frm.cscript.delivery_note_btn();
 			this.frm.cscript.quotation_btn();
@@ -161,12 +190,18 @@
 		if (doc.docstatus == 1 && !doc.inter_company_invoice_reference) {
 			let internal = me.frm.doc.is_internal_customer;
 			if (internal) {
-				let button_label = (me.frm.doc.company === me.frm.doc.represents_company) ? "Internal Purchase Invoice" :
-					"Inter Company Purchase Invoice";
+				let button_label =
+					me.frm.doc.company === me.frm.doc.represents_company
+						? "Internal Purchase Invoice"
+						: "Inter Company Purchase Invoice";
 
-				me.frm.add_custom_button(button_label, function() {
-					me.make_inter_company_invoice();
-				}, __('Create'));
+				me.frm.add_custom_button(
+					button_label,
+					function () {
+						me.make_inter_company_invoice();
+					},
+					__("Create")
+				);
 			}
 		}
 
@@ -176,40 +211,45 @@
 	make_maintenance_schedule() {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.make_maintenance_schedule",
-			frm: cur_frm
-		})
+			frm: cur_frm,
+		});
 	}
 
 	on_submit(doc, dt, dn) {
 		var me = this;
 
 		super.on_submit();
-		if (frappe.get_route()[0] != 'Form') {
-			return
+		if (frappe.get_route()[0] != "Form") {
+			return;
 		}
 
 		doc.items.forEach((row) => {
-			if(row.delivery_note) frappe.model.clear_doc("Delivery Note", row.delivery_note)
+			if (row.delivery_note) frappe.model.clear_doc("Delivery Note", row.delivery_note);
 		});
 	}
 
 	set_default_print_format() {
 		// set default print format to POS type or Credit Note
-		if(cur_frm.doc.is_pos) {
-			if(cur_frm.pos_print_format) {
+		if (cur_frm.doc.is_pos) {
+			if (cur_frm.pos_print_format) {
 				cur_frm.meta._default_print_format = cur_frm.meta.default_print_format;
 				cur_frm.meta.default_print_format = cur_frm.pos_print_format;
 			}
-		} else if(cur_frm.doc.is_return && !cur_frm.meta.default_print_format) {
-			if(cur_frm.return_print_format) {
+		} else if (cur_frm.doc.is_return && !cur_frm.meta.default_print_format) {
+			if (cur_frm.return_print_format) {
 				cur_frm.meta._default_print_format = cur_frm.meta.default_print_format;
 				cur_frm.meta.default_print_format = cur_frm.return_print_format;
 			}
 		} else {
-			if(cur_frm.meta._default_print_format) {
+			if (cur_frm.meta._default_print_format) {
 				cur_frm.meta.default_print_format = cur_frm.meta._default_print_format;
 				cur_frm.meta._default_print_format = null;
-			} else if(in_list([cur_frm.pos_print_format, cur_frm.return_print_format], cur_frm.meta.default_print_format)) {
+			} else if (
+				in_list(
+					[cur_frm.pos_print_format, cur_frm.return_print_format],
+					cur_frm.meta.default_print_format
+				)
+			) {
 				cur_frm.meta.default_print_format = null;
 				cur_frm.meta._default_print_format = null;
 			}
@@ -218,8 +258,9 @@
 
 	sales_order_btn() {
 		var me = this;
-		this.$sales_order_btn = this.frm.add_custom_button(__('Sales Order'),
-			function() {
+		this.$sales_order_btn = this.frm.add_custom_button(
+			__("Sales Order"),
+			function () {
 				erpnext.utils.map_current_doc({
 					method: "erpnext.selling.doctype.sales_order.sales_order.make_sales_invoice",
 					source_doctype: "Sales Order",
@@ -231,99 +272,113 @@
 						docstatus: 1,
 						status: ["not in", ["Closed", "On Hold"]],
 						per_billed: ["<", 99.99],
-						company: me.frm.doc.company
-					}
-				})
-			}, __("Get Items From"));
+						company: me.frm.doc.company,
+					},
+				});
+			},
+			__("Get Items From")
+		);
 	}
 
 	quotation_btn() {
 		var me = this;
-		this.$quotation_btn = this.frm.add_custom_button(__('Quotation'),
-			function() {
+		this.$quotation_btn = this.frm.add_custom_button(
+			__("Quotation"),
+			function () {
 				erpnext.utils.map_current_doc({
 					method: "erpnext.selling.doctype.quotation.quotation.make_sales_invoice",
 					source_doctype: "Quotation",
 					target: me.frm,
-					setters: [{
-						fieldtype: 'Link',
-						label: __('Customer'),
-						options: 'Customer',
-						fieldname: 'party_name',
-						default: me.frm.doc.customer,
-					}],
+					setters: [
+						{
+							fieldtype: "Link",
+							label: __("Customer"),
+							options: "Customer",
+							fieldname: "party_name",
+							default: me.frm.doc.customer,
+						},
+					],
 					get_query_filters: {
 						docstatus: 1,
 						status: ["!=", "Lost"],
-						company: me.frm.doc.company
-					}
-				})
-			}, __("Get Items From"));
+						company: me.frm.doc.company,
+					},
+				});
+			},
+			__("Get Items From")
+		);
 	}
 
 	delivery_note_btn() {
 		var me = this;
-		this.$delivery_note_btn = this.frm.add_custom_button(__('Delivery Note'),
-			function() {
+		this.$delivery_note_btn = this.frm.add_custom_button(
+			__("Delivery Note"),
+			function () {
 				erpnext.utils.map_current_doc({
 					method: "erpnext.stock.doctype.delivery_note.delivery_note.make_sales_invoice",
 					source_doctype: "Delivery Note",
 					target: me.frm,
 					date_field: "posting_date",
 					setters: {
-						customer: me.frm.doc.customer || undefined
+						customer: me.frm.doc.customer || undefined,
 					},
-					get_query: function() {
+					get_query: function () {
 						var filters = {
 							docstatus: 1,
 							company: me.frm.doc.company,
-							is_return: 0
+							is_return: 0,
 						};
-						if(me.frm.doc.customer) filters["customer"] = me.frm.doc.customer;
+						if (me.frm.doc.customer) filters["customer"] = me.frm.doc.customer;
 						return {
 							query: "erpnext.controllers.queries.get_delivery_notes_to_be_billed",
-							filters: filters
+							filters: filters,
 						};
-					}
+					},
 				});
-			}, __("Get Items From"));
+			},
+			__("Get Items From")
+		);
 	}
 
 	tc_name() {
 		this.get_terms();
 	}
 	customer() {
-		if (this.frm.doc.is_pos){
+		if (this.frm.doc.is_pos) {
 			var pos_profile = this.frm.doc.pos_profile;
 		}
 		var me = this;
-		if(this.frm.updating_party_details) return;
+		if (this.frm.updating_party_details) return;
 
 		if (this.frm.doc.__onload && this.frm.doc.__onload.load_after_mapping) return;
 
-		erpnext.utils.get_party_details(this.frm,
-			"erpnext.accounts.party.get_party_details", {
+		erpnext.utils.get_party_details(
+			this.frm,
+			"erpnext.accounts.party.get_party_details",
+			{
 				posting_date: this.frm.doc.posting_date,
 				party: this.frm.doc.customer,
 				party_type: "Customer",
 				account: this.frm.doc.debit_to,
 				price_list: this.frm.doc.selling_price_list,
-				pos_profile: pos_profile
-			}, function() {
+				pos_profile: pos_profile,
+			},
+			function () {
 				me.apply_pricing_rule();
-			});
+			}
+		);
 
-		if(this.frm.doc.customer) {
+		if (this.frm.doc.customer) {
 			frappe.call({
-				"method": "erpnext.accounts.doctype.sales_invoice.sales_invoice.get_loyalty_programs",
-				"args": {
-					"customer": this.frm.doc.customer
+				method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.get_loyalty_programs",
+				args: {
+					customer: this.frm.doc.customer,
 				},
-				callback: function(r) {
-					if(r.message && r.message.length > 1) {
+				callback: function (r) {
+					if (r.message && r.message.length > 1) {
 						select_loyalty_program(me.frm, r.message);
 					}
-				}
+				},
 			});
 		}
 	}
@@ -332,13 +387,13 @@
 		let me = this;
 		frappe.model.open_mapped_doc({
 			method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.make_inter_company_purchase_invoice",
-			frm: me.frm
+			frm: me.frm,
 		});
 	}
 
 	debit_to() {
 		var me = this;
-		if(this.frm.doc.debit_to) {
+		if (this.frm.doc.debit_to) {
 			me.frm.call({
 				method: "frappe.client.get_value",
 				args: {
@@ -346,12 +401,12 @@
 					fieldname: "account_currency",
 					filters: { name: me.frm.doc.debit_to },
 				},
-				callback: function(r, rt) {
-					if(r.message) {
+				callback: function (r, rt) {
+					if (r.message) {
 						me.frm.set_value("party_account_currency", r.message.account_currency);
 						me.set_dynamic_labels();
 					}
-				}
+				},
 			});
 		}
 	}
@@ -365,8 +420,12 @@
 		if (cint(this.frm.doc.write_off_outstanding_amount_automatically)) {
 			frappe.model.round_floats_in(this.frm.doc, ["grand_total", "paid_amount"]);
 			// this will make outstanding amount 0
-			this.frm.set_value("write_off_amount",
-				flt(this.frm.doc.grand_total - this.frm.doc.paid_amount - this.frm.doc.total_advance, precision("write_off_amount"))
+			this.frm.set_value(
+				"write_off_amount",
+				flt(
+					this.frm.doc.grand_total - this.frm.doc.paid_amount - this.frm.doc.total_advance,
+					precision("write_off_amount")
+				)
 			);
 		}
 
@@ -381,12 +440,16 @@
 
 	items_add(doc, cdt, cdn) {
 		var row = frappe.get_doc(cdt, cdn);
-		this.frm.script_manager.copy_from_first_row("items", row, ["income_account", "discount_account", "cost_center"]);
+		this.frm.script_manager.copy_from_first_row("items", row, [
+			"income_account",
+			"discount_account",
+			"cost_center",
+		]);
 	}
 
 	set_dynamic_labels() {
 		super.set_dynamic_labels();
-		this.frm.events.hide_fields(this.frm)
+		this.frm.events.hide_fields(this.frm);
 	}
 
 	items_on_form_rendered() {
@@ -400,39 +463,39 @@
 	make_sales_return() {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.make_sales_return",
-			frm: cur_frm
-		})
+			frm: cur_frm,
+		});
 	}
 
 	asset(frm, cdt, cdn) {
 		var row = locals[cdt][cdn];
-		if(row.asset) {
+		if (row.asset) {
 			frappe.call({
 				method: erpnext.assets.doctype.asset.depreciation.get_disposal_account_and_cost_center,
 				args: {
-					"company": frm.doc.company
+					company: frm.doc.company,
 				},
-				callback: function(r, rt) {
+				callback: function (r, rt) {
 					frappe.model.set_value(cdt, cdn, "income_account", r.message[0]);
 					frappe.model.set_value(cdt, cdn, "cost_center", r.message[1]);
-				}
-			})
+				},
+			});
 		}
 	}
 
-	is_pos(frm){
+	is_pos(frm) {
 		this.set_pos_data();
 	}
 
 	pos_profile() {
-		this.frm.doc.taxes = []
+		this.frm.doc.taxes = [];
 		this.set_pos_data();
 	}
 
 	set_pos_data() {
-		if(this.frm.doc.is_pos) {
+		if (this.frm.doc.is_pos) {
 			this.frm.set_value("allocate_advances_automatically", 0);
-			if(!this.frm.doc.company) {
+			if (!this.frm.doc.company) {
 				this.frm.set_value("is_pos", 0);
 				frappe.msgprint(__("Please specify Company to proceed"));
 			} else {
@@ -440,13 +503,13 @@
 				return this.frm.call({
 					doc: me.frm.doc,
 					method: "set_missing_values",
-					callback: function(r) {
-						if(!r.exc) {
-							if(r.message && r.message.print_format) {
+					callback: function (r) {
+						if (!r.exc) {
+							if (r.message && r.message.print_format) {
 								me.frm.pos_print_format = r.message.print_format;
 							}
 							me.frm.trigger("update_stock");
-							if(me.frm.doc.taxes_and_charges) {
+							if (me.frm.doc.taxes_and_charges) {
 								me.frm.script_manager.trigger("taxes_and_charges");
 							}
 
@@ -454,21 +517,20 @@
 							me.set_dynamic_labels();
 							me.calculate_taxes_and_totals();
 						}
-					}
+					},
 				});
 			}
-		}
-		else this.frm.trigger("refresh");
+		} else this.frm.trigger("refresh");
 	}
 
-	amount(){
-		this.write_off_outstanding_amount_automatically()
+	amount() {
+		this.write_off_outstanding_amount_automatically();
 	}
 
-	change_amount(){
-		if(this.frm.doc.paid_amount > this.frm.doc.grand_total){
+	change_amount() {
+		if (this.frm.doc.paid_amount > this.frm.doc.grand_total) {
 			this.calculate_write_off_amount();
-		}else {
+		} else {
 			this.frm.set_value("change_amount", 0.0);
 			this.frm.set_value("base_change_amount", 0.0);
 		}
@@ -476,7 +538,7 @@
 		this.frm.refresh_fields();
 	}
 
-	loyalty_amount(){
+	loyalty_amount() {
 		this.calculate_outstanding_amount();
 		this.frm.refresh_field("outstanding_amount");
 		this.frm.refresh_field("paid_amount");
@@ -488,16 +550,24 @@
 		super.currency();
 		if (this.frm.doc.timesheets) {
 			this.frm.doc.timesheets.forEach((d) => {
-				let row = frappe.get_doc(d.doctype, d.name)
-				set_timesheet_detail_rate(row.doctype, row.name, me.frm.doc.currency, row.timesheet_detail)
+				let row = frappe.get_doc(d.doctype, d.name);
+				set_timesheet_detail_rate(row.doctype, row.name, me.frm.doc.currency, row.timesheet_detail);
 			});
 			this.frm.trigger("calculate_timesheet_totals");
 		}
 	}
 
 	is_cash_or_non_trade_discount() {
-		this.frm.set_df_property("additional_discount_account", "hidden", 1 - this.frm.doc.is_cash_or_non_trade_discount);
-		this.frm.set_df_property("additional_discount_account", "reqd", this.frm.doc.is_cash_or_non_trade_discount);
+		this.frm.set_df_property(
+			"additional_discount_account",
+			"hidden",
+			1 - this.frm.doc.is_cash_or_non_trade_discount
+		);
+		this.frm.set_df_property(
+			"additional_discount_account",
+			"reqd",
+			this.frm.doc.is_cash_or_non_trade_discount
+		);
 
 		if (!this.frm.doc.is_cash_or_non_trade_discount) {
 			this.frm.set_value("additional_discount_account", "");
@@ -508,337 +578,349 @@
 };
 
 // for backward compatibility: combine new and previous states
-extend_cscript(cur_frm.cscript, new erpnext.accounts.SalesInvoiceController({frm: cur_frm}));
+extend_cscript(cur_frm.cscript, new erpnext.accounts.SalesInvoiceController({ frm: cur_frm }));
 
-cur_frm.cscript['Make Delivery Note'] = function() {
+cur_frm.cscript["Make Delivery Note"] = function () {
 	frappe.model.open_mapped_doc({
 		method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.make_delivery_note",
-		frm: cur_frm
-	})
-}
+		frm: cur_frm,
+	});
+};
 
-cur_frm.fields_dict.cash_bank_account.get_query = function(doc) {
+cur_frm.fields_dict.cash_bank_account.get_query = function (doc) {
 	return {
 		filters: [
 			["Account", "account_type", "in", ["Cash", "Bank"]],
 			["Account", "root_type", "=", "Asset"],
-			["Account", "is_group", "=",0],
-			["Account", "company", "=", doc.company]
-		]
-	}
-}
+			["Account", "is_group", "=", 0],
+			["Account", "company", "=", doc.company],
+		],
+	};
+};
 
-cur_frm.fields_dict.write_off_account.get_query = function(doc) {
-	return{
-		filters:{
-			'report_type': 'Profit and Loss',
-			'is_group': 0,
-			'company': doc.company
-		}
-	}
-}
+cur_frm.fields_dict.write_off_account.get_query = function (doc) {
+	return {
+		filters: {
+			report_type: "Profit and Loss",
+			is_group: 0,
+			company: doc.company,
+		},
+	};
+};
 
 // Write off cost center
 //-----------------------
-cur_frm.fields_dict.write_off_cost_center.get_query = function(doc) {
-	return{
-		filters:{
-			'is_group': 0,
-			'company': doc.company
-		}
-	}
-}
+cur_frm.fields_dict.write_off_cost_center.get_query = function (doc) {
+	return {
+		filters: {
+			is_group: 0,
+			company: doc.company,
+		},
+	};
+};
 
 // Cost Center in Details Table
 // -----------------------------
-cur_frm.fields_dict["items"].grid.get_field("cost_center").get_query = function(doc) {
+cur_frm.fields_dict["items"].grid.get_field("cost_center").get_query = function (doc) {
 	return {
 		filters: {
-			'company': doc.company,
-			"is_group": 0
-		}
-	}
-}
+			company: doc.company,
+			is_group: 0,
+		},
+	};
+};
 
-cur_frm.cscript.income_account = function(doc, cdt, cdn) {
+cur_frm.cscript.income_account = function (doc, cdt, cdn) {
 	erpnext.utils.copy_value_in_all_rows(doc, cdt, cdn, "items", "income_account");
-}
+};
 
-cur_frm.cscript.expense_account = function(doc, cdt, cdn) {
+cur_frm.cscript.expense_account = function (doc, cdt, cdn) {
 	erpnext.utils.copy_value_in_all_rows(doc, cdt, cdn, "items", "expense_account");
-}
+};
 
-cur_frm.cscript.cost_center = function(doc, cdt, cdn) {
+cur_frm.cscript.cost_center = function (doc, cdt, cdn) {
 	erpnext.utils.copy_value_in_all_rows(doc, cdt, cdn, "items", "cost_center");
-}
+};
 
-cur_frm.set_query("debit_to", function(doc) {
+cur_frm.set_query("debit_to", function (doc) {
 	return {
 		filters: {
-			'account_type': 'Receivable',
-			'is_group': 0,
-			'company': doc.company
-		}
-	}
+			account_type: "Receivable",
+			is_group: 0,
+			company: doc.company,
+		},
+	};
 });
 
-cur_frm.set_query("asset", "items", function(doc, cdt, cdn) {
+cur_frm.set_query("asset", "items", function (doc, cdt, cdn) {
 	var d = locals[cdt][cdn];
 	return {
 		filters: [
 			["Asset", "item_code", "=", d.item_code],
 			["Asset", "docstatus", "=", 1],
 			["Asset", "status", "in", ["Submitted", "Partially Depreciated", "Fully Depreciated"]],
-			["Asset", "company", "=", doc.company]
-		]
-	}
+			["Asset", "company", "=", doc.company],
+		],
+	};
 });
 
-frappe.ui.form.on('Sales Invoice', {
-	setup: function(frm){
-		frm.add_fetch('customer', 'tax_id', 'tax_id');
-		frm.add_fetch('payment_term', 'invoice_portion', 'invoice_portion');
-		frm.add_fetch('payment_term', 'description', 'description');
+frappe.ui.form.on("Sales Invoice", {
+	setup: function (frm) {
+		frm.add_fetch("customer", "tax_id", "tax_id");
+		frm.add_fetch("payment_term", "invoice_portion", "invoice_portion");
+		frm.add_fetch("payment_term", "description", "description");
 
-		frm.set_df_property('packed_items', 'cannot_add_rows', true);
-		frm.set_df_property('packed_items', 'cannot_delete_rows', true);
+		frm.set_df_property("packed_items", "cannot_add_rows", true);
+		frm.set_df_property("packed_items", "cannot_delete_rows", true);
 
-		frm.set_query("account_for_change_amount", function() {
+		frm.set_query("account_for_change_amount", function () {
 			return {
 				filters: {
-					account_type: ['in', ["Cash", "Bank"]],
+					account_type: ["in", ["Cash", "Bank"]],
 					company: frm.doc.company,
-					is_group: 0
-				}
+					is_group: 0,
+				},
 			};
 		});
 
-		frm.set_query("unrealized_profit_loss_account", function() {
+		frm.set_query("unrealized_profit_loss_account", function () {
 			return {
 				filters: {
 					company: frm.doc.company,
 					is_group: 0,
 					root_type: "Liability",
-				}
+				},
 			};
 		});
 
-		frm.set_query("adjustment_against", function() {
+		frm.set_query("adjustment_against", function () {
 			return {
 				filters: {
 					company: frm.doc.company,
 					customer: frm.doc.customer,
-					docstatus: 1
-				}
+					docstatus: 1,
+				},
 			};
 		});
 
-		frm.set_query("additional_discount_account", function() {
+		frm.set_query("additional_discount_account", function () {
 			return {
 				filters: {
 					company: frm.doc.company,
 					is_group: 0,
 					report_type: "Profit and Loss",
-				}
+				},
 			};
 		});
 
-		frm.set_query("income_account", "items", function() {
-			return{
+		frm.set_query("income_account", "items", function () {
+			return {
 				query: "erpnext.controllers.queries.get_income_account",
 				filters: {
-					'company': frm.doc.company,
-					"disabled": 0
-				}
-			}
-		});
-
-		frm.custom_make_buttons = {
-			'Delivery Note': 'Delivery',
-			'Sales Invoice': 'Return / Credit Note',
-			'Payment Request': 'Payment Request',
-			'Payment Entry': 'Payment'
-		},
-		frm.fields_dict["timesheets"].grid.get_field("time_sheet").get_query = function(doc, cdt, cdn){
-			return{
-				query: "erpnext.projects.doctype.timesheet.timesheet.get_timesheet",
-				filters: {'project': doc.project}
-			}
-		}
-
-		// discount account
-		frm.fields_dict['items'].grid.get_field('discount_account').get_query = function(doc) {
-			return {
-				filters: {
-					'report_type': 'Profit and Loss',
-					'company': doc.company,
-					"is_group": 0
-				}
-			}
-		}
-
-		frm.fields_dict['items'].grid.get_field('deferred_revenue_account').get_query = function(doc) {
-			return {
-				filters: {
-					'root_type': 'Liability',
-					'company': doc.company,
-					"is_group": 0
-				}
-			}
-		}
-
-		frm.set_query('company_address', function(doc) {
-			if(!doc.company) {
-				frappe.throw(__('Please set Company'));
-			}
-
-			return {
-				query: 'frappe.contacts.doctype.address.address.address_query',
-				filters: {
-					link_doctype: 'Company',
-					link_name: doc.company
-				}
+					company: frm.doc.company,
+					disabled: 0,
+				},
 			};
 		});
 
-		frm.set_query('pos_profile', function(doc) {
-			if(!doc.company) {
-				frappe.throw(__('Please set Company'));
+		(frm.custom_make_buttons = {
+			"Delivery Note": "Delivery",
+			"Sales Invoice": "Return / Credit Note",
+			"Payment Request": "Payment Request",
+			"Payment Entry": "Payment",
+		}),
+			(frm.fields_dict["timesheets"].grid.get_field("time_sheet").get_query = function (doc, cdt, cdn) {
+				return {
+					query: "erpnext.projects.doctype.timesheet.timesheet.get_timesheet",
+					filters: { project: doc.project },
+				};
+			});
+
+		// discount account
+		frm.fields_dict["items"].grid.get_field("discount_account").get_query = function (doc) {
+			return {
+				filters: {
+					report_type: "Profit and Loss",
+					company: doc.company,
+					is_group: 0,
+				},
+			};
+		};
+
+		frm.fields_dict["items"].grid.get_field("deferred_revenue_account").get_query = function (doc) {
+			return {
+				filters: {
+					root_type: "Liability",
+					company: doc.company,
+					is_group: 0,
+				},
+			};
+		};
+
+		frm.set_query("company_address", function (doc) {
+			if (!doc.company) {
+				frappe.throw(__("Please set Company"));
 			}
 
 			return {
-				query: 'erpnext.accounts.doctype.pos_profile.pos_profile.pos_profile_query',
+				query: "frappe.contacts.doctype.address.address.address_query",
 				filters: {
-					company: doc.company
-				}
+					link_doctype: "Company",
+					link_name: doc.company,
+				},
+			};
+		});
+
+		frm.set_query("pos_profile", function (doc) {
+			if (!doc.company) {
+				frappe.throw(__("Please set Company"));
+			}
+
+			return {
+				query: "erpnext.accounts.doctype.pos_profile.pos_profile.pos_profile_query",
+				filters: {
+					company: doc.company,
+				},
 			};
 		});
 
 		// set get_query for loyalty redemption account
-		frm.fields_dict["loyalty_redemption_account"].get_query = function() {
+		frm.fields_dict["loyalty_redemption_account"].get_query = function () {
 			return {
-				filters:{
-					"company": frm.doc.company,
-					"is_group": 0
-				}
-			}
+				filters: {
+					company: frm.doc.company,
+					is_group: 0,
+				},
+			};
 		};
 
 		// set get_query for loyalty redemption cost center
-		frm.fields_dict["loyalty_redemption_cost_center"].get_query = function() {
+		frm.fields_dict["loyalty_redemption_cost_center"].get_query = function () {
 			return {
-				filters:{
-					"company": frm.doc.company,
-					"is_group": 0
-				}
-			}
+				filters: {
+					company: frm.doc.company,
+					is_group: 0,
+				},
+			};
 		};
 	},
 	// When multiple companies are set up. in case company name is changed set default company address
-	company: function(frm){
+	company: function (frm) {
 		if (frm.doc.company) {
 			frappe.call({
 				method: "erpnext.setup.doctype.company.company.get_default_company_address",
-				args: {name:frm.doc.company, existing_address: frm.doc.company_address || ""},
+				args: { name: frm.doc.company, existing_address: frm.doc.company_address || "" },
 				debounce: 2000,
-				callback: function(r){
-					if (r.message){
-						frm.set_value("company_address",r.message)
+				callback: function (r) {
+					if (r.message) {
+						frm.set_value("company_address", r.message);
+					} else {
+						frm.set_value("company_address", "");
 					}
-					else {
-						frm.set_value("company_address","")
-					}
-				}
-			})
+				},
+			});
 		}
 	},
 
-	onload: function(frm) {
+	onload: function (frm) {
 		frm.redemption_conversion_factor = null;
 	},
 
-	update_stock: function(frm, dt, dn) {
+	update_stock: function (frm, dt, dn) {
 		frm.events.hide_fields(frm);
-		frm.trigger('reset_posting_time');
+		frm.trigger("reset_posting_time");
 	},
 
-	redeem_loyalty_points: function(frm) {
+	redeem_loyalty_points: function (frm) {
 		frm.events.get_loyalty_details(frm);
 	},
 
-	loyalty_points: function(frm) {
+	loyalty_points: function (frm) {
 		if (frm.redemption_conversion_factor) {
 			frm.events.set_loyalty_points(frm);
 		} else {
 			frappe.call({
 				method: "erpnext.accounts.doctype.loyalty_program.loyalty_program.get_redeemption_factor",
 				args: {
-					"loyalty_program": frm.doc.loyalty_program
+					loyalty_program: frm.doc.loyalty_program,
 				},
-				callback: function(r) {
+				callback: function (r) {
 					if (r) {
 						frm.redemption_conversion_factor = r.message;
 						frm.events.set_loyalty_points(frm);
 					}
-				}
+				},
 			});
 		}
 	},
 
-	hide_fields: function(frm) {
+	hide_fields: function (frm) {
 		let doc = frm.doc;
-		var parent_fields = ['project', 'due_date', 'is_opening', 'source', 'total_advance', 'get_advances',
-		'advances', 'from_date', 'to_date'];
+		var parent_fields = [
+			"project",
+			"due_date",
+			"is_opening",
+			"source",
+			"total_advance",
+			"get_advances",
+			"advances",
+			"from_date",
+			"to_date",
+		];
 
-		if(cint(doc.is_pos) == 1) {
+		if (cint(doc.is_pos) == 1) {
 			hide_field(parent_fields);
 		} else {
 			for (var i in parent_fields) {
 				var docfield = frappe.meta.docfield_map[doc.doctype][parent_fields[i]];
-				if(!docfield.hidden) unhide_field(parent_fields[i]);
+				if (!docfield.hidden) unhide_field(parent_fields[i]);
 			}
 		}
 
 		frm.refresh_fields();
 	},
 
-	get_loyalty_details: function(frm) {
+	get_loyalty_details: function (frm) {
 		if (frm.doc.customer && frm.doc.redeem_loyalty_points) {
 			frappe.call({
 				method: "erpnext.accounts.doctype.loyalty_program.loyalty_program.get_loyalty_program_details",
 				args: {
-					"customer": frm.doc.customer,
-					"loyalty_program": frm.doc.loyalty_program,
-					"expiry_date": frm.doc.posting_date,
-					"company": frm.doc.company
+					customer: frm.doc.customer,
+					loyalty_program: frm.doc.loyalty_program,
+					expiry_date: frm.doc.posting_date,
+					company: frm.doc.company,
 				},
-				callback: function(r) {
+				callback: function (r) {
 					if (r) {
 						frm.set_value("loyalty_redemption_account", r.message.expense_account);
 						frm.set_value("loyalty_redemption_cost_center", r.message.cost_center);
 						frm.redemption_conversion_factor = r.message.conversion_factor;
 					}
-				}
+				},
 			});
 		}
 	},
 
-	set_loyalty_points: function(frm) {
+	set_loyalty_points: function (frm) {
 		if (frm.redemption_conversion_factor) {
-			let loyalty_amount = flt(frm.redemption_conversion_factor*flt(frm.doc.loyalty_points), precision("loyalty_amount"));
-			var remaining_amount = flt(frm.doc.grand_total) - flt(frm.doc.total_advance) - flt(frm.doc.write_off_amount);
-			if (frm.doc.grand_total && (remaining_amount < loyalty_amount)) {
-				let redeemable_points = parseInt(remaining_amount/frm.redemption_conversion_factor);
-				frappe.throw(__("You can only redeem max {0} points in this order.",[redeemable_points]));
+			let loyalty_amount = flt(
+				frm.redemption_conversion_factor * flt(frm.doc.loyalty_points),
+				precision("loyalty_amount")
+			);
+			var remaining_amount =
+				flt(frm.doc.grand_total) - flt(frm.doc.total_advance) - flt(frm.doc.write_off_amount);
+			if (frm.doc.grand_total && remaining_amount < loyalty_amount) {
+				let redeemable_points = parseInt(remaining_amount / frm.redemption_conversion_factor);
+				frappe.throw(__("You can only redeem max {0} points in this order.", [redeemable_points]));
 			}
 			frm.set_value("loyalty_amount", loyalty_amount);
 		}
 	},
 
-	project: function(frm) {
+	project: function (frm) {
 		if (frm.doc.project) {
 			frm.events.add_timesheet_data(frm, {
-				project: frm.doc.project
+				project: frm.doc.project,
 			});
 		}
 	},
@@ -858,26 +940,30 @@
 	},
 
 	async get_timesheet_data(frm, kwargs) {
-		return frappe.call({
-			method: "erpnext.projects.doctype.timesheet.timesheet.get_projectwise_timesheet_data",
-			args: kwargs
-		}).then(r => {
-			if (!r.exc && r.message.length > 0) {
-				return r.message
-			} else {
-				return []
-			}
-		});
+		return frappe
+			.call({
+				method: "erpnext.projects.doctype.timesheet.timesheet.get_projectwise_timesheet_data",
+				args: kwargs,
+			})
+			.then((r) => {
+				if (!r.exc && r.message.length > 0) {
+					return r.message;
+				} else {
+					return [];
+				}
+			});
 	},
 
-	set_timesheet_data: function(frm, timesheets) {
-		frm.clear_table("timesheets")
+	set_timesheet_data: function (frm, timesheets) {
+		frm.clear_table("timesheets");
 		timesheets.forEach(async (timesheet) => {
 			if (frm.doc.currency != timesheet.currency) {
 				const exchange_rate = await frm.events.get_exchange_rate(
-					frm, timesheet.currency, frm.doc.currency
-				)
-				frm.events.append_time_log(frm, timesheet, exchange_rate)
+					frm,
+					timesheet.currency,
+					frm.doc.currency
+				);
+				frm.events.append_time_log(frm, timesheet, exchange_rate);
 			} else {
 				frm.events.append_time_log(frm, timesheet, 1.0);
 			}
@@ -888,9 +974,9 @@
 
 	async get_exchange_rate(frm, from_currency, to_currency) {
 		if (
-			frm.exchange_rates
-			&& frm.exchange_rates[from_currency]
-			&& frm.exchange_rates[from_currency][to_currency]
+			frm.exchange_rates &&
+			frm.exchange_rates[from_currency] &&
+			frm.exchange_rates[from_currency][to_currency]
 		) {
 			return frm.exchange_rates[from_currency][to_currency];
 		}
@@ -899,20 +985,20 @@
 			method: "erpnext.setup.utils.get_exchange_rate",
 			args: {
 				from_currency,
-				to_currency
+				to_currency,
 			},
-			callback: function(r) {
+			callback: function (r) {
 				if (r.message) {
 					// cache exchange rates
 					frm.exchange_rates = frm.exchange_rates || {};
 					frm.exchange_rates[from_currency] = frm.exchange_rates[from_currency] || {};
 					frm.exchange_rates[from_currency][to_currency] = r.message;
 				}
-			}
+			},
 		});
 	},
 
-	append_time_log: function(frm, time_log, exchange_rate) {
+	append_time_log: function (frm, time_log, exchange_rate) {
 		const row = frm.add_child("timesheets");
 		row.activity_type = time_log.activity_type;
 		row.description = time_log.description;
@@ -925,114 +1011,118 @@
 		row.project_name = time_log.project_name;
 	},
 
-	calculate_timesheet_totals: function(frm) {
-		frm.set_value("total_billing_amount",
-			frm.doc.timesheets.reduce((a, b) => a + (b["billing_amount"] || 0.0), 0.0));
-		frm.set_value("total_billing_hours",
-			frm.doc.timesheets.reduce((a, b) => a + (b["billing_hours"] || 0.0), 0.0));
+	calculate_timesheet_totals: function (frm) {
+		frm.set_value(
+			"total_billing_amount",
+			frm.doc.timesheets.reduce((a, b) => a + (b["billing_amount"] || 0.0), 0.0)
+		);
+		frm.set_value(
+			"total_billing_hours",
+			frm.doc.timesheets.reduce((a, b) => a + (b["billing_hours"] || 0.0), 0.0)
+		);
 	},
 
-	refresh: function(frm) {
-		if (frm.doc.docstatus===0 && !frm.doc.is_return) {
-			frm.add_custom_button(__("Fetch Timesheet"), function() {
+	refresh: function (frm) {
+		if (frm.doc.docstatus === 0 && !frm.doc.is_return) {
+			frm.add_custom_button(__("Fetch Timesheet"), function () {
 				let d = new frappe.ui.Dialog({
 					title: __("Fetch Timesheet"),
 					fields: [
 						{
-							"label" : __("From"),
-							"fieldname": "from_time",
-							"fieldtype": "Date",
-							"reqd": 1,
+							label: __("From"),
+							fieldname: "from_time",
+							fieldtype: "Date",
+							reqd: 1,
 						},
 						{
 							fieldtype: "Column Break",
 							fieldname: "col_break_1",
 						},
 						{
-							"label" : __("To"),
-							"fieldname": "to_time",
-							"fieldtype": "Date",
-							"reqd": 1,
+							label: __("To"),
+							fieldname: "to_time",
+							fieldtype: "Date",
+							reqd: 1,
 						},
 						{
-							"label" : __("Project"),
-							"fieldname": "project",
-							"fieldtype": "Link",
-							"options": "Project",
-							"default": frm.doc.project
+							label: __("Project"),
+							fieldname: "project",
+							fieldtype: "Link",
+							options: "Project",
+							default: frm.doc.project,
 						},
 					],
-					primary_action: function() {
+					primary_action: function () {
 						const data = d.get_values();
 						frm.events.add_timesheet_data(frm, {
 							from_time: data.from_time,
 							to_time: data.to_time,
-							project: data.project
+							project: data.project,
 						});
 						d.hide();
 					},
-					primary_action_label: __("Get Timesheets")
+					primary_action_label: __("Get Timesheets"),
 				});
 				d.show();
 			});
 		}
 
 		if (frm.doc.is_debit_note) {
-			frm.set_df_property('return_against', 'label', __('Adjustment Against'));
+			frm.set_df_property("return_against", "label", __("Adjustment Against"));
 		}
 	},
 
-	create_invoice_discounting: function(frm) {
+	create_invoice_discounting: function (frm) {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.create_invoice_discounting",
-			frm: frm
+			frm: frm,
 		});
 	},
 
-	create_dunning: function(frm) {
+	create_dunning: function (frm) {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.create_dunning",
-			frm: frm
+			frm: frm,
 		});
-	}
+	},
 });
 
 frappe.ui.form.on("Sales Invoice Timesheet", {
 	timesheets_remove(frm) {
 		frm.trigger("calculate_timesheet_totals");
-	}
+	},
 });
 
-var set_timesheet_detail_rate = function(cdt, cdn, currency, timelog) {
+var set_timesheet_detail_rate = function (cdt, cdn, currency, timelog) {
 	frappe.call({
 		method: "erpnext.projects.doctype.timesheet.timesheet.get_timesheet_detail_rate",
 		args: {
 			timelog: timelog,
-			currency: currency
+			currency: currency,
 		},
-		callback: function(r) {
+		callback: function (r) {
 			if (!r.exc && r.message) {
-				frappe.model.set_value(cdt, cdn, 'billing_amount', r.message);
+				frappe.model.set_value(cdt, cdn, "billing_amount", r.message);
 			}
-		}
+		},
 	});
-}
+};
 
-var select_loyalty_program = function(frm, loyalty_programs) {
+var select_loyalty_program = function (frm, loyalty_programs) {
 	var dialog = new frappe.ui.Dialog({
 		title: __("Select Loyalty Program"),
 		fields: [
 			{
-				"label": __("Loyalty Program"),
-				"fieldname": "loyalty_program",
-				"fieldtype": "Select",
-				"options": loyalty_programs,
-				"default": loyalty_programs[0]
-			}
-		]
+				label: __("Loyalty Program"),
+				fieldname: "loyalty_program",
+				fieldtype: "Select",
+				options: loyalty_programs,
+				default: loyalty_programs[0],
+			},
+		],
 	});
 
-	dialog.set_primary_action(__("Set Loyalty Program"), function() {
+	dialog.set_primary_action(__("Set Loyalty Program"), function () {
 		dialog.hide();
 		return frappe.call({
 			method: "frappe.client.set_value",
@@ -1042,9 +1132,9 @@
 				fieldname: "loyalty_program",
 				value: dialog.get_value("loyalty_program"),
 			},
-			callback: function(r) { }
+			callback: function (r) {},
 		});
 	});
 
 	dialog.show();
-}
+};
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice_list.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice_list.js
index 1605b15..f971f68 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice_list.js
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice_list.js
@@ -2,34 +2,42 @@
 // License: GNU General Public License v3. See license.txt
 
 // render
-frappe.listview_settings['Sales Invoice'] = {
-	add_fields: ["customer", "customer_name", "base_grand_total", "outstanding_amount", "due_date", "company",
-		"currency", "is_return"],
-	get_indicator: function(doc) {
+frappe.listview_settings["Sales Invoice"] = {
+	add_fields: [
+		"customer",
+		"customer_name",
+		"base_grand_total",
+		"outstanding_amount",
+		"due_date",
+		"company",
+		"currency",
+		"is_return",
+	],
+	get_indicator: function (doc) {
 		const status_colors = {
-			"Draft": "grey",
-			"Unpaid": "orange",
-			"Paid": "green",
-			"Return": "gray",
+			Draft: "grey",
+			Unpaid: "orange",
+			Paid: "green",
+			Return: "gray",
 			"Credit Note Issued": "gray",
 			"Unpaid and Discounted": "orange",
 			"Partly Paid and Discounted": "yellow",
 			"Overdue and Discounted": "red",
-			"Overdue": "red",
+			Overdue: "red",
 			"Partly Paid": "yellow",
-			"Internal Transfer": "darkgrey"
+			"Internal Transfer": "darkgrey",
 		};
-		return [__(doc.status), status_colors[doc.status], "status,=,"+doc.status];
+		return [__(doc.status), status_colors[doc.status], "status,=," + doc.status];
 	},
 	right_column: "grand_total",
 
-	onload: function(listview) {
-		listview.page.add_action_item(__("Delivery Note"), ()=>{
+	onload: function (listview) {
+		listview.page.add_action_item(__("Delivery Note"), () => {
 			erpnext.bulk_transaction_processing.create(listview, "Sales Invoice", "Delivery Note");
 		});
 
-		listview.page.add_action_item(__("Payment"), ()=>{
+		listview.page.add_action_item(__("Payment"), () => {
 			erpnext.bulk_transaction_processing.create(listview, "Sales Invoice", "Payment Entry");
 		});
-	}
+	},
 };
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 00e8b62..91d4d04 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
@@ -2,4 +2,4 @@
 // License: GNU General Public License v3. See license.txt
 
 erpnext.accounts.taxes.setup_tax_validations("Sales Taxes and Charges Template");
-erpnext.accounts.taxes.setup_tax_filters("Sales Taxes and Charges");
\ No newline at end of file
+erpnext.accounts.taxes.setup_tax_filters("Sales Taxes and Charges");
diff --git a/erpnext/accounts/doctype/share_transfer/share_transfer.js b/erpnext/accounts/doctype/share_transfer/share_transfer.js
index 6317c9c..dd9d962 100644
--- a/erpnext/accounts/doctype/share_transfer/share_transfer.js
+++ b/erpnext/accounts/doctype/share_transfer/share_transfer.js
@@ -3,21 +3,19 @@
 
 frappe.provide("erpnext.share_transfer");
 
-frappe.ui.form.on('Share Transfer', {
-	refresh: function(frm) {
+frappe.ui.form.on("Share Transfer", {
+	refresh: function (frm) {
 		// Don't show Parties which are a Company
-		let shareholders = ['from_shareholder', 'to_shareholder'];
+		let shareholders = ["from_shareholder", "to_shareholder"];
 		shareholders.forEach((shareholder) => {
-			frm.fields_dict[shareholder].get_query = function() {
+			frm.fields_dict[shareholder].get_query = function () {
 				return {
-					filters: [
-						["Shareholder", "is_company", "=", 0]
-					]
+					filters: [["Shareholder", "is_company", "=", 0]],
 				};
 			};
 		});
 		if (frm.doc.docstatus == 1 && frm.doc.equity_or_liability_account && frm.doc.asset_account) {
-			frm.add_custom_button(__('Create Journal Entry'), function () {
+			frm.add_custom_button(__("Create Journal Entry"), function () {
 				erpnext.share_transfer.make_jv(frm);
 			});
 		}
@@ -25,54 +23,59 @@
 		frm.toggle_reqd("asset_account", frm.doc.transfer_type != "Transfer");
 	},
 	no_of_shares: (frm) => {
-		if (frm.doc.rate != undefined || frm.doc.rate != null){
+		if (frm.doc.rate != undefined || frm.doc.rate != null) {
 			erpnext.share_transfer.update_amount(frm);
 		}
 	},
 	rate: (frm) => {
-		if (frm.doc.no_of_shares != undefined || frm.doc.no_of_shares != null){
+		if (frm.doc.no_of_shares != undefined || frm.doc.no_of_shares != null) {
 			erpnext.share_transfer.update_amount(frm);
 		}
 	},
-	company: async function(frm) {
+	company: async function (frm) {
 		if (frm.doc.company) {
-			let currency = (await frappe.db.get_value("Company", frm.doc.company, "default_currency")).message.default_currency;
-			frm.set_query("equity_or_liability_account", function() {
+			let currency = (await frappe.db.get_value("Company", frm.doc.company, "default_currency")).message
+				.default_currency;
+			frm.set_query("equity_or_liability_account", function () {
 				return {
 					filters: {
-						"is_group":0,
-						"root_type": ["in",["Equity","Liability"]],
-						"company": frm.doc.company,
-						"account_currency": currency
-					}
+						is_group: 0,
+						root_type: ["in", ["Equity", "Liability"]],
+						company: frm.doc.company,
+						account_currency: currency,
+					},
 				};
 			});
-			frm.set_query("asset_account", function() {
+			frm.set_query("asset_account", function () {
 				return {
 					filters: {
-						"is_group":0,
-						"root_type":"Asset",
-						"company": frm.doc.company,
-						"account_currency": currency
-					}
+						is_group: 0,
+						root_type: "Asset",
+						company: frm.doc.company,
+						account_currency: currency,
+					},
 				};
 			});
 		}
 	},
 
-	transfer_type: function(frm) {
+	transfer_type: function (frm) {
 		frm.toggle_reqd("asset_account", frm.doc.transfer_type != "Transfer");
-	}
+	},
 });
 
-erpnext.share_transfer.update_amount = function(frm) {
+erpnext.share_transfer.update_amount = function (frm) {
 	frm.doc.amount = frm.doc.no_of_shares * frm.doc.rate;
 	frm.refresh_field("amount");
 };
 
 erpnext.share_transfer.make_jv = function (frm) {
-	var account, payment_account, credit_applicant_type, credit_applicant,
-		debit_applicant_type, debit_applicant;
+	var account,
+		payment_account,
+		credit_applicant_type,
+		credit_applicant,
+		debit_applicant_type,
+		debit_applicant;
 
 	if (frm.doc.transfer_type == "Transfer") {
 		account = frm.doc.equity_or_liability_account;
@@ -81,16 +84,14 @@
 		credit_applicant = frm.doc.to_shareholder;
 		debit_applicant_type = "Shareholder";
 		debit_applicant = frm.doc.from_shareholder;
-	}
-	else if (frm.doc.transfer_type == "Issue") {
+	} else if (frm.doc.transfer_type == "Issue") {
 		account = frm.doc.asset_account;
 		payment_account = frm.doc.equity_or_liability_account;
 		credit_applicant_type = "Shareholder";
 		credit_applicant = frm.doc.to_shareholder;
 		debit_applicant_type = "";
 		debit_applicant = "";
-	}
-	else {
+	} else {
 		account = frm.doc.equity_or_liability_account;
 		payment_account = frm.doc.asset_account;
 		credit_applicant_type = "";
@@ -100,19 +101,19 @@
 	}
 	frappe.call({
 		args: {
-			"company": frm.doc.company,
-			"account": account,
-			"amount": frm.doc.amount,
-			"payment_account": payment_account,
-			"credit_applicant_type": credit_applicant_type,
-			"credit_applicant": credit_applicant,
-			"debit_applicant_type": debit_applicant_type,
-			"debit_applicant": debit_applicant
+			company: frm.doc.company,
+			account: account,
+			amount: frm.doc.amount,
+			payment_account: payment_account,
+			credit_applicant_type: credit_applicant_type,
+			credit_applicant: credit_applicant,
+			debit_applicant_type: debit_applicant_type,
+			debit_applicant: debit_applicant,
 		},
 		method: "erpnext.accounts.doctype.share_transfer.share_transfer.make_jv_entry",
 		callback: function (r) {
 			var doc = frappe.model.sync(r.message)[0];
 			frappe.set_route("Form", doc.doctype, doc.name);
-		}
+		},
 	});
 };
diff --git a/erpnext/accounts/doctype/share_type/share_type.js b/erpnext/accounts/doctype/share_type/share_type.js
index 1ae85e3..5dfb760 100644
--- a/erpnext/accounts/doctype/share_type/share_type.js
+++ b/erpnext/accounts/doctype/share_type/share_type.js
@@ -1,8 +1,6 @@
 // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Share Type', {
-	refresh: function(frm) {
-
-	}
+frappe.ui.form.on("Share Type", {
+	refresh: function (frm) {},
 });
diff --git a/erpnext/accounts/doctype/shareholder/shareholder.js b/erpnext/accounts/doctype/shareholder/shareholder.js
index 544d417..baf0920 100644
--- a/erpnext/accounts/doctype/shareholder/shareholder.js
+++ b/erpnext/accounts/doctype/shareholder/shareholder.js
@@ -1,37 +1,36 @@
 // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Shareholder', {
-	refresh: function(frm) {
-		frm.toggle_display(['contact_html'], !frm.doc.__islocal);
+frappe.ui.form.on("Shareholder", {
+	refresh: function (frm) {
+		frm.toggle_display(["contact_html"], !frm.doc.__islocal);
 
 		if (frm.doc.__islocal) {
-			hide_field(['contact_html']);
+			hide_field(["contact_html"]);
 			frappe.contacts.clear_address_and_contact(frm);
-		}
-		else {
-			if (frm.doc.is_company){
-				hide_field(['company']);
+		} else {
+			if (frm.doc.is_company) {
+				hide_field(["company"]);
 			} else {
-				unhide_field(['contact_html']);
+				unhide_field(["contact_html"]);
 				frappe.contacts.render_address_and_contact(frm);
 			}
 		}
 
-		if (frm.doc.folio_no != undefined){
-			frm.add_custom_button(__("Share Balance"), function(){
+		if (frm.doc.folio_no != undefined) {
+			frm.add_custom_button(__("Share Balance"), function () {
 				frappe.route_options = {
-					"shareholder": frm.doc.name,
+					shareholder: frm.doc.name,
 				};
 				frappe.set_route("query-report", "Share Balance");
 			});
-			frm.add_custom_button(__("Share Ledger"), function(){
+			frm.add_custom_button(__("Share Ledger"), function () {
 				frappe.route_options = {
-					"shareholder": frm.doc.name,
+					shareholder: frm.doc.name,
 				};
 				frappe.set_route("query-report", "Share Ledger");
 			});
-			let fields = ['title', 'folio_no', 'company'];
+			let fields = ["title", "folio_no", "company"];
 			fields.forEach((fieldname) => {
 				frm.fields_dict[fieldname].df.read_only = 1;
 				frm.refresh_fields(fieldname);
@@ -42,11 +41,11 @@
 	},
 	validate: (frm) => {
 		let contact_list = {
-			contacts: []
+			contacts: [],
 		};
-		$('div[data-fieldname=contact_html] > .address-box').each( (index, ele) => {
-			contact_list.contacts.push(ele.innerText.replace(' Edit', ''));
+		$("div[data-fieldname=contact_html] > .address-box").each((index, ele) => {
+			contact_list.contacts.push(ele.innerText.replace(" Edit", ""));
 		});
 		frm.doc.contact_list = JSON.stringify(contact_list);
-	}
+	},
 });
diff --git a/erpnext/accounts/doctype/shipping_rule/shipping_rule.js b/erpnext/accounts/doctype/shipping_rule/shipping_rule.js
index 8e4b806..1ece3e6 100644
--- a/erpnext/accounts/doctype/shipping_rule/shipping_rule.js
+++ b/erpnext/accounts/doctype/shipping_rule/shipping_rule.js
@@ -1,33 +1,33 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.provide('erpnext.accounts.dimensions');
+frappe.provide("erpnext.accounts.dimensions");
 
-frappe.ui.form.on('Shipping Rule', {
-	onload: function(frm) {
+frappe.ui.form.on("Shipping Rule", {
+	onload: function (frm) {
 		erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype);
 	},
 
-	company: function(frm) {
+	company: function (frm) {
 		erpnext.accounts.dimensions.update_dimension(frm, frm.doctype);
 	},
 
-	refresh: function(frm) {
-		frm.set_query("account", function() {
+	refresh: function (frm) {
+		frm.set_query("account", function () {
 			return {
 				filters: {
-					company: frm.doc.company
-				}
-			}
-		})
+					company: frm.doc.company,
+				},
+			};
+		});
 
-		frm.trigger('toggle_reqd');
+		frm.trigger("toggle_reqd");
 	},
-	calculate_based_on: function(frm) {
-		frm.trigger('toggle_reqd');
+	calculate_based_on: function (frm) {
+		frm.trigger("toggle_reqd");
 	},
-	toggle_reqd: function(frm) {
-		frm.toggle_reqd("shipping_amount", frm.doc.calculate_based_on === 'Fixed');
-		frm.toggle_reqd("conditions", frm.doc.calculate_based_on !== 'Fixed');
-	}
+	toggle_reqd: function (frm) {
+		frm.toggle_reqd("shipping_amount", frm.doc.calculate_based_on === "Fixed");
+		frm.toggle_reqd("conditions", frm.doc.calculate_based_on !== "Fixed");
+	},
 });
diff --git a/erpnext/accounts/doctype/subscription/subscription.js b/erpnext/accounts/doctype/subscription/subscription.js
index 92f8a3a..b3e21ab 100644
--- a/erpnext/accounts/doctype/subscription/subscription.js
+++ b/erpnext/accounts/doctype/subscription/subscription.js
@@ -1,29 +1,29 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Subscription', {
+frappe.ui.form.on("Subscription", {
 	setup: function (frm) {
-		frm.set_query('party_type', function () {
+		frm.set_query("party_type", function () {
 			return {
 				filters: {
-					name: ['in', ['Customer', 'Supplier']]
-				}
-			}
-		});
-
-		frm.set_query('cost_center', function () {
-			return {
-				filters: {
-					company: frm.doc.company
-				}
+					name: ["in", ["Customer", "Supplier"]],
+				},
 			};
 		});
 
-		frm.set_query('sales_tax_template', function () {
+		frm.set_query("cost_center", function () {
 			return {
 				filters: {
-					company: frm.doc.company
-				}
+					company: frm.doc.company,
+				},
+			};
+		});
+
+		frm.set_query("sales_tax_template", function () {
+			return {
+				filters: {
+					company: frm.doc.company,
+				},
 			};
 		});
 	},
@@ -31,32 +31,32 @@
 	refresh: function (frm) {
 		if (frm.is_new()) return;
 
-		if (frm.doc.status !== 'Cancelled') {
+		if (frm.doc.status !== "Cancelled") {
 			frm.add_custom_button(
-				__('Fetch Subscription Updates'),
-				() => frm.trigger('get_subscription_updates'),
-				__('Actions')
+				__("Fetch Subscription Updates"),
+				() => frm.trigger("get_subscription_updates"),
+				__("Actions")
 			);
 
 			frm.add_custom_button(
-				__('Cancel Subscription'),
-				() => frm.trigger('cancel_this_subscription'),
-				__('Actions')
+				__("Cancel Subscription"),
+				() => frm.trigger("cancel_this_subscription"),
+				__("Actions")
 			);
-		} else if (frm.doc.status === 'Cancelled') {
+		} else if (frm.doc.status === "Cancelled") {
 			frm.add_custom_button(
-				__('Restart Subscription'),
-				() => frm.trigger('renew_this_subscription'),
-				__('Actions')
+				__("Restart Subscription"),
+				() => frm.trigger("renew_this_subscription"),
+				__("Actions")
 			);
 		}
 	},
 
 	cancel_this_subscription: function (frm) {
 		frappe.confirm(
-			__('This action will stop future billing. Are you sure you want to cancel this subscription?'),
+			__("This action will stop future billing. Are you sure you want to cancel this subscription?"),
 			() => {
-				frm.call('cancel_subscription').then(r => {
+				frm.call("cancel_subscription").then((r) => {
 					if (!r.exec) {
 						frm.reload_doc();
 					}
@@ -66,23 +66,20 @@
 	},
 
 	renew_this_subscription: function (frm) {
-		frappe.confirm(
-			__('Are you sure you want to restart this subscription?'),
-			() => {
-				frm.call('restart_subscription').then(r => {
-					if (!r.exec) {
-						frm.reload_doc();
-					}
-				});
-			}
-		);
+		frappe.confirm(__("Are you sure you want to restart this subscription?"), () => {
+			frm.call("restart_subscription").then((r) => {
+				if (!r.exec) {
+					frm.reload_doc();
+				}
+			});
+		});
 	},
 
 	get_subscription_updates: function (frm) {
-		frm.call('process').then(r => {
+		frm.call("process").then((r) => {
 			if (!r.exec) {
 				frm.reload_doc();
 			}
 		});
-	}
+	},
 });
diff --git a/erpnext/accounts/doctype/subscription/subscription_list.js b/erpnext/accounts/doctype/subscription/subscription_list.js
index ea48b53..bc831d3 100644
--- a/erpnext/accounts/doctype/subscription/subscription_list.js
+++ b/erpnext/accounts/doctype/subscription/subscription_list.js
@@ -1,17 +1,17 @@
-frappe.listview_settings['Subscription'] = {
-	get_indicator: function(doc) {
-		if(doc.status === 'Trialing') {
+frappe.listview_settings["Subscription"] = {
+	get_indicator: function (doc) {
+		if (doc.status === "Trialing") {
 			return [__("Trialing"), "green"];
-		} else if(doc.status === 'Active') {
+		} else if (doc.status === "Active") {
 			return [__("Active"), "green"];
-		} else if(doc.status === 'Completed') {
-				return [__("Completed"), "green"];
-		} else if(doc.status === 'Past Due Date') {
+		} else if (doc.status === "Completed") {
+			return [__("Completed"), "green"];
+		} else if (doc.status === "Past Due Date") {
 			return [__("Past Due Date"), "orange"];
-		} else if(doc.status === 'Unpaid') {
+		} else if (doc.status === "Unpaid") {
 			return [__("Unpaid"), "red"];
-		} else if(doc.status === 'Cancelled') {
+		} else if (doc.status === "Cancelled") {
 			return [__("Cancelled"), "gray"];
 		}
-	}
+	},
 };
diff --git a/erpnext/accounts/doctype/subscription_plan/subscription_plan.js b/erpnext/accounts/doctype/subscription_plan/subscription_plan.js
index 00727f1..125dc7d 100644
--- a/erpnext/accounts/doctype/subscription_plan/subscription_plan.js
+++ b/erpnext/accounts/doctype/subscription_plan/subscription_plan.js
@@ -1,10 +1,10 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Subscription Plan', {
-	price_determination: function(frm) {
-		frm.toggle_reqd("cost", frm.doc.price_determination === 'Fixed rate');
-		frm.toggle_reqd("price_list", frm.doc.price_determination === 'Based on price list');
+frappe.ui.form.on("Subscription Plan", {
+	price_determination: function (frm) {
+		frm.toggle_reqd("cost", frm.doc.price_determination === "Fixed rate");
+		frm.toggle_reqd("price_list", frm.doc.price_determination === "Based on price list");
 	},
 
 	subscription_plan: function (frm) {
diff --git a/erpnext/accounts/doctype/tax_category/tax_category.js b/erpnext/accounts/doctype/tax_category/tax_category.js
index 4b63edb..fe60e03 100644
--- a/erpnext/accounts/doctype/tax_category/tax_category.js
+++ b/erpnext/accounts/doctype/tax_category/tax_category.js
@@ -1,8 +1,6 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Tax Category', {
-	refresh: function(frm) {
-
-	}
+frappe.ui.form.on("Tax Category", {
+	refresh: function (frm) {},
 });
diff --git a/erpnext/accounts/doctype/tax_rule/tax_rule.js b/erpnext/accounts/doctype/tax_rule/tax_rule.js
index bc49716..b8c68e8 100644
--- a/erpnext/accounts/doctype/tax_rule/tax_rule.js
+++ b/erpnext/accounts/doctype/tax_rule/tax_rule.js
@@ -1,40 +1,40 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.ui.form.on("Tax Rule", "customer", function(frm) {
-	if(frm.doc.customer) {
+frappe.ui.form.on("Tax Rule", "customer", function (frm) {
+	if (frm.doc.customer) {
 		frappe.call({
-			method:"erpnext.accounts.doctype.tax_rule.tax_rule.get_party_details",
+			method: "erpnext.accounts.doctype.tax_rule.tax_rule.get_party_details",
 			args: {
-				"party": frm.doc.customer,
-				"party_type": "customer"
+				party: frm.doc.customer,
+				party_type: "customer",
 			},
-			callback: function(r) {
-				if(!r.exc) {
-					$.each(r.message, function(k, v) {
+			callback: function (r) {
+				if (!r.exc) {
+					$.each(r.message, function (k, v) {
 						frm.set_value(k, v);
 					});
 				}
-			}
+			},
 		});
 	}
 });
 
-frappe.ui.form.on("Tax Rule", "supplier", function(frm) {
-	if(frm.doc.supplier) {
+frappe.ui.form.on("Tax Rule", "supplier", function (frm) {
+	if (frm.doc.supplier) {
 		frappe.call({
-			method:"erpnext.accounts.doctype.tax_rule.tax_rule.get_party_details",
+			method: "erpnext.accounts.doctype.tax_rule.tax_rule.get_party_details",
 			args: {
-				"party": frm.doc.supplier,
-				"party_type": "supplier"
+				party: frm.doc.supplier,
+				party_type: "supplier",
 			},
-			callback: function(r) {
-				if(!r.exc) {
-					$.each(r.message, function(k, v) {
+			callback: function (r) {
+				if (!r.exc) {
+					$.each(r.message, function (k, v) {
 						frm.set_value(k, v);
 					});
 				}
-			}
+			},
 		});
 	}
 });
diff --git a/erpnext/accounts/doctype/tax_withholding_category/tax_withholding_category.js b/erpnext/accounts/doctype/tax_withholding_category/tax_withholding_category.js
index 7b47974..4f4f32c 100644
--- a/erpnext/accounts/doctype/tax_withholding_category/tax_withholding_category.js
+++ b/erpnext/accounts/doctype/tax_withholding_category/tax_withholding_category.js
@@ -1,18 +1,18 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Tax Withholding Category', {
-	setup: function(frm) {
-		frm.set_query("account", "accounts", function(doc, cdt, cdn) {
+frappe.ui.form.on("Tax Withholding Category", {
+	setup: function (frm) {
+		frm.set_query("account", "accounts", function (doc, cdt, cdn) {
 			var child = locals[cdt][cdn];
 			if (child.company) {
 				return {
 					filters: {
-						'company': child.company,
-						'root_type': ['in', ['Asset', 'Liability']]
-					}
+						company: child.company,
+						root_type: ["in", ["Asset", "Liability"]],
+					},
 				};
 			}
 		});
-	}
+	},
 });
diff --git a/erpnext/accounts/doctype/unreconcile_payment/unreconcile_payment.js b/erpnext/accounts/doctype/unreconcile_payment/unreconcile_payment.js
index 70cefb1..63ae30d 100644
--- a/erpnext/accounts/doctype/unreconcile_payment/unreconcile_payment.js
+++ b/erpnext/accounts/doctype/unreconcile_payment/unreconcile_payment.js
@@ -3,39 +3,36 @@
 
 frappe.ui.form.on("Unreconcile Payment", {
 	refresh(frm) {
-		frm.set_query("voucher_type", function() {
+		frm.set_query("voucher_type", function () {
 			return {
 				filters: {
-					name: ["in", ["Payment Entry", "Journal Entry"]]
-				}
-			}
+					name: ["in", ["Payment Entry", "Journal Entry"]],
+				},
+			};
 		});
 
-
-		frm.set_query("voucher_no", function(doc) {
+		frm.set_query("voucher_no", function (doc) {
 			return {
 				filters: {
 					company: doc.company,
-					docstatus: 1
-				}
-			}
+					docstatus: 1,
+				},
+			};
 		});
-
 	},
-	get_allocations: function(frm) {
+	get_allocations: function (frm) {
 		frm.clear_table("allocations");
 		frappe.call({
 			method: "get_allocations_from_payment",
 			doc: frm.doc,
-			callback: function(r) {
+			callback: function (r) {
 				if (r.message) {
-					r.message.forEach(x => {
-						frm.add_child("allocations", x)
-					})
+					r.message.forEach((x) => {
+						frm.add_child("allocations", x);
+					});
 					frm.refresh_fields();
 				}
-			}
-		})
-
-	}
+			},
+		});
+	},
 });
diff --git a/erpnext/accounts/report/account_balance/account_balance.js b/erpnext/accounts/report/account_balance/account_balance.js
index ab5dce8..f425b25 100644
--- a/erpnext/accounts/report/account_balance/account_balance.js
+++ b/erpnext/accounts/report/account_balance/account_balance.js
@@ -1,33 +1,32 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Account Balance"] = {
-	"filters": [
+	filters: [
 		{
-			fieldname:"company",
+			fieldname: "company",
 			label: __("Company"),
 			fieldtype: "Link",
 			options: "Company",
-			default: frappe.defaults.get_user_default("Company")
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
-			fieldname:"report_date",
+			fieldname: "report_date",
 			label: __("Date"),
 			fieldtype: "Date",
 			default: frappe.datetime.get_today(),
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			fieldname: "root_type",
 			label: __("Root Type"),
 			fieldtype: "Select",
 			options: [
-				{ "value": "Asset", "label": __("Asset") },
-				{ "value": "Liability", "label": __("Liability") },
-				{ "value": "Income", "label": __("Income") },
-				{ "value": "Expense", "label": __("Expense") },
-				{ "value": "Equity", "label": __("Equity") }
+				{ value: "Asset", label: __("Asset") },
+				{ value: "Liability", label: __("Liability") },
+				{ value: "Income", label: __("Income") },
+				{ value: "Expense", label: __("Expense") },
+				{ value: "Equity", label: __("Equity") },
 			],
 		},
 		{
@@ -35,30 +34,32 @@
 			label: __("Account Type"),
 			fieldtype: "Select",
 			options: [
-				{ "value": "Accumulated Depreciation", "label": __("Accumulated Depreciation") },
-				{ "value": "Asset Received But Not Billed", "label": __("Asset Received But Not Billed") },
-				{ "value": "Bank", "label": __("Bank") },
-				{ "value": "Cash", "label": __("Cash") },
-				{ "value": "Chargeable", "label": __("Chargeable") },
-				{ "value": "Capital Work in Progress", "label": __("Capital Work in Progress") },
-				{ "value": "Cost of Goods Sold", "label": __("Cost of Goods Sold") },
-				{ "value": "Depreciation", "label": __("Depreciation") },
-				{ "value": "Equity", "label": __("Equity") },
-				{ "value": "Expense Account", "label": __("Expense Account") },
-				{ "value": "Expenses Included In Asset Valuation", "label": __("Expenses Included In Asset Valuation") },
-				{ "value": "Expenses Included In Valuation", "label": __("Expenses Included In Valuation") },
-				{ "value": "Fixed Asset", "label": __("Fixed Asset") },
-				{ "value": "Income Account", "label": __("Income Account") },
-				{ "value": "Payable", "label": __("Payable") },
-				{ "value": "Receivable", "label": __("Receivable") },
-				{ "value": "Round Off", "label": __("Round Off") },
-				{ "value": "Stock", "label": __("Stock") },
-				{ "value": "Stock Adjustment", "label": __("Stock Adjustment") },
-				{ "value": "Stock Received But Not Billed", "label": __("Stock Received But Not Billed") },
-				{ "value": "Tax", "label": __("Tax") },
-				{ "value": "Temporary", "label": __("Temporary") },
+				{ value: "Accumulated Depreciation", label: __("Accumulated Depreciation") },
+				{ value: "Asset Received But Not Billed", label: __("Asset Received But Not Billed") },
+				{ value: "Bank", label: __("Bank") },
+				{ value: "Cash", label: __("Cash") },
+				{ value: "Chargeable", label: __("Chargeable") },
+				{ value: "Capital Work in Progress", label: __("Capital Work in Progress") },
+				{ value: "Cost of Goods Sold", label: __("Cost of Goods Sold") },
+				{ value: "Depreciation", label: __("Depreciation") },
+				{ value: "Equity", label: __("Equity") },
+				{ value: "Expense Account", label: __("Expense Account") },
+				{
+					value: "Expenses Included In Asset Valuation",
+					label: __("Expenses Included In Asset Valuation"),
+				},
+				{ value: "Expenses Included In Valuation", label: __("Expenses Included In Valuation") },
+				{ value: "Fixed Asset", label: __("Fixed Asset") },
+				{ value: "Income Account", label: __("Income Account") },
+				{ value: "Payable", label: __("Payable") },
+				{ value: "Receivable", label: __("Receivable") },
+				{ value: "Round Off", label: __("Round Off") },
+				{ value: "Stock", label: __("Stock") },
+				{ value: "Stock Adjustment", label: __("Stock Adjustment") },
+				{ value: "Stock Received But Not Billed", label: __("Stock Received But Not Billed") },
+				{ value: "Tax", label: __("Tax") },
+				{ value: "Temporary", label: __("Temporary") },
 			],
 		},
-
-	]
-}
+	],
+};
diff --git a/erpnext/accounts/report/accounts_payable/accounts_payable.js b/erpnext/accounts/report/accounts_payable/accounts_payable.js
index b608ebc..f540224 100644
--- a/erpnext/accounts/report/accounts_payable/accounts_payable.js
+++ b/erpnext/accounts/report/accounts_payable/accounts_payable.js
@@ -2,193 +2,194 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.query_reports["Accounts Payable"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname": "company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"reqd": 1,
-			"default": frappe.defaults.get_user_default("Company")
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			reqd: 1,
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
-			"fieldname": "report_date",
-			"label": __("Posting Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today()
+			fieldname: "report_date",
+			label: __("Posting Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.get_today(),
 		},
 		{
-			"fieldname": "finance_book",
-			"label": __("Finance Book"),
-			"fieldtype": "Link",
-			"options": "Finance Book"
+			fieldname: "finance_book",
+			label: __("Finance Book"),
+			fieldtype: "Link",
+			options: "Finance Book",
 		},
 		{
-			"fieldname": "cost_center",
-			"label": __("Cost Center"),
-			"fieldtype": "Link",
-			"options": "Cost Center",
+			fieldname: "cost_center",
+			label: __("Cost Center"),
+			fieldtype: "Link",
+			options: "Cost Center",
 			get_query: () => {
-				var company = frappe.query_report.get_filter_value('company');
+				var company = frappe.query_report.get_filter_value("company");
 				return {
 					filters: {
-						'company': company
-					}
-				}
-			}
-		},
-		{
-			"fieldname": "party_account",
-			"label": __("Payable Account"),
-			"fieldtype": "Link",
-			"options": "Account",
-			get_query: () => {
-				var company = frappe.query_report.get_filter_value('company');
-				return {
-					filters: {
-						'company': company,
-						'account_type': 'Payable',
-						'is_group': 0
-					}
+						company: company,
+					},
 				};
-			}
+			},
 		},
 		{
-			"fieldname": "ageing_based_on",
-			"label": __("Ageing Based On"),
-			"fieldtype": "Select",
-			"options": 'Posting Date\nDue Date\nSupplier Invoice Date',
-			"default": "Due Date"
+			fieldname: "party_account",
+			label: __("Payable Account"),
+			fieldtype: "Link",
+			options: "Account",
+			get_query: () => {
+				var company = frappe.query_report.get_filter_value("company");
+				return {
+					filters: {
+						company: company,
+						account_type: "Payable",
+						is_group: 0,
+					},
+				};
+			},
 		},
 		{
-			"fieldname": "range1",
-			"label": __("Ageing Range 1"),
-			"fieldtype": "Int",
-			"default": "30",
-			"reqd": 1
+			fieldname: "ageing_based_on",
+			label: __("Ageing Based On"),
+			fieldtype: "Select",
+			options: "Posting Date\nDue Date\nSupplier Invoice Date",
+			default: "Due Date",
 		},
 		{
-			"fieldname": "range2",
-			"label": __("Ageing Range 2"),
-			"fieldtype": "Int",
-			"default": "60",
-			"reqd": 1
+			fieldname: "range1",
+			label: __("Ageing Range 1"),
+			fieldtype: "Int",
+			default: "30",
+			reqd: 1,
 		},
 		{
-			"fieldname": "range3",
-			"label": __("Ageing Range 3"),
-			"fieldtype": "Int",
-			"default": "90",
-			"reqd": 1
+			fieldname: "range2",
+			label: __("Ageing Range 2"),
+			fieldtype: "Int",
+			default: "60",
+			reqd: 1,
 		},
 		{
-			"fieldname": "range4",
-			"label": __("Ageing Range 4"),
-			"fieldtype": "Int",
-			"default": "120",
-			"reqd": 1
+			fieldname: "range3",
+			label: __("Ageing Range 3"),
+			fieldtype: "Int",
+			default: "90",
+			reqd: 1,
 		},
 		{
-			"fieldname": "payment_terms_template",
-			"label": __("Payment Terms Template"),
-			"fieldtype": "Link",
-			"options": "Payment Terms Template"
+			fieldname: "range4",
+			label: __("Ageing Range 4"),
+			fieldtype: "Int",
+			default: "120",
+			reqd: 1,
 		},
 		{
-			"fieldname":"party_type",
-			"label": __("Party Type"),
-			"fieldtype": "Autocomplete",
+			fieldname: "payment_terms_template",
+			label: __("Payment Terms Template"),
+			fieldtype: "Link",
+			options: "Payment Terms Template",
+		},
+		{
+			fieldname: "party_type",
+			label: __("Party Type"),
+			fieldtype: "Autocomplete",
 			options: get_party_type_options(),
-			on_change: function() {
-				frappe.query_report.set_filter_value('party', "");
-				frappe.query_report.toggle_filter_display('supplier_group', frappe.query_report.get_filter_value('party_type') !== "Supplier");
-			}
+			on_change: function () {
+				frappe.query_report.set_filter_value("party", "");
+				frappe.query_report.toggle_filter_display(
+					"supplier_group",
+					frappe.query_report.get_filter_value("party_type") !== "Supplier"
+				);
+			},
 		},
 		{
-			"fieldname":"party",
-			"label": __("Party"),
-			"fieldtype": "MultiSelectList",
-			get_data: function(txt) {
+			fieldname: "party",
+			label: __("Party"),
+			fieldtype: "MultiSelectList",
+			get_data: function (txt) {
 				if (!frappe.query_report.filters) return;
 
-				let party_type = frappe.query_report.get_filter_value('party_type');
+				let party_type = frappe.query_report.get_filter_value("party_type");
 				if (!party_type) return;
 
 				return frappe.db.get_link_options(party_type, txt);
 			},
 		},
 		{
-			"fieldname": "supplier_group",
-			"label": __("Supplier Group"),
-			"fieldtype": "Link",
-			"options": "Supplier Group",
-			"hidden": 1
+			fieldname: "supplier_group",
+			label: __("Supplier Group"),
+			fieldtype: "Link",
+			options: "Supplier Group",
+			hidden: 1,
 		},
 		{
-			"fieldname": "group_by_party",
-			"label": __("Group By Supplier"),
-			"fieldtype": "Check"
+			fieldname: "group_by_party",
+			label: __("Group By Supplier"),
+			fieldtype: "Check",
 		},
 		{
-			"fieldname": "based_on_payment_terms",
-			"label": __("Based On Payment Terms"),
-			"fieldtype": "Check",
+			fieldname: "based_on_payment_terms",
+			label: __("Based On Payment Terms"),
+			fieldtype: "Check",
 		},
 		{
-			"fieldname": "show_remarks",
-			"label": __("Show Remarks"),
-			"fieldtype": "Check",
+			fieldname: "show_remarks",
+			label: __("Show Remarks"),
+			fieldtype: "Check",
 		},
 		{
-			"fieldname": "show_future_payments",
-			"label": __("Show Future Payments"),
-			"fieldtype": "Check",
+			fieldname: "show_future_payments",
+			label: __("Show Future Payments"),
+			fieldtype: "Check",
 		},
 		{
-			"fieldname": "in_party_currency",
-			"label": __("In Party Currency"),
-			"fieldtype": "Check",
+			fieldname: "in_party_currency",
+			label: __("In Party Currency"),
+			fieldtype: "Check",
 		},
 		{
-			"fieldname": "for_revaluation_journals",
-			"label": __("Revaluation Journals"),
-			"fieldtype": "Check",
+			fieldname: "for_revaluation_journals",
+			label: __("Revaluation Journals"),
+			fieldtype: "Check",
 		},
 		{
-			"fieldname": "ignore_accounts",
-			"label": __("Group by Voucher"),
-			"fieldtype": "Check",
-		}
-
+			fieldname: "ignore_accounts",
+			label: __("Group by Voucher"),
+			fieldtype: "Check",
+		},
 	],
 
-	"formatter": function(value, row, column, data, default_formatter) {
+	formatter: function (value, row, column, data, default_formatter) {
 		value = default_formatter(value, row, column, data);
 		if (data && data.bold) {
 			value = value.bold();
-
 		}
 		return value;
 	},
 
-	onload: function(report) {
-		report.page.add_inner_button(__("Accounts Payable Summary"), function() {
+	onload: function (report) {
+		report.page.add_inner_button(__("Accounts Payable Summary"), function () {
 			var filters = report.get_values();
-			frappe.set_route('query-report', 'Accounts Payable Summary', {company: filters.company});
+			frappe.set_route("query-report", "Accounts Payable Summary", { company: filters.company });
 		});
-	}
-}
+	},
+};
 
-erpnext.utils.add_dimensions('Accounts Payable', 9);
+erpnext.utils.add_dimensions("Accounts Payable", 9);
 
 function get_party_type_options() {
 	let options = [];
-	frappe.db.get_list(
-		"Party Type", {filters:{"account_type": "Payable"}, fields:['name']}
-	).then((res) => {
-		res.forEach((party_type) => {
-			options.push(party_type.name);
+	frappe.db
+		.get_list("Party Type", { filters: { account_type: "Payable" }, fields: ["name"] })
+		.then((res) => {
+			res.forEach((party_type) => {
+				options.push(party_type.name);
+			});
 		});
-	});
 	return options;
 }
diff --git a/erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.js b/erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.js
index 0f206b1..92ea9e8 100644
--- a/erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.js
+++ b/erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.js
@@ -2,140 +2,143 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.query_reports["Accounts Payable Summary"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company")
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
-			"fieldname":"report_date",
-			"label": __("Posting Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today()
+			fieldname: "report_date",
+			label: __("Posting Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.get_today(),
 		},
 		{
-			"fieldname":"ageing_based_on",
-			"label": __("Ageing Based On"),
-			"fieldtype": "Select",
-			"options": 'Posting Date\nDue Date',
-			"default": "Due Date"
+			fieldname: "ageing_based_on",
+			label: __("Ageing Based On"),
+			fieldtype: "Select",
+			options: "Posting Date\nDue Date",
+			default: "Due Date",
 		},
 		{
-			"fieldname":"range1",
-			"label": __("Ageing Range 1"),
-			"fieldtype": "Int",
-			"default": "30",
-			"reqd": 1
+			fieldname: "range1",
+			label: __("Ageing Range 1"),
+			fieldtype: "Int",
+			default: "30",
+			reqd: 1,
 		},
 		{
-			"fieldname":"range2",
-			"label": __("Ageing Range 2"),
-			"fieldtype": "Int",
-			"default": "60",
-			"reqd": 1
+			fieldname: "range2",
+			label: __("Ageing Range 2"),
+			fieldtype: "Int",
+			default: "60",
+			reqd: 1,
 		},
 		{
-			"fieldname":"range3",
-			"label": __("Ageing Range 3"),
-			"fieldtype": "Int",
-			"default": "90",
-			"reqd": 1
+			fieldname: "range3",
+			label: __("Ageing Range 3"),
+			fieldtype: "Int",
+			default: "90",
+			reqd: 1,
 		},
 		{
-			"fieldname":"range4",
-			"label": __("Ageing Range 4"),
-			"fieldtype": "Int",
-			"default": "120",
-			"reqd": 1
+			fieldname: "range4",
+			label: __("Ageing Range 4"),
+			fieldtype: "Int",
+			default: "120",
+			reqd: 1,
 		},
 		{
-			"fieldname":"finance_book",
-			"label": __("Finance Book"),
-			"fieldtype": "Link",
-			"options": "Finance Book"
+			fieldname: "finance_book",
+			label: __("Finance Book"),
+			fieldtype: "Link",
+			options: "Finance Book",
 		},
 		{
-			"fieldname":"cost_center",
-			"label": __("Cost Center"),
-			"fieldtype": "Link",
-			"options": "Cost Center",
+			fieldname: "cost_center",
+			label: __("Cost Center"),
+			fieldtype: "Link",
+			options: "Cost Center",
 			get_query: () => {
-				var company = frappe.query_report.get_filter_value('company');
+				var company = frappe.query_report.get_filter_value("company");
 				return {
 					filters: {
-						'company': company
-					}
-				}
-			}
+						company: company,
+					},
+				};
+			},
 		},
 		{
-			"fieldname":"party_type",
-			"label": __("Party Type"),
-			"fieldtype": "Autocomplete",
+			fieldname: "party_type",
+			label: __("Party Type"),
+			fieldtype: "Autocomplete",
 			options: get_party_type_options(),
-			on_change: function() {
-				frappe.query_report.set_filter_value('party', "");
-				frappe.query_report.toggle_filter_display('supplier_group', frappe.query_report.get_filter_value('party_type') !== "Supplier");
-			}
+			on_change: function () {
+				frappe.query_report.set_filter_value("party", "");
+				frappe.query_report.toggle_filter_display(
+					"supplier_group",
+					frappe.query_report.get_filter_value("party_type") !== "Supplier"
+				);
+			},
 		},
 		{
-			"fieldname":"party",
-			"label": __("Party"),
-			"fieldtype": "MultiSelectList",
-			get_data: function(txt) {
+			fieldname: "party",
+			label: __("Party"),
+			fieldtype: "MultiSelectList",
+			get_data: function (txt) {
 				if (!frappe.query_report.filters) return;
 
-				let party_type = frappe.query_report.get_filter_value('party_type');
+				let party_type = frappe.query_report.get_filter_value("party_type");
 				if (!party_type) return;
 
 				return frappe.db.get_link_options(party_type, txt);
 			},
 		},
 		{
-			"fieldname":"payment_terms_template",
-			"label": __("Payment Terms Template"),
-			"fieldtype": "Link",
-			"options": "Payment Terms Template"
+			fieldname: "payment_terms_template",
+			label: __("Payment Terms Template"),
+			fieldtype: "Link",
+			options: "Payment Terms Template",
 		},
 		{
-			"fieldname":"supplier_group",
-			"label": __("Supplier Group"),
-			"fieldtype": "Link",
-			"options": "Supplier Group"
+			fieldname: "supplier_group",
+			label: __("Supplier Group"),
+			fieldtype: "Link",
+			options: "Supplier Group",
 		},
 		{
-			"fieldname":"based_on_payment_terms",
-			"label": __("Based On Payment Terms"),
-			"fieldtype": "Check",
+			fieldname: "based_on_payment_terms",
+			label: __("Based On Payment Terms"),
+			fieldtype: "Check",
 		},
 		{
-			"fieldname": "for_revaluation_journals",
-			"label": __("Revaluation Journals"),
-			"fieldtype": "Check",
-		}
+			fieldname: "for_revaluation_journals",
+			label: __("Revaluation Journals"),
+			fieldtype: "Check",
+		},
 	],
 
-	onload: function(report) {
-		report.page.add_inner_button(__("Accounts Payable"), function() {
+	onload: function (report) {
+		report.page.add_inner_button(__("Accounts Payable"), function () {
 			var filters = report.get_values();
-			frappe.set_route('query-report', 'Accounts Payable', {company: filters.company});
+			frappe.set_route("query-report", "Accounts Payable", { company: filters.company });
 		});
-	}
-}
+	},
+};
 
-erpnext.utils.add_dimensions('Accounts Payable Summary', 9);
+erpnext.utils.add_dimensions("Accounts Payable Summary", 9);
 
 function get_party_type_options() {
 	let options = [];
-	frappe.db.get_list(
-		"Party Type", {filters:{"account_type": "Payable"}, fields:['name']}
-	).then((res) => {
-		res.forEach((party_type) => {
-			options.push(party_type.name);
+	frappe.db
+		.get_list("Party Type", { filters: { account_type: "Payable" }, fields: ["name"] })
+		.then((res) => {
+			res.forEach((party_type) => {
+				options.push(party_type.name);
+			});
 		});
-	});
 	return options;
-}
\ No newline at end of file
+}
diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.js b/erpnext/accounts/report/accounts_receivable/accounts_receivable.js
index b4bc887..0daf79e 100644
--- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.js
+++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.js
@@ -4,225 +4,224 @@
 frappe.provide("erpnext.utils");
 
 frappe.query_reports["Accounts Receivable"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname": "company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"reqd": 1,
-			"default": frappe.defaults.get_user_default("Company")
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			reqd: 1,
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
-			"fieldname": "report_date",
-			"label": __("Posting Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today()
+			fieldname: "report_date",
+			label: __("Posting Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.get_today(),
 		},
 		{
-			"fieldname": "finance_book",
-			"label": __("Finance Book"),
-			"fieldtype": "Link",
-			"options": "Finance Book"
+			fieldname: "finance_book",
+			label: __("Finance Book"),
+			fieldtype: "Link",
+			options: "Finance Book",
 		},
 		{
-			"fieldname": "cost_center",
-			"label": __("Cost Center"),
-			"fieldtype": "Link",
-			"options": "Cost Center",
+			fieldname: "cost_center",
+			label: __("Cost Center"),
+			fieldtype: "Link",
+			options: "Cost Center",
 			get_query: () => {
-				var company = frappe.query_report.get_filter_value('company');
+				var company = frappe.query_report.get_filter_value("company");
 				return {
 					filters: {
-						'company': company
-					}
+						company: company,
+					},
 				};
-			}
+			},
 		},
 		{
-			"fieldname":"party_type",
-			"label": __("Party Type"),
-			"fieldtype": "Autocomplete",
+			fieldname: "party_type",
+			label: __("Party Type"),
+			fieldtype: "Autocomplete",
 			options: get_party_type_options(),
-			on_change: function() {
-				frappe.query_report.set_filter_value('party', "");
-				frappe.query_report.toggle_filter_display('customer_group', frappe.query_report.get_filter_value('party_type') !== "Customer");
-			}
+			on_change: function () {
+				frappe.query_report.set_filter_value("party", "");
+				frappe.query_report.toggle_filter_display(
+					"customer_group",
+					frappe.query_report.get_filter_value("party_type") !== "Customer"
+				);
+			},
 		},
 		{
-			"fieldname":"party",
-			"label": __("Party"),
-			"fieldtype": "MultiSelectList",
-			get_data: function(txt) {
+			fieldname: "party",
+			label: __("Party"),
+			fieldtype: "MultiSelectList",
+			get_data: function (txt) {
 				if (!frappe.query_report.filters) return;
 
-				let party_type = frappe.query_report.get_filter_value('party_type');
+				let party_type = frappe.query_report.get_filter_value("party_type");
 				if (!party_type) return;
 
 				return frappe.db.get_link_options(party_type, txt);
 			},
 		},
 		{
-			"fieldname": "party_account",
-			"label": __("Receivable Account"),
-			"fieldtype": "Link",
-			"options": "Account",
+			fieldname: "party_account",
+			label: __("Receivable Account"),
+			fieldtype: "Link",
+			options: "Account",
 			get_query: () => {
-				var company = frappe.query_report.get_filter_value('company');
+				var company = frappe.query_report.get_filter_value("company");
 				return {
 					filters: {
-						'company': company,
-						'account_type': 'Receivable',
-						'is_group': 0
-					}
+						company: company,
+						account_type: "Receivable",
+						is_group: 0,
+					},
 				};
-			}
+			},
 		},
 		{
-			"fieldname": "ageing_based_on",
-			"label": __("Ageing Based On"),
-			"fieldtype": "Select",
-			"options": 'Posting Date\nDue Date',
-			"default": "Due Date"
+			fieldname: "ageing_based_on",
+			label: __("Ageing Based On"),
+			fieldtype: "Select",
+			options: "Posting Date\nDue Date",
+			default: "Due Date",
 		},
 		{
-			"fieldname": "range1",
-			"label": __("Ageing Range 1"),
-			"fieldtype": "Int",
-			"default": "30",
-			"reqd": 1
+			fieldname: "range1",
+			label: __("Ageing Range 1"),
+			fieldtype: "Int",
+			default: "30",
+			reqd: 1,
 		},
 		{
-			"fieldname": "range2",
-			"label": __("Ageing Range 2"),
-			"fieldtype": "Int",
-			"default": "60",
-			"reqd": 1
+			fieldname: "range2",
+			label: __("Ageing Range 2"),
+			fieldtype: "Int",
+			default: "60",
+			reqd: 1,
 		},
 		{
-			"fieldname": "range3",
-			"label": __("Ageing Range 3"),
-			"fieldtype": "Int",
-			"default": "90",
-			"reqd": 1
+			fieldname: "range3",
+			label: __("Ageing Range 3"),
+			fieldtype: "Int",
+			default: "90",
+			reqd: 1,
 		},
 		{
-			"fieldname": "range4",
-			"label": __("Ageing Range 4"),
-			"fieldtype": "Int",
-			"default": "120",
-			"reqd": 1
+			fieldname: "range4",
+			label: __("Ageing Range 4"),
+			fieldtype: "Int",
+			default: "120",
+			reqd: 1,
 		},
 		{
-			"fieldname":"customer_group",
-			"label": __("Customer Group"),
-			"fieldtype": "MultiSelectList",
-			"options": "Customer Group",
-			get_data: function(txt) {
-				return frappe.db.get_link_options('Customer Group', txt);
-			}
+			fieldname: "customer_group",
+			label: __("Customer Group"),
+			fieldtype: "MultiSelectList",
+			options: "Customer Group",
+			get_data: function (txt) {
+				return frappe.db.get_link_options("Customer Group", txt);
+			},
 		},
 		{
-			"fieldname": "payment_terms_template",
-			"label": __("Payment Terms Template"),
-			"fieldtype": "Link",
-			"options": "Payment Terms Template"
+			fieldname: "payment_terms_template",
+			label: __("Payment Terms Template"),
+			fieldtype: "Link",
+			options: "Payment Terms Template",
 		},
 		{
-			"fieldname": "sales_partner",
-			"label": __("Sales Partner"),
-			"fieldtype": "Link",
-			"options": "Sales Partner"
+			fieldname: "sales_partner",
+			label: __("Sales Partner"),
+			fieldtype: "Link",
+			options: "Sales Partner",
 		},
 		{
-			"fieldname": "sales_person",
-			"label": __("Sales Person"),
-			"fieldtype": "Link",
-			"options": "Sales Person"
+			fieldname: "sales_person",
+			label: __("Sales Person"),
+			fieldtype: "Link",
+			options: "Sales Person",
 		},
 		{
-			"fieldname": "territory",
-			"label": __("Territory"),
-			"fieldtype": "Link",
-			"options": "Territory"
+			fieldname: "territory",
+			label: __("Territory"),
+			fieldtype: "Link",
+			options: "Territory",
 		},
 		{
-			"fieldname": "group_by_party",
-			"label": __("Group By Customer"),
-			"fieldtype": "Check"
+			fieldname: "group_by_party",
+			label: __("Group By Customer"),
+			fieldtype: "Check",
 		},
 		{
-			"fieldname": "based_on_payment_terms",
-			"label": __("Based On Payment Terms"),
-			"fieldtype": "Check",
+			fieldname: "based_on_payment_terms",
+			label: __("Based On Payment Terms"),
+			fieldtype: "Check",
 		},
 		{
-			"fieldname": "show_future_payments",
-			"label": __("Show Future Payments"),
-			"fieldtype": "Check",
+			fieldname: "show_future_payments",
+			label: __("Show Future Payments"),
+			fieldtype: "Check",
 		},
 		{
-			"fieldname": "show_delivery_notes",
-			"label": __("Show Linked Delivery Notes"),
-			"fieldtype": "Check",
+			fieldname: "show_delivery_notes",
+			label: __("Show Linked Delivery Notes"),
+			fieldtype: "Check",
 		},
 		{
-			"fieldname": "show_sales_person",
-			"label": __("Show Sales Person"),
-			"fieldtype": "Check",
+			fieldname: "show_sales_person",
+			label: __("Show Sales Person"),
+			fieldtype: "Check",
 		},
 		{
-			"fieldname": "show_remarks",
-			"label": __("Show Remarks"),
-			"fieldtype": "Check",
+			fieldname: "show_remarks",
+			label: __("Show Remarks"),
+			fieldtype: "Check",
 		},
 		{
-			"fieldname": "in_party_currency",
-			"label": __("In Party Currency"),
-			"fieldtype": "Check",
+			fieldname: "in_party_currency",
+			label: __("In Party Currency"),
+			fieldtype: "Check",
 		},
 		{
-			"fieldname": "for_revaluation_journals",
-			"label": __("Revaluation Journals"),
-			"fieldtype": "Check",
+			fieldname: "for_revaluation_journals",
+			label: __("Revaluation Journals"),
+			fieldtype: "Check",
 		},
 		{
-			"fieldname": "ignore_accounts",
-			"label": __("Group by Voucher"),
-			"fieldtype": "Check",
-		}
-
-
+			fieldname: "ignore_accounts",
+			label: __("Group by Voucher"),
+			fieldtype: "Check",
+		},
 	],
 
-	"formatter": function(value, row, column, data, default_formatter) {
+	formatter: function (value, row, column, data, default_formatter) {
 		value = default_formatter(value, row, column, data);
 		if (data && data.bold) {
 			value = value.bold();
-
 		}
 		return value;
 	},
 
-	onload: function(report) {
-		report.page.add_inner_button(__("Accounts Receivable Summary"), function() {
+	onload: function (report) {
+		report.page.add_inner_button(__("Accounts Receivable Summary"), function () {
 			var filters = report.get_values();
-			frappe.set_route('query-report', 'Accounts Receivable Summary', {company: filters.company});
+			frappe.set_route("query-report", "Accounts Receivable Summary", { company: filters.company });
 		});
-	}
-}
+	},
+};
 
-erpnext.utils.add_dimensions('Accounts Receivable', 9);
-
+erpnext.utils.add_dimensions("Accounts Receivable", 9);
 
 function get_party_type_options() {
 	let options = [];
-	frappe.db.get_list(
-		"Party Type", {filters:{"account_type": "Receivable"}, fields:['name']}
-	).then((res) => {
-		res.forEach((party_type) => {
-			options.push(party_type.name);
+	frappe.db
+		.get_list("Party Type", { filters: { account_type: "Receivable" }, fields: ["name"] })
+		.then((res) => {
+			res.forEach((party_type) => {
+				options.push(party_type.name);
+			});
 		});
-	});
 	return options;
 }
diff --git a/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.js b/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.js
index 2f6d258..964abc2 100644
--- a/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.js
+++ b/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.js
@@ -2,168 +2,171 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.query_reports["Accounts Receivable Summary"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company")
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
-			"fieldname":"report_date",
-			"label": __("Posting Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today()
+			fieldname: "report_date",
+			label: __("Posting Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.get_today(),
 		},
 		{
-			"fieldname":"ageing_based_on",
-			"label": __("Ageing Based On"),
-			"fieldtype": "Select",
-			"options": 'Posting Date\nDue Date',
-			"default": "Due Date"
+			fieldname: "ageing_based_on",
+			label: __("Ageing Based On"),
+			fieldtype: "Select",
+			options: "Posting Date\nDue Date",
+			default: "Due Date",
 		},
 		{
-			"fieldname":"range1",
-			"label": __("Ageing Range 1"),
-			"fieldtype": "Int",
-			"default": "30",
-			"reqd": 1
+			fieldname: "range1",
+			label: __("Ageing Range 1"),
+			fieldtype: "Int",
+			default: "30",
+			reqd: 1,
 		},
 		{
-			"fieldname":"range2",
-			"label": __("Ageing Range 2"),
-			"fieldtype": "Int",
-			"default": "60",
-			"reqd": 1
+			fieldname: "range2",
+			label: __("Ageing Range 2"),
+			fieldtype: "Int",
+			default: "60",
+			reqd: 1,
 		},
 		{
-			"fieldname":"range3",
-			"label": __("Ageing Range 3"),
-			"fieldtype": "Int",
-			"default": "90",
-			"reqd": 1
+			fieldname: "range3",
+			label: __("Ageing Range 3"),
+			fieldtype: "Int",
+			default: "90",
+			reqd: 1,
 		},
 		{
-			"fieldname":"range4",
-			"label": __("Ageing Range 4"),
-			"fieldtype": "Int",
-			"default": "120",
-			"reqd": 1
+			fieldname: "range4",
+			label: __("Ageing Range 4"),
+			fieldtype: "Int",
+			default: "120",
+			reqd: 1,
 		},
 		{
-			"fieldname":"finance_book",
-			"label": __("Finance Book"),
-			"fieldtype": "Link",
-			"options": "Finance Book"
+			fieldname: "finance_book",
+			label: __("Finance Book"),
+			fieldtype: "Link",
+			options: "Finance Book",
 		},
 		{
-			"fieldname":"cost_center",
-			"label": __("Cost Center"),
-			"fieldtype": "Link",
-			"options": "Cost Center",
+			fieldname: "cost_center",
+			label: __("Cost Center"),
+			fieldtype: "Link",
+			options: "Cost Center",
 			get_query: () => {
-				var company = frappe.query_report.get_filter_value('company');
+				var company = frappe.query_report.get_filter_value("company");
 				return {
 					filters: {
-						'company': company
-					}
-				}
-			}
+						company: company,
+					},
+				};
+			},
 		},
 		{
-			"fieldname":"party_type",
-			"label": __("Party Type"),
-			"fieldtype": "Autocomplete",
+			fieldname: "party_type",
+			label: __("Party Type"),
+			fieldtype: "Autocomplete",
 			options: get_party_type_options(),
-			on_change: function() {
-				frappe.query_report.set_filter_value('party', "");
-				frappe.query_report.toggle_filter_display('customer_group', frappe.query_report.get_filter_value('party_type') !== "Customer");
-			}
+			on_change: function () {
+				frappe.query_report.set_filter_value("party", "");
+				frappe.query_report.toggle_filter_display(
+					"customer_group",
+					frappe.query_report.get_filter_value("party_type") !== "Customer"
+				);
+			},
 		},
 		{
-			"fieldname":"party",
-			"label": __("Party"),
-			"fieldtype": "MultiSelectList",
-			get_data: function(txt) {
+			fieldname: "party",
+			label: __("Party"),
+			fieldtype: "MultiSelectList",
+			get_data: function (txt) {
 				if (!frappe.query_report.filters) return;
 
-				let party_type = frappe.query_report.get_filter_value('party_type');
+				let party_type = frappe.query_report.get_filter_value("party_type");
 				if (!party_type) return;
 
 				return frappe.db.get_link_options(party_type, txt);
 			},
 		},
 		{
-			"fieldname":"customer_group",
-			"label": __("Customer Group"),
-			"fieldtype": "Link",
-			"options": "Customer Group"
+			fieldname: "customer_group",
+			label: __("Customer Group"),
+			fieldtype: "Link",
+			options: "Customer Group",
 		},
 		{
-			"fieldname":"payment_terms_template",
-			"label": __("Payment Terms Template"),
-			"fieldtype": "Link",
-			"options": "Payment Terms Template"
+			fieldname: "payment_terms_template",
+			label: __("Payment Terms Template"),
+			fieldtype: "Link",
+			options: "Payment Terms Template",
 		},
 		{
-			"fieldname":"territory",
-			"label": __("Territory"),
-			"fieldtype": "Link",
-			"options": "Territory"
+			fieldname: "territory",
+			label: __("Territory"),
+			fieldtype: "Link",
+			options: "Territory",
 		},
 		{
-			"fieldname":"sales_partner",
-			"label": __("Sales Partner"),
-			"fieldtype": "Link",
-			"options": "Sales Partner"
+			fieldname: "sales_partner",
+			label: __("Sales Partner"),
+			fieldtype: "Link",
+			options: "Sales Partner",
 		},
 		{
-			"fieldname":"sales_person",
-			"label": __("Sales Person"),
-			"fieldtype": "Link",
-			"options": "Sales Person"
+			fieldname: "sales_person",
+			label: __("Sales Person"),
+			fieldtype: "Link",
+			options: "Sales Person",
 		},
 		{
-			"fieldname":"based_on_payment_terms",
-			"label": __("Based On Payment Terms"),
-			"fieldtype": "Check",
+			fieldname: "based_on_payment_terms",
+			label: __("Based On Payment Terms"),
+			fieldtype: "Check",
 		},
 		{
-			"fieldname":"show_future_payments",
-			"label": __("Show Future Payments"),
-			"fieldtype": "Check",
+			fieldname: "show_future_payments",
+			label: __("Show Future Payments"),
+			fieldtype: "Check",
 		},
 		{
-			"fieldname":"show_gl_balance",
-			"label": __("Show GL Balance"),
-			"fieldtype": "Check",
+			fieldname: "show_gl_balance",
+			label: __("Show GL Balance"),
+			fieldtype: "Check",
 		},
 		{
-			"fieldname": "for_revaluation_journals",
-			"label": __("Revaluation Journals"),
-			"fieldtype": "Check",
-		}
+			fieldname: "for_revaluation_journals",
+			label: __("Revaluation Journals"),
+			fieldtype: "Check",
+		},
 	],
 
-	onload: function(report) {
-		report.page.add_inner_button(__("Accounts Receivable"), function() {
+	onload: function (report) {
+		report.page.add_inner_button(__("Accounts Receivable"), function () {
 			var filters = report.get_values();
-			frappe.set_route('query-report', 'Accounts Receivable', { company: filters.company });
+			frappe.set_route("query-report", "Accounts Receivable", { company: filters.company });
 		});
-	}
-}
+	},
+};
 
-erpnext.utils.add_dimensions('Accounts Receivable Summary', 9);
+erpnext.utils.add_dimensions("Accounts Receivable Summary", 9);
 
 function get_party_type_options() {
 	let options = [];
-	frappe.db.get_list(
-		"Party Type", {filters:{"account_type": "Receivable"}, fields:['name']}
-	).then((res) => {
-		res.forEach((party_type) => {
-			options.push(party_type.name);
+	frappe.db
+		.get_list("Party Type", { filters: { account_type: "Receivable" }, fields: ["name"] })
+		.then((res) => {
+			res.forEach((party_type) => {
+				options.push(party_type.name);
+			});
 		});
-	});
 	return options;
-}
\ No newline at end of file
+}
diff --git a/erpnext/accounts/report/asset_depreciation_ledger/asset_depreciation_ledger.js b/erpnext/accounts/report/asset_depreciation_ledger/asset_depreciation_ledger.js
index 12b9434..db49ccb 100644
--- a/erpnext/accounts/report/asset_depreciation_ledger/asset_depreciation_ledger.js
+++ b/erpnext/accounts/report/asset_depreciation_ledger/asset_depreciation_ledger.js
@@ -2,58 +2,58 @@
 // For license information, please see license.txt
 
 frappe.query_reports["Asset Depreciation Ledger"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company"),
-			"reqd": 1
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
+			reqd: 1,
 		},
 		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
-			"reqd": 1
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+			reqd: 1,
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today(),
-			"reqd": 1
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.get_today(),
+			reqd: 1,
 		},
 		{
-			"fieldname":"asset",
-			"label": __("Asset"),
-			"fieldtype": "Link",
-			"options": "Asset"
+			fieldname: "asset",
+			label: __("Asset"),
+			fieldtype: "Link",
+			options: "Asset",
 		},
 		{
-			"fieldname":"asset_category",
-			"label": __("Asset Category"),
-			"fieldtype": "Link",
-			"options": "Asset Category"
+			fieldname: "asset_category",
+			label: __("Asset Category"),
+			fieldtype: "Link",
+			options: "Asset Category",
 		},
 		{
-			"fieldname":"cost_center",
-			"label": __("Cost Center"),
-			"fieldtype": "Link",
-			"options": "Cost Center"
+			fieldname: "cost_center",
+			label: __("Cost Center"),
+			fieldtype: "Link",
+			options: "Cost Center",
 		},
 		{
-			"fieldname":"finance_book",
-			"label": __("Finance Book"),
-			"fieldtype": "Link",
-			"options": "Finance Book"
+			fieldname: "finance_book",
+			label: __("Finance Book"),
+			fieldtype: "Link",
+			options: "Finance Book",
 		},
 		{
-			"fieldname": "include_default_book_assets",
-			"label": __("Include Default FB Assets"),
-			"fieldtype": "Check",
-			"default": 1
+			fieldname: "include_default_book_assets",
+			label: __("Include Default FB Assets"),
+			fieldtype: "Check",
+			default: 1,
 		},
-	]
-}
+	],
+};
diff --git a/erpnext/accounts/report/asset_depreciations_and_balances/asset_depreciations_and_balances.js b/erpnext/accounts/report/asset_depreciations_and_balances/asset_depreciations_and_balances.js
index 06fa9f3..49771d7 100644
--- a/erpnext/accounts/report/asset_depreciations_and_balances/asset_depreciations_and_balances.js
+++ b/erpnext/accounts/report/asset_depreciations_and_balances/asset_depreciations_and_balances.js
@@ -2,49 +2,49 @@
 // For license information, please see license.txt
 
 frappe.query_reports["Asset Depreciations and Balances"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company"),
-			"reqd": 1
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
+			reqd: 1,
 		},
 		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
-			"reqd": 1
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
+			reqd: 1,
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
-			"reqd": 1
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
+			reqd: 1,
 		},
 		{
-			"fieldname":"group_by",
-			"label": __("Group By"),
-			"fieldtype": "Select",
-			"options": ["Asset Category", "Asset"],
-			"default": "Asset Category",
+			fieldname: "group_by",
+			label: __("Group By"),
+			fieldtype: "Select",
+			options: ["Asset Category", "Asset"],
+			default: "Asset Category",
 		},
 		{
-			"fieldname":"asset_category",
-			"label": __("Asset Category"),
-			"fieldtype": "Link",
-			"options": "Asset Category",
-			"depends_on": "eval: doc.group_by == 'Asset Category'",
+			fieldname: "asset_category",
+			label: __("Asset Category"),
+			fieldtype: "Link",
+			options: "Asset Category",
+			depends_on: "eval: doc.group_by == 'Asset Category'",
 		},
 		{
-			"fieldname":"asset",
-			"label": __("Asset"),
-			"fieldtype": "Link",
-			"options": "Asset",
-			"depends_on": "eval: doc.group_by == 'Asset'",
+			fieldname: "asset",
+			label: __("Asset"),
+			fieldtype: "Link",
+			options: "Asset",
+			depends_on: "eval: doc.group_by == 'Asset'",
 		},
-	]
-}
+	],
+};
diff --git a/erpnext/accounts/report/balance_sheet/balance_sheet.js b/erpnext/accounts/report/balance_sheet/balance_sheet.js
index 5525024..0863c68 100644
--- a/erpnext/accounts/report/balance_sheet/balance_sheet.js
+++ b/erpnext/accounts/report/balance_sheet/balance_sheet.js
@@ -1,26 +1,21 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.query_reports["Balance Sheet"] = $.extend(
-	{},
-	erpnext.financial_statements
-);
+frappe.query_reports["Balance Sheet"] = $.extend({}, erpnext.financial_statements);
 
 erpnext.utils.add_dimensions("Balance Sheet", 10);
 
-frappe.query_reports["Balance Sheet"]["filters"].push(
-	{
-		"fieldname": "selected_view",
-		"label": __("Select View"),
-		"fieldtype": "Select",
-		"options": [
-			{ "value": "Report", "label": __("Report View") },
-			{ "value": "Growth", "label": __("Growth View") }
-		],
-		"default": "Report",
-		"reqd": 1
-	},
-);
+frappe.query_reports["Balance Sheet"]["filters"].push({
+	fieldname: "selected_view",
+	label: __("Select View"),
+	fieldtype: "Select",
+	options: [
+		{ value: "Report", label: __("Report View") },
+		{ value: "Growth", label: __("Growth View") },
+	],
+	default: "Report",
+	reqd: 1,
+});
 
 frappe.query_reports["Balance Sheet"]["filters"].push({
 	fieldname: "accumulated_values",
diff --git a/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.js b/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.js
index 8a7d071..e8ae2a1 100644
--- a/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.js
+++ b/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.js
@@ -2,37 +2,38 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.query_reports["Bank Clearance Summary"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
-			"width": "80"
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
+			width: "80",
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today()
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.get_today(),
 		},
 		{
-			"fieldname":"account",
-			"label": __("Bank Account"),
-			"fieldtype": "Link",
-			"options": "Account",
-			"reqd": 1,
-			"default": frappe.defaults.get_user_default("Company")?
-				locals[":Company"][frappe.defaults.get_user_default("Company")]["default_bank_account"]: "",
-			"get_query": function() {
+			fieldname: "account",
+			label: __("Bank Account"),
+			fieldtype: "Link",
+			options: "Account",
+			reqd: 1,
+			default: frappe.defaults.get_user_default("Company")
+				? locals[":Company"][frappe.defaults.get_user_default("Company")]["default_bank_account"]
+				: "",
+			get_query: function () {
 				return {
-					"query": "erpnext.controllers.queries.get_account_list",
-					"filters": [
-						['Account', 'account_type', 'in', 'Bank, Cash'],
-						['Account', 'is_group', '=', 0],
-					]
-				}
-			}
+					query: "erpnext.controllers.queries.get_account_list",
+					filters: [
+						["Account", "account_type", "in", "Bank, Cash"],
+						["Account", "is_group", "=", 0],
+					],
+				};
+			},
 		},
-	]
-}
+	],
+};
diff --git a/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.js b/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.js
index 9bb6a14..efcfa7a 100644
--- a/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.js
+++ b/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.js
@@ -2,47 +2,48 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.query_reports["Bank Reconciliation Statement"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"reqd": 1,
-			"default": frappe.defaults.get_user_default("Company")
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			reqd: 1,
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
-			"fieldname":"account",
-			"label": __("Bank Account"),
-			"fieldtype": "Link",
-			"options": "Account",
-			"default": frappe.defaults.get_user_default("Company")?
-				locals[":Company"][frappe.defaults.get_user_default("Company")]["default_bank_account"]: "",
-			"reqd": 1,
-			"get_query": function() {
-				var company = frappe.query_report.get_filter_value('company')
+			fieldname: "account",
+			label: __("Bank Account"),
+			fieldtype: "Link",
+			options: "Account",
+			default: frappe.defaults.get_user_default("Company")
+				? locals[":Company"][frappe.defaults.get_user_default("Company")]["default_bank_account"]
+				: "",
+			reqd: 1,
+			get_query: function () {
+				var company = frappe.query_report.get_filter_value("company");
 				return {
-					"query": "erpnext.controllers.queries.get_account_list",
-					"filters": [
-						['Account', 'account_type', 'in', 'Bank, Cash'],
-						['Account', 'is_group', '=', 0],
-						['Account', 'disabled', '=', 0],
-						['Account', 'company', '=', company],
-					]
-				}
-			}
+					query: "erpnext.controllers.queries.get_account_list",
+					filters: [
+						["Account", "account_type", "in", "Bank, Cash"],
+						["Account", "is_group", "=", 0],
+						["Account", "disabled", "=", 0],
+						["Account", "company", "=", company],
+					],
+				};
+			},
 		},
 		{
-			"fieldname":"report_date",
-			"label": __("Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today(),
-			"reqd": 1
+			fieldname: "report_date",
+			label: __("Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.get_today(),
+			reqd: 1,
 		},
 		{
-			"fieldname":"include_pos_transactions",
-			"label": __("Include POS Transactions"),
-			"fieldtype": "Check"
+			fieldname: "include_pos_transactions",
+			label: __("Include POS Transactions"),
+			fieldtype: "Check",
 		},
-	]
-}
+	],
+};
diff --git a/erpnext/accounts/report/billed_items_to_be_received/billed_items_to_be_received.js b/erpnext/accounts/report/billed_items_to_be_received/billed_items_to_be_received.js
index 7617ed1..c8407c2 100644
--- a/erpnext/accounts/report/billed_items_to_be_received/billed_items_to_be_received.js
+++ b/erpnext/accounts/report/billed_items_to_be_received/billed_items_to_be_received.js
@@ -1,29 +1,28 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
-frappe.query_reports['Billed Items To Be Received'] = {
-	'filters': [
+frappe.query_reports["Billed Items To Be Received"] = {
+	filters: [
 		{
-			'label': __('Company'),
-			'fieldname': 'company',
-			'fieldtype': 'Link',
-			'options': 'Company',
-			'reqd': 1,
-			'default': frappe.defaults.get_default('Company')
+			label: __("Company"),
+			fieldname: "company",
+			fieldtype: "Link",
+			options: "Company",
+			reqd: 1,
+			default: frappe.defaults.get_default("Company"),
 		},
 		{
-			'label': __('As on Date'),
-			'fieldname': 'posting_date',
-			'fieldtype': 'Date',
-			'reqd': 1,
-			'default': frappe.datetime.get_today()
+			label: __("As on Date"),
+			fieldname: "posting_date",
+			fieldtype: "Date",
+			reqd: 1,
+			default: frappe.datetime.get_today(),
 		},
 		{
-			'label': __('Purchase Invoice'),
-			'fieldname': 'purchase_invoice',
-			'fieldtype': 'Link',
-			'options': 'Purchase Invoice'
-		}
-	]
+			label: __("Purchase Invoice"),
+			fieldname: "purchase_invoice",
+			fieldtype: "Link",
+			options: "Purchase Invoice",
+		},
+	],
 };
diff --git a/erpnext/accounts/report/budget_variance_report/budget_variance_report.js b/erpnext/accounts/report/budget_variance_report/budget_variance_report.js
index d6a4755..83bd48c 100644
--- a/erpnext/accounts/report/budget_variance_report/budget_variance_report.js
+++ b/erpnext/accounts/report/budget_variance_report/budget_variance_report.js
@@ -2,37 +2,35 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.query_reports["Budget Variance Report"] = {
-	"filters": get_filters(),
-	"formatter": function (value, row, column, data, default_formatter) {
+	filters: get_filters(),
+	formatter: function (value, row, column, data, default_formatter) {
 		value = default_formatter(value, row, column, data);
 
 		if (column.fieldname.includes(__("variance"))) {
-
 			if (data[column.fieldname] < 0) {
 				value = "<span style='color:red'>" + value + "</span>";
-			}
-			else if (data[column.fieldname] > 0) {
+			} else if (data[column.fieldname] > 0) {
 				value = "<span style='color:green'>" + value + "</span>";
 			}
 		}
 
 		return value;
-	}
-}
+	},
+};
 function get_filters() {
 	function get_dimensions() {
 		let result = [];
 		frappe.call({
 			method: "erpnext.accounts.doctype.accounting_dimension.accounting_dimension.get_dimensions",
 			args: {
-				'with_cost_center_and_project': true
+				with_cost_center_and_project: true,
 			},
 			async: false,
-			callback: function(r) {
-				if(!r.exc) {
-					result = r.message[0].map(elem => elem.document_type);
+			callback: function (r) {
+				if (!r.exc) {
+					result = r.message[0].map((elem) => elem.document_type);
 				}
-			}
+			},
 		});
 		return result;
 	}
@@ -46,7 +44,7 @@
 			fieldtype: "Link",
 			options: "Fiscal Year",
 			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			fieldname: "to_fiscal_year",
@@ -54,20 +52,20 @@
 			fieldtype: "Link",
 			options: "Fiscal Year",
 			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			fieldname: "period",
 			label: __("Period"),
 			fieldtype: "Select",
 			options: [
-				{ "value": "Monthly", "label": __("Monthly") },
-				{ "value": "Quarterly", "label": __("Quarterly") },
-				{ "value": "Half-Yearly", "label": __("Half-Yearly") },
-				{ "value": "Yearly", "label": __("Yearly") }
+				{ value: "Monthly", label: __("Monthly") },
+				{ value: "Quarterly", label: __("Quarterly") },
+				{ value: "Half-Yearly", label: __("Half-Yearly") },
+				{ value: "Yearly", label: __("Yearly") },
 			],
 			default: "Yearly",
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			fieldname: "company",
@@ -75,7 +73,7 @@
 			fieldtype: "Link",
 			options: "Company",
 			default: frappe.defaults.get_user_default("Company"),
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			fieldname: "budget_against",
@@ -84,32 +82,31 @@
 			options: budget_against_options,
 			default: "Cost Center",
 			reqd: 1,
-			on_change: function() {
+			on_change: function () {
 				frappe.query_report.set_filter_value("budget_against_filter", []);
 				frappe.query_report.refresh();
-			}
+			},
 		},
 		{
-			fieldname:"budget_against_filter",
-			label: __('Dimension Filter'),
+			fieldname: "budget_against_filter",
+			label: __("Dimension Filter"),
 			fieldtype: "MultiSelectList",
-			get_data: function(txt) {
+			get_data: function (txt) {
 				if (!frappe.query_report.filters) return;
 
-				let budget_against = frappe.query_report.get_filter_value('budget_against');
+				let budget_against = frappe.query_report.get_filter_value("budget_against");
 				if (!budget_against) return;
 
 				return frappe.db.get_link_options(budget_against, txt);
-			}
+			},
 		},
 		{
-			fieldname:"show_cumulative",
+			fieldname: "show_cumulative",
 			label: __("Show Cumulative Amount"),
 			fieldtype: "Check",
 			default: 0,
 		},
-	]
+	];
 
 	return filters;
 }
-
diff --git a/erpnext/accounts/report/cash_flow/cash_flow.js b/erpnext/accounts/report/cash_flow/cash_flow.js
index ef17eb1..c824f0d 100644
--- a/erpnext/accounts/report/cash_flow/cash_flow.js
+++ b/erpnext/accounts/report/cash_flow/cash_flow.js
@@ -1,12 +1,9 @@
 // Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.query_reports["Cash Flow"] = $.extend(
-	{},
-	erpnext.financial_statements
-);
+frappe.query_reports["Cash Flow"] = $.extend({}, erpnext.financial_statements);
 
-erpnext.utils.add_dimensions('Cash Flow', 10);
+erpnext.utils.add_dimensions("Cash Flow", 10);
 
 // The last item in the array is the definition for Presentation Currency
 // filter. It won't be used in cash flow for now so we pop it. Please take
@@ -14,11 +11,9 @@
 
 frappe.query_reports["Cash Flow"]["filters"].splice(8, 1);
 
-frappe.query_reports["Cash Flow"]["filters"].push(
-	{
-		"fieldname": "include_default_book_entries",
-		"label": __("Include Default FB Entries"),
-		"fieldtype": "Check",
-		"default": 1
-	}
-);
+frappe.query_reports["Cash Flow"]["filters"].push({
+	fieldname: "include_default_book_entries",
+	label: __("Include Default FB Entries"),
+	fieldtype: "Check",
+	default: 1,
+});
diff --git a/erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.js b/erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.js
index 6210fd1..5cd12aa 100644
--- a/erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.js
+++ b/erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.js
@@ -1,121 +1,145 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Consolidated Financial Statement"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company"),
-			"reqd": 1
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
+			reqd: 1,
 		},
 		{
-			"fieldname":"filter_based_on",
-			"label": __("Filter Based On"),
-			"fieldtype": "Select",
-			"options": ["Fiscal Year", "Date Range"],
-			"default": ["Fiscal Year"],
-			"reqd": 1,
-			on_change: function() {
-				let filter_based_on = frappe.query_report.get_filter_value('filter_based_on');
-				frappe.query_report.toggle_filter_display('from_fiscal_year', filter_based_on === 'Date Range');
-				frappe.query_report.toggle_filter_display('to_fiscal_year', filter_based_on === 'Date Range');
-				frappe.query_report.toggle_filter_display('period_start_date', filter_based_on === 'Fiscal Year');
-				frappe.query_report.toggle_filter_display('period_end_date', filter_based_on === 'Fiscal Year');
+			fieldname: "filter_based_on",
+			label: __("Filter Based On"),
+			fieldtype: "Select",
+			options: ["Fiscal Year", "Date Range"],
+			default: ["Fiscal Year"],
+			reqd: 1,
+			on_change: function () {
+				let filter_based_on = frappe.query_report.get_filter_value("filter_based_on");
+				frappe.query_report.toggle_filter_display(
+					"from_fiscal_year",
+					filter_based_on === "Date Range"
+				);
+				frappe.query_report.toggle_filter_display("to_fiscal_year", filter_based_on === "Date Range");
+				frappe.query_report.toggle_filter_display(
+					"period_start_date",
+					filter_based_on === "Fiscal Year"
+				);
+				frappe.query_report.toggle_filter_display(
+					"period_end_date",
+					filter_based_on === "Fiscal Year"
+				);
 
 				frappe.query_report.refresh();
-			}
+			},
 		},
 		{
-			"fieldname":"period_start_date",
-			"label": __("Start Date"),
-			"fieldtype": "Date",
-			"hidden": 1,
-			"reqd": 1
+			fieldname: "period_start_date",
+			label: __("Start Date"),
+			fieldtype: "Date",
+			hidden: 1,
+			reqd: 1,
 		},
 		{
-			"fieldname":"period_end_date",
-			"label": __("End Date"),
-			"fieldtype": "Date",
-			"hidden": 1,
-			"reqd": 1
+			fieldname: "period_end_date",
+			label: __("End Date"),
+			fieldtype: "Date",
+			hidden: 1,
+			reqd: 1,
 		},
 		{
-			"fieldname":"from_fiscal_year",
-			"label": __("Start Year"),
-			"fieldtype": "Link",
-			"options": "Fiscal Year",
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
-			"reqd": 1,
+			fieldname: "from_fiscal_year",
+			label: __("Start Year"),
+			fieldtype: "Link",
+			options: "Fiscal Year",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
+			reqd: 1,
 			on_change: () => {
-				frappe.model.with_doc("Fiscal Year", frappe.query_report.get_filter_value('from_fiscal_year'), function(r) {
-					let year_start_date = frappe.model.get_value("Fiscal Year", frappe.query_report.get_filter_value('from_fiscal_year'), "year_start_date");
-					frappe.query_report.set_filter_value({
-						period_start_date: year_start_date
-					});
-				});
-			}
+				frappe.model.with_doc(
+					"Fiscal Year",
+					frappe.query_report.get_filter_value("from_fiscal_year"),
+					function (r) {
+						let year_start_date = frappe.model.get_value(
+							"Fiscal Year",
+							frappe.query_report.get_filter_value("from_fiscal_year"),
+							"year_start_date"
+						);
+						frappe.query_report.set_filter_value({
+							period_start_date: year_start_date,
+						});
+					}
+				);
+			},
 		},
 		{
-			"fieldname":"to_fiscal_year",
-			"label": __("End Year"),
-			"fieldtype": "Link",
-			"options": "Fiscal Year",
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
-			"reqd": 1,
+			fieldname: "to_fiscal_year",
+			label: __("End Year"),
+			fieldtype: "Link",
+			options: "Fiscal Year",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
+			reqd: 1,
 			on_change: () => {
-				frappe.model.with_doc("Fiscal Year", frappe.query_report.get_filter_value('to_fiscal_year'), function(r) {
-					let year_end_date = frappe.model.get_value("Fiscal Year", frappe.query_report.get_filter_value('to_fiscal_year'), "year_end_date");
-					frappe.query_report.set_filter_value({
-						period_end_date: year_end_date
-					});
-				});
-			}
+				frappe.model.with_doc(
+					"Fiscal Year",
+					frappe.query_report.get_filter_value("to_fiscal_year"),
+					function (r) {
+						let year_end_date = frappe.model.get_value(
+							"Fiscal Year",
+							frappe.query_report.get_filter_value("to_fiscal_year"),
+							"year_end_date"
+						);
+						frappe.query_report.set_filter_value({
+							period_end_date: year_end_date,
+						});
+					}
+				);
+			},
 		},
 		{
-			"fieldname":"finance_book",
-			"label": __("Finance Book"),
-			"fieldtype": "Link",
-			"options": "Finance Book"
+			fieldname: "finance_book",
+			label: __("Finance Book"),
+			fieldtype: "Link",
+			options: "Finance Book",
 		},
 		{
-			"fieldname":"report",
-			"label": __("Report"),
-			"fieldtype": "Select",
-			"options": ["Profit and Loss Statement", "Balance Sheet", "Cash Flow"],
-			"default": "Balance Sheet",
-			"reqd": 1
+			fieldname: "report",
+			label: __("Report"),
+			fieldtype: "Select",
+			options: ["Profit and Loss Statement", "Balance Sheet", "Cash Flow"],
+			default: "Balance Sheet",
+			reqd: 1,
 		},
 		{
-			"fieldname": "presentation_currency",
-			"label": __("Currency"),
-			"fieldtype": "Select",
-			"options": erpnext.get_presentation_currency_list(),
-			"default": frappe.defaults.get_user_default("Currency")
+			fieldname: "presentation_currency",
+			label: __("Currency"),
+			fieldtype: "Select",
+			options: erpnext.get_presentation_currency_list(),
+			default: frappe.defaults.get_user_default("Currency"),
 		},
 		{
-			"fieldname":"accumulated_in_group_company",
-			"label": __("Accumulated Values in Group Company"),
-			"fieldtype": "Check",
-			"default": 0
+			fieldname: "accumulated_in_group_company",
+			label: __("Accumulated Values in Group Company"),
+			fieldtype: "Check",
+			default: 0,
 		},
 		{
-			"fieldname": "include_default_book_entries",
-			"label": __("Include Default FB Entries"),
-			"fieldtype": "Check",
-			"default": 1
+			fieldname: "include_default_book_entries",
+			label: __("Include Default FB Entries"),
+			fieldtype: "Check",
+			default: 1,
 		},
 		{
-			"fieldname": "show_zero_values",
-			"label": __("Show zero values"),
-			"fieldtype": "Check"
-		}
+			fieldname: "show_zero_values",
+			label: __("Show zero values"),
+			fieldtype: "Check",
+		},
 	],
-	"formatter": function(value, row, column, data, default_formatter) {
-		if (data && column.fieldname=="account") {
+	formatter: function (value, row, column, data, default_formatter) {
+		if (data && column.fieldname == "account") {
 			value = data.account_name || value;
 
 			column.link_onclick =
@@ -137,15 +161,15 @@
 		}
 		return value;
 	},
-	onload: function() {
+	onload: function () {
 		let fiscal_year = erpnext.utils.get_fiscal_year(frappe.datetime.get_today());
 
-		frappe.model.with_doc("Fiscal Year", fiscal_year, function(r) {
+		frappe.model.with_doc("Fiscal Year", fiscal_year, function (r) {
 			var fy = frappe.model.get_doc("Fiscal Year", fiscal_year);
 			frappe.query_report.set_filter_value({
 				period_start_date: fy.year_start_date,
-				period_end_date: fy.year_end_date
+				period_end_date: fy.year_end_date,
 			});
 		});
-	}
-}
+	},
+};
diff --git a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js
index 74d52de..3600db8 100644
--- a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js
+++ b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js
@@ -1,97 +1,96 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Customer Ledger Summary"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company")
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
-			"reqd": 1,
-			"width": "60px"
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+			reqd: 1,
+			width: "60px",
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today(),
-			"reqd": 1,
-			"width": "60px"
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.get_today(),
+			reqd: 1,
+			width: "60px",
 		},
 		{
-			"fieldname":"finance_book",
-			"label": __("Finance Book"),
-			"fieldtype": "Link",
-			"options": "Finance Book"
+			fieldname: "finance_book",
+			label: __("Finance Book"),
+			fieldtype: "Link",
+			options: "Finance Book",
 		},
 		{
-			"fieldname":"party",
-			"label": __("Customer"),
-			"fieldtype": "Link",
-			"options": "Customer",
+			fieldname: "party",
+			label: __("Customer"),
+			fieldtype: "Link",
+			options: "Customer",
 			on_change: () => {
-				var party = frappe.query_report.get_filter_value('party');
+				var party = frappe.query_report.get_filter_value("party");
 				if (party) {
-					frappe.db.get_value('Customer', party, ["tax_id", "customer_name"], function(value) {
-						frappe.query_report.set_filter_value('tax_id', value["tax_id"]);
-						frappe.query_report.set_filter_value('customer_name', value["customer_name"]);
+					frappe.db.get_value("Customer", party, ["tax_id", "customer_name"], function (value) {
+						frappe.query_report.set_filter_value("tax_id", value["tax_id"]);
+						frappe.query_report.set_filter_value("customer_name", value["customer_name"]);
 					});
 				} else {
-					frappe.query_report.set_filter_value('tax_id', "");
-					frappe.query_report.set_filter_value('customer_name', "");
+					frappe.query_report.set_filter_value("tax_id", "");
+					frappe.query_report.set_filter_value("customer_name", "");
 				}
-			}
+			},
 		},
 		{
-			"fieldname":"customer_group",
-			"label": __("Customer Group"),
-			"fieldtype": "Link",
-			"options": "Customer Group"
+			fieldname: "customer_group",
+			label: __("Customer Group"),
+			fieldtype: "Link",
+			options: "Customer Group",
 		},
 		{
-			"fieldname":"payment_terms_template",
-			"label": __("Payment Terms Template"),
-			"fieldtype": "Link",
-			"options": "Payment Terms Template"
+			fieldname: "payment_terms_template",
+			label: __("Payment Terms Template"),
+			fieldtype: "Link",
+			options: "Payment Terms Template",
 		},
 		{
-			"fieldname":"territory",
-			"label": __("Territory"),
-			"fieldtype": "Link",
-			"options": "Territory"
+			fieldname: "territory",
+			label: __("Territory"),
+			fieldtype: "Link",
+			options: "Territory",
 		},
 		{
-			"fieldname":"sales_partner",
-			"label": __("Sales Partner"),
-			"fieldtype": "Link",
-			"options": "Sales Partner"
+			fieldname: "sales_partner",
+			label: __("Sales Partner"),
+			fieldtype: "Link",
+			options: "Sales Partner",
 		},
 		{
-			"fieldname":"sales_person",
-			"label": __("Sales Person"),
-			"fieldtype": "Link",
-			"options": "Sales Person"
+			fieldname: "sales_person",
+			label: __("Sales Person"),
+			fieldtype: "Link",
+			options: "Sales Person",
 		},
 		{
-			"fieldname":"tax_id",
-			"label": __("Tax Id"),
-			"fieldtype": "Data",
-			"hidden": 1
+			fieldname: "tax_id",
+			label: __("Tax Id"),
+			fieldtype: "Data",
+			hidden: 1,
 		},
 		{
-			"fieldname":"customer_name",
-			"label": __("Customer Name"),
-			"fieldtype": "Data",
-			"hidden": 1
-		}
-	]
+			fieldname: "customer_name",
+			label: __("Customer Name"),
+			fieldtype: "Data",
+			hidden: 1,
+		},
+	],
 };
diff --git a/erpnext/accounts/report/deferred_revenue_and_expense/deferred_revenue_and_expense.js b/erpnext/accounts/report/deferred_revenue_and_expense/deferred_revenue_and_expense.js
index eec904e..3540200 100644
--- a/erpnext/accounts/report/deferred_revenue_and_expense/deferred_revenue_and_expense.js
+++ b/erpnext/accounts/report/deferred_revenue_and_expense/deferred_revenue_and_expense.js
@@ -1,114 +1,121 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 function get_filters() {
 	let filters = [
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company"),
-			"reqd": 1
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
+			reqd: 1,
 		},
 		{
-			"fieldname":"filter_based_on",
-			"label": __("Filter Based On"),
-			"fieldtype": "Select",
-			"options": ["Fiscal Year", "Date Range"],
-			"default": ["Fiscal Year"],
-			"reqd": 1,
-			on_change: function() {
-				let filter_based_on = frappe.query_report.get_filter_value('filter_based_on');
-				frappe.query_report.toggle_filter_display('from_fiscal_year', filter_based_on === 'Date Range');
-				frappe.query_report.toggle_filter_display('to_fiscal_year', filter_based_on === 'Date Range');
-				frappe.query_report.toggle_filter_display('period_start_date', filter_based_on === 'Fiscal Year');
-				frappe.query_report.toggle_filter_display('period_end_date', filter_based_on === 'Fiscal Year');
+			fieldname: "filter_based_on",
+			label: __("Filter Based On"),
+			fieldtype: "Select",
+			options: ["Fiscal Year", "Date Range"],
+			default: ["Fiscal Year"],
+			reqd: 1,
+			on_change: function () {
+				let filter_based_on = frappe.query_report.get_filter_value("filter_based_on");
+				frappe.query_report.toggle_filter_display(
+					"from_fiscal_year",
+					filter_based_on === "Date Range"
+				);
+				frappe.query_report.toggle_filter_display("to_fiscal_year", filter_based_on === "Date Range");
+				frappe.query_report.toggle_filter_display(
+					"period_start_date",
+					filter_based_on === "Fiscal Year"
+				);
+				frappe.query_report.toggle_filter_display(
+					"period_end_date",
+					filter_based_on === "Fiscal Year"
+				);
 
 				frappe.query_report.refresh();
-			}
+			},
 		},
 		{
-			"fieldname":"period_start_date",
-			"label": __("Start Date"),
-			"fieldtype": "Date",
-			"hidden": 1,
-			"reqd": 1
+			fieldname: "period_start_date",
+			label: __("Start Date"),
+			fieldtype: "Date",
+			hidden: 1,
+			reqd: 1,
 		},
 		{
-			"fieldname":"period_end_date",
-			"label": __("End Date"),
-			"fieldtype": "Date",
-			"hidden": 1,
-			"reqd": 1
+			fieldname: "period_end_date",
+			label: __("End Date"),
+			fieldtype: "Date",
+			hidden: 1,
+			reqd: 1,
 		},
 		{
-			"fieldname":"from_fiscal_year",
-			"label": __("Start Year"),
-			"fieldtype": "Link",
-			"options": "Fiscal Year",
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
-			"reqd": 1
+			fieldname: "from_fiscal_year",
+			label: __("Start Year"),
+			fieldtype: "Link",
+			options: "Fiscal Year",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
+			reqd: 1,
 		},
 		{
-			"fieldname":"to_fiscal_year",
-			"label": __("End Year"),
-			"fieldtype": "Link",
-			"options": "Fiscal Year",
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
-			"reqd": 1
+			fieldname: "to_fiscal_year",
+			label: __("End Year"),
+			fieldtype: "Link",
+			options: "Fiscal Year",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
+			reqd: 1,
 		},
 		{
-			"fieldname": "periodicity",
-			"label": __("Periodicity"),
-			"fieldtype": "Select",
-			"options": [
-				{ "value": "Monthly", "label": __("Monthly") },
-				{ "value": "Quarterly", "label": __("Quarterly") },
-				{ "value": "Half-Yearly", "label": __("Half-Yearly") },
-				{ "value": "Yearly", "label": __("Yearly") }
+			fieldname: "periodicity",
+			label: __("Periodicity"),
+			fieldtype: "Select",
+			options: [
+				{ value: "Monthly", label: __("Monthly") },
+				{ value: "Quarterly", label: __("Quarterly") },
+				{ value: "Half-Yearly", label: __("Half-Yearly") },
+				{ value: "Yearly", label: __("Yearly") },
 			],
-			"default": "Monthly",
-			"reqd": 1
+			default: "Monthly",
+			reqd: 1,
 		},
 		{
-			"fieldname": "type",
-			"label": __("Invoice Type"),
-			"fieldtype": "Select",
-			"options": [
-				{ "value": "Revenue", "label": __("Revenue") },
-				{ "value": "Expense", "label": __("Expense") }
+			fieldname: "type",
+			label: __("Invoice Type"),
+			fieldtype: "Select",
+			options: [
+				{ value: "Revenue", label: __("Revenue") },
+				{ value: "Expense", label: __("Expense") },
 			],
-			"default": "Revenue",
-			"reqd": 1
+			default: "Revenue",
+			reqd: 1,
 		},
 		{
-			"fieldname" : "with_upcoming_postings",
-			"label": __("Show with upcoming revenue/expense"),
-			"fieldtype": "Check",
-			"default": 1
-		}
-	]
+			fieldname: "with_upcoming_postings",
+			label: __("Show with upcoming revenue/expense"),
+			fieldtype: "Check",
+			default: 1,
+		},
+	];
 
 	return filters;
 }
 
 frappe.query_reports["Deferred Revenue and Expense"] = {
-	"filters": get_filters(),
-	"formatter": function(value, row, column, data, default_formatter){
+	filters: get_filters(),
+	formatter: function (value, row, column, data, default_formatter) {
 		return default_formatter(value, row, column, data);
 	},
-	onload: function(report){
+	onload: function (report) {
 		let fiscal_year = erpnext.utils.get_fiscal_year(frappe.datetime.get_today());
 
-		frappe.model.with_doc("Fiscal Year", fiscal_year, function(r) {
+		frappe.model.with_doc("Fiscal Year", fiscal_year, function (r) {
 			var fy = frappe.model.get_doc("Fiscal Year", fiscal_year);
 			frappe.query_report.set_filter_value({
 				period_start_date: fy.year_start_date,
-				period_end_date: fy.year_end_date
+				period_end_date: fy.year_end_date,
 			});
 		});
-	}
+	},
 };
-
diff --git a/erpnext/accounts/report/delivered_items_to_be_billed/delivered_items_to_be_billed.js b/erpnext/accounts/report/delivered_items_to_be_billed/delivered_items_to_be_billed.js
index 1454b2c..f6051d7 100644
--- a/erpnext/accounts/report/delivered_items_to_be_billed/delivered_items_to_be_billed.js
+++ b/erpnext/accounts/report/delivered_items_to_be_billed/delivered_items_to_be_billed.js
@@ -2,7 +2,5 @@
 // For license information, please see license.txt
 
 frappe.query_reports["Delivered Items To Be Billed"] = {
-	"filters": [
-
-	]
-}
+	filters: [],
+};
diff --git a/erpnext/accounts/report/dimension_wise_accounts_balance_report/dimension_wise_accounts_balance_report.js b/erpnext/accounts/report/dimension_wise_accounts_balance_report/dimension_wise_accounts_balance_report.js
index 51fa8c8..20c34e3 100644
--- a/erpnext/accounts/report/dimension_wise_accounts_balance_report/dimension_wise_accounts_balance_report.js
+++ b/erpnext/accounts/report/dimension_wise_accounts_balance_report/dimension_wise_accounts_balance_report.js
@@ -1,82 +1,79 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Dimension-wise Accounts Balance Report"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname": "company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company"),
-			"reqd": 1
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
+			reqd: 1,
 		},
 		{
-			"fieldname": "fiscal_year",
-			"label": __("Fiscal Year"),
-			"fieldtype": "Link",
-			"options": "Fiscal Year",
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
-			"reqd": 1,
-			"on_change": function(query_report) {
+			fieldname: "fiscal_year",
+			label: __("Fiscal Year"),
+			fieldtype: "Link",
+			options: "Fiscal Year",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
+			reqd: 1,
+			on_change: function (query_report) {
 				var fiscal_year = query_report.get_values().fiscal_year;
 				if (!fiscal_year) {
 					return;
 				}
-				frappe.model.with_doc("Fiscal Year", fiscal_year, function(r) {
+				frappe.model.with_doc("Fiscal Year", fiscal_year, function (r) {
 					var fy = frappe.model.get_doc("Fiscal Year", fiscal_year);
 					frappe.query_report.set_filter_value({
 						from_date: fy.year_start_date,
-						to_date: fy.year_end_date
+						to_date: fy.year_end_date,
 					});
 				});
-			}
+			},
 		},
 		{
-			"fieldname": "from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
-			"reqd": 1
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
+			reqd: 1,
 		},
 		{
-			"fieldname": "to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
-			"reqd": 1
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
+			reqd: 1,
 		},
 		{
-			"fieldname": "finance_book",
-			"label": __("Finance Book"),
-			"fieldtype": "Link",
-			"options": "Finance Book",
+			fieldname: "finance_book",
+			label: __("Finance Book"),
+			fieldtype: "Link",
+			options: "Finance Book",
 		},
 		{
-			"fieldname": "dimension",
-			"label": __("Select Dimension"),
-			"fieldtype": "Select",
-			"default": "Cost Center",
-			"options": get_accounting_dimension_options(),
-			"reqd": 1,
+			fieldname: "dimension",
+			label: __("Select Dimension"),
+			fieldtype: "Select",
+			default: "Cost Center",
+			options: get_accounting_dimension_options(),
+			reqd: 1,
 		},
 	],
-	"formatter": erpnext.financial_statements.formatter,
-	"tree": true,
-	"name_field": "account",
-	"parent_field": "parent_account",
-	"initial_depth": 3
-}
-
+	formatter: erpnext.financial_statements.formatter,
+	tree: true,
+	name_field: "account",
+	parent_field: "parent_account",
+	initial_depth: 3,
+};
 
 function get_accounting_dimension_options() {
-	let options =["Cost Center", "Project"];
-	frappe.db.get_list('Accounting Dimension',
-			   {fields:['document_type']}).then((res) => {
-				   res.forEach((dimension) => {
-					   options.push(dimension.document_type);
-				   });
-			   });
-	return options
+	let options = ["Cost Center", "Project"];
+	frappe.db.get_list("Accounting Dimension", { fields: ["document_type"] }).then((res) => {
+		res.forEach((dimension) => {
+			options.push(dimension.document_type);
+		});
+	});
+	return options;
 }
diff --git a/erpnext/accounts/report/financial_ratios/financial_ratios.js b/erpnext/accounts/report/financial_ratios/financial_ratios.js
index 643423d..c0ae31d 100644
--- a/erpnext/accounts/report/financial_ratios/financial_ratios.js
+++ b/erpnext/accounts/report/financial_ratios/financial_ratios.js
@@ -51,9 +51,8 @@
 			hidden: 1,
 		},
 	],
-	"formatter": function(value, row, column, data, default_formatter) {
-
-		let heading_ratios = ["Liquidity Ratios", "Solvency Ratios","Turnover Ratios"]
+	formatter: function (value, row, column, data, default_formatter) {
+		let heading_ratios = ["Liquidity Ratios", "Solvency Ratios", "Turnover Ratios"];
 
 		if (heading_ratios.includes(value)) {
 			value = $(`<span>${value}</span>`);
diff --git a/erpnext/accounts/report/general_and_payment_ledger_comparison/general_and_payment_ledger_comparison.js b/erpnext/accounts/report/general_and_payment_ledger_comparison/general_and_payment_ledger_comparison.js
index 7e6b053..4eadf34 100644
--- a/erpnext/accounts/report/general_and_payment_ledger_comparison/general_and_payment_ledger_comparison.js
+++ b/erpnext/accounts/report/general_and_payment_ledger_comparison/general_and_payment_ledger_comparison.js
@@ -4,49 +4,49 @@
 function get_filters() {
 	let filters = [
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company"),
-			"reqd": 1
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
+			reqd: 1,
 		},
 		{
-			"fieldname":"period_start_date",
-			"label": __("Start Date"),
-			"fieldtype": "Date",
-			"reqd": 1,
-			"default": frappe.datetime.add_months(frappe.datetime.get_today(), -1)
+			fieldname: "period_start_date",
+			label: __("Start Date"),
+			fieldtype: "Date",
+			reqd: 1,
+			default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
 		},
 		{
-			"fieldname":"period_end_date",
-			"label": __("End Date"),
-			"fieldtype": "Date",
-			"reqd": 1,
-			"default": frappe.datetime.get_today()
+			fieldname: "period_end_date",
+			label: __("End Date"),
+			fieldtype: "Date",
+			reqd: 1,
+			default: frappe.datetime.get_today(),
 		},
 		{
-			"fieldname":"account",
-			"label": __("Account"),
-			"fieldtype": "MultiSelectList",
-			"options": "Account",
-			get_data: function(txt) {
-				return frappe.db.get_link_options('Account', txt, {
+			fieldname: "account",
+			label: __("Account"),
+			fieldtype: "MultiSelectList",
+			options: "Account",
+			get_data: function (txt) {
+				return frappe.db.get_link_options("Account", txt, {
 					company: frappe.query_report.get_filter_value("company"),
-					account_type: ['in', ["Receivable", "Payable"]]
+					account_type: ["in", ["Receivable", "Payable"]],
 				});
-			}
+			},
 		},
 		{
-			"fieldname":"voucher_no",
-			"label": __("Voucher No"),
-			"fieldtype": "Data",
-			"width": 100,
+			fieldname: "voucher_no",
+			label: __("Voucher No"),
+			fieldtype: "Data",
+			width: 100,
 		},
-	]
+	];
 	return filters;
 }
 
 frappe.query_reports["General and Payment Ledger Comparison"] = {
-	"filters": get_filters()
+	filters: get_filters(),
 };
diff --git a/erpnext/accounts/report/general_ledger/general_ledger.js b/erpnext/accounts/report/general_ledger/general_ledger.js
index b7b9d34..1894e95 100644
--- a/erpnext/accounts/report/general_ledger/general_ledger.js
+++ b/erpnext/accounts/report/general_ledger/general_ledger.js
@@ -2,119 +2,119 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.query_reports["General Ledger"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company"),
-			"reqd": 1
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
+			reqd: 1,
 		},
 		{
-			"fieldname":"finance_book",
-			"label": __("Finance Book"),
-			"fieldtype": "Link",
-			"options": "Finance Book"
+			fieldname: "finance_book",
+			label: __("Finance Book"),
+			fieldtype: "Link",
+			options: "Finance Book",
 		},
 		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
-			"reqd": 1,
-			"width": "60px"
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+			reqd: 1,
+			width: "60px",
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today(),
-			"reqd": 1,
-			"width": "60px"
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.get_today(),
+			reqd: 1,
+			width: "60px",
 		},
 		{
-			"fieldname":"account",
-			"label": __("Account"),
-			"fieldtype": "MultiSelectList",
-			"options": "Account",
-			get_data: function(txt) {
-				return frappe.db.get_link_options('Account', txt, {
-					company: frappe.query_report.get_filter_value("company")
+			fieldname: "account",
+			label: __("Account"),
+			fieldtype: "MultiSelectList",
+			options: "Account",
+			get_data: function (txt) {
+				return frappe.db.get_link_options("Account", txt, {
+					company: frappe.query_report.get_filter_value("company"),
 				});
-			}
+			},
 		},
 		{
-			"fieldname":"voucher_no",
-			"label": __("Voucher No"),
-			"fieldtype": "Data",
-			on_change: function() {
-				frappe.query_report.set_filter_value('group_by', "Group by Voucher (Consolidated)");
-			}
+			fieldname: "voucher_no",
+			label: __("Voucher No"),
+			fieldtype: "Data",
+			on_change: function () {
+				frappe.query_report.set_filter_value("group_by", "Group by Voucher (Consolidated)");
+			},
 		},
 		{
-			"fieldname":"against_voucher_no",
-			"label": __("Against Voucher No"),
-			"fieldtype": "Data",
+			fieldname: "against_voucher_no",
+			label: __("Against Voucher No"),
+			fieldtype: "Data",
 		},
 		{
-			"fieldtype": "Break",
+			fieldtype: "Break",
 		},
 		{
-			"fieldname":"party_type",
-			"label": __("Party Type"),
-			"fieldtype": "Autocomplete",
+			fieldname: "party_type",
+			label: __("Party Type"),
+			fieldtype: "Autocomplete",
 			options: Object.keys(frappe.boot.party_account_types),
-			on_change: function() {
-				frappe.query_report.set_filter_value('party', "");
-			}
+			on_change: function () {
+				frappe.query_report.set_filter_value("party", "");
+			},
 		},
 		{
-			"fieldname":"party",
-			"label": __("Party"),
-			"fieldtype": "MultiSelectList",
-			get_data: function(txt) {
+			fieldname: "party",
+			label: __("Party"),
+			fieldtype: "MultiSelectList",
+			get_data: function (txt) {
 				if (!frappe.query_report.filters) return;
 
-				let party_type = frappe.query_report.get_filter_value('party_type');
+				let party_type = frappe.query_report.get_filter_value("party_type");
 				if (!party_type) return;
 
 				return frappe.db.get_link_options(party_type, txt);
 			},
-			on_change: function() {
-				var party_type = frappe.query_report.get_filter_value('party_type');
-				var parties = frappe.query_report.get_filter_value('party');
+			on_change: function () {
+				var party_type = frappe.query_report.get_filter_value("party_type");
+				var parties = frappe.query_report.get_filter_value("party");
 
-				if(!party_type || parties.length === 0 || parties.length > 1) {
-					frappe.query_report.set_filter_value('party_name', "");
-					frappe.query_report.set_filter_value('tax_id', "");
+				if (!party_type || parties.length === 0 || parties.length > 1) {
+					frappe.query_report.set_filter_value("party_name", "");
+					frappe.query_report.set_filter_value("tax_id", "");
 					return;
 				} else {
 					var party = parties[0];
 					var fieldname = erpnext.utils.get_party_name(party_type) || "name";
-					frappe.db.get_value(party_type, party, fieldname, function(value) {
-						frappe.query_report.set_filter_value('party_name', value[fieldname]);
+					frappe.db.get_value(party_type, party, fieldname, function (value) {
+						frappe.query_report.set_filter_value("party_name", value[fieldname]);
 					});
 
 					if (party_type === "Customer" || party_type === "Supplier") {
-						frappe.db.get_value(party_type, party, "tax_id", function(value) {
-							frappe.query_report.set_filter_value('tax_id', value["tax_id"]);
+						frappe.db.get_value(party_type, party, "tax_id", function (value) {
+							frappe.query_report.set_filter_value("tax_id", value["tax_id"]);
 						});
 					}
 				}
-			}
+			},
 		},
 		{
-			"fieldname":"party_name",
-			"label": __("Party Name"),
-			"fieldtype": "Data",
-			"hidden": 1
+			fieldname: "party_name",
+			label: __("Party Name"),
+			fieldtype: "Data",
+			hidden: 1,
 		},
 		{
-			"fieldname":"group_by",
-			"label": __("Group by"),
-			"fieldtype": "Select",
-			"options": [
+			fieldname: "group_by",
+			label: __("Group by"),
+			fieldtype: "Select",
+			options: [
 				"",
 				{
 					label: __("Group by Voucher"),
@@ -133,85 +133,83 @@
 					value: "Group by Party",
 				},
 			],
-			"default": "Group by Voucher (Consolidated)"
+			default: "Group by Voucher (Consolidated)",
 		},
 		{
-			"fieldname":"tax_id",
-			"label": __("Tax Id"),
-			"fieldtype": "Data",
-			"hidden": 1
+			fieldname: "tax_id",
+			label: __("Tax Id"),
+			fieldtype: "Data",
+			hidden: 1,
 		},
 		{
-			"fieldname": "presentation_currency",
-			"label": __("Currency"),
-			"fieldtype": "Select",
-			"options": erpnext.get_presentation_currency_list()
+			fieldname: "presentation_currency",
+			label: __("Currency"),
+			fieldtype: "Select",
+			options: erpnext.get_presentation_currency_list(),
 		},
 		{
-			"fieldname":"cost_center",
-			"label": __("Cost Center"),
-			"fieldtype": "MultiSelectList",
-			get_data: function(txt) {
-				return frappe.db.get_link_options('Cost Center', txt, {
-					company: frappe.query_report.get_filter_value("company")
+			fieldname: "cost_center",
+			label: __("Cost Center"),
+			fieldtype: "MultiSelectList",
+			get_data: function (txt) {
+				return frappe.db.get_link_options("Cost Center", txt, {
+					company: frappe.query_report.get_filter_value("company"),
 				});
-			}
+			},
 		},
 		{
-			"fieldname":"project",
-			"label": __("Project"),
-			"fieldtype": "MultiSelectList",
-			get_data: function(txt) {
-				return frappe.db.get_link_options('Project', txt, {
-					company: frappe.query_report.get_filter_value("company")
+			fieldname: "project",
+			label: __("Project"),
+			fieldtype: "MultiSelectList",
+			get_data: function (txt) {
+				return frappe.db.get_link_options("Project", txt, {
+					company: frappe.query_report.get_filter_value("company"),
 				});
-			}
+			},
 		},
 		{
-			"fieldname": "include_dimensions",
-			"label": __("Consider Accounting Dimensions"),
-			"fieldtype": "Check",
-			"default": 1
+			fieldname: "include_dimensions",
+			label: __("Consider Accounting Dimensions"),
+			fieldtype: "Check",
+			default: 1,
 		},
 		{
-			"fieldname": "show_opening_entries",
-			"label": __("Show Opening Entries"),
-			"fieldtype": "Check"
+			fieldname: "show_opening_entries",
+			label: __("Show Opening Entries"),
+			fieldtype: "Check",
 		},
 		{
-			"fieldname": "include_default_book_entries",
-			"label": __("Include Default FB Entries"),
-			"fieldtype": "Check",
-			"default": 1
+			fieldname: "include_default_book_entries",
+			label: __("Include Default FB Entries"),
+			fieldtype: "Check",
+			default: 1,
 		},
 		{
-			"fieldname": "show_cancelled_entries",
-			"label": __("Show Cancelled Entries"),
-			"fieldtype": "Check"
+			fieldname: "show_cancelled_entries",
+			label: __("Show Cancelled Entries"),
+			fieldtype: "Check",
 		},
 		{
-			"fieldname": "show_net_values_in_party_account",
-			"label": __("Show Net Values in Party Account"),
-			"fieldtype": "Check"
+			fieldname: "show_net_values_in_party_account",
+			label: __("Show Net Values in Party Account"),
+			fieldtype: "Check",
 		},
 		{
-			"fieldname": "add_values_in_transaction_currency",
-			"label": __("Add Columns in Transaction Currency"),
-			"fieldtype": "Check"
+			fieldname: "add_values_in_transaction_currency",
+			label: __("Add Columns in Transaction Currency"),
+			fieldtype: "Check",
 		},
 		{
-			"fieldname": "show_remarks",
-			"label": __("Show Remarks"),
-			"fieldtype": "Check"
+			fieldname: "show_remarks",
+			label: __("Show Remarks"),
+			fieldtype: "Check",
 		},
 		{
-			"fieldname": "ignore_err",
-			"label": __("Ignore Exchange Rate Revaluation Journals"),
-			"fieldtype": "Check"
-		}
+			fieldname: "ignore_err",
+			label: __("Ignore Exchange Rate Revaluation Journals"),
+			fieldtype: "Check",
+		},
+	],
+};
 
-
-	]
-}
-
-erpnext.utils.add_dimensions('General Ledger', 15)
+erpnext.utils.add_dimensions("General Ledger", 15);
diff --git a/erpnext/accounts/report/gross_and_net_profit_report/gross_and_net_profit_report.js b/erpnext/accounts/report/gross_and_net_profit_report/gross_and_net_profit_report.js
index 40d4259..2448eef 100644
--- a/erpnext/accounts/report/gross_and_net_profit_report/gross_and_net_profit_report.js
+++ b/erpnext/accounts/report/gross_and_net_profit_report/gross_and_net_profit_report.js
@@ -1,16 +1,10 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
+frappe.query_reports["Gross and Net Profit Report"] = $.extend({}, erpnext.financial_statements);
 
-frappe.query_reports["Gross and Net Profit Report"] = $.extend(
-	{},
-	erpnext.financial_statements
-);
-
-frappe.query_reports["Gross and Net Profit Report"]["filters"].push(
-	{
-		"fieldname": "accumulated_values",
-		"label": __("Accumulated Values"),
-		"fieldtype": "Check"
-	}
-);
+frappe.query_reports["Gross and Net Profit Report"]["filters"].push({
+	fieldname: "accumulated_values",
+	label: __("Accumulated Values"),
+	fieldtype: "Check",
+});
diff --git a/erpnext/accounts/report/gross_profit/gross_profit.js b/erpnext/accounts/report/gross_profit/gross_profit.js
index 7520548..fad6586 100644
--- a/erpnext/accounts/report/gross_profit/gross_profit.js
+++ b/erpnext/accounts/report/gross_profit/gross_profit.js
@@ -2,74 +2,73 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.query_reports["Gross Profit"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname": "company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company"),
-			"reqd": 1
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
+			reqd: 1,
 		},
 		{
-			"fieldname": "from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
-			"reqd": 1
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
+			reqd: 1,
 		},
 		{
-			"fieldname": "to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
-			"reqd": 1
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
+			reqd: 1,
 		},
 		{
-			"fieldname": "sales_invoice",
-			"label": __("Sales Invoice"),
-			"fieldtype": "Link",
-			"options": "Sales Invoice"
+			fieldname: "sales_invoice",
+			label: __("Sales Invoice"),
+			fieldtype: "Link",
+			options: "Sales Invoice",
 		},
 		{
-			"fieldname": "group_by",
-			"label": __("Group By"),
-			"fieldtype": "Select",
-			"options": "Invoice\nItem Code\nItem Group\nBrand\nWarehouse\nCustomer\nCustomer Group\nTerritory\nSales Person\nProject\nMonthly\nPayment Term",
-			"default": "Invoice"
+			fieldname: "group_by",
+			label: __("Group By"),
+			fieldtype: "Select",
+			options:
+				"Invoice\nItem Code\nItem Group\nBrand\nWarehouse\nCustomer\nCustomer Group\nTerritory\nSales Person\nProject\nMonthly\nPayment Term",
+			default: "Invoice",
 		},
 		{
-			"fieldname": "item_group",
-			"label": __("Item Group"),
-			"fieldtype": "Link",
-			"options": "Item Group"
+			fieldname: "item_group",
+			label: __("Item Group"),
+			fieldtype: "Link",
+			options: "Item Group",
 		},
 		{
-			"fieldname": "sales_person",
-			"label": __("Sales Person"),
-			"fieldtype": "Link",
-			"options": "Sales Person"
+			fieldname: "sales_person",
+			label: __("Sales Person"),
+			fieldtype: "Link",
+			options: "Sales Person",
 		},
 		{
-			"fieldname": "warehouse",
-			"label": __("Warehouse"),
-			"fieldtype": "Link",
-			"options": "Warehouse",
-			"get_query": function () {
-				var company = frappe.query_report.get_filter_value('company');
+			fieldname: "warehouse",
+			label: __("Warehouse"),
+			fieldtype: "Link",
+			options: "Warehouse",
+			get_query: function () {
+				var company = frappe.query_report.get_filter_value("company");
 				return {
-					filters: [
-						["Warehouse", "company", "=", company]
-					]
+					filters: [["Warehouse", "company", "=", company]],
 				};
 			},
 		},
 	],
-	"tree": true,
-	"name_field": "parent",
-	"parent_field": "parent_invoice",
-	"initial_depth": 3,
-	"formatter": function(value, row, column, data, default_formatter) {
+	tree: true,
+	name_field: "parent",
+	parent_field: "parent_invoice",
+	initial_depth: 3,
+	formatter: function (value, row, column, data, default_formatter) {
 		if (column.fieldname == "sales_invoice" && column.options == "Item" && data && data.indent == 0) {
 			column._options = "Sales Invoice";
 		} else {
@@ -85,4 +84,4 @@
 
 		return value;
 	},
-}
+};
diff --git a/erpnext/accounts/report/inactive_sales_items/inactive_sales_items.js b/erpnext/accounts/report/inactive_sales_items/inactive_sales_items.js
index bd9b543..b420d99 100644
--- a/erpnext/accounts/report/inactive_sales_items/inactive_sales_items.js
+++ b/erpnext/accounts/report/inactive_sales_items/inactive_sales_items.js
@@ -1,9 +1,8 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Inactive Sales Items"] = {
-	"filters": [
+	filters: [
 		{
 			fieldname: "territory",
 			label: __("Territory"),
@@ -15,27 +14,27 @@
 			fieldname: "item",
 			label: __("Item"),
 			fieldtype: "Link",
-			options: "Item"
+			options: "Item",
 		},
 		{
 			fieldname: "item_group",
 			label: __("Item Group"),
 			fieldtype: "Link",
-			options: "Item Group"
+			options: "Item Group",
 		},
 		{
 			fieldname: "based_on",
 			label: __("Based On"),
 			fieldtype: "Select",
 			options: "Sales Order\nSales Invoice",
-			default: "Sales Order"
+			default: "Sales Order",
 		},
 		{
 			fieldname: "days",
 			label: __("Days Since Last order"),
 			fieldtype: "Select",
 			options: [30, 60, 90],
-			default: 30
+			default: 30,
 		},
-	]
+	],
 };
diff --git a/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.js b/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.js
index 423cd6a..e05591e 100644
--- a/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.js
+++ b/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.js
@@ -2,65 +2,64 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.query_reports["Item-wise Purchase Register"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
-			"reqd": 1,
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+			reqd: 1,
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today(),
-			"reqd": 1,
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.get_today(),
+			reqd: 1,
 		},
 		{
-			"fieldname": "item_code",
-			"label": __("Item"),
-			"fieldtype": "Link",
-			"options": "Item",
+			fieldname: "item_code",
+			label: __("Item"),
+			fieldtype: "Link",
+			options: "Item",
 		},
 		{
-			"fieldname": "item_group",
-			"label": __("Item Group"),
-			"fieldtype": "Link",
-			"options": "Item Group",
+			fieldname: "item_group",
+			label: __("Item Group"),
+			fieldtype: "Link",
+			options: "Item Group",
 		},
 		{
-			"fieldname":"supplier",
-			"label": __("Supplier"),
-			"fieldtype": "Link",
-			"options": "Supplier"
+			fieldname: "supplier",
+			label: __("Supplier"),
+			fieldtype: "Link",
+			options: "Supplier",
 		},
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company")
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
-			"fieldname":"mode_of_payment",
-			"label": __("Mode of Payment"),
-			"fieldtype": "Link",
-			"options": "Mode of Payment"
+			fieldname: "mode_of_payment",
+			label: __("Mode of Payment"),
+			fieldtype: "Link",
+			options: "Mode of Payment",
 		},
 		{
-			"label": __("Group By"),
-			"fieldname": "group_by",
-			"fieldtype": "Select",
-			"options": ["Supplier", "Item Group", "Item", "Invoice"]
-		}
+			label: __("Group By"),
+			fieldname: "group_by",
+			fieldtype: "Select",
+			options: ["Supplier", "Item Group", "Item", "Invoice"],
+		},
 	],
-	"formatter": function(value, row, column, data, default_formatter) {
+	formatter: function (value, row, column, data, default_formatter) {
 		value = default_formatter(value, row, column, data);
 		if (data && data.bold) {
 			value = value.bold();
-
 		}
 		return value;
-	}
-}
+	},
+};
diff --git a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.js b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.js
index 06f426b..193e175 100644
--- a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.js
+++ b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.js
@@ -2,85 +2,84 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.query_reports["Item-wise Sales Register"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
-			"reqd": 1,
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+			reqd: 1,
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today(),
-			"reqd": 1,
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.get_today(),
+			reqd: 1,
 		},
 		{
-			"fieldname": "customer",
-			"label": __("Customer"),
-			"fieldtype": "Link",
-			"options": "Customer"
+			fieldname: "customer",
+			label: __("Customer"),
+			fieldtype: "Link",
+			options: "Customer",
 		},
 		{
-			"fieldname": "company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company")
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
-			"fieldname": "mode_of_payment",
-			"label": __("Mode of Payment"),
-			"fieldtype": "Link",
-			"options": "Mode of Payment"
+			fieldname: "mode_of_payment",
+			label: __("Mode of Payment"),
+			fieldtype: "Link",
+			options: "Mode of Payment",
 		},
 		{
-			"fieldname": "warehouse",
-			"label": __("Warehouse"),
-			"fieldtype": "Link",
-			"options": "Warehouse"
+			fieldname: "warehouse",
+			label: __("Warehouse"),
+			fieldtype: "Link",
+			options: "Warehouse",
 		},
 		{
-			"fieldname": "brand",
-			"label": __("Brand"),
-			"fieldtype": "Link",
-			"options": "Brand"
+			fieldname: "brand",
+			label: __("Brand"),
+			fieldtype: "Link",
+			options: "Brand",
 		},
 		{
-			"fieldname": "item_group",
-			"label": __("Item Group"),
-			"fieldtype": "Link",
-			"options": "Item Group"
+			fieldname: "item_group",
+			label: __("Item Group"),
+			fieldtype: "Link",
+			options: "Item Group",
 		},
 		{
-			"label": __("Group By"),
-			"fieldname": "group_by",
-			"fieldtype": "Select",
-			"options": ["Customer Group", "Customer", "Item Group", "Item", "Territory", "Invoice"]
+			label: __("Group By"),
+			fieldname: "group_by",
+			fieldtype: "Select",
+			options: ["Customer Group", "Customer", "Item Group", "Item", "Territory", "Invoice"],
 		},
 		{
-			"fieldname": "income_account",
-			"label": __("Income Account"),
-			"fieldtype": "Link",
-			"options": "Account",
+			fieldname: "income_account",
+			label: __("Income Account"),
+			fieldtype: "Link",
+			options: "Account",
 			get_query: () => {
-				let company = frappe.query_report.get_filter_value('company');
+				let company = frappe.query_report.get_filter_value("company");
 				return {
 					filters: {
-						'company': company,
-					}
+						company: company,
+					},
 				};
-			}
+			},
 		},
 	],
-	"formatter": function(value, row, column, data, default_formatter) {
+	formatter: function (value, row, column, data, default_formatter) {
 		value = default_formatter(value, row, column, data);
 		if (data && data.bold) {
 			value = value.bold();
-
 		}
 		return value;
-	}
-}
+	},
+};
diff --git a/erpnext/accounts/report/payment_ledger/payment_ledger.js b/erpnext/accounts/report/payment_ledger/payment_ledger.js
index 65380cc..8d1f227 100644
--- a/erpnext/accounts/report/payment_ledger/payment_ledger.js
+++ b/erpnext/accounts/report/payment_ledger/payment_ledger.js
@@ -1,96 +1,92 @@
 // Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 function get_filters() {
 	let filters = [
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company"),
-			"reqd": 1
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
+			reqd: 1,
 		},
 		{
-			"fieldname":"period_start_date",
-			"label": __("Start Date"),
-			"fieldtype": "Date",
-			"reqd": 1,
-			"default": frappe.datetime.add_months(frappe.datetime.get_today(), -1)
+			fieldname: "period_start_date",
+			label: __("Start Date"),
+			fieldtype: "Date",
+			reqd: 1,
+			default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
 		},
 		{
-			"fieldname":"period_end_date",
-			"label": __("End Date"),
-			"fieldtype": "Date",
-			"reqd": 1,
-			"default": frappe.datetime.get_today()
+			fieldname: "period_end_date",
+			label: __("End Date"),
+			fieldtype: "Date",
+			reqd: 1,
+			default: frappe.datetime.get_today(),
 		},
 		{
-			"fieldname":"account",
-			"label": __("Account"),
-			"fieldtype": "MultiSelectList",
-			"options": "Account",
-			get_data: function(txt) {
-				return frappe.db.get_link_options('Account', txt, {
-					company: frappe.query_report.get_filter_value("company")
+			fieldname: "account",
+			label: __("Account"),
+			fieldtype: "MultiSelectList",
+			options: "Account",
+			get_data: function (txt) {
+				return frappe.db.get_link_options("Account", txt, {
+					company: frappe.query_report.get_filter_value("company"),
 				});
-			}
+			},
 		},
 		{
-			"fieldname":"party_type",
-			"label": __("Party Type"),
-			"fieldtype": "Link",
-			"options": "Party Type",
-			"default": "",
-			on_change: function() {
-				frappe.query_report.set_filter_value('party', "");
-			}
+			fieldname: "party_type",
+			label: __("Party Type"),
+			fieldtype: "Link",
+			options: "Party Type",
+			default: "",
+			on_change: function () {
+				frappe.query_report.set_filter_value("party", "");
+			},
 		},
 		{
-			"fieldname":"party",
-			"label": __("Party"),
-			"fieldtype": "MultiSelectList",
-			get_data: function(txt) {
+			fieldname: "party",
+			label: __("Party"),
+			fieldtype: "MultiSelectList",
+			get_data: function (txt) {
 				if (!frappe.query_report.filters) return;
 
-				let party_type = frappe.query_report.get_filter_value('party_type');
+				let party_type = frappe.query_report.get_filter_value("party_type");
 				if (!party_type) return;
 
 				return frappe.db.get_link_options(party_type, txt);
 			},
 		},
 		{
-			"fieldname":"voucher_no",
-			"label": __("Voucher No"),
-			"fieldtype": "Data",
-			"width": 100,
+			fieldname: "voucher_no",
+			label: __("Voucher No"),
+			fieldtype: "Data",
+			width: 100,
 		},
 		{
-			"fieldname":"against_voucher_no",
-			"label": __("Against Voucher No"),
-			"fieldtype": "Data",
-			"width": 100,
+			fieldname: "against_voucher_no",
+			label: __("Against Voucher No"),
+			fieldtype: "Data",
+			width: 100,
 		},
 		{
-			"fieldname":"include_account_currency",
-			"label": __("Include Account Currency"),
-			"fieldtype": "Check",
-			"width": 100,
+			fieldname: "include_account_currency",
+			label: __("Include Account Currency"),
+			fieldtype: "Check",
+			width: 100,
 		},
 		{
-			"fieldname":"group_party",
-			"label": __("Group by Party"),
-			"fieldtype": "Check",
-			"width": 100,
+			fieldname: "group_party",
+			label: __("Group by Party"),
+			fieldtype: "Check",
+			width: 100,
 		},
-
-
-
-	]
+	];
 	return filters;
 }
 
 frappe.query_reports["Payment Ledger"] = {
-	"filters": get_filters()
+	filters: get_filters(),
 };
diff --git a/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.js b/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.js
index 5ec2c98..528246c 100644
--- a/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.js
+++ b/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.js
@@ -2,14 +2,14 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.query_reports["Payment Period Based On Invoice Date"] = {
-	"filters": [
+	filters: [
 		{
-			fieldname:"company",
+			fieldname: "company",
 			label: __("Company"),
 			fieldtype: "Link",
 			options: "Company",
 			reqd: 1,
-			default: frappe.defaults.get_user_default("Company")
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
 			fieldname: "from_date",
@@ -18,41 +18,41 @@
 			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
 		},
 		{
-			fieldname:"to_date",
+			fieldname: "to_date",
 			label: __("To Date"),
 			fieldtype: "Date",
-			default: frappe.datetime.get_today()
+			default: frappe.datetime.get_today(),
 		},
 		{
-			fieldname:"payment_type",
+			fieldname: "payment_type",
 			label: __("Payment Type"),
 			fieldtype: "Select",
 			options: __("Incoming") + "\n" + __("Outgoing"),
-			default: __("Incoming")
+			default: __("Incoming"),
 		},
 		{
-			"fieldname":"party_type",
-			"label": __("Party Type"),
-			"fieldtype": "Link",
-			"options": "DocType",
-			"get_query": function() {
+			fieldname: "party_type",
+			label: __("Party Type"),
+			fieldtype: "Link",
+			options: "DocType",
+			get_query: function () {
 				return {
-					filters: {"name": ["in", ["Customer", "Supplier"]]}
-				}
-			}
+					filters: { name: ["in", ["Customer", "Supplier"]] },
+				};
+			},
 		},
 		{
-			"fieldname":"party",
-			"label": __("Party"),
-			"fieldtype": "Dynamic Link",
-			"get_options": function() {
-				var party_type = frappe.query_report.get_filter_value('party_type');
-				var party = frappe.query_report.get_filter_value('party');
-				if(party && !party_type) {
+			fieldname: "party",
+			label: __("Party"),
+			fieldtype: "Dynamic Link",
+			get_options: function () {
+				var party_type = frappe.query_report.get_filter_value("party_type");
+				var party = frappe.query_report.get_filter_value("party");
+				if (party && !party_type) {
 					frappe.throw(__("Please select Party Type first"));
 				}
 				return party_type;
-			}
+			},
 		},
-	]
-}
+	],
+};
diff --git a/erpnext/accounts/report/pos_register/pos_register.js b/erpnext/accounts/report/pos_register/pos_register.js
index 6e5491a..5d39796 100644
--- a/erpnext/accounts/report/pos_register/pos_register.js
+++ b/erpnext/accounts/report/pos_register/pos_register.js
@@ -1,76 +1,74 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["POS Register"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company"),
-			"reqd": 1
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
+			reqd: 1,
 		},
 		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
-			"reqd": 1,
-			"width": "60px"
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+			reqd: 1,
+			width: "60px",
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today(),
-			"reqd": 1,
-			"width": "60px"
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.get_today(),
+			reqd: 1,
+			width: "60px",
 		},
 		{
-			"fieldname":"pos_profile",
-			"label": __("POS Profile"),
-			"fieldtype": "Link",
-			"options": "POS Profile"
+			fieldname: "pos_profile",
+			label: __("POS Profile"),
+			fieldtype: "Link",
+			options: "POS Profile",
 		},
 		{
-			"fieldname":"cashier",
-			"label": __("Cashier"),
-			"fieldtype": "Link",
-			"options": "User"
+			fieldname: "cashier",
+			label: __("Cashier"),
+			fieldtype: "Link",
+			options: "User",
 		},
 		{
-			"fieldname":"customer",
-			"label": __("Customer"),
-			"fieldtype": "Link",
-			"options": "Customer"
+			fieldname: "customer",
+			label: __("Customer"),
+			fieldtype: "Link",
+			options: "Customer",
 		},
 		{
-			"fieldname":"mode_of_payment",
-			"label": __("Payment Method"),
-			"fieldtype": "Link",
-			"options": "Mode of Payment"
+			fieldname: "mode_of_payment",
+			label: __("Payment Method"),
+			fieldtype: "Link",
+			options: "Mode of Payment",
 		},
 		{
-			"fieldname":"group_by",
-			"label": __("Group by"),
-			"fieldtype": "Select",
-			"options": ["", "POS Profile", "Cashier", "Payment Method", "Customer"],
-			"default": "POS Profile"
+			fieldname: "group_by",
+			label: __("Group by"),
+			fieldtype: "Select",
+			options: ["", "POS Profile", "Cashier", "Payment Method", "Customer"],
+			default: "POS Profile",
 		},
 		{
-			"fieldname":"is_return",
-			"label": __("Is Return"),
-			"fieldtype": "Check"
+			fieldname: "is_return",
+			label: __("Is Return"),
+			fieldtype: "Check",
 		},
 	],
-	"formatter": function(value, row, column, data, default_formatter) {
+	formatter: function (value, row, column, data, default_formatter) {
 		value = default_formatter(value, row, column, data);
 		if (data && data.bold) {
 			value = value.bold();
-
 		}
 		return value;
-	}
+	},
 };
diff --git a/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.js b/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.js
index a2f0fde..2ffd3b3 100644
--- a/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.js
+++ b/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.js
@@ -1,27 +1,22 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.query_reports["Profit and Loss Statement"] = $.extend(
-	{},
-	erpnext.financial_statements
-);
+frappe.query_reports["Profit and Loss Statement"] = $.extend({}, erpnext.financial_statements);
 
 erpnext.utils.add_dimensions("Profit and Loss Statement", 10);
 
-frappe.query_reports["Profit and Loss Statement"]["filters"].push(
-	{
-		"fieldname": "selected_view",
-		"label": __("Select View"),
-		"fieldtype": "Select",
-		"options": [
-			{ "value": "Report", "label": __("Report View") },
-			{ "value": "Growth", "label": __("Growth View") },
-			{ "value": "Margin", "label": __("Margin View") },
-		],
-		"default": "Report",
-		"reqd": 1
-	},
-);
+frappe.query_reports["Profit and Loss Statement"]["filters"].push({
+	fieldname: "selected_view",
+	label: __("Select View"),
+	fieldtype: "Select",
+	options: [
+		{ value: "Report", label: __("Report View") },
+		{ value: "Growth", label: __("Growth View") },
+		{ value: "Margin", label: __("Margin View") },
+	],
+	default: "Report",
+	reqd: 1,
+});
 
 frappe.query_reports["Profit and Loss Statement"]["filters"].push({
 	fieldname: "accumulated_values",
diff --git a/erpnext/accounts/report/profitability_analysis/profitability_analysis.js b/erpnext/accounts/report/profitability_analysis/profitability_analysis.js
index 5dd3617..69e1284 100644
--- a/erpnext/accounts/report/profitability_analysis/profitability_analysis.js
+++ b/erpnext/accounts/report/profitability_analysis/profitability_analysis.js
@@ -2,88 +2,90 @@
 // For license information, please see license.txt
 
 frappe.query_reports["Profitability Analysis"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname": "company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company"),
-			"reqd": 1
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
+			reqd: 1,
 		},
 		{
-			"fieldname": "based_on",
-			"label": __("Based On"),
-			"fieldtype": "Select",
-			"options": ["Cost Center", "Project", "Accounting Dimension"],
-			"default": "Cost Center",
-			"reqd": 1,
-			"on_change": function(query_report){
+			fieldname: "based_on",
+			label: __("Based On"),
+			fieldtype: "Select",
+			options: ["Cost Center", "Project", "Accounting Dimension"],
+			default: "Cost Center",
+			reqd: 1,
+			on_change: function (query_report) {
 				let based_on = query_report.get_values().based_on;
-				if(based_on!='Accounting Dimension'){
+				if (based_on != "Accounting Dimension") {
 					frappe.query_report.set_filter_value({
-						accounting_dimension: ''
+						accounting_dimension: "",
 					});
 				}
-			}
+			},
 		},
 		{
-			"fieldname": "accounting_dimension",
-			"label": __("Accounting Dimension"),
-			"fieldtype": "Link",
-			"options": "Accounting Dimension",
+			fieldname: "accounting_dimension",
+			label: __("Accounting Dimension"),
+			fieldtype: "Link",
+			options: "Accounting Dimension",
 		},
 		{
-			"fieldname": "fiscal_year",
-			"label": __("Fiscal Year"),
-			"fieldtype": "Link",
-			"options": "Fiscal Year",
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
-			"reqd": 1,
-			"on_change": function(query_report) {
+			fieldname: "fiscal_year",
+			label: __("Fiscal Year"),
+			fieldtype: "Link",
+			options: "Fiscal Year",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
+			reqd: 1,
+			on_change: function (query_report) {
 				var fiscal_year = query_report.get_values().fiscal_year;
 				if (!fiscal_year) {
 					return;
 				}
-				frappe.model.with_doc("Fiscal Year", fiscal_year, function(r) {
+				frappe.model.with_doc("Fiscal Year", fiscal_year, function (r) {
 					var fy = frappe.model.get_doc("Fiscal Year", fiscal_year);
 					frappe.query_report.set_filter_value({
 						from_date: fy.year_start_date,
-						to_date: fy.year_end_date
+						to_date: fy.year_end_date,
 					});
 				});
-			}
+			},
 		},
 		{
-			"fieldname": "from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
 		},
 		{
-			"fieldname": "to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
 		},
 		{
-			"fieldname": "show_zero_values",
-			"label": __("Show zero values"),
-			"fieldtype": "Check"
-		}
+			fieldname: "show_zero_values",
+			label: __("Show zero values"),
+			fieldtype: "Check",
+		},
 	],
-	"formatter": function(value, row, column, data, default_formatter) {
-		if (column.fieldname=="account") {
+	formatter: function (value, row, column, data, default_formatter) {
+		if (column.fieldname == "account") {
 			value = data.account_name;
 
 			column.link_onclick =
-				"frappe.query_reports['Profitability Analysis'].open_profit_and_loss_statement(" + JSON.stringify(data) + ")";
+				"frappe.query_reports['Profitability Analysis'].open_profit_and_loss_statement(" +
+				JSON.stringify(data) +
+				")";
 			column.is_tree = true;
 		}
 
 		value = default_formatter(value, row, column, data);
 
-		if (!data.parent_account && data.based_on != 'project') {
+		if (!data.parent_account && data.based_on != "project") {
 			value = $(`<span>${value}</span>`);
 			var $value = $(value).css("font-weight", "bold");
 			if (data.warn_if_negative && data[column.fieldname] < 0) {
@@ -95,25 +97,25 @@
 
 		return value;
 	},
-	"open_profit_and_loss_statement": function(data) {
+	open_profit_and_loss_statement: function (data) {
 		if (!data.account) return;
 
 		frappe.route_options = {
-			"company": frappe.query_report.get_filter_value('company'),
-			"from_fiscal_year": data.fiscal_year,
-			"to_fiscal_year": data.fiscal_year
+			company: frappe.query_report.get_filter_value("company"),
+			from_fiscal_year: data.fiscal_year,
+			to_fiscal_year: data.fiscal_year,
 		};
 
-		if(data.based_on == 'Cost Center'){
-			frappe.route_options["cost_center"] = data.account
+		if (data.based_on == "Cost Center") {
+			frappe.route_options["cost_center"] = data.account;
 		} else {
-			frappe.route_options["project"] = data.account
+			frappe.route_options["project"] = data.account;
 		}
 
 		frappe.set_route("query-report", "Profit and Loss Statement");
 	},
-	"tree": true,
-	"name_field": "account",
-	"parent_field": "parent_account",
-	"initial_depth": 3
-}
+	tree: true,
+	name_field: "account",
+	parent_field: "parent_account",
+	initial_depth: 3,
+};
diff --git a/erpnext/accounts/report/purchase_invoice_trends/purchase_invoice_trends.js b/erpnext/accounts/report/purchase_invoice_trends/purchase_invoice_trends.js
index feab96f..e3f90f2 100644
--- a/erpnext/accounts/report/purchase_invoice_trends/purchase_invoice_trends.js
+++ b/erpnext/accounts/report/purchase_invoice_trends/purchase_invoice_trends.js
@@ -1,8 +1,8 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.require("assets/erpnext/js/purchase_trends_filters.js", function() {
+frappe.require("assets/erpnext/js/purchase_trends_filters.js", function () {
 	frappe.query_reports["Purchase Invoice Trends"] = {
-		filters: erpnext.get_purchase_trends_filters()
-	}
+		filters: erpnext.get_purchase_trends_filters(),
+	};
 });
diff --git a/erpnext/accounts/report/purchase_register/purchase_register.js b/erpnext/accounts/report/purchase_register/purchase_register.js
index cf11ed0..5887498 100644
--- a/erpnext/accounts/report/purchase_register/purchase_register.js
+++ b/erpnext/accounts/report/purchase_register/purchase_register.js
@@ -2,70 +2,70 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.query_reports["Purchase Register"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
-			"width": "80"
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+			width: "80",
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today()
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.get_today(),
 		},
 		{
-			"fieldname":"supplier",
-			"label": __("Supplier"),
-			"fieldtype": "Link",
-			"options": "Supplier"
+			fieldname: "supplier",
+			label: __("Supplier"),
+			fieldtype: "Link",
+			options: "Supplier",
 		},
 		{
-			"fieldname":"supplier_group",
-			"label": __("Supplier Group"),
-			"fieldtype": "Link",
-			"options": "Supplier Group"
+			fieldname: "supplier_group",
+			label: __("Supplier Group"),
+			fieldtype: "Link",
+			options: "Supplier Group",
 		},
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company")
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
-			"fieldname":"mode_of_payment",
-			"label": __("Mode of Payment"),
-			"fieldtype": "Link",
-			"options": "Mode of Payment"
+			fieldname: "mode_of_payment",
+			label: __("Mode of Payment"),
+			fieldtype: "Link",
+			options: "Mode of Payment",
 		},
 		{
-			"fieldname":"cost_center",
-			"label": __("Cost Center"),
-			"fieldtype": "Link",
-			"options": "Cost Center"
+			fieldname: "cost_center",
+			label: __("Cost Center"),
+			fieldtype: "Link",
+			options: "Cost Center",
 		},
 		{
-			"fieldname":"warehouse",
-			"label": __("Warehouse"),
-			"fieldtype": "Link",
-			"options": "Warehouse"
+			fieldname: "warehouse",
+			label: __("Warehouse"),
+			fieldtype: "Link",
+			options: "Warehouse",
 		},
 		{
-			"fieldname":"item_group",
-			"label": __("Item Group"),
-			"fieldtype": "Link",
-			"options": "Item Group"
+			fieldname: "item_group",
+			label: __("Item Group"),
+			fieldtype: "Link",
+			options: "Item Group",
 		},
 		{
-			"fieldname": "include_payments",
-			"label": __("Show Ledger View"),
-			"fieldtype": "Check",
-			"default": 0
-		}
-	]
-}
+			fieldname: "include_payments",
+			label: __("Show Ledger View"),
+			fieldtype: "Check",
+			default: 0,
+		},
+	],
+};
 
-erpnext.utils.add_dimensions('Purchase Register', 7);
+erpnext.utils.add_dimensions("Purchase Register", 7);
diff --git a/erpnext/accounts/report/received_items_to_be_billed/received_items_to_be_billed.js b/erpnext/accounts/report/received_items_to_be_billed/received_items_to_be_billed.js
index 0ee3f57..ad97f27 100644
--- a/erpnext/accounts/report/received_items_to_be_billed/received_items_to_be_billed.js
+++ b/erpnext/accounts/report/received_items_to_be_billed/received_items_to_be_billed.js
@@ -2,7 +2,5 @@
 // For license information, please see license.txt
 
 frappe.query_reports["Received Items To Be Billed"] = {
-	"filters": [
-
-	]
-}
+	filters: [],
+};
diff --git a/erpnext/accounts/report/sales_invoice_trends/sales_invoice_trends.js b/erpnext/accounts/report/sales_invoice_trends/sales_invoice_trends.js
index e3d43a7..292d827 100644
--- a/erpnext/accounts/report/sales_invoice_trends/sales_invoice_trends.js
+++ b/erpnext/accounts/report/sales_invoice_trends/sales_invoice_trends.js
@@ -1,8 +1,8 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.require("assets/erpnext/js/sales_trends_filters.js", function() {
+frappe.require("assets/erpnext/js/sales_trends_filters.js", function () {
 	frappe.query_reports["Sales Invoice Trends"] = {
-		filters: erpnext.get_sales_trends_filters()
-	}
+		filters: erpnext.get_sales_trends_filters(),
+	};
 });
diff --git a/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.js b/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.js
index 92e6f7f..b64db9e 100644
--- a/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.js
+++ b/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.js
@@ -1,44 +1,44 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 frappe.query_reports["Sales Payment Summary"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today(),
-			"reqd": 1,
-			"width": "80"
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.get_today(),
+			reqd: 1,
+			width: "80",
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"reqd": 1,
-			"default": frappe.datetime.get_today()
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			reqd: 1,
+			default: frappe.datetime.get_today(),
 		},
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company")
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
-			"fieldname":"owner",
-			"label": __("Owner"),
-			"fieldtype": "Link",
-			"options": "User",
+			fieldname: "owner",
+			label: __("Owner"),
+			fieldtype: "Link",
+			options: "User",
 		},
 		{
-			"fieldname":"is_pos",
-			"label": __("Show only POS"),
-			"fieldtype": "Check"
+			fieldname: "is_pos",
+			label: __("Show only POS"),
+			fieldtype: "Check",
 		},
 		{
-			"fieldname":"payment_detail",
-			"label": __("Show Payment Details"),
-			"fieldtype": "Check"
+			fieldname: "payment_detail",
+			label: __("Show Payment Details"),
+			fieldtype: "Check",
 		},
-	]
+	],
 };
diff --git a/erpnext/accounts/report/sales_register/sales_register.js b/erpnext/accounts/report/sales_register/sales_register.js
index 4578ac3..c4f57c8 100644
--- a/erpnext/accounts/report/sales_register/sales_register.js
+++ b/erpnext/accounts/report/sales_register/sales_register.js
@@ -2,82 +2,82 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.query_reports["Sales Register"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
-			"width": "80"
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+			width: "80",
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today()
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.get_today(),
 		},
 		{
-			"fieldname":"customer",
-			"label": __("Customer"),
-			"fieldtype": "Link",
-			"options": "Customer"
+			fieldname: "customer",
+			label: __("Customer"),
+			fieldtype: "Link",
+			options: "Customer",
 		},
 		{
-			"fieldname":"customer_group",
-			"label": __("Customer Group"),
-			"fieldtype": "Link",
-			"options": "Customer Group"
+			fieldname: "customer_group",
+			label: __("Customer Group"),
+			fieldtype: "Link",
+			options: "Customer Group",
 		},
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company")
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
-			"fieldname":"mode_of_payment",
-			"label": __("Mode of Payment"),
-			"fieldtype": "Link",
-			"options": "Mode of Payment"
+			fieldname: "mode_of_payment",
+			label: __("Mode of Payment"),
+			fieldtype: "Link",
+			options: "Mode of Payment",
 		},
 		{
-			"fieldname":"owner",
-			"label": __("Owner"),
-			"fieldtype": "Link",
-			"options": "User"
+			fieldname: "owner",
+			label: __("Owner"),
+			fieldtype: "Link",
+			options: "User",
 		},
 		{
-			"fieldname":"cost_center",
-			"label": __("Cost Center"),
-			"fieldtype": "Link",
-			"options": "Cost Center"
+			fieldname: "cost_center",
+			label: __("Cost Center"),
+			fieldtype: "Link",
+			options: "Cost Center",
 		},
 		{
-			"fieldname":"warehouse",
-			"label": __("Warehouse"),
-			"fieldtype": "Link",
-			"options": "Warehouse"
+			fieldname: "warehouse",
+			label: __("Warehouse"),
+			fieldtype: "Link",
+			options: "Warehouse",
 		},
 		{
-			"fieldname":"brand",
-			"label": __("Brand"),
-			"fieldtype": "Link",
-			"options": "Brand"
+			fieldname: "brand",
+			label: __("Brand"),
+			fieldtype: "Link",
+			options: "Brand",
 		},
 		{
-			"fieldname":"item_group",
-			"label": __("Item Group"),
-			"fieldtype": "Link",
-			"options": "Item Group"
+			fieldname: "item_group",
+			label: __("Item Group"),
+			fieldtype: "Link",
+			options: "Item Group",
 		},
 		{
-			"fieldname": "include_payments",
-			"label": __("Show Ledger View"),
-			"fieldtype": "Check",
-			"default": 0
-		}
-	]
-}
+			fieldname: "include_payments",
+			label: __("Show Ledger View"),
+			fieldtype: "Check",
+			default: 0,
+		},
+	],
+};
 
-erpnext.utils.add_dimensions('Sales Register', 7);
+erpnext.utils.add_dimensions("Sales Register", 7);
diff --git a/erpnext/accounts/report/share_balance/share_balance.js b/erpnext/accounts/report/share_balance/share_balance.js
index ac64a0b..05d2959 100644
--- a/erpnext/accounts/report/share_balance/share_balance.js
+++ b/erpnext/accounts/report/share_balance/share_balance.js
@@ -2,21 +2,20 @@
 // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Share Balance"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"date",
-			"label": __("Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today(),
-			"reqd": 1
+			fieldname: "date",
+			label: __("Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.get_today(),
+			reqd: 1,
 		},
 		{
-			"fieldname":"shareholder",
-			"label": __("Shareholder"),
-			"fieldtype": "Link",
-			"options": "Shareholder"
-		}
-	]
-}
+			fieldname: "shareholder",
+			label: __("Shareholder"),
+			fieldtype: "Link",
+			options: "Shareholder",
+		},
+	],
+};
diff --git a/erpnext/accounts/report/share_ledger/share_ledger.js b/erpnext/accounts/report/share_ledger/share_ledger.js
index 4f2d2cc..0d4e3c6 100644
--- a/erpnext/accounts/report/share_ledger/share_ledger.js
+++ b/erpnext/accounts/report/share_ledger/share_ledger.js
@@ -2,21 +2,20 @@
 // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Share Ledger"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"date",
-			"label": __("Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today(),
-			"reqd": 1
+			fieldname: "date",
+			label: __("Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.get_today(),
+			reqd: 1,
 		},
 		{
-			"fieldname":"shareholder",
-			"label": __("Shareholder"),
-			"fieldtype": "Link",
-			"options": "Shareholder"
-		}
-	]
+			fieldname: "shareholder",
+			label: __("Shareholder"),
+			fieldtype: "Link",
+			options: "Shareholder",
+		},
+	],
 };
diff --git a/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.js b/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.js
index 8e3c8ac..5d91575 100644
--- a/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.js
+++ b/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.js
@@ -1,79 +1,78 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Supplier Ledger Summary"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company")
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
-			"reqd": 1,
-			"width": "60px"
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+			reqd: 1,
+			width: "60px",
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today(),
-			"reqd": 1,
-			"width": "60px"
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.get_today(),
+			reqd: 1,
+			width: "60px",
 		},
 		{
-			"fieldname":"finance_book",
-			"label": __("Finance Book"),
-			"fieldtype": "Link",
-			"options": "Finance Book"
+			fieldname: "finance_book",
+			label: __("Finance Book"),
+			fieldtype: "Link",
+			options: "Finance Book",
 		},
 		{
-			"fieldname":"party",
-			"label": __("Supplier"),
-			"fieldtype": "Link",
-			"options": "Supplier",
+			fieldname: "party",
+			label: __("Supplier"),
+			fieldtype: "Link",
+			options: "Supplier",
 			on_change: () => {
-				var party = frappe.query_report.get_filter_value('party');
+				var party = frappe.query_report.get_filter_value("party");
 				if (party) {
-					frappe.db.get_value('Supplier', party, ["tax_id", "supplier_name"], function(value) {
-						frappe.query_report.set_filter_value('tax_id', value["tax_id"]);
-						frappe.query_report.set_filter_value('supplier_name', value["supplier_name"]);
+					frappe.db.get_value("Supplier", party, ["tax_id", "supplier_name"], function (value) {
+						frappe.query_report.set_filter_value("tax_id", value["tax_id"]);
+						frappe.query_report.set_filter_value("supplier_name", value["supplier_name"]);
 					});
 				} else {
-					frappe.query_report.set_filter_value('tax_id', "");
-					frappe.query_report.set_filter_value('supplier_name', "");
+					frappe.query_report.set_filter_value("tax_id", "");
+					frappe.query_report.set_filter_value("supplier_name", "");
 				}
-			}
+			},
 		},
 		{
-			"fieldname":"supplier_group",
-			"label": __("Supplier Group"),
-			"fieldtype": "Link",
-			"options": "Supplier Group"
+			fieldname: "supplier_group",
+			label: __("Supplier Group"),
+			fieldtype: "Link",
+			options: "Supplier Group",
 		},
 		{
-			"fieldname":"payment_terms_template",
-			"label": __("Payment Terms Template"),
-			"fieldtype": "Link",
-			"options": "Payment Terms Template"
+			fieldname: "payment_terms_template",
+			label: __("Payment Terms Template"),
+			fieldtype: "Link",
+			options: "Payment Terms Template",
 		},
 		{
-			"fieldname":"tax_id",
-			"label": __("Tax Id"),
-			"fieldtype": "Data",
-			"hidden": 1
+			fieldname: "tax_id",
+			label: __("Tax Id"),
+			fieldtype: "Data",
+			hidden: 1,
 		},
 		{
-			"fieldname":"supplier_name",
-			"label": __("Supplier Name"),
-			"fieldtype": "Data",
-			"hidden": 1
-		}
-	]
+			fieldname: "supplier_name",
+			label: __("Supplier Name"),
+			fieldtype: "Data",
+			hidden: 1,
+		},
+	],
 };
diff --git a/erpnext/accounts/report/tax_withholding_details/tax_withholding_details.js b/erpnext/accounts/report/tax_withholding_details/tax_withholding_details.js
index 8808165..bdc98ab 100644
--- a/erpnext/accounts/report/tax_withholding_details/tax_withholding_details.js
+++ b/erpnext/accounts/report/tax_withholding_details/tax_withholding_details.js
@@ -1,62 +1,61 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Tax Withholding Details"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_default('company')
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_default("company"),
 		},
 		{
-			"fieldname":"party_type",
-			"label": __("Party Type"),
-			"fieldtype": "Select",
-			"options": ["Supplier", "Customer"],
-			"reqd": 1,
-			"default": "Supplier",
-			"on_change": function(){
+			fieldname: "party_type",
+			label: __("Party Type"),
+			fieldtype: "Select",
+			options: ["Supplier", "Customer"],
+			reqd: 1,
+			default: "Supplier",
+			on_change: function () {
 				frappe.query_report.set_filter_value("party", "");
-			}
+			},
 		},
 		{
-			"fieldname":"party",
-			"label": __("Party"),
-			"fieldtype": "Dynamic Link",
-			"get_options": function() {
-				var party_type = frappe.query_report.get_filter_value('party_type');
-				var party = frappe.query_report.get_filter_value('party');
-				if(party && !party_type) {
+			fieldname: "party",
+			label: __("Party"),
+			fieldtype: "Dynamic Link",
+			get_options: function () {
+				var party_type = frappe.query_report.get_filter_value("party_type");
+				var party = frappe.query_report.get_filter_value("party");
+				if (party && !party_type) {
 					frappe.throw(__("Please select Party Type first"));
 				}
 				return party_type;
 			},
-			"get_query": function() {
+			get_query: function () {
 				return {
-					"filters": {
-						"tax_withholding_category": ["!=",""],
-					}
-				}
+					filters: {
+						tax_withholding_category: ["!=", ""],
+					},
+				};
 			},
 		},
 		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
-			"reqd": 1,
-			"width": "60px"
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+			reqd: 1,
+			width: "60px",
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today(),
-			"reqd": 1,
-			"width": "60px"
-		}
-	]
-}
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.get_today(),
+			reqd: 1,
+			width: "60px",
+		},
+	],
+};
diff --git a/erpnext/accounts/report/tds_computation_summary/tds_computation_summary.js b/erpnext/accounts/report/tds_computation_summary/tds_computation_summary.js
index a0be1b5..3db1f29 100644
--- a/erpnext/accounts/report/tds_computation_summary/tds_computation_summary.js
+++ b/erpnext/accounts/report/tds_computation_summary/tds_computation_summary.js
@@ -1,62 +1,61 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["TDS Computation Summary"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_default('company')
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_default("company"),
 		},
 		{
-			"fieldname":"party_type",
-			"label": __("Party Type"),
-			"fieldtype": "Select",
-			"options": ["Supplier", "Customer"],
-			"reqd": 1,
-			"default": "Supplier",
-			"on_change": function(){
+			fieldname: "party_type",
+			label: __("Party Type"),
+			fieldtype: "Select",
+			options: ["Supplier", "Customer"],
+			reqd: 1,
+			default: "Supplier",
+			on_change: function () {
 				frappe.query_report.set_filter_value("party", "");
-			}
+			},
 		},
 		{
-			"fieldname":"party",
-			"label": __("Party"),
-			"fieldtype": "Dynamic Link",
-			"get_options": function() {
-				var party_type = frappe.query_report.get_filter_value('party_type');
-				var party = frappe.query_report.get_filter_value('party');
-				if(party && !party_type) {
+			fieldname: "party",
+			label: __("Party"),
+			fieldtype: "Dynamic Link",
+			get_options: function () {
+				var party_type = frappe.query_report.get_filter_value("party_type");
+				var party = frappe.query_report.get_filter_value("party");
+				if (party && !party_type) {
 					frappe.throw(__("Please select Party Type first"));
 				}
 				return party_type;
 			},
-			"get_query": function() {
+			get_query: function () {
 				return {
-					"filters": {
-						"tax_withholding_category": ["!=",""],
-					}
-				}
+					filters: {
+						tax_withholding_category: ["!=", ""],
+					},
+				};
 			},
 		},
 		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
-			"reqd": 1,
-			"width": "60px"
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+			reqd: 1,
+			width: "60px",
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today(),
-			"reqd": 1,
-			"width": "60px"
-		}
-	]
-}
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.get_today(),
+			reqd: 1,
+			width: "60px",
+		},
+	],
+};
diff --git a/erpnext/accounts/report/trial_balance/trial_balance.js b/erpnext/accounts/report/trial_balance/trial_balance.js
index 5374ac1..2f70190 100644
--- a/erpnext/accounts/report/trial_balance/trial_balance.js
+++ b/erpnext/accounts/report/trial_balance/trial_balance.js
@@ -2,121 +2,121 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.query_reports["Trial Balance"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname": "company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company"),
-			"reqd": 1
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
+			reqd: 1,
 		},
 		{
-			"fieldname": "fiscal_year",
-			"label": __("Fiscal Year"),
-			"fieldtype": "Link",
-			"options": "Fiscal Year",
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
-			"reqd": 1,
-			"on_change": function(query_report) {
+			fieldname: "fiscal_year",
+			label: __("Fiscal Year"),
+			fieldtype: "Link",
+			options: "Fiscal Year",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
+			reqd: 1,
+			on_change: function (query_report) {
 				var fiscal_year = query_report.get_values().fiscal_year;
 				if (!fiscal_year) {
 					return;
 				}
-				frappe.model.with_doc("Fiscal Year", fiscal_year, function(r) {
+				frappe.model.with_doc("Fiscal Year", fiscal_year, function (r) {
 					var fy = frappe.model.get_doc("Fiscal Year", fiscal_year);
 					frappe.query_report.set_filter_value({
 						from_date: fy.year_start_date,
-						to_date: fy.year_end_date
+						to_date: fy.year_end_date,
 					});
 				});
-			}
+			},
 		},
 		{
-			"fieldname": "from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
 		},
 		{
-			"fieldname": "to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
 		},
 		{
-			"fieldname": "cost_center",
-			"label": __("Cost Center"),
-			"fieldtype": "Link",
-			"options": "Cost Center",
-			"get_query": function() {
-				var company = frappe.query_report.get_filter_value('company');
+			fieldname: "cost_center",
+			label: __("Cost Center"),
+			fieldtype: "Link",
+			options: "Cost Center",
+			get_query: function () {
+				var company = frappe.query_report.get_filter_value("company");
 				return {
-					"doctype": "Cost Center",
-					"filters": {
-						"company": company,
-					}
-				}
-			}
+					doctype: "Cost Center",
+					filters: {
+						company: company,
+					},
+				};
+			},
 		},
 		{
-			"fieldname": "project",
-			"label": __("Project"),
-			"fieldtype": "Link",
-			"options": "Project"
+			fieldname: "project",
+			label: __("Project"),
+			fieldtype: "Link",
+			options: "Project",
 		},
 		{
-			"fieldname": "finance_book",
-			"label": __("Finance Book"),
-			"fieldtype": "Link",
-			"options": "Finance Book",
+			fieldname: "finance_book",
+			label: __("Finance Book"),
+			fieldtype: "Link",
+			options: "Finance Book",
 		},
 		{
-			"fieldname": "presentation_currency",
-			"label": __("Currency"),
-			"fieldtype": "Select",
-			"options": erpnext.get_presentation_currency_list()
+			fieldname: "presentation_currency",
+			label: __("Currency"),
+			fieldtype: "Select",
+			options: erpnext.get_presentation_currency_list(),
 		},
 		{
-			"fieldname": "with_period_closing_entry_for_opening",
-			"label": __("With Period Closing Entry For Opening Balances"),
-			"fieldtype": "Check",
-			"default": 1
+			fieldname: "with_period_closing_entry_for_opening",
+			label: __("With Period Closing Entry For Opening Balances"),
+			fieldtype: "Check",
+			default: 1,
 		},
 		{
-			"fieldname": "with_period_closing_entry_for_current_period",
-			"label": __("Period Closing Entry For Current Period"),
-			"fieldtype": "Check",
-			"default": 1
+			fieldname: "with_period_closing_entry_for_current_period",
+			label: __("Period Closing Entry For Current Period"),
+			fieldtype: "Check",
+			default: 1,
 		},
 		{
-			"fieldname": "show_zero_values",
-			"label": __("Show zero values"),
-			"fieldtype": "Check"
+			fieldname: "show_zero_values",
+			label: __("Show zero values"),
+			fieldtype: "Check",
 		},
 		{
-			"fieldname": "show_unclosed_fy_pl_balances",
-			"label": __("Show unclosed fiscal year's P&L balances"),
-			"fieldtype": "Check"
+			fieldname: "show_unclosed_fy_pl_balances",
+			label: __("Show unclosed fiscal year's P&L balances"),
+			fieldtype: "Check",
 		},
 		{
-			"fieldname": "include_default_book_entries",
-			"label": __("Include Default FB Entries"),
-			"fieldtype": "Check",
-			"default": 1
+			fieldname: "include_default_book_entries",
+			label: __("Include Default FB Entries"),
+			fieldtype: "Check",
+			default: 1,
 		},
 		{
-			"fieldname": "show_net_values",
-			"label": __("Show net values in opening and closing columns"),
-			"fieldtype": "Check",
-			"default": 1
-		}
+			fieldname: "show_net_values",
+			label: __("Show net values in opening and closing columns"),
+			fieldtype: "Check",
+			default: 1,
+		},
 	],
-	"formatter": erpnext.financial_statements.formatter,
-	"tree": true,
-	"name_field": "account",
-	"parent_field": "parent_account",
-	"initial_depth": 3
-}
+	formatter: erpnext.financial_statements.formatter,
+	tree: true,
+	name_field: "account",
+	parent_field: "parent_account",
+	initial_depth: 3,
+};
 
-erpnext.utils.add_dimensions('Trial Balance', 6);
+erpnext.utils.add_dimensions("Trial Balance", 6);
diff --git a/erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.js b/erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.js
index 33c644a..50578d3 100644
--- a/erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.js
+++ b/erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.js
@@ -2,88 +2,88 @@
 // For license information, please see license.txt
 
 frappe.query_reports["Trial Balance for Party"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname": "company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company"),
-			"reqd": 1
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
+			reqd: 1,
 		},
 		{
-			"fieldname": "fiscal_year",
-			"label": __("Fiscal Year"),
-			"fieldtype": "Link",
-			"options": "Fiscal Year",
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
-			"reqd": 1,
-			"on_change": function(query_report) {
+			fieldname: "fiscal_year",
+			label: __("Fiscal Year"),
+			fieldtype: "Link",
+			options: "Fiscal Year",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
+			reqd: 1,
+			on_change: function (query_report) {
 				var fiscal_year = query_report.get_values().fiscal_year;
 				if (!fiscal_year) {
 					return;
 				}
-				frappe.model.with_doc("Fiscal Year", fiscal_year, function(r) {
+				frappe.model.with_doc("Fiscal Year", fiscal_year, function (r) {
 					var fy = frappe.model.get_doc("Fiscal Year", fiscal_year);
 					frappe.query_report.set_filter_value({
 						from_date: fy.year_start_date,
-						to_date: fy.year_end_date
+						to_date: fy.year_end_date,
 					});
 				});
-			}
+			},
 		},
 		{
-			"fieldname": "from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
 		},
 		{
-			"fieldname": "to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
 		},
 		{
-			"fieldname":"party_type",
-			"label": __("Party Type"),
-			"fieldtype": "Link",
-			"options": "Party Type",
-			"default": "Customer",
-			"reqd": 1
+			fieldname: "party_type",
+			label: __("Party Type"),
+			fieldtype: "Link",
+			options: "Party Type",
+			default: "Customer",
+			reqd: 1,
 		},
 		{
-			"fieldname":"party",
-			"label": __("Party"),
-			"fieldtype": "Dynamic Link",
-			"get_options": function() {
-				var party_type = frappe.query_report.get_filter_value('party_type');
-				var party = frappe.query_report.get_filter_value('party');
-				if(party && !party_type) {
+			fieldname: "party",
+			label: __("Party"),
+			fieldtype: "Dynamic Link",
+			get_options: function () {
+				var party_type = frappe.query_report.get_filter_value("party_type");
+				var party = frappe.query_report.get_filter_value("party");
+				if (party && !party_type) {
 					frappe.throw(__("Please select Party Type first"));
 				}
 				return party_type;
-			}
+			},
 		},
 		{
-			"fieldname": "account",
-			"label": __("Account"),
-			"fieldtype": "Link",
-			"options": "Account",
-			"get_query": function() {
-				var company = frappe.query_report.get_filter_value('company');
+			fieldname: "account",
+			label: __("Account"),
+			fieldtype: "Link",
+			options: "Account",
+			get_query: function () {
+				var company = frappe.query_report.get_filter_value("company");
 				return {
-					"doctype": "Account",
-					"filters": {
-						"company": company,
-					}
-				}
-			}
+					doctype: "Account",
+					filters: {
+						company: company,
+					},
+				};
+			},
 		},
 		{
-			"fieldname": "show_zero_values",
-			"label": __("Show zero values"),
-			"fieldtype": "Check"
-		}
-	]
-}
+			fieldname: "show_zero_values",
+			label: __("Show zero values"),
+			fieldtype: "Check",
+		},
+	],
+};
diff --git a/erpnext/accounts/report/voucher_wise_balance/voucher_wise_balance.js b/erpnext/accounts/report/voucher_wise_balance/voucher_wise_balance.js
index f7ab029..03ebf73 100644
--- a/erpnext/accounts/report/voucher_wise_balance/voucher_wise_balance.js
+++ b/erpnext/accounts/report/voucher_wise_balance/voucher_wise_balance.js
@@ -1,28 +1,27 @@
 // Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Voucher-wise Balance"] = {
-	"filters": [
-        {
-            "fieldname": "company",
-            "label": __("Company"),
-            "fieldtype": "Link",
-            "options": "Company"
-        },
-        {
-            "fieldname":"from_date",
-            "label": __("From Date"),
-            "fieldtype": "Date",
-            "default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
-            "width": "60px"
-        },
-        {
-            "fieldname":"to_date",
-            "label": __("To Date"),
-            "fieldtype": "Date",
-            "default": frappe.datetime.get_today(),
-            "width": "60px"
-        },
-    ]
+	filters: [
+		{
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+		},
+		{
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+			width: "60px",
+		},
+		{
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.get_today(),
+			width: "60px",
+		},
+	],
 };
diff --git a/erpnext/assets/doctype/asset/asset.js b/erpnext/assets/doctype/asset/asset.js
index 673fe54..6dbb53a 100644
--- a/erpnext/assets/doctype/asset/asset.js
+++ b/erpnext/assets/doctype/asset/asset.js
@@ -4,136 +4,175 @@
 frappe.provide("erpnext.asset");
 frappe.provide("erpnext.accounts.dimensions");
 
-frappe.ui.form.on('Asset', {
-	onload: function(frm) {
-		frm.set_query("item_code", function() {
+frappe.ui.form.on("Asset", {
+	onload: function (frm) {
+		frm.set_query("item_code", function () {
 			return {
-				"filters": {
-					"is_fixed_asset": 1,
-					"is_stock_item": 0
-				}
+				filters: {
+					is_fixed_asset: 1,
+					is_stock_item: 0,
+				},
 			};
 		});
 
-		frm.set_query("warehouse", function() {
+		frm.set_query("warehouse", function () {
 			return {
-				"filters": {
-					"company": frm.doc.company,
-					"is_group": 0
-				}
+				filters: {
+					company: frm.doc.company,
+					is_group: 0,
+				},
 			};
 		});
 
-		frm.set_query("department", function() {
+		frm.set_query("department", function () {
 			return {
-				"filters": {
-					"company": frm.doc.company,
-				}
+				filters: {
+					company: frm.doc.company,
+				},
 			};
 		});
 
 		erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype);
 	},
 
-	company: function(frm) {
+	company: function (frm) {
 		erpnext.accounts.dimensions.update_dimension(frm, frm.doctype);
 	},
 
-	setup: function(frm) {
-		frm.ignore_doctypes_on_cancel_all = ['Journal Entry'];
+	setup: function (frm) {
+		frm.ignore_doctypes_on_cancel_all = ["Journal Entry"];
 
 		frm.make_methods = {
-			'Asset Movement': () => {
+			"Asset Movement": () => {
 				frappe.call({
-				method: "erpnext.assets.doctype.asset.asset.make_asset_movement",
-				freeze: true,
-				args:{
-					"assets": [{ name: cur_frm.doc.name }]
-				},
-				callback: function (r) {
-					if (r.message) {
-						var doc = frappe.model.sync(r.message)[0];
-						frappe.set_route("Form", doc.doctype, doc.name);
-					}
-				}
-			});
+					method: "erpnext.assets.doctype.asset.asset.make_asset_movement",
+					freeze: true,
+					args: {
+						assets: [{ name: cur_frm.doc.name }],
+					},
+					callback: function (r) {
+						if (r.message) {
+							var doc = frappe.model.sync(r.message)[0];
+							frappe.set_route("Form", doc.doctype, doc.name);
+						}
+					},
+				});
 			},
-		}
+		};
 
 		frm.set_query("purchase_receipt", (doc) => {
 			return {
 				query: "erpnext.controllers.queries.get_purchase_receipts",
-				filters: { item_code: doc.item_code }
-			}
+				filters: { item_code: doc.item_code },
+			};
 		});
 		frm.set_query("purchase_invoice", (doc) => {
 			return {
 				query: "erpnext.controllers.queries.get_purchase_invoices",
-				filters: { item_code: doc.item_code }
-			}
+				filters: { item_code: doc.item_code },
+			};
 		});
 	},
 
-	refresh: function(frm) {
+	refresh: function (frm) {
 		frappe.ui.form.trigger("Asset", "is_existing_asset");
 		frm.toggle_display("next_depreciation_date", frm.doc.docstatus < 1);
 
-		if (frm.doc.docstatus==1) {
+		if (frm.doc.docstatus == 1) {
 			if (in_list(["Submitted", "Partially Depreciated", "Fully Depreciated"], frm.doc.status)) {
-				frm.add_custom_button(__("Transfer Asset"), function() {
-					erpnext.asset.transfer_asset(frm);
-				}, __("Manage"));
+				frm.add_custom_button(
+					__("Transfer Asset"),
+					function () {
+						erpnext.asset.transfer_asset(frm);
+					},
+					__("Manage")
+				);
 
-				frm.add_custom_button(__("Scrap Asset"), function() {
-					erpnext.asset.scrap_asset(frm);
-				}, __("Manage"));
+				frm.add_custom_button(
+					__("Scrap Asset"),
+					function () {
+						erpnext.asset.scrap_asset(frm);
+					},
+					__("Manage")
+				);
 
-				frm.add_custom_button(__("Sell Asset"), function() {
-					frm.trigger("make_sales_invoice");
-				}, __("Manage"));
-
-			} else if (frm.doc.status=='Scrapped') {
-				frm.add_custom_button(__("Restore Asset"), function() {
-					erpnext.asset.restore_asset(frm);
-				}, __("Manage"));
+				frm.add_custom_button(
+					__("Sell Asset"),
+					function () {
+						frm.trigger("make_sales_invoice");
+					},
+					__("Manage")
+				);
+			} else if (frm.doc.status == "Scrapped") {
+				frm.add_custom_button(
+					__("Restore Asset"),
+					function () {
+						erpnext.asset.restore_asset(frm);
+					},
+					__("Manage")
+				);
 			}
 
 			if (frm.doc.maintenance_required && !frm.doc.maintenance_schedule) {
-				frm.add_custom_button(__("Maintain Asset"), function() {
-					frm.trigger("create_asset_maintenance");
-				}, __("Manage"));
+				frm.add_custom_button(
+					__("Maintain Asset"),
+					function () {
+						frm.trigger("create_asset_maintenance");
+					},
+					__("Manage")
+				);
 			}
 
-			frm.add_custom_button(__("Repair Asset"), function() {
-				frm.trigger("create_asset_repair");
-			}, __("Manage"));
+			frm.add_custom_button(
+				__("Repair Asset"),
+				function () {
+					frm.trigger("create_asset_repair");
+				},
+				__("Manage")
+			);
 
-			frm.add_custom_button(__("Split Asset"), function() {
-				frm.trigger("split_asset");
-			}, __("Manage"));
+			frm.add_custom_button(
+				__("Split Asset"),
+				function () {
+					frm.trigger("split_asset");
+				},
+				__("Manage")
+			);
 
-			if (frm.doc.status != 'Fully Depreciated') {
-				frm.add_custom_button(__("Adjust Asset Value"), function() {
-					frm.trigger("create_asset_value_adjustment");
-				}, __("Manage"));
+			if (frm.doc.status != "Fully Depreciated") {
+				frm.add_custom_button(
+					__("Adjust Asset Value"),
+					function () {
+						frm.trigger("create_asset_value_adjustment");
+					},
+					__("Manage")
+				);
 			}
 
 			if (!frm.doc.calculate_depreciation) {
-				frm.add_custom_button(__("Create Depreciation Entry"), function() {
-					frm.trigger("make_journal_entry");
-				}, __("Manage"));
+				frm.add_custom_button(
+					__("Create Depreciation Entry"),
+					function () {
+						frm.trigger("make_journal_entry");
+					},
+					__("Manage")
+				);
 			}
 
 			if (frm.doc.purchase_receipt || !frm.doc.is_existing_asset) {
-				frm.add_custom_button(__("View General Ledger"), function() {
-					frappe.route_options = {
-						"voucher_no": frm.doc.name,
-						"from_date": frm.doc.available_for_use_date,
-						"to_date": frm.doc.available_for_use_date,
-						"company": frm.doc.company
-					};
-					frappe.set_route("query-report", "General Ledger");
-				}, __("Manage"));
+				frm.add_custom_button(
+					__("View General Ledger"),
+					function () {
+						frappe.route_options = {
+							voucher_no: frm.doc.name,
+							from_date: frm.doc.available_for_use_date,
+							to_date: frm.doc.available_for_use_date,
+							company: frm.doc.company,
+						};
+						frappe.set_route("query-report", "General Ledger");
+					},
+					__("Manage")
+				);
 			}
 
 			if (frm.doc.depr_entry_posting_status === "Failed") {
@@ -149,10 +188,10 @@
 			frm.toggle_reqd("finance_books", frm.doc.calculate_depreciation);
 
 			if (frm.doc.is_composite_asset && !frm.doc.capitalized_in) {
-				$('.primary-action').prop('hidden', true);
-				$('.form-message').text('Capitalize this asset to confirm');
+				$(".primary-action").prop("hidden", true);
+				$(".form-message").text("Capitalize this asset to confirm");
 
-				frm.add_custom_button(__("Capitalize Asset"), function() {
+				frm.add_custom_button(__("Capitalize Asset"), function () {
 					frm.trigger("create_asset_capitalization");
 				});
 			}
@@ -172,81 +211,89 @@
 		frm.dashboard.set_headline_alert(alert);
 	},
 
-	toggle_reference_doc: function(frm) {
+	toggle_reference_doc: function (frm) {
 		if (frm.doc.purchase_receipt && frm.doc.purchase_invoice && frm.doc.docstatus === 1) {
-			frm.set_df_property('purchase_invoice', 'read_only', 1);
-			frm.set_df_property('purchase_receipt', 'read_only', 1);
-		}
-		else if (frm.doc.is_existing_asset || frm.doc.is_composite_asset) {
-			frm.toggle_reqd('purchase_receipt', 0);
-			frm.toggle_reqd('purchase_invoice', 0);
-		}
-		else if (frm.doc.purchase_receipt) {
+			frm.set_df_property("purchase_invoice", "read_only", 1);
+			frm.set_df_property("purchase_receipt", "read_only", 1);
+		} else if (frm.doc.is_existing_asset || frm.doc.is_composite_asset) {
+			frm.toggle_reqd("purchase_receipt", 0);
+			frm.toggle_reqd("purchase_invoice", 0);
+		} else if (frm.doc.purchase_receipt) {
 			// if purchase receipt link is set then set PI disabled
-			frm.toggle_reqd('purchase_invoice', 0);
-			frm.set_df_property('purchase_invoice', 'read_only', 1);
-		}
-		else if (frm.doc.purchase_invoice) {
+			frm.toggle_reqd("purchase_invoice", 0);
+			frm.set_df_property("purchase_invoice", "read_only", 1);
+		} else if (frm.doc.purchase_invoice) {
 			// if purchase invoice link is set then set PR disabled
-			frm.toggle_reqd('purchase_receipt', 0);
-			frm.set_df_property('purchase_receipt', 'read_only', 1);
-		}
-		else {
-			frm.toggle_reqd('purchase_receipt', 1);
-			frm.set_df_property('purchase_receipt', 'read_only', 0);
-			frm.toggle_reqd('purchase_invoice', 1);
-			frm.set_df_property('purchase_invoice', 'read_only', 0);
+			frm.toggle_reqd("purchase_receipt", 0);
+			frm.set_df_property("purchase_receipt", "read_only", 1);
+		} else {
+			frm.toggle_reqd("purchase_receipt", 1);
+			frm.set_df_property("purchase_receipt", "read_only", 0);
+			frm.toggle_reqd("purchase_invoice", 1);
+			frm.set_df_property("purchase_invoice", "read_only", 0);
 		}
 	},
 
-	make_journal_entry: function(frm) {
+	make_journal_entry: function (frm) {
 		frappe.call({
 			method: "erpnext.assets.doctype.asset.asset.make_journal_entry",
 			args: {
-				asset_name: frm.doc.name
+				asset_name: frm.doc.name,
 			},
-			callback: function(r) {
+			callback: function (r) {
 				if (r.message) {
 					var doclist = frappe.model.sync(r.message);
 					frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
 				}
-			}
-		})
+			},
+		});
 	},
 
-	render_depreciation_schedule_view: function(frm, asset_depr_schedule_doc) {
+	render_depreciation_schedule_view: function (frm, asset_depr_schedule_doc) {
 		let wrapper = $(frm.fields_dict["depreciation_schedule_view"].wrapper).empty();
 
 		let data = [];
 
 		asset_depr_schedule_doc.depreciation_schedule.forEach((sch) => {
 			const row = [
-				sch['idx'],
-				frappe.format(sch['schedule_date'], { fieldtype: 'Date' }),
-				frappe.format(sch['depreciation_amount'], { fieldtype: 'Currency' }),
-				frappe.format(sch['accumulated_depreciation_amount'], { fieldtype: 'Currency' }),
-				sch['journal_entry'] || '',
+				sch["idx"],
+				frappe.format(sch["schedule_date"], { fieldtype: "Date" }),
+				frappe.format(sch["depreciation_amount"], { fieldtype: "Currency" }),
+				frappe.format(sch["accumulated_depreciation_amount"], { fieldtype: "Currency" }),
+				sch["journal_entry"] || "",
 			];
 
 			if (asset_depr_schedule_doc.shift_based) {
-				row.push(sch['shift']);
+				row.push(sch["shift"]);
 			}
 
 			data.push(row);
 		});
 
 		let columns = [
-			{name: __("No."), editable: false, resizable: false, format: value => value, width: 60},
-			{name: __("Schedule Date"), editable: false, resizable: false, width: 270},
-			{name: __("Depreciation Amount"), editable: false, resizable: false, width: 164},
-			{name: __("Accumulated Depreciation Amount"), editable: false, resizable: false, width: 164},
+			{ name: __("No."), editable: false, resizable: false, format: (value) => value, width: 60 },
+			{ name: __("Schedule Date"), editable: false, resizable: false, width: 270 },
+			{ name: __("Depreciation Amount"), editable: false, resizable: false, width: 164 },
+			{ name: __("Accumulated Depreciation Amount"), editable: false, resizable: false, width: 164 },
 		];
 
 		if (asset_depr_schedule_doc.shift_based) {
-			columns.push({name: __("Journal Entry"), editable: false, resizable: false, format: value => `<a href="/app/journal-entry/${value}">${value}</a>`, width: 245});
-			columns.push({name: __("Shift"), editable: false, resizable: false, width: 59});
+			columns.push({
+				name: __("Journal Entry"),
+				editable: false,
+				resizable: false,
+				format: (value) => `<a href="/app/journal-entry/${value}">${value}</a>`,
+				width: 245,
+			});
+			columns.push({ name: __("Shift"), editable: false, resizable: false, width: 59 });
 		} else {
-			columns.push({name: __("Journal Entry"), editable: false, resizable: false, format: value => `<a href="/app/journal-entry/${value}">${value}</a>`, width: 304});
+			columns.push({
+				name: __("Journal Entry"),
+				editable: false,
+				resizable: false,
+				format: (value) => `<a href="/app/journal-entry/${value}">${value}</a>`,
+				width: 304,
+			});
 		}
 
 		let datatable = new frappe.DataTable(wrapper.get(0), {
@@ -255,55 +302,73 @@
 			layout: "fluid",
 			serialNoColumn: false,
 			checkboxColumn: true,
-			cellHeight: 35
+			cellHeight: 35,
 		});
 
-		datatable.style.setStyle(`.dt-scrollable`, {'font-size': '0.75rem', 'margin-bottom': '1rem', 'margin-left': '0.35rem', 'margin-right': '0.35rem'});
-		datatable.style.setStyle(`.dt-header`, {'margin-left': '0.35rem', 'margin-right': '0.35rem'});
-		datatable.style.setStyle(`.dt-cell--header .dt-cell__content`, {'color': 'var(--gray-600)', 'font-size': 'var(--text-sm)'});
-		datatable.style.setStyle(`.dt-cell`, {'color': 'var(--text-color)'});
-		datatable.style.setStyle(`.dt-cell--col-1`, {'text-align': 'center'});
-		datatable.style.setStyle(`.dt-cell--col-2`, {'font-weight': 600});
-		datatable.style.setStyle(`.dt-cell--col-3`, {'font-weight': 600});
+		datatable.style.setStyle(`.dt-scrollable`, {
+			"font-size": "0.75rem",
+			"margin-bottom": "1rem",
+			"margin-left": "0.35rem",
+			"margin-right": "0.35rem",
+		});
+		datatable.style.setStyle(`.dt-header`, { "margin-left": "0.35rem", "margin-right": "0.35rem" });
+		datatable.style.setStyle(`.dt-cell--header .dt-cell__content`, {
+			color: "var(--gray-600)",
+			"font-size": "var(--text-sm)",
+		});
+		datatable.style.setStyle(`.dt-cell`, { color: "var(--text-color)" });
+		datatable.style.setStyle(`.dt-cell--col-1`, { "text-align": "center" });
+		datatable.style.setStyle(`.dt-cell--col-2`, { "font-weight": 600 });
+		datatable.style.setStyle(`.dt-cell--col-3`, { "font-weight": 600 });
 	},
 
-	setup_chart_and_depr_schedule_view: async function(frm) {
-		if(frm.doc.finance_books.length > 1) {
-			return
+	setup_chart_and_depr_schedule_view: async function (frm) {
+		if (frm.doc.finance_books.length > 1) {
+			return;
 		}
 
-		var x_intervals = [frappe.format(frm.doc.purchase_date, { fieldtype: 'Date' })];
+		var x_intervals = [frappe.format(frm.doc.purchase_date, { fieldtype: "Date" })];
 		var asset_values = [frm.doc.gross_purchase_amount];
 
-		if(frm.doc.calculate_depreciation) {
-			if(frm.doc.opening_accumulated_depreciation) {
+		if (frm.doc.calculate_depreciation) {
+			if (frm.doc.opening_accumulated_depreciation) {
 				var depreciation_date = frappe.datetime.add_months(
 					frm.doc.finance_books[0].depreciation_start_date,
 					-1 * frm.doc.finance_books[0].frequency_of_depreciation
 				);
-				x_intervals.push(frappe.format(depreciation_date, { fieldtype: 'Date' }));
-				asset_values.push(flt(frm.doc.gross_purchase_amount - frm.doc.opening_accumulated_depreciation, precision('gross_purchase_amount')));
+				x_intervals.push(frappe.format(depreciation_date, { fieldtype: "Date" }));
+				asset_values.push(
+					flt(
+						frm.doc.gross_purchase_amount - frm.doc.opening_accumulated_depreciation,
+						precision("gross_purchase_amount")
+					)
+				);
 			}
 
-			let asset_depr_schedule_doc = (await frappe.call(
-				"erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_schedule.get_asset_depr_schedule_doc",
-				{
-					asset_name: frm.doc.name,
-					status: "Active",
-					finance_book: frm.doc.finance_books[0].finance_book || null
-				}
-			)).message;
+			let asset_depr_schedule_doc = (
+				await frappe.call(
+					"erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_schedule.get_asset_depr_schedule_doc",
+					{
+						asset_name: frm.doc.name,
+						status: "Active",
+						finance_book: frm.doc.finance_books[0].finance_book || null,
+					}
+				)
+			).message;
 
-			$.each(asset_depr_schedule_doc.depreciation_schedule || [], function(i, v) {
-				x_intervals.push(frappe.format(v.schedule_date, { fieldtype: 'Date' }));
-				var asset_value = flt(frm.doc.gross_purchase_amount - v.accumulated_depreciation_amount, precision('gross_purchase_amount'));
-				if(v.journal_entry) {
+			$.each(asset_depr_schedule_doc.depreciation_schedule || [], function (i, v) {
+				x_intervals.push(frappe.format(v.schedule_date, { fieldtype: "Date" }));
+				var asset_value = flt(
+					frm.doc.gross_purchase_amount - v.accumulated_depreciation_amount,
+					precision("gross_purchase_amount")
+				);
+				if (v.journal_entry) {
 					asset_values.push(asset_value);
 				} else {
 					if (in_list(["Scrapped", "Sold"], frm.doc.status)) {
 						asset_values.push(null);
 					} else {
-						asset_values.push(asset_value)
+						asset_values.push(asset_value);
 					}
 				}
 			});
@@ -311,25 +376,32 @@
 			frm.toggle_display(["depreciation_schedule_view"], 1);
 			frm.events.render_depreciation_schedule_view(frm, asset_depr_schedule_doc);
 		} else {
-			if(frm.doc.opening_accumulated_depreciation) {
-				x_intervals.push(frappe.format(frm.doc.creation.split(" ")[0], { fieldtype: 'Date' }));
-				asset_values.push(flt(frm.doc.gross_purchase_amount - frm.doc.opening_accumulated_depreciation, precision('gross_purchase_amount')));
+			if (frm.doc.opening_accumulated_depreciation) {
+				x_intervals.push(frappe.format(frm.doc.creation.split(" ")[0], { fieldtype: "Date" }));
+				asset_values.push(
+					flt(
+						frm.doc.gross_purchase_amount - frm.doc.opening_accumulated_depreciation,
+						precision("gross_purchase_amount")
+					)
+				);
 			}
 
-			let depr_entries = (await frappe.call({
-				method: "get_manual_depreciation_entries",
-				doc: frm.doc,
-			})).message;
+			let depr_entries = (
+				await frappe.call({
+					method: "get_manual_depreciation_entries",
+					doc: frm.doc,
+				})
+			).message;
 
-			$.each(depr_entries || [], function(i, v) {
-				x_intervals.push(frappe.format(v.posting_date, { fieldtype: 'Date' }));
-				let last_asset_value = asset_values[asset_values.length - 1]
-				asset_values.push(flt(last_asset_value - v.value, precision('gross_purchase_amount')));
+			$.each(depr_entries || [], function (i, v) {
+				x_intervals.push(frappe.format(v.posting_date, { fieldtype: "Date" }));
+				let last_asset_value = asset_values[asset_values.length - 1];
+				asset_values.push(flt(last_asset_value - v.value, precision("gross_purchase_amount")));
 			});
 		}
 
-		if(in_list(["Scrapped", "Sold"], frm.doc.status)) {
-			x_intervals.push(frappe.format(frm.doc.disposal_date, { fieldtype: 'Date' }));
+		if (in_list(["Scrapped", "Sold"], frm.doc.status)) {
+			x_intervals.push(frappe.format(frm.doc.disposal_date, { fieldtype: "Date" }));
 			asset_values.push(0);
 		}
 
@@ -337,145 +409,146 @@
 			title: "Asset Value",
 			data: {
 				labels: x_intervals,
-				datasets: [{
-					color: 'green',
-					values: asset_values,
-					formatted: asset_values.map(d => d?.toFixed(2))
-				}]
+				datasets: [
+					{
+						color: "green",
+						values: asset_values,
+						formatted: asset_values.map((d) => d?.toFixed(2)),
+					},
+				],
 			},
-			type: 'line'
+			type: "line",
 		});
 	},
 
-
-	item_code: function(frm) {
-		if(frm.doc.item_code && frm.doc.calculate_depreciation && frm.doc.gross_purchase_amount) {
-			frm.trigger('set_finance_book');
+	item_code: function (frm) {
+		if (frm.doc.item_code && frm.doc.calculate_depreciation && frm.doc.gross_purchase_amount) {
+			frm.trigger("set_finance_book");
 		} else {
-			frm.set_value('finance_books', []);
+			frm.set_value("finance_books", []);
 		}
 	},
 
-	set_finance_book: function(frm) {
+	set_finance_book: function (frm) {
 		frappe.call({
 			method: "erpnext.assets.doctype.asset.asset.get_item_details",
 			args: {
 				item_code: frm.doc.item_code,
 				asset_category: frm.doc.asset_category,
-				gross_purchase_amount: frm.doc.gross_purchase_amount
+				gross_purchase_amount: frm.doc.gross_purchase_amount,
 			},
-			callback: function(r, rt) {
-				if(r.message) {
-					frm.set_value('finance_books', r.message);
+			callback: function (r, rt) {
+				if (r.message) {
+					frm.set_value("finance_books", r.message);
 				}
-			}
-		})
+			},
+		});
 	},
 
-	is_existing_asset: function(frm) {
+	is_existing_asset: function (frm) {
 		frm.trigger("toggle_reference_doc");
 	},
 
-	is_composite_asset: function(frm) {
-		if(frm.doc.is_composite_asset) {
-			frm.set_value('gross_purchase_amount', 0);
-			frm.set_df_property('gross_purchase_amount', 'read_only', 1);
+	is_composite_asset: function (frm) {
+		if (frm.doc.is_composite_asset) {
+			frm.set_value("gross_purchase_amount", 0);
+			frm.set_df_property("gross_purchase_amount", "read_only", 1);
 		} else {
-			frm.set_df_property('gross_purchase_amount', 'read_only', 0);
+			frm.set_df_property("gross_purchase_amount", "read_only", 0);
 		}
 
 		frm.trigger("toggle_reference_doc");
 	},
 
-	make_sales_invoice: function(frm) {
+	make_sales_invoice: function (frm) {
 		frappe.call({
 			args: {
-				"asset": frm.doc.name,
-				"item_code": frm.doc.item_code,
-				"company": frm.doc.company,
-				"serial_no": frm.doc.serial_no
+				asset: frm.doc.name,
+				item_code: frm.doc.item_code,
+				company: frm.doc.company,
+				serial_no: frm.doc.serial_no,
 			},
 			method: "erpnext.assets.doctype.asset.asset.make_sales_invoice",
-			callback: function(r) {
+			callback: function (r) {
 				var doclist = frappe.model.sync(r.message);
 				frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
-			}
-		})
+			},
+		});
 	},
 
-	create_asset_maintenance: function(frm) {
+	create_asset_maintenance: function (frm) {
 		frappe.call({
 			args: {
-				"asset": frm.doc.name,
-				"item_code": frm.doc.item_code,
-				"item_name": frm.doc.item_name,
-				"asset_category": frm.doc.asset_category,
-				"company": frm.doc.company
+				asset: frm.doc.name,
+				item_code: frm.doc.item_code,
+				item_name: frm.doc.item_name,
+				asset_category: frm.doc.asset_category,
+				company: frm.doc.company,
 			},
 			method: "erpnext.assets.doctype.asset.asset.create_asset_maintenance",
-			callback: function(r) {
+			callback: function (r) {
 				var doclist = frappe.model.sync(r.message);
 				frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
-			}
-		})
+			},
+		});
 	},
 
-	create_asset_repair: function(frm) {
+	create_asset_repair: function (frm) {
 		frappe.call({
 			args: {
-				"asset": frm.doc.name,
-				"asset_name": frm.doc.asset_name
+				asset: frm.doc.name,
+				asset_name: frm.doc.asset_name,
 			},
 			method: "erpnext.assets.doctype.asset.asset.create_asset_repair",
-			callback: function(r) {
+			callback: function (r) {
 				var doclist = frappe.model.sync(r.message);
 				frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
-			}
+			},
 		});
 	},
 
-	create_asset_capitalization: function(frm) {
+	create_asset_capitalization: function (frm) {
 		frappe.call({
 			args: {
-				"asset": frm.doc.name,
+				asset: frm.doc.name,
 			},
 			method: "erpnext.assets.doctype.asset.asset.create_asset_capitalization",
-			callback: function(r) {
+			callback: function (r) {
 				var doclist = frappe.model.sync(r.message);
 				frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
-			}
+			},
 		});
 	},
 
-	split_asset: function(frm) {
-		const title = __('Split Asset');
+	split_asset: function (frm) {
+		const title = __("Split Asset");
 
 		const fields = [
 			{
-				fieldname: 'split_qty',
-				fieldtype: 'Int',
-				label: __('Split Qty'),
-				reqd: 1
-			}
+				fieldname: "split_qty",
+				fieldtype: "Int",
+				label: __("Split Qty"),
+				reqd: 1,
+			},
 		];
 
 		let dialog = new frappe.ui.Dialog({
 			title: title,
-			fields: fields
+			fields: fields,
 		});
 
-		dialog.set_primary_action(__('Split'), function() {
+		dialog.set_primary_action(__("Split"), function () {
 			const dialog_data = dialog.get_values();
 			frappe.call({
 				args: {
-					"asset_name": frm.doc.name,
-					"split_qty": cint(dialog_data.split_qty)
+					asset_name: frm.doc.name,
+					split_qty: cint(dialog_data.split_qty),
 				},
 				method: "erpnext.assets.doctype.asset.asset.split_asset",
-				callback: function(r) {
+				callback: function (r) {
 					let doclist = frappe.model.sync(r.message);
 					frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
-				}
+				},
 			});
 
 			dialog.hide();
@@ -484,23 +557,23 @@
 		dialog.show();
 	},
 
-	create_asset_value_adjustment: function(frm) {
+	create_asset_value_adjustment: function (frm) {
 		frappe.call({
 			args: {
-				"asset": frm.doc.name,
-				"asset_category": frm.doc.asset_category,
-				"company": frm.doc.company
+				asset: frm.doc.name,
+				asset_category: frm.doc.asset_category,
+				company: frm.doc.company,
 			},
 			method: "erpnext.assets.doctype.asset.asset.create_asset_value_adjustment",
 			freeze: 1,
-			callback: function(r) {
+			callback: function (r) {
 				var doclist = frappe.model.sync(r.message);
 				frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
-			}
-		})
+			},
+		});
 	},
 
-	calculate_depreciation: function(frm) {
+	calculate_depreciation: function (frm) {
 		frm.toggle_reqd("finance_books", frm.doc.calculate_depreciation);
 		if (frm.doc.item_code && frm.doc.calculate_depreciation && frm.doc.gross_purchase_amount) {
 			frm.trigger("set_finance_book");
@@ -509,203 +582,249 @@
 		}
 	},
 
-	gross_purchase_amount: function(frm) {
+	gross_purchase_amount: function (frm) {
 		if (frm.doc.finance_books) {
-			frm.doc.finance_books.forEach(d => {
+			frm.doc.finance_books.forEach((d) => {
 				frm.events.set_depreciation_rate(frm, d);
-			})
+			});
 		}
 	},
 
 	purchase_receipt: (frm) => {
-		frm.trigger('toggle_reference_doc');
+		frm.trigger("toggle_reference_doc");
 		if (frm.doc.purchase_receipt) {
 			if (frm.doc.item_code) {
-				frappe.db.get_doc('Purchase Receipt', frm.doc.purchase_receipt).then(pr_doc => {
-					frm.events.set_values_from_purchase_doc(frm, 'Purchase Receipt', pr_doc)
+				frappe.db.get_doc("Purchase Receipt", frm.doc.purchase_receipt).then((pr_doc) => {
+					frm.events.set_values_from_purchase_doc(frm, "Purchase Receipt", pr_doc);
 				});
 			} else {
-				frm.set_value('purchase_receipt', '');
+				frm.set_value("purchase_receipt", "");
 				frappe.msgprint({
-					title: __('Not Allowed'),
-					message: __("Please select Item Code first")
+					title: __("Not Allowed"),
+					message: __("Please select Item Code first"),
 				});
 			}
 		}
 	},
 
 	purchase_invoice: (frm) => {
-		frm.trigger('toggle_reference_doc');
+		frm.trigger("toggle_reference_doc");
 		if (frm.doc.purchase_invoice) {
 			if (frm.doc.item_code) {
-				frappe.db.get_doc('Purchase Invoice', frm.doc.purchase_invoice).then(pi_doc => {
-					frm.events.set_values_from_purchase_doc(frm, 'Purchase Invoice', pi_doc)
+				frappe.db.get_doc("Purchase Invoice", frm.doc.purchase_invoice).then((pi_doc) => {
+					frm.events.set_values_from_purchase_doc(frm, "Purchase Invoice", pi_doc);
 				});
 			} else {
-				frm.set_value('purchase_invoice', '');
+				frm.set_value("purchase_invoice", "");
 				frappe.msgprint({
-					title: __('Not Allowed'),
-					message: __("Please select Item Code first")
+					title: __("Not Allowed"),
+					message: __("Please select Item Code first"),
 				});
 			}
 		}
 	},
 
-	set_values_from_purchase_doc: function(frm, doctype, purchase_doc) {
-		frm.set_value('company', purchase_doc.company);
+	set_values_from_purchase_doc: function (frm, doctype, purchase_doc) {
+		frm.set_value("company", purchase_doc.company);
 		if (purchase_doc.bill_date) {
-			frm.set_value('purchase_date', purchase_doc.bill_date);
+			frm.set_value("purchase_date", purchase_doc.bill_date);
 		} else {
-			frm.set_value('purchase_date', purchase_doc.posting_date);
+			frm.set_value("purchase_date", purchase_doc.posting_date);
 		}
 		if (!frm.doc.is_existing_asset && !frm.doc.available_for_use_date) {
-			frm.set_value('available_for_use_date', frm.doc.purchase_date);
+			frm.set_value("available_for_use_date", frm.doc.purchase_date);
 		}
-		const item = purchase_doc.items.find(item => item.item_code === frm.doc.item_code);
+		const item = purchase_doc.items.find((item) => item.item_code === frm.doc.item_code);
 		if (!item) {
-			let doctype_field = frappe.scrub(doctype)
-			frm.set_value(doctype_field, '');
+			let doctype_field = frappe.scrub(doctype);
+			frm.set_value(doctype_field, "");
 			frappe.msgprint({
-				title: __('Invalid {0}', [__(doctype)]),
-				message: __('The selected {0} does not contain the selected Asset Item.', [__(doctype)]),
-				indicator: 'red'
+				title: __("Invalid {0}", [__(doctype)]),
+				message: __("The selected {0} does not contain the selected Asset Item.", [__(doctype)]),
+				indicator: "red",
 			});
 		}
-		frappe.db.get_value('Item', item.item_code, 'is_grouped_asset', (r) => {
+		frappe.db.get_value("Item", item.item_code, "is_grouped_asset", (r) => {
 			var asset_quantity = r.is_grouped_asset ? item.qty : 1;
-			var purchase_amount = flt(item.valuation_rate * asset_quantity, precision('gross_purchase_amount'));
+			var purchase_amount = flt(
+				item.valuation_rate * asset_quantity,
+				precision("gross_purchase_amount")
+			);
 
-			frm.set_value('gross_purchase_amount', purchase_amount);
-			frm.set_value('purchase_receipt_amount', purchase_amount);
-			frm.set_value('asset_quantity', asset_quantity);
-			frm.set_value('cost_center', item.cost_center || purchase_doc.cost_center);
-			if(item.asset_location) { frm.set_value('location', item.asset_location); }
+			frm.set_value("gross_purchase_amount", purchase_amount);
+			frm.set_value("purchase_receipt_amount", purchase_amount);
+			frm.set_value("asset_quantity", asset_quantity);
+			frm.set_value("cost_center", item.cost_center || purchase_doc.cost_center);
+			if (item.asset_location) {
+				frm.set_value("location", item.asset_location);
+			}
 		});
 	},
 
-	set_depreciation_rate: function(frm, row) {
-		if (row.total_number_of_depreciations && row.frequency_of_depreciation
-			&& row.expected_value_after_useful_life) {
+	set_depreciation_rate: function (frm, row) {
+		if (
+			row.total_number_of_depreciations &&
+			row.frequency_of_depreciation &&
+			row.expected_value_after_useful_life
+		) {
 			frappe.call({
 				method: "get_depreciation_rate",
 				doc: frm.doc,
 				args: row,
-				callback: function(r) {
+				callback: function (r) {
 					if (r.message) {
 						frappe.flags.dont_change_rate = true;
-						frappe.model.set_value(row.doctype, row.name,
-							"rate_of_depreciation", flt(r.message, precision("rate_of_depreciation", row)));
+						frappe.model.set_value(
+							row.doctype,
+							row.name,
+							"rate_of_depreciation",
+							flt(r.message, precision("rate_of_depreciation", row))
+						);
 					}
-				}
+				},
 			});
 		}
 	},
 
-	set_salvage_value_percentage_or_expected_value_after_useful_life: function(frm, row, salvage_value_percentage_changed, expected_value_after_useful_life_changed) {
+	set_salvage_value_percentage_or_expected_value_after_useful_life: function (
+		frm,
+		row,
+		salvage_value_percentage_changed,
+		expected_value_after_useful_life_changed
+	) {
 		if (expected_value_after_useful_life_changed) {
 			frappe.flags.from_set_salvage_value_percentage_or_expected_value_after_useful_life = true;
-			const new_salvage_value_percentage = flt((row.expected_value_after_useful_life * 100) / frm.doc.gross_purchase_amount, precision("salvage_value_percentage", row));
-			frappe.model.set_value(row.doctype, row.name, "salvage_value_percentage", new_salvage_value_percentage);
+			const new_salvage_value_percentage = flt(
+				(row.expected_value_after_useful_life * 100) / frm.doc.gross_purchase_amount,
+				precision("salvage_value_percentage", row)
+			);
+			frappe.model.set_value(
+				row.doctype,
+				row.name,
+				"salvage_value_percentage",
+				new_salvage_value_percentage
+			);
 			frappe.flags.from_set_salvage_value_percentage_or_expected_value_after_useful_life = false;
 		} else if (salvage_value_percentage_changed) {
 			frappe.flags.from_set_salvage_value_percentage_or_expected_value_after_useful_life = true;
-			const new_expected_value_after_useful_life = flt(frm.doc.gross_purchase_amount * (row.salvage_value_percentage / 100), precision('gross_purchase_amount'));
-			frappe.model.set_value(row.doctype, row.name, "expected_value_after_useful_life", new_expected_value_after_useful_life);
+			const new_expected_value_after_useful_life = flt(
+				frm.doc.gross_purchase_amount * (row.salvage_value_percentage / 100),
+				precision("gross_purchase_amount")
+			);
+			frappe.model.set_value(
+				row.doctype,
+				row.name,
+				"expected_value_after_useful_life",
+				new_expected_value_after_useful_life
+			);
 			frappe.flags.from_set_salvage_value_percentage_or_expected_value_after_useful_life = false;
 		}
 	},
 });
 
-frappe.ui.form.on('Asset Finance Book', {
-	depreciation_method: function(frm, cdt, cdn) {
+frappe.ui.form.on("Asset Finance Book", {
+	depreciation_method: function (frm, cdt, cdn) {
 		const row = locals[cdt][cdn];
 		frm.events.set_depreciation_rate(frm, row);
 	},
 
-	expected_value_after_useful_life: function(frm, cdt, cdn) {
+	expected_value_after_useful_life: function (frm, cdt, cdn) {
 		const row = locals[cdt][cdn];
 		if (!frappe.flags.from_set_salvage_value_percentage_or_expected_value_after_useful_life) {
-			frm.events.set_salvage_value_percentage_or_expected_value_after_useful_life(frm, row, false, true);
+			frm.events.set_salvage_value_percentage_or_expected_value_after_useful_life(
+				frm,
+				row,
+				false,
+				true
+			);
 		}
 		frm.events.set_depreciation_rate(frm, row);
 	},
 
-	salvage_value_percentage: function(frm, cdt, cdn) {
+	salvage_value_percentage: function (frm, cdt, cdn) {
 		const row = locals[cdt][cdn];
 		if (!frappe.flags.from_set_salvage_value_percentage_or_expected_value_after_useful_life) {
-			frm.events.set_salvage_value_percentage_or_expected_value_after_useful_life(frm, row, true, false);
+			frm.events.set_salvage_value_percentage_or_expected_value_after_useful_life(
+				frm,
+				row,
+				true,
+				false
+			);
 		}
 	},
 
-	frequency_of_depreciation: function(frm, cdt, cdn) {
+	frequency_of_depreciation: function (frm, cdt, cdn) {
 		const row = locals[cdt][cdn];
 		frm.events.set_depreciation_rate(frm, row);
 	},
 
-	total_number_of_depreciations: function(frm, cdt, cdn) {
+	total_number_of_depreciations: function (frm, cdt, cdn) {
 		const row = locals[cdt][cdn];
 		frm.events.set_depreciation_rate(frm, row);
 	},
 
-	rate_of_depreciation: function(frm, cdt, cdn) {
-		if(!frappe.flags.dont_change_rate) {
+	rate_of_depreciation: function (frm, cdt, cdn) {
+		if (!frappe.flags.dont_change_rate) {
 			frappe.model.set_value(cdt, cdn, "expected_value_after_useful_life", 0);
 		}
 
 		frappe.flags.dont_change_rate = false;
 	},
 
-	depreciation_start_date: function(frm, cdt, cdn) {
+	depreciation_start_date: function (frm, cdt, cdn) {
 		const book = locals[cdt][cdn];
-		if (frm.doc.available_for_use_date && book.depreciation_start_date == frm.doc.available_for_use_date) {
+		if (
+			frm.doc.available_for_use_date &&
+			book.depreciation_start_date == frm.doc.available_for_use_date
+		) {
 			frappe.msgprint(__("Depreciation Posting Date should not be equal to Available for Use Date."));
 			book.depreciation_start_date = "";
 			frm.refresh_field("finance_books");
 		}
-	}
+	},
 });
 
-erpnext.asset.scrap_asset = function(frm) {
+erpnext.asset.scrap_asset = function (frm) {
 	frappe.confirm(__("Do you really want to scrap this asset?"), function () {
 		frappe.call({
 			args: {
-				"asset_name": frm.doc.name
+				asset_name: frm.doc.name,
 			},
 			method: "erpnext.assets.doctype.asset.depreciation.scrap_asset",
-			callback: function(r) {
+			callback: function (r) {
 				cur_frm.reload_doc();
-			}
-		})
-	})
+			},
+		});
+	});
 };
 
-erpnext.asset.restore_asset = function(frm) {
+erpnext.asset.restore_asset = function (frm) {
 	frappe.confirm(__("Do you really want to restore this scrapped asset?"), function () {
 		frappe.call({
 			args: {
-				"asset_name": frm.doc.name
+				asset_name: frm.doc.name,
 			},
 			method: "erpnext.assets.doctype.asset.depreciation.restore_asset",
-			callback: function(r) {
+			callback: function (r) {
 				cur_frm.reload_doc();
-			}
-		})
-	})
+			},
+		});
+	});
 };
 
-erpnext.asset.transfer_asset = function() {
+erpnext.asset.transfer_asset = function () {
 	frappe.call({
 		method: "erpnext.assets.doctype.asset.asset.make_asset_movement",
 		freeze: true,
-		args:{
-			"assets": [{ name: cur_frm.doc.name }],
-			"purpose": "Transfer"
+		args: {
+			assets: [{ name: cur_frm.doc.name }],
+			purpose: "Transfer",
 		},
 		callback: function (r) {
 			if (r.message) {
 				var doc = frappe.model.sync(r.message)[0];
 				frappe.set_route("Form", doc.doctype, doc.name);
 			}
-		}
+		},
 	});
 };
diff --git a/erpnext/assets/doctype/asset/asset_list.js b/erpnext/assets/doctype/asset/asset_list.js
index 5f53b00..712958a 100644
--- a/erpnext/assets/doctype/asset/asset_list.js
+++ b/erpnext/assets/doctype/asset/asset_list.js
@@ -1,56 +1,46 @@
-frappe.listview_settings['Asset'] = {
-	add_fields: ['status'],
+frappe.listview_settings["Asset"] = {
+	add_fields: ["status"],
 	get_indicator: function (doc) {
 		if (doc.status === "Fully Depreciated") {
 			return [__("Fully Depreciated"), "green", "status,=,Fully Depreciated"];
-
 		} else if (doc.status === "Partially Depreciated") {
 			return [__("Partially Depreciated"), "grey", "status,=,Partially Depreciated"];
-
 		} else if (doc.status === "Sold") {
 			return [__("Sold"), "green", "status,=,Sold"];
-
 		} else if (["Capitalized", "Decapitalized"].includes(doc.status)) {
 			return [__(doc.status), "grey", "status,=," + doc.status];
-
 		} else if (doc.status === "Scrapped") {
 			return [__("Scrapped"), "grey", "status,=,Scrapped"];
-
 		} else if (doc.status === "In Maintenance") {
 			return [__("In Maintenance"), "orange", "status,=,In Maintenance"];
-
 		} else if (doc.status === "Out of Order") {
 			return [__("Out of Order"), "grey", "status,=,Out of Order"];
-
 		} else if (doc.status === "Issue") {
 			return [__("Issue"), "orange", "status,=,Issue"];
-
 		} else if (doc.status === "Receipt") {
 			return [__("Receipt"), "green", "status,=,Receipt"];
-
 		} else if (doc.status === "Submitted") {
 			return [__("Submitted"), "blue", "status,=,Submitted"];
-
 		} else if (doc.status === "Draft") {
 			return [__("Draft"), "red", "status,=,Draft"];
 		}
 	},
-	onload: function(me) {
-		me.page.add_action_item(__("Make Asset Movement"), function() {
+	onload: function (me) {
+		me.page.add_action_item(__("Make Asset Movement"), function () {
 			const assets = me.get_checked_items();
 			frappe.call({
 				method: "erpnext.assets.doctype.asset.asset.make_asset_movement",
 				freeze: true,
-				args:{
-					"assets": assets
+				args: {
+					assets: assets,
 				},
 				callback: function (r) {
 					if (r.message) {
 						var doc = frappe.model.sync(r.message)[0];
 						frappe.set_route("Form", doc.doctype, doc.name);
 					}
-				}
+				},
 			});
 		});
 	},
-}
+};
diff --git a/erpnext/assets/doctype/asset_capitalization/asset_capitalization.js b/erpnext/assets/doctype/asset_capitalization/asset_capitalization.js
index 110f2c4..651b75d 100644
--- a/erpnext/assets/doctype/asset_capitalization/asset_capitalization.js
+++ b/erpnext/assets/doctype/asset_capitalization/asset_capitalization.js
@@ -3,10 +3,9 @@
 
 frappe.provide("erpnext.assets");
 
-
 erpnext.assets.AssetCapitalization = class AssetCapitalization extends erpnext.stock.StockController {
 	setup() {
-		this.frm.ignore_doctypes_on_cancel_all = ['Serial and Batch Bundle', 'Asset Movement'];
+		this.frm.ignore_doctypes_on_cancel_all = ["Serial and Batch Bundle", "Asset Movement"];
 		this.setup_posting_date_time_check();
 	}
 
@@ -17,7 +16,10 @@
 	refresh() {
 		this.show_general_ledger();
 
-		if ((this.frm.doc.stock_items && this.frm.doc.stock_items.length) || !this.frm.doc.target_is_fixed_asset) {
+		if (
+			(this.frm.doc.stock_items && this.frm.doc.stock_items.length) ||
+			!this.frm.doc.target_is_fixed_asset
+		) {
 			this.show_stock_ledger();
 		}
 
@@ -32,32 +34,32 @@
 
 		me.setup_warehouse_query();
 
-		me.frm.set_query("target_item_code", function() {
+		me.frm.set_query("target_item_code", function () {
 			if (me.frm.doc.entry_type == "Capitalization") {
-				return erpnext.queries.item({"is_stock_item": 0, "is_fixed_asset": 1});
+				return erpnext.queries.item({ is_stock_item: 0, is_fixed_asset: 1 });
 			} else {
-				return erpnext.queries.item({"is_stock_item": 1, "is_fixed_asset": 0});
+				return erpnext.queries.item({ is_stock_item: 1, is_fixed_asset: 0 });
 			}
 		});
 
-		me.frm.set_query("target_asset", function() {
+		me.frm.set_query("target_asset", function () {
 			return {
-				filters: {'is_composite_asset': 1, 'docstatus': 0 }
-			}
+				filters: { is_composite_asset: 1, docstatus: 0 },
+			};
 		});
 
-		me.frm.set_query("asset", "asset_items", function() {
+		me.frm.set_query("asset", "asset_items", function () {
 			var filters = {
-				'status': ["not in", ["Draft", "Scrapped", "Sold", "Capitalized", "Decapitalized"]],
-				'docstatus': 1
+				status: ["not in", ["Draft", "Scrapped", "Sold", "Capitalized", "Decapitalized"]],
+				docstatus: 1,
 			};
 
 			if (me.frm.doc.target_asset) {
-				filters['name'] = ['!=', me.frm.doc.target_asset];
+				filters["name"] = ["!=", me.frm.doc.target_asset];
 			}
 
 			return {
-				filters: filters
+				filters: filters,
 			};
 		});
 
@@ -65,58 +67,67 @@
 			let row = locals[cdt][cdn];
 			return {
 				filters: {
-					'item_code': row.item_code,
-					'voucher_type': doc.doctype,
-					'voucher_no': ["in", [doc.name, ""]],
-					'is_cancelled': 0,
-				}
-			}
+					item_code: row.item_code,
+					voucher_type: doc.doctype,
+					voucher_no: ["in", [doc.name, ""]],
+					is_cancelled: 0,
+				},
+			};
 		});
 
-		me.frm.set_query("item_code", "stock_items", function() {
-			return erpnext.queries.item({"is_stock_item": 1});
+		me.frm.set_query("item_code", "stock_items", function () {
+			return erpnext.queries.item({ is_stock_item: 1 });
 		});
 
-		me.frm.set_query("item_code", "service_items", function() {
-			return erpnext.queries.item({"is_stock_item": 0, "is_fixed_asset": 0});
+		me.frm.set_query("item_code", "service_items", function () {
+			return erpnext.queries.item({ is_stock_item: 0, is_fixed_asset: 0 });
 		});
 
-		me.frm.set_query('batch_no', 'stock_items', function(doc, cdt, cdn) {
+		me.frm.set_query("batch_no", "stock_items", function (doc, cdt, cdn) {
 			var item = locals[cdt][cdn];
 			if (!item.item_code) {
 				frappe.throw(__("Please enter Item Code to get Batch Number"));
 			} else {
 				var filters = {
-					'item_code': item.item_code,
-					'posting_date': me.frm.doc.posting_date || frappe.datetime.nowdate(),
-					'warehouse': item.warehouse
+					item_code: item.item_code,
+					posting_date: me.frm.doc.posting_date || frappe.datetime.nowdate(),
+					warehouse: item.warehouse,
 				};
 
 				return {
 					query: "erpnext.controllers.queries.get_batch_no",
-					filters: filters
+					filters: filters,
 				};
 			}
 		});
 
-		me.frm.set_query('expense_account', 'service_items', function() {
+		me.frm.set_query("expense_account", "service_items", function () {
 			return {
 				filters: {
-					"account_type": ['in', ["Tax", "Expense Account", "Income Account", "Expenses Included In Valuation", "Expenses Included In Asset Valuation"]],
-					"is_group": 0,
-					"company": me.frm.doc.company
-				}
+					account_type: [
+						"in",
+						[
+							"Tax",
+							"Expense Account",
+							"Income Account",
+							"Expenses Included In Valuation",
+							"Expenses Included In Asset Valuation",
+						],
+					],
+					is_group: 0,
+					company: me.frm.doc.company,
+				},
 			};
 		});
 
-		let sbb_field = me.frm.get_docfield('stock_items', 'serial_and_batch_bundle');
+		let sbb_field = me.frm.get_docfield("stock_items", "serial_and_batch_bundle");
 		if (sbb_field) {
 			sbb_field.get_route_options_for_new_doc = (row) => {
 				return {
-					'item_code': row.doc.item_code,
-					'warehouse': row.doc.warehouse,
-					'voucher_type': me.frm.doc.doctype,
-				}
+					item_code: row.doc.item_code,
+					warehouse: row.doc.warehouse,
+					voucher_type: me.frm.doc.doctype,
+				};
 			};
 		}
 	}
@@ -126,7 +137,10 @@
 	}
 
 	target_asset() {
-		if (this.frm.doc.target_asset && this.frm.doc.capitalization_method === "Choose a WIP composite asset") {
+		if (
+			this.frm.doc.target_asset &&
+			this.frm.doc.capitalization_method === "Choose a WIP composite asset"
+		) {
 			this.set_consumed_stock_items_tagged_to_wip_composite_asset(this.frm.doc.target_asset);
 			this.get_target_asset_details();
 		}
@@ -143,7 +157,7 @@
 				},
 				callback: function (r) {
 					if (!r.exc && r.message) {
-						if(r.message[0] && r.message[0].length) {
+						if (r.message[0] && r.message[0].length) {
 							me.frm.clear_table("stock_items");
 							for (let item of r.message[0]) {
 								me.frm.add_child("stock_items", item);
@@ -160,7 +174,7 @@
 
 						me.calculate_totals();
 					}
-				}
+				},
 			});
 		}
 	}
@@ -192,7 +206,7 @@
 		if (this.frm.doc.posting_date) {
 			frappe.run_serially([
 				() => this.get_all_item_warehouse_details(),
-				() => this.get_all_asset_values()
+				() => this.get_all_asset_values(),
 			]);
 		}
 	}
@@ -248,15 +262,15 @@
 	}
 
 	stock_items_add(doc, cdt, cdn) {
-		erpnext.accounts.dimensions.copy_dimension_from_first_row(this.frm, cdt, cdn, 'stock_items');
+		erpnext.accounts.dimensions.copy_dimension_from_first_row(this.frm, cdt, cdn, "stock_items");
 	}
 
 	asset_items_add(doc, cdt, cdn) {
-		erpnext.accounts.dimensions.copy_dimension_from_first_row(this.frm, cdt, cdn, 'asset_items');
+		erpnext.accounts.dimensions.copy_dimension_from_first_row(this.frm, cdt, cdn, "asset_items");
 	}
 
 	serivce_items_add(doc, cdt, cdn) {
-		erpnext.accounts.dimensions.copy_dimension_from_first_row(this.frm, cdt, cdn, 'service_items');
+		erpnext.accounts.dimensions.copy_dimension_from_first_row(this.frm, cdt, cdn, "service_items");
 	}
 
 	get_target_item_details() {
@@ -274,7 +288,7 @@
 					if (!r.exc) {
 						me.frm.refresh_fields();
 					}
-				}
+				},
 			});
 		}
 	}
@@ -294,7 +308,7 @@
 					if (!r.exc) {
 						me.frm.refresh_fields();
 					}
-				}
+				},
 			});
 		}
 	}
@@ -316,13 +330,13 @@
 						company: me.frm.doc.company,
 						posting_date: me.frm.doc.posting_date,
 						posting_time: me.frm.doc.posting_time,
-					}
+					},
 				},
 				callback: function (r) {
 					if (!r.exc) {
 						me.calculate_totals();
 					}
-				}
+				},
 			});
 		}
 	}
@@ -343,13 +357,13 @@
 						finance_book: row.finance_book || me.frm.doc.finance_book,
 						posting_date: me.frm.doc.posting_date,
 						posting_time: me.frm.doc.posting_time,
-					}
+					},
 				},
 				callback: function (r) {
 					if (!r.exc) {
 						me.calculate_totals();
 					}
-				}
+				},
 			});
 		}
 	}
@@ -367,13 +381,13 @@
 						qty: flt(row.qty),
 						expense_account: row.expense_account,
 						company: me.frm.doc.company,
-					}
+					},
 				},
 				callback: function (r) {
 					if (!r.exc) {
 						me.calculate_totals();
 					}
-				}
+				},
 			});
 		}
 	}
@@ -386,23 +400,23 @@
 				child: item,
 				args: {
 					args: {
-						'item_code': item.item_code,
-						'warehouse': cstr(item.warehouse),
-						'qty': flt(item.stock_qty),
-						'serial_no': item.serial_no,
-						'posting_date': me.frm.doc.posting_date,
-						'posting_time': me.frm.doc.posting_time,
-						'company': me.frm.doc.company,
-						'voucher_type': me.frm.doc.doctype,
-						'voucher_no': me.frm.doc.name,
-						'allow_zero_valuation': 1
-					}
+						item_code: item.item_code,
+						warehouse: cstr(item.warehouse),
+						qty: flt(item.stock_qty),
+						serial_no: item.serial_no,
+						posting_date: me.frm.doc.posting_date,
+						posting_time: me.frm.doc.posting_time,
+						company: me.frm.doc.company,
+						voucher_type: me.frm.doc.doctype,
+						voucher_no: me.frm.doc.name,
+						allow_zero_valuation: 1,
+					},
 				},
-				callback: function(r) {
+				callback: function (r) {
 					if (!r.exc) {
 						me.calculate_totals();
 					}
-				}
+				},
 			});
 		}
 	}
@@ -412,11 +426,11 @@
 		return me.frm.call({
 			method: "set_warehouse_details",
 			doc: me.frm.doc,
-			callback: function(r) {
+			callback: function (r) {
 				if (!r.exc) {
 					me.calculate_totals();
 				}
-			}
+			},
 		});
 	}
 
@@ -425,11 +439,11 @@
 		return me.frm.call({
 			method: "set_asset_values",
 			doc: me.frm.doc,
-			callback: function(r) {
+			callback: function (r) {
 				if (!r.exc) {
 					me.calculate_totals();
 				}
-			}
+			},
 		});
 	}
 
@@ -441,33 +455,38 @@
 		me.frm.doc.service_items_total = 0;
 
 		$.each(me.frm.doc.stock_items || [], function (i, d) {
-			d.amount = flt(flt(d.stock_qty) * flt(d.valuation_rate), precision('amount', d));
+			d.amount = flt(flt(d.stock_qty) * flt(d.valuation_rate), precision("amount", d));
 			me.frm.doc.stock_items_total += d.amount;
 		});
 
 		$.each(me.frm.doc.asset_items || [], function (i, d) {
-			d.asset_value = flt(flt(d.asset_value), precision('asset_value', d));
+			d.asset_value = flt(flt(d.asset_value), precision("asset_value", d));
 			me.frm.doc.asset_items_total += d.asset_value;
 		});
 
 		$.each(me.frm.doc.service_items || [], function (i, d) {
-			d.amount = flt(flt(d.qty) * flt(d.rate), precision('amount', d));
+			d.amount = flt(flt(d.qty) * flt(d.rate), precision("amount", d));
 			me.frm.doc.service_items_total += d.amount;
 		});
 
-		me.frm.doc.stock_items_total = flt(me.frm.doc.stock_items_total, precision('stock_items_total'));
-		me.frm.doc.asset_items_total = flt(me.frm.doc.asset_items_total, precision('asset_items_total'));
-		me.frm.doc.service_items_total = flt(me.frm.doc.service_items_total, precision('service_items_total'));
+		me.frm.doc.stock_items_total = flt(me.frm.doc.stock_items_total, precision("stock_items_total"));
+		me.frm.doc.asset_items_total = flt(me.frm.doc.asset_items_total, precision("asset_items_total"));
+		me.frm.doc.service_items_total = flt(
+			me.frm.doc.service_items_total,
+			precision("service_items_total")
+		);
 
-		me.frm.doc.total_value = me.frm.doc.stock_items_total + me.frm.doc.asset_items_total + me.frm.doc.service_items_total;
-		me.frm.doc.total_value = flt(me.frm.doc.total_value, precision('total_value'));
+		me.frm.doc.total_value =
+			me.frm.doc.stock_items_total + me.frm.doc.asset_items_total + me.frm.doc.service_items_total;
+		me.frm.doc.total_value = flt(me.frm.doc.total_value, precision("total_value"));
 
-		me.frm.doc.target_qty = flt(me.frm.doc.target_qty, precision('target_qty'));
-		me.frm.doc.target_incoming_rate = me.frm.doc.target_qty ? me.frm.doc.total_value / flt(me.frm.doc.target_qty)
+		me.frm.doc.target_qty = flt(me.frm.doc.target_qty, precision("target_qty"));
+		me.frm.doc.target_incoming_rate = me.frm.doc.target_qty
+			? me.frm.doc.total_value / flt(me.frm.doc.target_qty)
 			: me.frm.doc.total_value;
 
 		me.frm.refresh_fields();
 	}
 };
 
-cur_frm.cscript = new erpnext.assets.AssetCapitalization({frm: cur_frm});
+cur_frm.cscript = new erpnext.assets.AssetCapitalization({ frm: cur_frm });
diff --git a/erpnext/assets/doctype/asset_category/asset_category.js b/erpnext/assets/doctype/asset_category/asset_category.js
index 7dde14e..046b62f 100644
--- a/erpnext/assets/doctype/asset_category/asset_category.js
+++ b/erpnext/assets/doctype/asset_category/asset_category.js
@@ -1,56 +1,55 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Asset Category', {
-	onload: function(frm) {
-		frm.add_fetch('company_name', 'accumulated_depreciation_account', 'accumulated_depreciation_account');
-		frm.add_fetch('company_name', 'depreciation_expense_account', 'depreciation_expense_account');
+frappe.ui.form.on("Asset Category", {
+	onload: function (frm) {
+		frm.add_fetch("company_name", "accumulated_depreciation_account", "accumulated_depreciation_account");
+		frm.add_fetch("company_name", "depreciation_expense_account", "depreciation_expense_account");
 
-		frm.set_query('fixed_asset_account', 'accounts', function(doc, cdt, cdn) {
-			var d  = locals[cdt][cdn];
+		frm.set_query("fixed_asset_account", "accounts", function (doc, cdt, cdn) {
+			var d = locals[cdt][cdn];
 			return {
-				"filters": {
-					"account_type": "Fixed Asset",
-					"root_type": "Asset",
-					"is_group": 0,
-					"company": d.company_name
-				}
+				filters: {
+					account_type: "Fixed Asset",
+					root_type: "Asset",
+					is_group: 0,
+					company: d.company_name,
+				},
 			};
 		});
 
-		frm.set_query('accumulated_depreciation_account', 'accounts', function(doc, cdt, cdn) {
-			var d  = locals[cdt][cdn];
+		frm.set_query("accumulated_depreciation_account", "accounts", function (doc, cdt, cdn) {
+			var d = locals[cdt][cdn];
 			return {
-				"filters": {
-					"account_type": "Accumulated Depreciation",
-					"is_group": 0,
-					"company": d.company_name
-				}
+				filters: {
+					account_type: "Accumulated Depreciation",
+					is_group: 0,
+					company: d.company_name,
+				},
 			};
 		});
 
-		frm.set_query('depreciation_expense_account', 'accounts', function(doc, cdt, cdn) {
-			var d  = locals[cdt][cdn];
+		frm.set_query("depreciation_expense_account", "accounts", function (doc, cdt, cdn) {
+			var d = locals[cdt][cdn];
 			return {
-				"filters": {
-					"account_type": "Depreciation",
-					"root_type": ["in", ["Expense", "Income"]],
-					"is_group": 0,
-					"company": d.company_name
-				}
+				filters: {
+					account_type: "Depreciation",
+					root_type: ["in", ["Expense", "Income"]],
+					is_group: 0,
+					company: d.company_name,
+				},
 			};
 		});
 
-		frm.set_query('capital_work_in_progress_account', 'accounts', function(doc, cdt, cdn) {
-			var d  = locals[cdt][cdn];
+		frm.set_query("capital_work_in_progress_account", "accounts", function (doc, cdt, cdn) {
+			var d = locals[cdt][cdn];
 			return {
-				"filters": {
-					"account_type": "Capital Work in Progress",
-					"is_group": 0,
-					"company": d.company_name
-				}
+				filters: {
+					account_type: "Capital Work in Progress",
+					is_group: 0,
+					company: d.company_name,
+				},
 			};
 		});
-
-	}
+	},
 });
diff --git a/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.js b/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.js
index c99297d..83b5c37 100644
--- a/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.js
+++ b/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.js
@@ -2,52 +2,63 @@
 // For license information, please see license.txt
 frappe.provide("erpnext.asset");
 
-frappe.ui.form.on('Asset Depreciation Schedule', {
-	onload: function(frm) {
+frappe.ui.form.on("Asset Depreciation Schedule", {
+	onload: function (frm) {
 		frm.events.make_schedules_editable(frm);
 	},
 
-	make_schedules_editable: function(frm) {
+	make_schedules_editable: function (frm) {
 		var is_manual_hence_editable = frm.doc.depreciation_method === "Manual" ? true : false;
 		var is_shift_hence_editable = frm.doc.shift_based ? true : false;
 
 		frm.toggle_enable("depreciation_schedule", is_manual_hence_editable || is_shift_hence_editable);
-		frm.fields_dict["depreciation_schedule"].grid.toggle_enable("schedule_date", is_manual_hence_editable);
-		frm.fields_dict["depreciation_schedule"].grid.toggle_enable("depreciation_amount", is_manual_hence_editable);
+		frm.fields_dict["depreciation_schedule"].grid.toggle_enable(
+			"schedule_date",
+			is_manual_hence_editable
+		);
+		frm.fields_dict["depreciation_schedule"].grid.toggle_enable(
+			"depreciation_amount",
+			is_manual_hence_editable
+		);
 		frm.fields_dict["depreciation_schedule"].grid.toggle_enable("shift", is_shift_hence_editable);
-	}
+	},
 });
 
-frappe.ui.form.on('Depreciation Schedule', {
-	make_depreciation_entry: function(frm, cdt, cdn) {
+frappe.ui.form.on("Depreciation Schedule", {
+	make_depreciation_entry: function (frm, cdt, cdn) {
 		var row = locals[cdt][cdn];
 		if (!row.journal_entry) {
 			frappe.call({
 				method: "erpnext.assets.doctype.asset.depreciation.make_depreciation_entry",
 				args: {
-					"asset_depr_schedule_name": frm.doc.name,
-					"date": row.schedule_date
+					asset_depr_schedule_name: frm.doc.name,
+					date: row.schedule_date,
 				},
-				callback: function(r) {
+				callback: function (r) {
 					frappe.model.sync(r.message);
 					frm.refresh();
-				}
-			})
+				},
+			});
 		}
 	},
 
-	depreciation_amount: function(frm, cdt, cdn) {
+	depreciation_amount: function (frm, cdt, cdn) {
 		erpnext.asset.set_accumulated_depreciation(frm);
-	}
+	},
 });
 
-erpnext.asset.set_accumulated_depreciation = function(frm) {
-	if(frm.doc.depreciation_method != "Manual") return;
+erpnext.asset.set_accumulated_depreciation = function (frm) {
+	if (frm.doc.depreciation_method != "Manual") return;
 
 	var accumulated_depreciation = flt(frm.doc.opening_accumulated_depreciation);
 
-	$.each(frm.doc.depreciation_schedule || [], function(i, row) {
-		accumulated_depreciation  += flt(row.depreciation_amount);
-		frappe.model.set_value(row.doctype, row.name, "accumulated_depreciation_amount", accumulated_depreciation);
-	})
+	$.each(frm.doc.depreciation_schedule || [], function (i, row) {
+		accumulated_depreciation += flt(row.depreciation_amount);
+		frappe.model.set_value(
+			row.doctype,
+			row.name,
+			"accumulated_depreciation_amount",
+			accumulated_depreciation
+		);
+	});
 };
diff --git a/erpnext/assets/doctype/asset_maintenance/asset_maintenance.js b/erpnext/assets/doctype/asset_maintenance/asset_maintenance.js
index 5c03b98..83dabab 100644
--- a/erpnext/assets/doctype/asset_maintenance/asset_maintenance.js
+++ b/erpnext/assets/doctype/asset_maintenance/asset_maintenance.js
@@ -1,49 +1,47 @@
 // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Asset Maintenance', {
+frappe.ui.form.on("Asset Maintenance", {
 	setup: (frm) => {
-		frm.set_query("assign_to", "asset_maintenance_tasks", function(doc) {
+		frm.set_query("assign_to", "asset_maintenance_tasks", function (doc) {
 			return {
 				query: "erpnext.assets.doctype.asset_maintenance.asset_maintenance.get_team_members",
 				filters: {
-					maintenance_team: doc.maintenance_team
-				}
+					maintenance_team: doc.maintenance_team,
+				},
 			};
 		});
 
-		frm.set_indicator_formatter('maintenance_status',
-			function(doc) {
-				let indicator = 'blue';
-				if (doc.maintenance_status == 'Overdue') {
-					indicator = 'orange';
-				}
-				if (doc.maintenance_status == 'Cancelled') {
-					indicator = 'red';
-				}
-				return indicator;
+		frm.set_indicator_formatter("maintenance_status", function (doc) {
+			let indicator = "blue";
+			if (doc.maintenance_status == "Overdue") {
+				indicator = "orange";
 			}
-		);
+			if (doc.maintenance_status == "Cancelled") {
+				indicator = "red";
+			}
+			return indicator;
+		});
 	},
 
 	refresh: (frm) => {
-		if(!frm.is_new()) {
-			frm.trigger('make_dashboard');
+		if (!frm.is_new()) {
+			frm.trigger("make_dashboard");
 		}
 	},
 	make_dashboard: (frm) => {
-		if(!frm.is_new()) {
+		if (!frm.is_new()) {
 			frappe.call({
-				method: 'erpnext.assets.doctype.asset_maintenance.asset_maintenance.get_maintenance_log',
-				args: {asset_name: frm.doc.asset_name},
+				method: "erpnext.assets.doctype.asset_maintenance.asset_maintenance.get_maintenance_log",
+				args: { asset_name: frm.doc.asset_name },
 				callback: (r) => {
-					if(!r.message) {
+					if (!r.message) {
 						return;
 					}
-					const section = frm.dashboard.add_section('', __("Maintenance Log"));
-					var rows = $('<div></div>').appendTo(section);
+					const section = frm.dashboard.add_section("", __("Maintenance Log"));
+					var rows = $("<div></div>").appendTo(section);
 					// show
-					(r.message || []).forEach(function(d) {
+					(r.message || []).forEach(function (d) {
 						$(`<div class='row' style='margin-bottom: 10px;'>
 							<div class='col-sm-3 small'>
 								<a onclick="frappe.set_route('List', 'Asset Maintenance Log',
@@ -54,47 +52,46 @@
 						</div>`).appendTo(rows);
 					});
 					frm.dashboard.show();
-				}
+				},
 			});
 		}
-	}
+	},
 });
 
-frappe.ui.form.on('Asset Maintenance Task', {
-	start_date: (frm, cdt, cdn)  => {
+frappe.ui.form.on("Asset Maintenance Task", {
+	start_date: (frm, cdt, cdn) => {
 		get_next_due_date(frm, cdt, cdn);
 	},
-	periodicity: (frm, cdt, cdn)  => {
+	periodicity: (frm, cdt, cdn) => {
 		get_next_due_date(frm, cdt, cdn);
 	},
-	last_completion_date: (frm, cdt, cdn)  => {
+	last_completion_date: (frm, cdt, cdn) => {
 		get_next_due_date(frm, cdt, cdn);
 	},
-	end_date: (frm, cdt, cdn)  => {
+	end_date: (frm, cdt, cdn) => {
 		get_next_due_date(frm, cdt, cdn);
-	}
+	},
 });
 
 var get_next_due_date = function (frm, cdt, cdn) {
 	var d = locals[cdt][cdn];
 	if (d.start_date && d.periodicity) {
 		return frappe.call({
-			method: 'erpnext.assets.doctype.asset_maintenance.asset_maintenance.calculate_next_due_date',
+			method: "erpnext.assets.doctype.asset_maintenance.asset_maintenance.calculate_next_due_date",
 			args: {
 				start_date: d.start_date,
 				periodicity: d.periodicity,
 				end_date: d.end_date,
 				last_completion_date: d.last_completion_date,
-				next_due_date: d.next_due_date
+				next_due_date: d.next_due_date,
 			},
-			callback: function(r) {
+			callback: function (r) {
 				if (r.message) {
 					frappe.model.set_value(cdt, cdn, "next_due_date", r.message);
-				}
-				else {
+				} else {
 					frappe.model.set_value(cdt, cdn, "next_due_date", "");
 				}
-			}
+			},
 		});
 	}
 };
diff --git a/erpnext/assets/doctype/asset_maintenance_log/asset_maintenance_log.js b/erpnext/assets/doctype/asset_maintenance_log/asset_maintenance_log.js
index bcdc3ac..47a2128 100644
--- a/erpnext/assets/doctype/asset_maintenance_log/asset_maintenance_log.js
+++ b/erpnext/assets/doctype/asset_maintenance_log/asset_maintenance_log.js
@@ -1,15 +1,15 @@
 // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Asset Maintenance Log', {
+frappe.ui.form.on("Asset Maintenance Log", {
 	asset_maintenance: (frm) => {
-		frm.set_query('task', function(doc) {
+		frm.set_query("task", function (doc) {
 			return {
 				query: "erpnext.assets.doctype.asset_maintenance_log.asset_maintenance_log.get_maintenance_tasks",
 				filters: {
-					'asset_maintenance': doc.asset_maintenance
-				}
+					asset_maintenance: doc.asset_maintenance,
+				},
 			};
 		});
-	}
+	},
 });
diff --git a/erpnext/assets/doctype/asset_maintenance_log/asset_maintenance_log_calendar.js b/erpnext/assets/doctype/asset_maintenance_log/asset_maintenance_log_calendar.js
index c804b31..7b7b508 100644
--- a/erpnext/assets/doctype/asset_maintenance_log/asset_maintenance_log_calendar.js
+++ b/erpnext/assets/doctype/asset_maintenance_log/asset_maintenance_log_calendar.js
@@ -3,20 +3,20 @@
 
 frappe.views.calendar["Asset Maintenance Log"] = {
 	field_map: {
-		"start": "due_date",
-		"end": "due_date",
-		"id": "name",
-		"title": "task",
-		"allDay": "allDay",
-		"progress": "progress"
+		start: "due_date",
+		end: "due_date",
+		id: "name",
+		title: "task",
+		allDay: "allDay",
+		progress: "progress",
 	},
 	filters: [
 		{
-			"fieldtype": "Link",
-			"fieldname": "asset_name",
-			"options": "Asset Maintenance",
-			"label": __("Asset Maintenance")
-		}
+			fieldtype: "Link",
+			fieldname: "asset_name",
+			options: "Asset Maintenance",
+			label: __("Asset Maintenance"),
+		},
 	],
-	get_events_method: "frappe.desk.calendar.get_events"
+	get_events_method: "frappe.desk.calendar.get_events",
 };
diff --git a/erpnext/assets/doctype/asset_maintenance_log/asset_maintenance_log_list.js b/erpnext/assets/doctype/asset_maintenance_log/asset_maintenance_log_list.js
index 23000e6..13f2444 100644
--- a/erpnext/assets/doctype/asset_maintenance_log/asset_maintenance_log_list.js
+++ b/erpnext/assets/doctype/asset_maintenance_log/asset_maintenance_log_list.js
@@ -1,15 +1,15 @@
-frappe.listview_settings['Asset Maintenance Log'] = {
+frappe.listview_settings["Asset Maintenance Log"] = {
 	add_fields: ["maintenance_status"],
 	has_indicator_for_draft: 1,
-	get_indicator: function(doc) {
-		if (doc.maintenance_status=="Planned") {
+	get_indicator: function (doc) {
+		if (doc.maintenance_status == "Planned") {
 			return [__(doc.maintenance_status), "orange", "status,=," + doc.maintenance_status];
-		} else if (doc.maintenance_status=="Completed") {
+		} else if (doc.maintenance_status == "Completed") {
 			return [__(doc.maintenance_status), "green", "status,=," + doc.maintenance_status];
-		} else if (doc.maintenance_status=="Cancelled") {
+		} else if (doc.maintenance_status == "Cancelled") {
 			return [__(doc.maintenance_status), "red", "status,=," + doc.maintenance_status];
-		} else if (doc.maintenance_status=="Overdue") {
+		} else if (doc.maintenance_status == "Overdue") {
 			return [__(doc.maintenance_status), "red", "status,=," + doc.maintenance_status];
 		}
-	}
+	},
 };
diff --git a/erpnext/assets/doctype/asset_maintenance_team/asset_maintenance_team.js b/erpnext/assets/doctype/asset_maintenance_team/asset_maintenance_team.js
index c94e3db..8598765 100644
--- a/erpnext/assets/doctype/asset_maintenance_team/asset_maintenance_team.js
+++ b/erpnext/assets/doctype/asset_maintenance_team/asset_maintenance_team.js
@@ -1,8 +1,6 @@
 // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Asset Maintenance Team', {
-	refresh: function() {
-
-	}
+frappe.ui.form.on("Asset Maintenance Team", {
+	refresh: function () {},
 });
diff --git a/erpnext/assets/doctype/asset_movement/asset_movement.js b/erpnext/assets/doctype/asset_movement/asset_movement.js
index 4ccc3f8..e445c90 100644
--- a/erpnext/assets/doctype/asset_movement/asset_movement.js
+++ b/erpnext/assets/doctype/asset_movement/asset_movement.js
@@ -1,104 +1,107 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Asset Movement', {
+frappe.ui.form.on("Asset Movement", {
 	setup: (frm) => {
 		frm.set_query("to_employee", "assets", (doc) => {
 			return {
 				filters: {
-					company: doc.company
-				}
+					company: doc.company,
+				},
 			};
-		})
+		});
 		frm.set_query("from_employee", "assets", (doc) => {
 			return {
 				filters: {
-					company: doc.company
-				}
+					company: doc.company,
+				},
 			};
-		})
+		});
 		frm.set_query("reference_name", (doc) => {
 			return {
 				filters: {
 					company: doc.company,
-					docstatus: 1
-				}
+					docstatus: 1,
+				},
 			};
-		})
+		});
 		frm.set_query("reference_doctype", () => {
 			return {
 				filters: {
-					name: ["in", ["Purchase Receipt", "Purchase Invoice"]]
-				}
+					name: ["in", ["Purchase Receipt", "Purchase Invoice"]],
+				},
 			};
 		}),
-		frm.set_query("asset", "assets", () => {
-			return {
-				filters: {
-					status: ["not in", ["Draft"]]
-				}
-			}
-		})
+			frm.set_query("asset", "assets", () => {
+				return {
+					filters: {
+						status: ["not in", ["Draft"]],
+					},
+				};
+			});
 	},
 
 	onload: (frm) => {
-		frm.trigger('set_required_fields');
+		frm.trigger("set_required_fields");
 	},
 
 	purpose: (frm) => {
-		frm.trigger('set_required_fields');
+		frm.trigger("set_required_fields");
 	},
 
 	set_required_fields: (frm, cdt, cdn) => {
 		let fieldnames_to_be_altered;
-		if (frm.doc.purpose === 'Transfer') {
+		if (frm.doc.purpose === "Transfer") {
 			fieldnames_to_be_altered = {
 				target_location: { read_only: 0, reqd: 1 },
 				source_location: { read_only: 1, reqd: 1 },
 				from_employee: { read_only: 1, reqd: 0 },
-				to_employee: { read_only: 1, reqd: 0 }
+				to_employee: { read_only: 1, reqd: 0 },
 			};
-		}
-		else if (frm.doc.purpose === 'Receipt') {
+		} else if (frm.doc.purpose === "Receipt") {
 			fieldnames_to_be_altered = {
 				target_location: { read_only: 0, reqd: 1 },
 				source_location: { read_only: 1, reqd: 0 },
 				from_employee: { read_only: 0, reqd: 0 },
-				to_employee: { read_only: 1, reqd: 0 }
+				to_employee: { read_only: 1, reqd: 0 },
 			};
-		}
-		else if (frm.doc.purpose === 'Issue') {
+		} else if (frm.doc.purpose === "Issue") {
 			fieldnames_to_be_altered = {
 				target_location: { read_only: 1, reqd: 0 },
 				source_location: { read_only: 1, reqd: 0 },
 				from_employee: { read_only: 1, reqd: 0 },
-				to_employee: { read_only: 0, reqd: 1 }
+				to_employee: { read_only: 0, reqd: 1 },
 			};
 		}
 		if (fieldnames_to_be_altered) {
-			Object.keys(fieldnames_to_be_altered).forEach(fieldname => {
+			Object.keys(fieldnames_to_be_altered).forEach((fieldname) => {
 				let property_to_be_altered = fieldnames_to_be_altered[fieldname];
-				Object.keys(property_to_be_altered).forEach(property => {
+				Object.keys(property_to_be_altered).forEach((property) => {
 					let value = property_to_be_altered[property];
-					frm.fields_dict['assets'].grid.update_docfield_property(fieldname, property, value);
+					frm.fields_dict["assets"].grid.update_docfield_property(fieldname, property, value);
 				});
 			});
-			frm.refresh_field('assets');
+			frm.refresh_field("assets");
 		}
-	}
+	},
 });
 
-frappe.ui.form.on('Asset Movement Item', {
-	asset: function(frm, cdt, cdn) {
+frappe.ui.form.on("Asset Movement Item", {
+	asset: function (frm, cdt, cdn) {
 		// on manual entry of an asset auto sets their source location / employee
 		const asset_name = locals[cdt][cdn].asset;
-		if (asset_name){
-			frappe.db.get_doc('Asset', asset_name).then((asset_doc) => {
-				if(asset_doc.location) frappe.model.set_value(cdt, cdn, 'source_location', asset_doc.location);
-				if(asset_doc.custodian) frappe.model.set_value(cdt, cdn, 'from_employee', asset_doc.custodian);
-			}).catch((err) => {
-				console.log(err); // eslint-disable-line
-			});
+		if (asset_name) {
+			frappe.db
+				.get_doc("Asset", asset_name)
+				.then((asset_doc) => {
+					if (asset_doc.location)
+						frappe.model.set_value(cdt, cdn, "source_location", asset_doc.location);
+					if (asset_doc.custodian)
+						frappe.model.set_value(cdt, cdn, "from_employee", asset_doc.custodian);
+				})
+				.catch((err) => {
+					console.log(err); // eslint-disable-line
+				});
 		}
-	}
+	},
 });
diff --git a/erpnext/assets/doctype/asset_repair/asset_repair.js b/erpnext/assets/doctype/asset_repair/asset_repair.js
index 03afcb9..27a4eb6 100644
--- a/erpnext/assets/doctype/asset_repair/asset_repair.js
+++ b/erpnext/assets/doctype/asset_repair/asset_repair.js
@@ -1,31 +1,31 @@
 // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Asset Repair', {
-	setup: function(frm) {
-		frm.fields_dict.cost_center.get_query = function(doc) {
+frappe.ui.form.on("Asset Repair", {
+	setup: function (frm) {
+		frm.fields_dict.cost_center.get_query = function (doc) {
 			return {
 				filters: {
-					'is_group': 0,
-					'company': doc.company
-				}
+					is_group: 0,
+					company: doc.company,
+				},
 			};
 		};
 
-		frm.fields_dict.project.get_query = function(doc) {
+		frm.fields_dict.project.get_query = function (doc) {
 			return {
 				filters: {
-					'company': doc.company
-				}
+					company: doc.company,
+				},
 			};
 		};
 
-		frm.fields_dict.warehouse.get_query = function(doc) {
+		frm.fields_dict.warehouse.get_query = function (doc) {
 			return {
 				filters: {
-					'is_group': 0,
-					'company': doc.company
-				}
+					is_group: 0,
+					company: doc.company,
+				},
 			};
 		};
 
@@ -33,87 +33,87 @@
 			let row = locals[cdt][cdn];
 			return {
 				filters: {
-					'item_code': row.item_code,
-					'voucher_type': doc.doctype,
-					'voucher_no': ["in", [doc.name, ""]],
-					'is_cancelled': 0,
-				}
-			}
+					item_code: row.item_code,
+					voucher_type: doc.doctype,
+					voucher_no: ["in", [doc.name, ""]],
+					is_cancelled: 0,
+				},
+			};
 		});
 	},
 
-	refresh: function(frm) {
+	refresh: function (frm) {
 		if (frm.doc.docstatus) {
-			frm.add_custom_button(__("View General Ledger"), function() {
+			frm.add_custom_button(__("View General Ledger"), function () {
 				frappe.route_options = {
-					"voucher_no": frm.doc.name
+					voucher_no: frm.doc.name,
 				};
 				frappe.set_route("query-report", "General Ledger");
 			});
 		}
 
-		let sbb_field = frm.get_docfield('stock_items', 'serial_and_batch_bundle');
+		let sbb_field = frm.get_docfield("stock_items", "serial_and_batch_bundle");
 		if (sbb_field) {
 			sbb_field.get_route_options_for_new_doc = (row) => {
 				return {
-					'item_code': row.doc.item_code,
-					'voucher_type': frm.doc.doctype,
-				}
+					item_code: row.doc.item_code,
+					voucher_type: frm.doc.doctype,
+				};
 			};
 		}
 	},
 
 	repair_status: (frm) => {
 		if (frm.doc.completion_date && frm.doc.repair_status == "Completed") {
-			frappe.call ({
+			frappe.call({
 				method: "erpnext.assets.doctype.asset_repair.asset_repair.get_downtime",
 				args: {
-					"failure_date":frm.doc.failure_date,
-					"completion_date":frm.doc.completion_date
+					failure_date: frm.doc.failure_date,
+					completion_date: frm.doc.completion_date,
 				},
-				callback: function(r) {
-					if(r.message) {
+				callback: function (r) {
+					if (r.message) {
 						frm.set_value("downtime", r.message + " Hrs");
 					}
-				}
+				},
 			});
 		}
 
 		if (frm.doc.repair_status == "Completed") {
-			frm.set_value('completion_date', frappe.datetime.now_datetime());
+			frm.set_value("completion_date", frappe.datetime.now_datetime());
 		}
 	},
 
 	stock_items_on_form_rendered() {
 		erpnext.setup_serial_or_batch_no();
-	}
+	},
 });
 
-frappe.ui.form.on('Asset Repair Consumed Item', {
-	item_code: function(frm, cdt, cdn) {
+frappe.ui.form.on("Asset Repair Consumed Item", {
+	item_code: function (frm, cdt, cdn) {
 		var item = locals[cdt][cdn];
 
 		let item_args = {
-			'item_code': item.item_code,
-			'warehouse': frm.doc.warehouse,
-			'qty': item.consumed_quantity,
-			'serial_no': item.serial_no,
-			'company': frm.doc.company,
+			item_code: item.item_code,
+			warehouse: frm.doc.warehouse,
+			qty: item.consumed_quantity,
+			serial_no: item.serial_no,
+			company: frm.doc.company,
 		};
 
 		frappe.call({
-			method: 'erpnext.stock.utils.get_incoming_rate',
+			method: "erpnext.stock.utils.get_incoming_rate",
 			args: {
-				args: item_args
+				args: item_args,
 			},
-			callback: function(r) {
-				frappe.model.set_value(cdt, cdn, 'valuation_rate', r.message);
-			}
+			callback: function (r) {
+				frappe.model.set_value(cdt, cdn, "valuation_rate", r.message);
+			},
 		});
 	},
 
-	consumed_quantity: function(frm, cdt, cdn) {
+	consumed_quantity: function (frm, cdt, cdn) {
 		var row = locals[cdt][cdn];
-		frappe.model.set_value(cdt, cdn, 'total_value', row.consumed_quantity * row.valuation_rate);
+		frappe.model.set_value(cdt, cdn, "total_value", row.consumed_quantity * row.valuation_rate);
 	},
 });
diff --git a/erpnext/assets/doctype/asset_repair/asset_repair_list.js b/erpnext/assets/doctype/asset_repair/asset_repair_list.js
index 86376f4..633c39b 100644
--- a/erpnext/assets/doctype/asset_repair/asset_repair_list.js
+++ b/erpnext/assets/doctype/asset_repair/asset_repair_list.js
@@ -1,12 +1,12 @@
-frappe.listview_settings['Asset Repair'] = {
+frappe.listview_settings["Asset Repair"] = {
 	add_fields: ["repair_status"],
-	get_indicator: function(doc) {
-		if(doc.repair_status=="Pending") {
+	get_indicator: function (doc) {
+		if (doc.repair_status == "Pending") {
 			return [__("Pending"), "orange"];
-		} else if(doc.repair_status=="Completed") {
+		} else if (doc.repair_status == "Completed") {
 			return [__("Completed"), "green"];
-		} else if(doc.repair_status=="Cancelled") {
+		} else if (doc.repair_status == "Cancelled") {
 			return [__("Cancelled"), "red"];
 		}
-	}
+	},
 };
diff --git a/erpnext/assets/doctype/asset_shift_allocation/asset_shift_allocation.js b/erpnext/assets/doctype/asset_shift_allocation/asset_shift_allocation.js
index 54df693..c22feb0 100644
--- a/erpnext/assets/doctype/asset_shift_allocation/asset_shift_allocation.js
+++ b/erpnext/assets/doctype/asset_shift_allocation/asset_shift_allocation.js
@@ -1,14 +1,14 @@
 // Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
-frappe.ui.form.on('Asset Shift Allocation', {
-	onload: function(frm) {
+frappe.ui.form.on("Asset Shift Allocation", {
+	onload: function (frm) {
 		frm.events.make_schedules_editable(frm);
 	},
 
-	make_schedules_editable: function(frm) {
+	make_schedules_editable: function (frm) {
 		frm.toggle_enable("depreciation_schedule", true);
 		frm.fields_dict["depreciation_schedule"].grid.toggle_enable("schedule_date", false);
 		frm.fields_dict["depreciation_schedule"].grid.toggle_enable("depreciation_amount", false);
 		frm.fields_dict["depreciation_schedule"].grid.toggle_enable("shift", true);
-	}
+	},
 });
diff --git a/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.js b/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.js
index d07f40c..7fbe6d0 100644
--- a/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.js
+++ b/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.js
@@ -3,61 +3,61 @@
 
 frappe.provide("erpnext.accounts.dimensions");
 
-frappe.ui.form.on('Asset Value Adjustment', {
-	setup: function(frm) {
-		frm.add_fetch('company', 'cost_center', 'cost_center');
-		frm.set_query('cost_center', function() {
+frappe.ui.form.on("Asset Value Adjustment", {
+	setup: function (frm) {
+		frm.add_fetch("company", "cost_center", "cost_center");
+		frm.set_query("cost_center", function () {
 			return {
 				filters: {
 					company: frm.doc.company,
-					is_group: 0
-				}
-			}
+					is_group: 0,
+				},
+			};
 		});
-		frm.set_query('asset', function() {
+		frm.set_query("asset", function () {
 			return {
 				filters: {
 					calculate_depreciation: 1,
-					docstatus: 1
-				}
+					docstatus: 1,
+				},
 			};
 		});
 	},
 
-	onload: function(frm) {
-		if(frm.is_new() && frm.doc.asset) {
+	onload: function (frm) {
+		if (frm.is_new() && frm.doc.asset) {
 			frm.trigger("set_current_asset_value");
 		}
 
 		erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype);
 	},
 
-	company: function(frm) {
+	company: function (frm) {
 		erpnext.accounts.dimensions.update_dimension(frm, frm.doctype);
 	},
 
-	asset: function(frm) {
+	asset: function (frm) {
 		frm.trigger("set_current_asset_value");
 	},
 
-	finance_book: function(frm) {
+	finance_book: function (frm) {
 		frm.trigger("set_current_asset_value");
 	},
 
-	set_current_asset_value: function(frm) {
+	set_current_asset_value: function (frm) {
 		if (frm.doc.asset) {
 			frm.call({
 				method: "erpnext.assets.doctype.asset.asset.get_asset_value_after_depreciation",
 				args: {
 					asset_name: frm.doc.asset,
-					finance_book: frm.doc.finance_book
+					finance_book: frm.doc.finance_book,
 				},
-				callback: function(r) {
+				callback: function (r) {
 					if (r.message) {
-						frm.set_value('current_asset_value', r.message);
+						frm.set_value("current_asset_value", r.message);
 					}
-				}
+				},
 			});
 		}
-	}
+	},
 });
diff --git a/erpnext/assets/doctype/location/location.js b/erpnext/assets/doctype/location/location.js
index 0f069b2..97d7239 100644
--- a/erpnext/assets/doctype/location/location.js
+++ b/erpnext/assets/doctype/location/location.js
@@ -1,13 +1,13 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Location', {
+frappe.ui.form.on("Location", {
 	setup: function (frm) {
 		frm.set_query("parent_location", function () {
 			return {
-				"filters": {
-					"is_group": 1
-				}
+				filters: {
+					is_group: 1,
+				},
 			};
 		});
 	},
@@ -15,10 +15,9 @@
 	onload_post_render(frm) {
 		if (!frm.doc.location && frm.doc.latitude && frm.doc.longitude) {
 			frm.fields_dict.location.map.setView([frm.doc.latitude, frm.doc.longitude], 13);
-		}
-		else {
-			frm.doc.latitude = frm.fields_dict.location.map.getCenter()['lat'];
-			frm.doc.longitude = frm.fields_dict.location.map.getCenter()['lng'];
+		} else {
+			frm.doc.latitude = frm.fields_dict.location.map.getCenter()["lat"];
+			frm.doc.longitude = frm.fields_dict.location.map.getCenter()["lng"];
 		}
 	},
 });
diff --git a/erpnext/assets/doctype/location/location_tree.js b/erpnext/assets/doctype/location/location_tree.js
index 3e105f6..c3484c2 100644
--- a/erpnext/assets/doctype/location/location_tree.js
+++ b/erpnext/assets/doctype/location/location_tree.js
@@ -1,7 +1,7 @@
 frappe.treeview_settings["Location"] = {
 	ignore_fields: ["parent_location"],
-	get_tree_nodes: 'erpnext.assets.doctype.location.location.get_children',
-	add_tree_node: 'erpnext.assets.doctype.location.location.add_node',
+	get_tree_nodes: "erpnext.assets.doctype.location.location.get_children",
+	add_tree_node: "erpnext.assets.doctype.location.location.add_node",
 	filters: [
 		{
 			fieldname: "location",
@@ -10,9 +10,9 @@
 			label: __("Location"),
 			get_query: function () {
 				return {
-					filters: [["Location", "is_group", "=", 1]]
+					filters: [["Location", "is_group", "=", 1]],
 				};
-			}
+			},
 		},
 	],
 	breadcrumb: "Assets",
@@ -24,10 +24,10 @@
 			action: function () {
 				frappe.new_doc("Location", true);
 			},
-			condition: 'frappe.boot.user.can_create.indexOf("Location") !== -1'
-		}
+			condition: 'frappe.boot.user.can_create.indexOf("Location") !== -1',
+		},
 	],
 	onload: function (treeview) {
 		treeview.make_tree();
-	}
+	},
 };
diff --git a/erpnext/assets/doctype/maintenance_team_member/maintenance_team_member.js b/erpnext/assets/doctype/maintenance_team_member/maintenance_team_member.js
index 2db7125..6f3521f 100644
--- a/erpnext/assets/doctype/maintenance_team_member/maintenance_team_member.js
+++ b/erpnext/assets/doctype/maintenance_team_member/maintenance_team_member.js
@@ -1,8 +1,6 @@
 // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Maintenance Team Member', {
-	refresh: function() {
-
-	}
+frappe.ui.form.on("Maintenance Team Member", {
+	refresh: function () {},
 });
diff --git a/erpnext/assets/report/fixed_asset_register/fixed_asset_register.js b/erpnext/assets/report/fixed_asset_register/fixed_asset_register.js
index 812b7f7..c7fd8e0 100644
--- a/erpnext/assets/report/fixed_asset_register/fixed_asset_register.js
+++ b/erpnext/assets/report/fixed_asset_register/fixed_asset_register.js
@@ -1,105 +1,104 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Fixed Asset Register"] = {
-	"filters": [
+	filters: [
 		{
-			fieldname:"company",
+			fieldname: "company",
 			label: __("Company"),
 			fieldtype: "Link",
 			options: "Company",
 			default: frappe.defaults.get_user_default("Company"),
-			reqd: 1
+			reqd: 1,
 		},
 		{
-			fieldname:"status",
+			fieldname: "status",
 			label: __("Status"),
 			fieldtype: "Select",
 			options: "\nIn Location\nDisposed",
-			default: 'In Location'
+			default: "In Location",
 		},
 		{
-			fieldname:"asset_category",
+			fieldname: "asset_category",
 			label: __("Asset Category"),
 			fieldtype: "Link",
-			options: "Asset Category"
+			options: "Asset Category",
 		},
 		{
-			fieldname:"cost_center",
+			fieldname: "cost_center",
 			label: __("Cost Center"),
 			fieldtype: "Link",
-			options: "Cost Center"
+			options: "Cost Center",
 		},
 		{
-			fieldname:"group_by",
+			fieldname: "group_by",
 			label: __("Group By"),
 			fieldtype: "Select",
 			options: ["--Select a group--", "Asset Category", "Location"],
 			default: "--Select a group--",
-			reqd: 1
+			reqd: 1,
 		},
 		{
-			fieldname:"only_existing_assets",
+			fieldname: "only_existing_assets",
 			label: __("Only existing assets"),
-			fieldtype: "Check"
+			fieldtype: "Check",
 		},
 		{
-			fieldname:"finance_book",
+			fieldname: "finance_book",
 			label: __("Finance Book"),
 			fieldtype: "Link",
 			options: "Finance Book",
 		},
 		{
-			"fieldname": "include_default_book_assets",
-			"label": __("Include Default FB Assets"),
-			"fieldtype": "Check",
-			"default": 1
+			fieldname: "include_default_book_assets",
+			label: __("Include Default FB Assets"),
+			fieldtype: "Check",
+			default: 1,
 		},
 		{
-			"fieldname":"filter_based_on",
-			"label": __("Period Based On"),
-			"fieldtype": "Select",
-			"options": ["--Select a period--", "Fiscal Year", "Date Range"],
-			"default": "--Select a period--",
+			fieldname: "filter_based_on",
+			label: __("Period Based On"),
+			fieldtype: "Select",
+			options: ["--Select a period--", "Fiscal Year", "Date Range"],
+			default: "--Select a period--",
 		},
 		{
-			"fieldname":"from_date",
-			"label": __("Start Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.add_months(frappe.datetime.nowdate(), -12),
-			"depends_on": "eval: doc.filter_based_on == 'Date Range'",
+			fieldname: "from_date",
+			label: __("Start Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.add_months(frappe.datetime.nowdate(), -12),
+			depends_on: "eval: doc.filter_based_on == 'Date Range'",
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("End Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.nowdate(),
-			"depends_on": "eval: doc.filter_based_on == 'Date Range'",
+			fieldname: "to_date",
+			label: __("End Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.nowdate(),
+			depends_on: "eval: doc.filter_based_on == 'Date Range'",
 		},
 		{
-			"fieldname":"from_fiscal_year",
-			"label": __("Start Year"),
-			"fieldtype": "Link",
-			"options": "Fiscal Year",
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
-			"depends_on": "eval: doc.filter_based_on == 'Fiscal Year'",
+			fieldname: "from_fiscal_year",
+			label: __("Start Year"),
+			fieldtype: "Link",
+			options: "Fiscal Year",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
+			depends_on: "eval: doc.filter_based_on == 'Fiscal Year'",
 		},
 		{
-			"fieldname":"to_fiscal_year",
-			"label": __("End Year"),
-			"fieldtype": "Link",
-			"options": "Fiscal Year",
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
-			"depends_on": "eval: doc.filter_based_on == 'Fiscal Year'",
+			fieldname: "to_fiscal_year",
+			label: __("End Year"),
+			fieldtype: "Link",
+			options: "Fiscal Year",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
+			depends_on: "eval: doc.filter_based_on == 'Fiscal Year'",
 		},
 		{
-			"fieldname":"date_based_on",
-			"label": __("Date Based On"),
-			"fieldtype": "Select",
-			"options": ["Purchase Date", "Available For Use Date"],
-			"default": "Purchase Date",
-			"depends_on": "eval: doc.filter_based_on == 'Date Range' || doc.filter_based_on == 'Fiscal Year'",
+			fieldname: "date_based_on",
+			label: __("Date Based On"),
+			fieldtype: "Select",
+			options: ["Purchase Date", "Available For Use Date"],
+			default: "Purchase Date",
+			depends_on: "eval: doc.filter_based_on == 'Date Range' || doc.filter_based_on == 'Fiscal Year'",
 		},
-	]
+	],
 };
diff --git a/erpnext/bulk_transaction/doctype/bulk_transaction_log/bulk_transaction_log.js b/erpnext/bulk_transaction/doctype/bulk_transaction_log/bulk_transaction_log.js
index dc54d60..9ee0c49 100644
--- a/erpnext/bulk_transaction/doctype/bulk_transaction_log/bulk_transaction_log.js
+++ b/erpnext/bulk_transaction/doctype/bulk_transaction_log/bulk_transaction_log.js
@@ -3,17 +3,31 @@
 
 frappe.ui.form.on("Bulk Transaction Log", {
 	refresh(frm) {
-		frm.add_custom_button(__('Succeeded Entries'), function() {
-			frappe.set_route('List', 'Bulk Transaction Log Detail', {'date': frm.doc.date, 'transaction_status': "Success"});
-		}, __("View"));
-		frm.add_custom_button(__('Failed Entries'), function() {
-			frappe.set_route('List', 'Bulk Transaction Log Detail', {'date': frm.doc.date, 'transaction_status': "Failed"});
-		}, __("View"));
+		frm.add_custom_button(
+			__("Succeeded Entries"),
+			function () {
+				frappe.set_route("List", "Bulk Transaction Log Detail", {
+					date: frm.doc.date,
+					transaction_status: "Success",
+				});
+			},
+			__("View")
+		);
+		frm.add_custom_button(
+			__("Failed Entries"),
+			function () {
+				frappe.set_route("List", "Bulk Transaction Log Detail", {
+					date: frm.doc.date,
+					transaction_status: "Failed",
+				});
+			},
+			__("View")
+		);
 		if (frm.doc.failed) {
-			frm.add_custom_button(__('Retry Failed Transactions'), function() {
+			frm.add_custom_button(__("Retry Failed Transactions"), function () {
 				frappe.call({
 					method: "erpnext.utilities.bulk_transaction.retry",
-					args: {date: frm.doc.date}
+					args: { date: frm.doc.date },
 				});
 			});
 		}
diff --git a/erpnext/buying/doctype/buying_settings/buying_settings.js b/erpnext/buying/doctype/buying_settings/buying_settings.js
index 32431fc..11b920a 100644
--- a/erpnext/buying/doctype/buying_settings/buying_settings.js
+++ b/erpnext/buying/doctype/buying_settings/buying_settings.js
@@ -1,31 +1,38 @@
 // Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Buying Settings', {
+frappe.ui.form.on("Buying Settings", {
 	// refresh: function(frm) {
-
 	// }
 });
 
-frappe.tour['Buying Settings'] = [
+frappe.tour["Buying Settings"] = [
 	{
 		fieldname: "supp_master_name",
 		title: "Supplier Naming By",
-		description: __("By default, the Supplier Name is set as per the Supplier Name entered. If you want Suppliers to be named by a <a href='https://docs.erpnext.com/docs/user/manual/en/setting-up/settings/naming-series' target='_blank'>Naming Series</a> choose the 'Naming Series' option."),
+		description: __(
+			"By default, the Supplier Name is set as per the Supplier Name entered. If you want Suppliers to be named by a <a href='https://docs.erpnext.com/docs/user/manual/en/setting-up/settings/naming-series' target='_blank'>Naming Series</a> choose the 'Naming Series' option."
+		),
 	},
 	{
 		fieldname: "buying_price_list",
 		title: "Default Buying Price List",
-		description: __("Configure the default Price List when creating a new Purchase transaction. Item prices will be fetched from this Price List.")
+		description: __(
+			"Configure the default Price List when creating a new Purchase transaction. Item prices will be fetched from this Price List."
+		),
 	},
 	{
 		fieldname: "po_required",
 		title: "Purchase Order Required for Purchase Invoice & Receipt Creation",
-		description: __("If this option is configured 'Yes', ERPNext will prevent you from creating a Purchase Invoice or Receipt without creating a Purchase Order first. This configuration can be overridden for a particular supplier by enabling the 'Allow Purchase Invoice Creation Without Purchase Order' checkbox in the Supplier master.")
+		description: __(
+			"If this option is configured 'Yes', ERPNext will prevent you from creating a Purchase Invoice or Receipt without creating a Purchase Order first. This configuration can be overridden for a particular supplier by enabling the 'Allow Purchase Invoice Creation Without Purchase Order' checkbox in the Supplier master."
+		),
 	},
 	{
 		fieldname: "pr_required",
 		title: "Purchase Receipt Required for Purchase Invoice Creation",
-		description: __("If this option is configured 'Yes', ERPNext will prevent you from creating a Purchase Invoice without creating a Purchase Receipt first. This configuration can be overridden for a particular supplier by enabling the 'Allow Purchase Invoice Creation Without Purchase Receipt' checkbox in the Supplier master.")
-	}
+		description: __(
+			"If this option is configured 'Yes', ERPNext will prevent you from creating a Purchase Invoice without creating a Purchase Receipt first. This configuration can be overridden for a particular supplier by enabling the 'Allow Purchase Invoice Creation Without Purchase Receipt' checkbox in the Supplier master."
+		),
+	},
 ];
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.js b/erpnext/buying/doctype/purchase_order/purchase_order.js
index 3b671bb..7875646 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.js
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.js
@@ -9,52 +9,52 @@
 erpnext.buying.setup_buying_controller();
 
 frappe.ui.form.on("Purchase Order", {
-	setup: function(frm) {
-
+	setup: function (frm) {
 		if (frm.doc.is_old_subcontracting_flow) {
-			frm.set_query("reserve_warehouse", "supplied_items", function() {
+			frm.set_query("reserve_warehouse", "supplied_items", function () {
 				return {
 					filters: {
-						"company": frm.doc.company,
-						"name": ['!=', frm.doc.supplier_warehouse],
-						"is_group": 0
-					}
-				}
+						company: frm.doc.company,
+						name: ["!=", frm.doc.supplier_warehouse],
+						is_group: 0,
+					},
+				};
 			});
 		}
 
-		frm.set_indicator_formatter('item_code',
-			function(doc) { return (doc.qty<=doc.received_qty) ? "green" : "orange" })
-
-		frm.set_query("expense_account", "items", function() {
-			return {
-				query: "erpnext.controllers.queries.get_expense_account",
-				filters: {'company': frm.doc.company}
-			}
+		frm.set_indicator_formatter("item_code", function (doc) {
+			return doc.qty <= doc.received_qty ? "green" : "orange";
 		});
 
-		frm.set_query("fg_item", "items", function() {
+		frm.set_query("expense_account", "items", function () {
+			return {
+				query: "erpnext.controllers.queries.get_expense_account",
+				filters: { company: frm.doc.company },
+			};
+		});
+
+		frm.set_query("fg_item", "items", function () {
 			return {
 				filters: {
-					'is_stock_item': 1,
-					'is_sub_contracted_item': 1,
-					'default_bom': ['!=', '']
-				}
-			}
+					is_stock_item: 1,
+					is_sub_contracted_item: 1,
+					default_bom: ["!=", ""],
+				},
+			};
 		});
 	},
 
-	company: function(frm) {
+	company: function (frm) {
 		erpnext.accounts.dimensions.update_dimension(frm, frm.doctype);
 	},
 
-	refresh: function(frm) {
-		if(frm.doc.is_old_subcontracting_flow) {
-			frm.trigger('get_materials_from_supplier');
+	refresh: function (frm) {
+		if (frm.doc.is_old_subcontracting_flow) {
+			frm.trigger("get_materials_from_supplier");
 
-			$('a.grey-link').each(function () {
-				var id = $(this).children(':first-child').attr('data-label');
-				if (id == 'Duplicate') {
+			$("a.grey-link").each(function () {
+				var id = $(this).children(":first-child").attr("data-label");
+				if (id == "Duplicate") {
 					$(this).remove();
 					return false;
 				}
@@ -62,87 +62,91 @@
 		}
 	},
 
-	get_materials_from_supplier: function(frm) {
+	get_materials_from_supplier: function (frm) {
 		let po_details = [];
 
-		if (frm.doc.supplied_items && (flt(frm.doc.per_received, 2) == 100 || frm.doc.status === 'Closed')) {
-			frm.doc.supplied_items.forEach(d => {
+		if (frm.doc.supplied_items && (flt(frm.doc.per_received, 2) == 100 || frm.doc.status === "Closed")) {
+			frm.doc.supplied_items.forEach((d) => {
 				if (d.total_supplied_qty && d.total_supplied_qty != d.consumed_qty) {
-					po_details.push(d.name)
+					po_details.push(d.name);
 				}
 			});
 		}
 
 		if (po_details && po_details.length) {
-			frm.add_custom_button(__('Return of Components'), () => {
-				frm.call({
-					method: 'erpnext.controllers.subcontracting_controller.get_materials_from_supplier',
-					freeze: true,
-					freeze_message: __('Creating Stock Entry'),
-					args: {
-						subcontract_order: frm.doc.name,
-						rm_details: po_details,
-						order_doctype: cur_frm.doc.doctype
-					},
-					callback: function(r) {
-						if (r && r.message) {
-							const doc = frappe.model.sync(r.message);
-							frappe.set_route("Form", doc[0].doctype, doc[0].name);
-						}
-					}
-				});
-			}, __('Create'));
+			frm.add_custom_button(
+				__("Return of Components"),
+				() => {
+					frm.call({
+						method: "erpnext.controllers.subcontracting_controller.get_materials_from_supplier",
+						freeze: true,
+						freeze_message: __("Creating Stock Entry"),
+						args: {
+							subcontract_order: frm.doc.name,
+							rm_details: po_details,
+							order_doctype: cur_frm.doc.doctype,
+						},
+						callback: function (r) {
+							if (r && r.message) {
+								const doc = frappe.model.sync(r.message);
+								frappe.set_route("Form", doc[0].doctype, doc[0].name);
+							}
+						},
+					});
+				},
+				__("Create")
+			);
 		}
 	},
 
-	onload: function(frm) {
+	onload: function (frm) {
 		set_schedule_date(frm);
-		if (!frm.doc.transaction_date){
-			frm.set_value('transaction_date', frappe.datetime.get_today())
+		if (!frm.doc.transaction_date) {
+			frm.set_value("transaction_date", frappe.datetime.get_today());
 		}
 
-		erpnext.queries.setup_queries(frm, "Warehouse", function() {
+		erpnext.queries.setup_queries(frm, "Warehouse", function () {
 			return erpnext.queries.warehouse(frm.doc);
 		});
 
 		// On cancel and amending a purchase order with advance payment, reset advance paid amount
 		if (frm.is_new()) {
-			frm.set_value("advance_paid", 0)
+			frm.set_value("advance_paid", 0);
 		}
 	},
 
-	apply_tds: function(frm) {
+	apply_tds: function (frm) {
 		if (!frm.doc.apply_tds) {
-			frm.set_value("tax_withholding_category", '');
+			frm.set_value("tax_withholding_category", "");
 		} else {
 			frm.set_value("tax_withholding_category", frm.supplier_tds);
 		}
 	},
 
-	get_subcontracting_boms_for_finished_goods: function(fg_item) {
+	get_subcontracting_boms_for_finished_goods: function (fg_item) {
 		return frappe.call({
-			method:"erpnext.subcontracting.doctype.subcontracting_bom.subcontracting_bom.get_subcontracting_boms_for_finished_goods",
+			method: "erpnext.subcontracting.doctype.subcontracting_bom.subcontracting_bom.get_subcontracting_boms_for_finished_goods",
 			args: {
-				fg_items: fg_item
+				fg_items: fg_item,
 			},
 		});
 	},
 
-	get_subcontracting_boms_for_service_item: function(service_item) {
+	get_subcontracting_boms_for_service_item: function (service_item) {
 		return frappe.call({
-			method:"erpnext.subcontracting.doctype.subcontracting_bom.subcontracting_bom.get_subcontracting_boms_for_service_item",
+			method: "erpnext.subcontracting.doctype.subcontracting_bom.subcontracting_bom.get_subcontracting_boms_for_service_item",
 			args: {
-				service_item: service_item
+				service_item: service_item,
 			},
 		});
 	},
 });
 
 frappe.ui.form.on("Purchase Order Item", {
-	schedule_date: function(frm, cdt, cdn) {
+	schedule_date: function (frm, cdt, cdn) {
 		var row = locals[cdt][cdn];
 		if (row.schedule_date) {
-			if(!frm.doc.schedule_date) {
+			if (!frm.doc.schedule_date) {
 				erpnext.utils.copy_value_in_all_rows(frm.doc, cdt, cdn, "items", "schedule_date");
 			} else {
 				set_schedule_date(frm);
@@ -150,12 +154,12 @@
 		}
 	},
 
-	item_code: async function(frm, cdt, cdn) {
+	item_code: async function (frm, cdt, cdn) {
 		if (frm.doc.is_subcontracted && !frm.doc.is_old_subcontracting_flow) {
 			var row = locals[cdt][cdn];
 
 			if (row.item_code && !row.fg_item) {
-				var result = await frm.events.get_subcontracting_boms_for_service_item(row.item_code)
+				var result = await frm.events.get_subcontracting_boms_for_service_item(row.item_code);
 
 				if (result.message && Object.keys(result.message).length) {
 					var finished_goods = Object.keys(result.message);
@@ -175,7 +179,7 @@
 									fieldtype: "Autocomplete",
 									label: __("Finished Good"),
 									options: finished_goods,
-								}
+								},
 							],
 							primary_action_label: __("Select"),
 							primary_action: () => {
@@ -198,16 +202,21 @@
 		}
 	},
 
-	fg_item: async function(frm, cdt, cdn) {
+	fg_item: async function (frm, cdt, cdn) {
 		if (frm.doc.is_subcontracted && !frm.doc.is_old_subcontracting_flow) {
 			var row = locals[cdt][cdn];
 
 			if (row.fg_item) {
-				var result = await frm.events.get_subcontracting_boms_for_finished_goods(row.fg_item)
+				var result = await frm.events.get_subcontracting_boms_for_finished_goods(row.fg_item);
 
 				if (result.message && Object.keys(result.message).length) {
 					frappe.model.set_value(cdt, cdn, "item_code", result.message.service_item);
-					frappe.model.set_value(cdt, cdn, "qty", flt(row.fg_item_qty) * flt(result.message.conversion_factor));
+					frappe.model.set_value(
+						cdt,
+						cdn,
+						"qty",
+						flt(row.fg_item_qty) * flt(result.message.conversion_factor)
+					);
 					frappe.model.set_value(cdt, cdn, "uom", result.message.service_item_uom);
 				}
 			}
@@ -219,25 +228,36 @@
 			var row = locals[cdt][cdn];
 
 			if (row.fg_item) {
-				var result = await frm.events.get_subcontracting_boms_for_finished_goods(row.fg_item)
+				var result = await frm.events.get_subcontracting_boms_for_finished_goods(row.fg_item);
 
-				if (result.message && row.item_code == result.message.service_item && row.uom == result.message.service_item_uom) {
-					frappe.model.set_value(cdt, cdn, "fg_item_qty", flt(row.qty) / flt(result.message.conversion_factor));
+				if (
+					result.message &&
+					row.item_code == result.message.service_item &&
+					row.uom == result.message.service_item_uom
+				) {
+					frappe.model.set_value(
+						cdt,
+						cdn,
+						"fg_item_qty",
+						flt(row.qty) / flt(result.message.conversion_factor)
+					);
 				}
 			}
 		}
 	},
 });
 
-erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends erpnext.buying.BuyingController {
+erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends (
+	erpnext.buying.BuyingController
+) {
 	setup() {
 		this.frm.custom_make_buttons = {
-			'Purchase Receipt': 'Purchase Receipt',
-			'Purchase Invoice': 'Purchase Invoice',
-			'Payment Entry': 'Payment',
-			'Subcontracting Order': 'Subcontracting Order',
-			'Stock Entry': 'Material to Supplier'
-		}
+			"Purchase Receipt": "Purchase Receipt",
+			"Purchase Invoice": "Purchase Invoice",
+			"Payment Entry": "Payment",
+			"Subcontracting Order": "Subcontracting Order",
+			"Stock Entry": "Material to Supplier",
+		};
 
 		super.setup();
 	}
@@ -250,110 +270,155 @@
 
 		for (var i in cur_frm.doc.items) {
 			var item = cur_frm.doc.items[i];
-			if(item.delivered_by_supplier !== 1) {
+			if (item.delivered_by_supplier !== 1) {
 				allow_receipt = true;
 			} else {
 				is_drop_ship = true;
 			}
 
-			if(is_drop_ship && allow_receipt) {
+			if (is_drop_ship && allow_receipt) {
 				break;
 			}
 		}
 
 		this.frm.set_df_property("drop_ship", "hidden", !is_drop_ship);
 
-		if(doc.docstatus == 1) {
+		if (doc.docstatus == 1) {
 			this.frm.fields_dict.items_section.wrapper.addClass("hide-border");
-			if(!this.frm.doc.set_warehouse) {
+			if (!this.frm.doc.set_warehouse) {
 				this.frm.fields_dict.items_section.wrapper.removeClass("hide-border");
 			}
 
-			if(!in_list(["Closed", "Delivered"], doc.status)) {
-				if(this.frm.doc.status !== 'Closed' && flt(this.frm.doc.per_received, 2) < 100 && flt(this.frm.doc.per_billed, 2) < 100) {
+			if (!in_list(["Closed", "Delivered"], doc.status)) {
+				if (
+					this.frm.doc.status !== "Closed" &&
+					flt(this.frm.doc.per_received, 2) < 100 &&
+					flt(this.frm.doc.per_billed, 2) < 100
+				) {
 					if (!this.frm.doc.__onload || this.frm.doc.__onload.can_update_items) {
-						this.frm.add_custom_button(__('Update Items'), () => {
+						this.frm.add_custom_button(__("Update Items"), () => {
 							erpnext.utils.update_child_items({
 								frm: this.frm,
 								child_docname: "items",
 								child_doctype: "Purchase Order Detail",
 								cannot_add_row: false,
-							})
+							});
 						});
 					}
 				}
 				if (this.frm.has_perm("submit")) {
-					if(flt(doc.per_billed, 2) < 100 || flt(doc.per_received, 2) < 100) {
+					if (flt(doc.per_billed, 2) < 100 || flt(doc.per_received, 2) < 100) {
 						if (doc.status != "On Hold") {
-							this.frm.add_custom_button(__('Hold'), () => this.hold_purchase_order(), __("Status"));
-						} else{
-							this.frm.add_custom_button(__('Resume'), () => this.unhold_purchase_order(), __("Status"));
+							this.frm.add_custom_button(
+								__("Hold"),
+								() => this.hold_purchase_order(),
+								__("Status")
+							);
+						} else {
+							this.frm.add_custom_button(
+								__("Resume"),
+								() => this.unhold_purchase_order(),
+								__("Status")
+							);
 						}
-						this.frm.add_custom_button(__('Close'), () => this.close_purchase_order(), __("Status"));
+						this.frm.add_custom_button(
+							__("Close"),
+							() => this.close_purchase_order(),
+							__("Status")
+						);
 					}
 				}
 
-				if(is_drop_ship && doc.status!="Delivered") {
-					this.frm.add_custom_button(__('Delivered'),
-						this.delivered_by_supplier, __("Status"));
+				if (is_drop_ship && doc.status != "Delivered") {
+					this.frm.add_custom_button(__("Delivered"), this.delivered_by_supplier, __("Status"));
 
 					this.frm.page.set_inner_btn_group_as_primary(__("Status"));
 				}
-			} else if(in_list(["Closed", "Delivered"], doc.status)) {
+			} else if (in_list(["Closed", "Delivered"], doc.status)) {
 				if (this.frm.has_perm("submit")) {
-					this.frm.add_custom_button(__('Re-open'), () => this.unclose_purchase_order(), __("Status"));
+					this.frm.add_custom_button(
+						__("Re-open"),
+						() => this.unclose_purchase_order(),
+						__("Status")
+					);
 				}
 			}
-			if(doc.status != "Closed") {
+			if (doc.status != "Closed") {
 				if (doc.status != "On Hold") {
-					if(flt(doc.per_received, 2) < 100 && allow_receipt) {
-						cur_frm.add_custom_button(__('Purchase Receipt'), this.make_purchase_receipt, __('Create'));
+					if (flt(doc.per_received, 2) < 100 && allow_receipt) {
+						cur_frm.add_custom_button(
+							__("Purchase Receipt"),
+							this.make_purchase_receipt,
+							__("Create")
+						);
 						if (doc.is_subcontracted) {
 							if (doc.is_old_subcontracting_flow) {
 								if (me.has_unsupplied_items()) {
-									cur_frm.add_custom_button(__('Material to Supplier'), function() { me.make_stock_entry(); }, __("Transfer"));
+									cur_frm.add_custom_button(
+										__("Material to Supplier"),
+										function () {
+											me.make_stock_entry();
+										},
+										__("Transfer")
+									);
 								}
-							}
-							else {
-								cur_frm.add_custom_button(__('Subcontracting Order'), this.make_subcontracting_order, __('Create'));
+							} else {
+								cur_frm.add_custom_button(
+									__("Subcontracting Order"),
+									this.make_subcontracting_order,
+									__("Create")
+								);
 							}
 						}
 					}
-					if(flt(doc.per_billed, 2) < 100)
-						cur_frm.add_custom_button(__('Purchase Invoice'),
-							this.make_purchase_invoice, __('Create'));
+					if (flt(doc.per_billed, 2) < 100)
+						cur_frm.add_custom_button(
+							__("Purchase Invoice"),
+							this.make_purchase_invoice,
+							__("Create")
+						);
 
-					if(flt(doc.per_billed, 2) < 100 && doc.status != "Delivered") {
+					if (flt(doc.per_billed, 2) < 100 && doc.status != "Delivered") {
 						this.frm.add_custom_button(
-							__('Payment'),
+							__("Payment"),
 							() => this.make_payment_entry(),
-							__('Create')
+							__("Create")
 						);
 					}
 
-					if(flt(doc.per_billed, 2) < 100) {
-						this.frm.add_custom_button(__('Payment Request'),
-							function() { me.make_payment_request() }, __('Create'));
+					if (flt(doc.per_billed, 2) < 100) {
+						this.frm.add_custom_button(
+							__("Payment Request"),
+							function () {
+								me.make_payment_request();
+							},
+							__("Create")
+						);
 					}
 
 					if (doc.docstatus === 1 && !doc.inter_company_order_reference) {
 						let me = this;
 						let internal = me.frm.doc.is_internal_supplier;
 						if (internal) {
-							let button_label = (me.frm.doc.company === me.frm.doc.represents_company) ? "Internal Sales Order" :
-								"Inter Company Sales Order";
+							let button_label =
+								me.frm.doc.company === me.frm.doc.represents_company
+									? "Internal Sales Order"
+									: "Inter Company Sales Order";
 
-							me.frm.add_custom_button(button_label, function() {
-								me.make_inter_company_order(me.frm);
-							}, __('Create'));
+							me.frm.add_custom_button(
+								button_label,
+								function () {
+									me.make_inter_company_order(me.frm);
+								},
+								__("Create")
+							);
 						}
-
 					}
 				}
 
-				cur_frm.page.set_inner_btn_group_as_primary(__('Create'));
+				cur_frm.page.set_inner_btn_group_as_primary(__("Create"));
 			}
-		} else if(doc.docstatus===0) {
+		} else if (doc.docstatus === 0) {
 			cur_frm.cscript.add_from_mappers();
 		}
 	}
@@ -362,19 +427,20 @@
 		erpnext.utils.map_current_doc({
 			method: "erpnext.stock.doctype.material_request.material_request.make_purchase_order_based_on_supplier",
 			args: {
-				supplier: this.frm.doc.supplier
+				supplier: this.frm.doc.supplier,
 			},
 			source_doctype: "Material Request",
 			source_name: this.frm.doc.supplier,
 			target: this.frm,
 			setters: {
-				company: this.frm.doc.company
+				company: this.frm.doc.company,
 			},
 			get_query_filters: {
 				docstatus: ["!=", 2],
-				supplier: this.frm.doc.supplier
+				supplier: this.frm.doc.supplier,
 			},
-			get_query_method: "erpnext.stock.doctype.material_request.material_request.get_material_requests_based_on_supplier"
+			get_query_method:
+				"erpnext.stock.doctype.material_request.material_request.get_material_requests_based_on_supplier",
 		});
 	}
 
@@ -383,27 +449,27 @@
 	}
 
 	has_unsupplied_items() {
-		return this.frm.doc['supplied_items'].some(item => item.required_qty > item.supplied_qty);
+		return this.frm.doc["supplied_items"].some((item) => item.required_qty > item.supplied_qty);
 	}
 
 	make_stock_entry() {
 		frappe.call({
-			method:"erpnext.controllers.subcontracting_controller.make_rm_stock_entry",
+			method: "erpnext.controllers.subcontracting_controller.make_rm_stock_entry",
 			args: {
 				subcontract_order: cur_frm.doc.name,
-				order_doctype: cur_frm.doc.doctype
+				order_doctype: cur_frm.doc.doctype,
 			},
-			callback: function(r) {
+			callback: function (r) {
 				var doclist = frappe.model.sync(r.message);
 				frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
-			}
+			},
 		});
 	}
 
 	make_inter_company_order(frm) {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.buying.doctype.purchase_order.purchase_order.make_inter_company_sales_order",
-			frm: frm
+			frm: frm,
 		});
 	}
 
@@ -411,134 +477,163 @@
 		frappe.model.open_mapped_doc({
 			method: "erpnext.buying.doctype.purchase_order.purchase_order.make_purchase_receipt",
 			frm: cur_frm,
-			freeze_message: __("Creating Purchase Receipt ...")
-		})
+			freeze_message: __("Creating Purchase Receipt ..."),
+		});
 	}
 
 	make_purchase_invoice() {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.buying.doctype.purchase_order.purchase_order.make_purchase_invoice",
-			frm: cur_frm
-		})
+			frm: cur_frm,
+		});
 	}
 
 	make_subcontracting_order() {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.buying.doctype.purchase_order.purchase_order.make_subcontracting_order",
 			frm: cur_frm,
-			freeze_message: __("Creating Subcontracting Order ...")
-		})
+			freeze_message: __("Creating Subcontracting Order ..."),
+		});
 	}
 
 	add_from_mappers() {
 		var me = this;
-		this.frm.add_custom_button(__('Material Request'),
-			function() {
+		this.frm.add_custom_button(
+			__("Material Request"),
+			function () {
 				erpnext.utils.map_current_doc({
 					method: "erpnext.stock.doctype.material_request.material_request.make_purchase_order",
 					source_doctype: "Material Request",
 					target: me.frm,
 					setters: {
 						schedule_date: undefined,
-						status: undefined
+						status: undefined,
 					},
 					get_query_filters: {
 						material_request_type: "Purchase",
 						docstatus: 1,
 						status: ["!=", "Stopped"],
 						per_ordered: ["<", 100],
-						company: me.frm.doc.company
+						company: me.frm.doc.company,
 					},
 					allow_child_item_selection: true,
 					child_fieldname: "items",
-					child_columns: ["item_code", "qty", "ordered_qty"]
-				})
-			}, __("Get Items From"));
+					child_columns: ["item_code", "qty", "ordered_qty"],
+				});
+			},
+			__("Get Items From")
+		);
 
-		this.frm.add_custom_button(__('Supplier Quotation'),
-			function() {
+		this.frm.add_custom_button(
+			__("Supplier Quotation"),
+			function () {
 				erpnext.utils.map_current_doc({
 					method: "erpnext.buying.doctype.supplier_quotation.supplier_quotation.make_purchase_order",
 					source_doctype: "Supplier Quotation",
 					target: me.frm,
 					setters: {
 						supplier: me.frm.doc.supplier,
-						valid_till: undefined
+						valid_till: undefined,
 					},
 					get_query_filters: {
 						docstatus: 1,
 						status: ["not in", ["Stopped", "Expired"]],
-					}
-				})
-			}, __("Get Items From"));
+					},
+				});
+			},
+			__("Get Items From")
+		);
 
-		this.frm.add_custom_button(__('Update Rate as per Last Purchase'),
-			function() {
+		this.frm.add_custom_button(
+			__("Update Rate as per Last Purchase"),
+			function () {
 				frappe.call({
-					"method": "get_last_purchase_rate",
-					"doc": me.frm.doc,
-					callback: function(r, rt) {
+					method: "get_last_purchase_rate",
+					doc: me.frm.doc,
+					callback: function (r, rt) {
 						me.frm.dirty();
 						me.frm.cscript.calculate_taxes_and_totals();
+					},
+				});
+			},
+			__("Tools")
+		);
+
+		this.frm.add_custom_button(
+			__("Link to Material Request"),
+			function () {
+				var my_items = [];
+				for (var i in me.frm.doc.items) {
+					if (!me.frm.doc.items[i].material_request) {
+						my_items.push(me.frm.doc.items[i].item_code);
 					}
-				})
-			}, __("Tools"));
-
-		this.frm.add_custom_button(__('Link to Material Request'),
-		function() {
-			var my_items = [];
-			for (var i in me.frm.doc.items) {
-				if(!me.frm.doc.items[i].material_request){
-					my_items.push(me.frm.doc.items[i].item_code);
 				}
-			}
-			frappe.call({
-				method: "erpnext.buying.utils.get_linked_material_requests",
-				args:{
-					items: my_items
-				},
-				callback: function(r) {
-					if(r.exc) return;
+				frappe.call({
+					method: "erpnext.buying.utils.get_linked_material_requests",
+					args: {
+						items: my_items,
+					},
+					callback: function (r) {
+						if (r.exc) return;
 
-					var i = 0;
-					var item_length = me.frm.doc.items.length;
-					while (i < item_length) {
-						var qty = me.frm.doc.items[i].qty;
-						(r.message[0] || []).forEach(function(d) {
-							if (d.qty > 0 && qty > 0 && me.frm.doc.items[i].item_code == d.item_code && !me.frm.doc.items[i].material_request_item)
-							{
-								me.frm.doc.items[i].material_request = d.mr_name;
-								me.frm.doc.items[i].material_request_item = d.mr_item;
-								var my_qty = Math.min(qty, d.qty);
-								qty = qty - my_qty;
-								d.qty = d.qty  - my_qty;
-								me.frm.doc.items[i].stock_qty = my_qty * me.frm.doc.items[i].conversion_factor;
-								me.frm.doc.items[i].qty = my_qty;
+						var i = 0;
+						var item_length = me.frm.doc.items.length;
+						while (i < item_length) {
+							var qty = me.frm.doc.items[i].qty;
+							(r.message[0] || []).forEach(function (d) {
+								if (
+									d.qty > 0 &&
+									qty > 0 &&
+									me.frm.doc.items[i].item_code == d.item_code &&
+									!me.frm.doc.items[i].material_request_item
+								) {
+									me.frm.doc.items[i].material_request = d.mr_name;
+									me.frm.doc.items[i].material_request_item = d.mr_item;
+									var my_qty = Math.min(qty, d.qty);
+									qty = qty - my_qty;
+									d.qty = d.qty - my_qty;
+									me.frm.doc.items[i].stock_qty =
+										my_qty * me.frm.doc.items[i].conversion_factor;
+									me.frm.doc.items[i].qty = my_qty;
 
-								frappe.msgprint("Assigning " + d.mr_name + " to " + d.item_code + " (row " + me.frm.doc.items[i].idx + ")");
-								if (qty > 0) {
-									frappe.msgprint("Splitting " + qty + " units of " + d.item_code);
-									var new_row = frappe.model.add_child(me.frm.doc, me.frm.doc.items[i].doctype, "items");
-									item_length++;
+									frappe.msgprint(
+										"Assigning " +
+											d.mr_name +
+											" to " +
+											d.item_code +
+											" (row " +
+											me.frm.doc.items[i].idx +
+											")"
+									);
+									if (qty > 0) {
+										frappe.msgprint("Splitting " + qty + " units of " + d.item_code);
+										var new_row = frappe.model.add_child(
+											me.frm.doc,
+											me.frm.doc.items[i].doctype,
+											"items"
+										);
+										item_length++;
 
-									for (var key in me.frm.doc.items[i]) {
-										new_row[key] = me.frm.doc.items[i][key];
+										for (var key in me.frm.doc.items[i]) {
+											new_row[key] = me.frm.doc.items[i][key];
+										}
+
+										new_row.idx = item_length;
+										new_row["stock_qty"] = new_row.conversion_factor * qty;
+										new_row["qty"] = qty;
+										new_row["material_request"] = "";
+										new_row["material_request_item"] = "";
 									}
-
-									new_row.idx = item_length;
-									new_row["stock_qty"] = new_row.conversion_factor * qty;
-									new_row["qty"] = qty;
-									new_row["material_request"] = "";
-									new_row["material_request_item"] = "";
 								}
-							}
-						});
-						i++;
-					}
-					refresh_field("items");
-				}
-			});
-		}, __("Tools"));
+							});
+							i++;
+						}
+						refresh_field("items");
+					},
+				});
+			},
+			__("Tools")
+		);
 	}
 
 	tc_name() {
@@ -547,7 +642,7 @@
 
 	items_add(doc, cdt, cdn) {
 		var row = frappe.get_doc(cdt, cdn);
-		if(doc.schedule_date) {
+		if (doc.schedule_date) {
 			row.schedule_date = doc.schedule_date;
 			refresh_field("schedule_date", cdn, "items");
 		} else {
@@ -555,24 +650,24 @@
 		}
 	}
 
-	unhold_purchase_order(){
-		cur_frm.cscript.update_status("Resume", "Draft")
+	unhold_purchase_order() {
+		cur_frm.cscript.update_status("Resume", "Draft");
 	}
 
-	hold_purchase_order(){
+	hold_purchase_order() {
 		var me = this;
 		var d = new frappe.ui.Dialog({
-			title: __('Reason for Hold'),
+			title: __("Reason for Hold"),
 			fields: [
 				{
-					"fieldname": "reason_for_hold",
-					"fieldtype": "Text",
-					"reqd": 1,
-				}
+					fieldname: "reason_for_hold",
+					fieldtype: "Text",
+					reqd: 1,
+				},
 			],
-			primary_action: function() {
+			primary_action: function () {
 				var data = d.get_values();
-				let reason_for_hold = 'Reason for hold: ' + data.reason_for_hold;
+				let reason_for_hold = "Reason for hold: " + data.reason_for_hold;
 
 				frappe.call({
 					method: "frappe.desk.form.utils.add_comment",
@@ -581,30 +676,30 @@
 						reference_name: me.frm.docname,
 						content: __(reason_for_hold),
 						comment_email: frappe.session.user,
-						comment_by: frappe.session.user_fullname
+						comment_by: frappe.session.user_fullname,
 					},
-					callback: function(r) {
-						if(!r.exc) {
-							me.update_status('Hold', 'On Hold')
+					callback: function (r) {
+						if (!r.exc) {
+							me.update_status("Hold", "On Hold");
 							d.hide();
 						}
-					}
+					},
 				});
-			}
+			},
 		});
 		d.show();
 	}
 
-	unclose_purchase_order(){
-		cur_frm.cscript.update_status('Re-open', 'Submitted')
+	unclose_purchase_order() {
+		cur_frm.cscript.update_status("Re-open", "Submitted");
 	}
 
-	close_purchase_order(){
-		cur_frm.cscript.update_status('Close', 'Closed')
+	close_purchase_order() {
+		cur_frm.cscript.update_status("Close", "Closed");
 	}
 
-	delivered_by_supplier(){
-		cur_frm.cscript.update_status('Deliver', 'Delivered')
+	delivered_by_supplier() {
+		cur_frm.cscript.update_status("Deliver", "Delivered");
 	}
 
 	items_on_form_rendered() {
@@ -617,51 +712,55 @@
 };
 
 // for backward compatibility: combine new and previous states
-extend_cscript(cur_frm.cscript, new erpnext.buying.PurchaseOrderController({frm: cur_frm}));
+extend_cscript(cur_frm.cscript, new erpnext.buying.PurchaseOrderController({ frm: cur_frm }));
 
-cur_frm.cscript.update_status= function(label, status){
+cur_frm.cscript.update_status = function (label, status) {
 	frappe.call({
 		method: "erpnext.buying.doctype.purchase_order.purchase_order.update_status",
-		args: {status: status, name: cur_frm.doc.name},
-		callback: function(r) {
+		args: { status: status, name: cur_frm.doc.name },
+		callback: function (r) {
 			cur_frm.set_value("status", status);
 			cur_frm.reload_doc();
-		}
-	})
-}
+		},
+	});
+};
 
-cur_frm.fields_dict['items'].grid.get_field('project').get_query = function(doc, cdt, cdn) {
+cur_frm.fields_dict["items"].grid.get_field("project").get_query = function (doc, cdt, cdn) {
 	return {
-		filters:[
-			['Project', 'status', 'not in', 'Completed, Cancelled']
-		]
-	}
-}
+		filters: [["Project", "status", "not in", "Completed, Cancelled"]],
+	};
+};
 
 if (cur_frm.doc.is_old_subcontracting_flow) {
-	cur_frm.fields_dict['items'].grid.get_field('bom').get_query = function(doc, cdt, cdn) {
-		var d = locals[cdt][cdn]
+	cur_frm.fields_dict["items"].grid.get_field("bom").get_query = function (doc, cdt, cdn) {
+		var d = locals[cdt][cdn];
 		return {
 			filters: [
-				['BOM', 'item', '=', d.item_code],
-				['BOM', 'is_active', '=', '1'],
-				['BOM', 'docstatus', '=', '1'],
-				['BOM', 'company', '=', doc.company]
-			]
-		}
-	}
+				["BOM", "item", "=", d.item_code],
+				["BOM", "is_active", "=", "1"],
+				["BOM", "docstatus", "=", "1"],
+				["BOM", "company", "=", doc.company],
+			],
+		};
+	};
 }
 
 function set_schedule_date(frm) {
-	if(frm.doc.schedule_date){
-		erpnext.utils.copy_value_in_all_rows(frm.doc, frm.doc.doctype, frm.doc.name, "items", "schedule_date");
+	if (frm.doc.schedule_date) {
+		erpnext.utils.copy_value_in_all_rows(
+			frm.doc,
+			frm.doc.doctype,
+			frm.doc.name,
+			"items",
+			"schedule_date"
+		);
 	}
 }
 
 frappe.provide("erpnext.buying");
 
-frappe.ui.form.on("Purchase Order", "is_subcontracted", function(frm) {
+frappe.ui.form.on("Purchase Order", "is_subcontracted", function (frm) {
 	if (frm.doc.is_old_subcontracting_flow) {
 		erpnext.buying.get_default_bom(frm);
 	}
-});
\ No newline at end of file
+});
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order_list.js b/erpnext/buying/doctype/purchase_order/purchase_order_list.js
index d39d7f9..5e33b42 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order_list.js
+++ b/erpnext/buying/doctype/purchase_order/purchase_order_list.js
@@ -1,6 +1,15 @@
-frappe.listview_settings['Purchase Order'] = {
-	add_fields: ["base_grand_total", "company", "currency", "supplier",
-		"supplier_name", "per_received", "per_billed", "status", "advance_payment_status"],
+frappe.listview_settings["Purchase Order"] = {
+	add_fields: [
+		"base_grand_total",
+		"company",
+		"currency",
+		"supplier",
+		"supplier_name",
+		"per_received",
+		"per_billed",
+		"status",
+		"advance_payment_status",
+	],
 	get_indicator: function (doc) {
 		if (doc.status === "Closed") {
 			return [__("Closed"), "green", "status,=,Closed"];
@@ -12,15 +21,25 @@
 			return [__("To Pay"), "gray", "advance_payment_status,=,Initiated"];
 		} else if (flt(doc.per_received, 2) < 100 && doc.status !== "Closed") {
 			if (flt(doc.per_billed, 2) < 100) {
-				return [__("To Receive and Bill"), "orange",
-					"per_received,<,100|per_billed,<,100|status,!=,Closed"];
+				return [
+					__("To Receive and Bill"),
+					"orange",
+					"per_received,<,100|per_billed,<,100|status,!=,Closed",
+				];
 			} else {
-				return [__("To Receive"), "orange",
-					"per_received,<,100|per_billed,=,100|status,!=,Closed"];
+				return [__("To Receive"), "orange", "per_received,<,100|per_billed,=,100|status,!=,Closed"];
 			}
-		} else if (flt(doc.per_received, 2) >= 100 && flt(doc.per_billed, 2) < 100 && doc.status !== "Closed") {
+		} else if (
+			flt(doc.per_received, 2) >= 100 &&
+			flt(doc.per_billed, 2) < 100 &&
+			doc.status !== "Closed"
+		) {
 			return [__("To Bill"), "orange", "per_received,=,100|per_billed,<,100|status,!=,Closed"];
-		} else if (flt(doc.per_received, 2) >= 100 && flt(doc.per_billed, 2) == 100 && doc.status !== "Closed") {
+		} else if (
+			flt(doc.per_received, 2) >= 100 &&
+			flt(doc.per_billed, 2) == 100 &&
+			doc.status !== "Closed"
+		) {
 			return [__("Completed"), "green", "per_received,=,100|per_billed,=,100|status,!=,Closed"];
 		}
 	},
@@ -28,25 +47,23 @@
 		var method = "erpnext.buying.doctype.purchase_order.purchase_order.close_or_unclose_purchase_orders";
 
 		listview.page.add_menu_item(__("Close"), function () {
-			listview.call_for_selected_items(method, { "status": "Closed" });
+			listview.call_for_selected_items(method, { status: "Closed" });
 		});
 
 		listview.page.add_menu_item(__("Reopen"), function () {
-			listview.call_for_selected_items(method, { "status": "Submitted" });
+			listview.call_for_selected_items(method, { status: "Submitted" });
 		});
 
-
-		listview.page.add_action_item(__("Purchase Invoice"), ()=>{
+		listview.page.add_action_item(__("Purchase Invoice"), () => {
 			erpnext.bulk_transaction_processing.create(listview, "Purchase Order", "Purchase Invoice");
 		});
 
-		listview.page.add_action_item(__("Purchase Receipt"), ()=>{
+		listview.page.add_action_item(__("Purchase Receipt"), () => {
 			erpnext.bulk_transaction_processing.create(listview, "Purchase Order", "Purchase Receipt");
 		});
 
-		listview.page.add_action_item(__("Advance Payment"), ()=>{
+		listview.page.add_action_item(__("Advance Payment"), () => {
 			erpnext.bulk_transaction_processing.create(listview, "Purchase Order", "Payment Entry");
 		});
-
-	}
+	},
 };
diff --git a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js
index 31a06cf..272d077 100644
--- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js
+++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js
@@ -1,60 +1,70 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-cur_frm.add_fetch('contact', 'email_id', 'email_id')
+cur_frm.add_fetch("contact", "email_id", "email_id");
 
 erpnext.buying.setup_buying_controller();
 
-frappe.ui.form.on("Request for Quotation",{
-	setup: function(frm) {
+frappe.ui.form.on("Request for Quotation", {
+	setup: function (frm) {
 		frm.custom_make_buttons = {
-			'Supplier Quotation': 'Create'
-		}
+			"Supplier Quotation": "Create",
+		};
 
-		frm.fields_dict["suppliers"].grid.get_field("contact").get_query = function(doc, cdt, cdn) {
+		frm.fields_dict["suppliers"].grid.get_field("contact").get_query = function (doc, cdt, cdn) {
 			let d = locals[cdt][cdn];
 			return {
 				query: "frappe.contacts.doctype.contact.contact.contact_query",
 				filters: {
 					link_doctype: "Supplier",
-					link_name: d.supplier || ""
-				}
+					link_name: d.supplier || "",
+				},
 			};
-		}
+		};
 
-		frm.set_query('warehouse', 'items', () => ({
+		frm.set_query("warehouse", "items", () => ({
 			filters: {
 				company: frm.doc.company,
-				is_group: 0
-			}
+				is_group: 0,
+			},
 		}));
 	},
 
-	onload: function(frm) {
-		if(!frm.doc.message_for_supplier) {
-			frm.set_value("message_for_supplier", __("Please supply the specified items at the best possible rates"))
+	onload: function (frm) {
+		if (!frm.doc.message_for_supplier) {
+			frm.set_value(
+				"message_for_supplier",
+				__("Please supply the specified items at the best possible rates")
+			);
 		}
 	},
 
-	refresh: function(frm, cdt, cdn) {
+	refresh: function (frm, cdt, cdn) {
 		if (frm.doc.docstatus === 1) {
+			frm.add_custom_button(
+				__("Supplier Quotation"),
+				function () {
+					frm.trigger("make_supplier_quotation");
+				},
+				__("Create")
+			);
 
-			frm.add_custom_button(__('Supplier Quotation'),
-				function(){ frm.trigger("make_supplier_quotation") }, __("Create"));
-
-
-			frm.add_custom_button(__("Send Emails to Suppliers"), function() {
-				frappe.call({
-					method: 'erpnext.buying.doctype.request_for_quotation.request_for_quotation.send_supplier_emails',
-					freeze: true,
-					args: {
-						rfq_name: frm.doc.name
-					},
-					callback: function(r){
-						frm.reload_doc();
-					}
-				});
-			}, __("Tools"));
+			frm.add_custom_button(
+				__("Send Emails to Suppliers"),
+				function () {
+					frappe.call({
+						method: "erpnext.buying.doctype.request_for_quotation.request_for_quotation.send_supplier_emails",
+						freeze: true,
+						args: {
+							rfq_name: frm.doc.name,
+						},
+						callback: function (r) {
+							frm.reload_doc();
+						},
+					});
+				},
+				__("Tools")
+			);
 
 			frm.add_custom_button(
 				__("Download PDF"),
@@ -122,13 +132,13 @@
 							var w = window.open(
 								frappe.urllib.get_full_url(
 									"/api/method/erpnext.buying.doctype.request_for_quotation.request_for_quotation.get_pdf?" +
-									new URLSearchParams({
-										name: frm.doc.name,
-										supplier: data.supplier,
-										print_format: data.print_format || "Standard",
-										language: data.language || frappe.boot.lang,
-										letterhead: data.letter_head || frm.doc.letter_head || "",
-									}).toString()
+										new URLSearchParams({
+											name: frm.doc.name,
+											supplier: data.supplier,
+											print_format: data.print_format || "Standard",
+											language: data.language || frappe.boot.lang,
+											letterhead: data.letter_head || frm.doc.letter_head || "",
+										}).toString()
 								)
 							);
 							if (!w) {
@@ -147,101 +157,109 @@
 		}
 	},
 
-	make_supplier_quotation: function(frm) {
+	make_supplier_quotation: function (frm) {
 		var doc = frm.doc;
 		var dialog = new frappe.ui.Dialog({
 			title: __("Create Supplier Quotation"),
 			fields: [
-				{	"fieldtype": "Link",
-					"label": __("Supplier"),
-					"fieldname": "supplier",
-					"options": 'Supplier',
-					"reqd": 1,
+				{
+					fieldtype: "Link",
+					label: __("Supplier"),
+					fieldname: "supplier",
+					options: "Supplier",
+					reqd: 1,
 					get_query: () => {
 						return {
 							filters: [
-								["Supplier", "name", "in", frm.doc.suppliers.map((row) => {return row.supplier;})]
-							]
-						}
-					}
-				}
+								[
+									"Supplier",
+									"name",
+									"in",
+									frm.doc.suppliers.map((row) => {
+										return row.supplier;
+									}),
+								],
+							],
+						};
+					},
+				},
 			],
 			primary_action_label: __("Create"),
 			primary_action: (args) => {
-				if(!args) return;
+				if (!args) return;
 				dialog.hide();
 
 				return frappe.call({
 					type: "GET",
 					method: "erpnext.buying.doctype.request_for_quotation.request_for_quotation.make_supplier_quotation_from_rfq",
 					args: {
-						"source_name": doc.name,
-						"for_supplier": args.supplier
+						source_name: doc.name,
+						for_supplier: args.supplier,
 					},
 					freeze: true,
-					callback: function(r) {
-						if(!r.exc) {
+					callback: function (r) {
+						if (!r.exc) {
 							var doc = frappe.model.sync(r.message);
 							frappe.set_route("Form", r.message.doctype, r.message.name);
 						}
-					}
+					},
 				});
-			}
+			},
 		});
 
-		dialog.show()
+		dialog.show();
 	},
 
 	schedule_date(frm) {
-		if(frm.doc.schedule_date){
+		if (frm.doc.schedule_date) {
 			frm.doc.items.forEach((item) => {
 				item.schedule_date = frm.doc.schedule_date;
-			})
+			});
 		}
 		refresh_field("items");
 	},
 	preview: (frm) => {
 		let dialog = new frappe.ui.Dialog({
-			title: __('Preview Email'),
+			title: __("Preview Email"),
 			fields: [
 				{
-					label: __('Supplier'),
-					fieldtype: 'Select',
-					fieldname: 'supplier',
-					options: frm.doc.suppliers.map(row => row.supplier),
-					reqd: 1
+					label: __("Supplier"),
+					fieldtype: "Select",
+					fieldname: "supplier",
+					options: frm.doc.suppliers.map((row) => row.supplier),
+					reqd: 1,
 				},
 				{
-					fieldtype: 'Column Break',
-					fieldname: 'col_break_1',
+					fieldtype: "Column Break",
+					fieldname: "col_break_1",
 				},
 				{
-					label: __('Subject'),
-					fieldtype: 'Data',
-					fieldname: 'subject',
+					label: __("Subject"),
+					fieldtype: "Data",
+					fieldname: "subject",
 					read_only: 1,
-					depends_on: 'subject'
+					depends_on: "subject",
 				},
 				{
-					fieldtype: 'Section Break',
-					fieldname: 'sec_break_1',
-					hide_border: 1
+					fieldtype: "Section Break",
+					fieldname: "sec_break_1",
+					hide_border: 1,
 				},
 				{
-					label: __('Email'),
-					fieldtype: 'HTML',
-					fieldname: 'email_preview'
+					label: __("Email"),
+					fieldtype: "HTML",
+					fieldname: "email_preview",
 				},
 				{
-					fieldtype: 'Section Break',
-					fieldname: 'sec_break_2'
+					fieldtype: "Section Break",
+					fieldname: "sec_break_2",
 				},
 				{
-					label: __('Note'),
-					fieldtype: 'HTML',
-					fieldname: 'note'
-				}
-			]
+					label: __("Note"),
+					fieldtype: "HTML",
+					fieldname: "note",
+				},
+			],
 		});
 
 		dialog.fields_dict["supplier"].df.onchange = () => {
@@ -249,74 +267,78 @@
 				supplier: dialog.get_value("supplier"),
 			}).then(({ message }) => {
 				dialog.fields_dict.email_preview.$wrapper.empty();
-				dialog.fields_dict.email_preview.$wrapper.append(
-					message.message
-				);
+				dialog.fields_dict.email_preview.$wrapper.append(message.message);
 				dialog.set_value("subject", message.subject);
 			});
 		};
 
-		dialog.fields_dict.note.$wrapper.append(`<p class="small text-muted">This is a preview of the email to be sent. A PDF of the document will
+		dialog.fields_dict.note.$wrapper
+			.append(`<p class="small text-muted">This is a preview of the email to be sent. A PDF of the document will
 			automatically be attached with the email.</p>`);
 
 		dialog.show();
-	}
-})
+	},
+});
 frappe.ui.form.on("Request for Quotation Item", {
 	items_add(frm, cdt, cdn) {
 		if (frm.doc.schedule_date) {
-			frappe.model.set_value(cdt, cdn, 'schedule_date', frm.doc.schedule_date);
+			frappe.model.set_value(cdt, cdn, "schedule_date", frm.doc.schedule_date);
 		}
-	}
-});
-frappe.ui.form.on("Request for Quotation Supplier",{
-	supplier: function(frm, cdt, cdn) {
-		var d = locals[cdt][cdn]
-		frappe.call({
-			method:"erpnext.accounts.party.get_party_details",
-			args:{
-				party: d.supplier,
-				party_type: 'Supplier'
-			},
-			callback: function(r){
-				if(r.message){
-					frappe.model.set_value(cdt, cdn, 'contact', r.message.contact_person)
-					frappe.model.set_value(cdt, cdn, 'email_id', r.message.contact_email)
-				}
-			}
-		})
 	},
+});
+frappe.ui.form.on("Request for Quotation Supplier", {
+	supplier: function (frm, cdt, cdn) {
+		var d = locals[cdt][cdn];
+		frappe.call({
+			method: "erpnext.accounts.party.get_party_details",
+			args: {
+				party: d.supplier,
+				party_type: "Supplier",
+			},
+			callback: function (r) {
+				if (r.message) {
+					frappe.model.set_value(cdt, cdn, "contact", r.message.contact_person);
+					frappe.model.set_value(cdt, cdn, "email_id", r.message.contact_email);
+				}
+			},
+		});
+	},
+});
 
-})
-
-erpnext.buying.RequestforQuotationController = class RequestforQuotationController extends erpnext.buying.BuyingController {
+erpnext.buying.RequestforQuotationController = class RequestforQuotationController extends (
+	erpnext.buying.BuyingController
+) {
 	refresh() {
 		var me = this;
 		super.refresh();
-		if (this.frm.doc.docstatus===0) {
-			this.frm.add_custom_button(__('Material Request'),
-				function() {
+		if (this.frm.doc.docstatus === 0) {
+			this.frm.add_custom_button(
+				__("Material Request"),
+				function () {
 					erpnext.utils.map_current_doc({
 						method: "erpnext.stock.doctype.material_request.material_request.make_request_for_quotation",
 						source_doctype: "Material Request",
 						target: me.frm,
 						setters: {
 							schedule_date: undefined,
-							status: undefined
+							status: undefined,
 						},
 						get_query_filters: {
 							material_request_type: "Purchase",
 							docstatus: 1,
 							status: ["!=", "Stopped"],
 							per_ordered: ["<", 100],
-							company: me.frm.doc.company
-						}
-					})
-				}, __("Get Items From"));
+							company: me.frm.doc.company,
+						},
+					});
+				},
+				__("Get Items From")
+			);
 
 			// Get items from Opportunity
-			this.frm.add_custom_button(__('Opportunity'),
-				function() {
+			this.frm.add_custom_button(
+				__("Opportunity"),
+				function () {
 					erpnext.utils.map_current_doc({
 						method: "erpnext.crm.doctype.opportunity.opportunity.make_request_for_quotation",
 						source_doctype: "Opportunity",
@@ -324,67 +346,79 @@
 						setters: {
 							party_name: undefined,
 							opportunity_from: undefined,
-							status: undefined
+							status: undefined,
 						},
 						get_query_filters: {
 							status: ["not in", ["Closed", "Lost"]],
-							company: me.frm.doc.company
-						}
-					})
-				}, __("Get Items From"));
+							company: me.frm.doc.company,
+						},
+					});
+				},
+				__("Get Items From")
+			);
 
 			// Get items from open Material Requests based on supplier
-			this.frm.add_custom_button(__('Possible Supplier'), function() {
-				// Create a dialog window for the user to pick their supplier
-				var dialog = new frappe.ui.Dialog({
-					title: __('Select Possible Supplier'),
-					fields: [
-						{
-							fieldname: 'supplier',
-							fieldtype:'Link',
-							options:'Supplier',
-							label:'Supplier',
-							reqd:1,
-							description: __("Get Items from Material Requests against this Supplier")
-						}
-					],
-					primary_action_label: __("Get Items"),
-					primary_action: (args) => {
-						if(!args) return;
-						dialog.hide();
-
-						erpnext.utils.map_current_doc({
-							method: "erpnext.buying.doctype.request_for_quotation.request_for_quotation.get_item_from_material_requests_based_on_supplier",
-							source_name: args.supplier,
-							target: me.frm,
-							setters: {
-								company: me.frm.doc.company
+			this.frm.add_custom_button(
+				__("Possible Supplier"),
+				function () {
+					// Create a dialog window for the user to pick their supplier
+					var dialog = new frappe.ui.Dialog({
+						title: __("Select Possible Supplier"),
+						fields: [
+							{
+								fieldname: "supplier",
+								fieldtype: "Link",
+								options: "Supplier",
+								label: "Supplier",
+								reqd: 1,
+								description: __("Get Items from Material Requests against this Supplier"),
 							},
-							get_query_filters: {
-								material_request_type: "Purchase",
-								docstatus: 1,
-								status: ["!=", "Stopped"],
-								per_ordered: ["<", 100]
-							}
-						});
-						dialog.hide();
-					}
-				});
+						],
+						primary_action_label: __("Get Items"),
+						primary_action: (args) => {
+							if (!args) return;
+							dialog.hide();
 
-				dialog.show();
-			}, __("Get Items From"));
+							erpnext.utils.map_current_doc({
+								method: "erpnext.buying.doctype.request_for_quotation.request_for_quotation.get_item_from_material_requests_based_on_supplier",
+								source_name: args.supplier,
+								target: me.frm,
+								setters: {
+									company: me.frm.doc.company,
+								},
+								get_query_filters: {
+									material_request_type: "Purchase",
+									docstatus: 1,
+									status: ["!=", "Stopped"],
+									per_ordered: ["<", 100],
+								},
+							});
+							dialog.hide();
+						},
+					});
+
+					dialog.show();
+				},
+				__("Get Items From")
+			);
 
 			// Link Material Requests
-			this.frm.add_custom_button(__('Link to Material Requests'),
-				function() {
+			this.frm.add_custom_button(
+				__("Link to Material Requests"),
+				function () {
 					erpnext.buying.link_to_mrs(me.frm);
-				}, __("Tools"));
+				},
+				__("Tools")
+			);
 
 			// Get Suppliers
-			this.frm.add_custom_button(__('Get Suppliers'),
-				function() {
+			this.frm.add_custom_button(
+				__("Get Suppliers"),
+				function () {
 					me.get_suppliers_button(me.frm);
-				}, __("Tools"));
+				},
+				__("Tools")
+			);
 		}
 	}
 
@@ -396,70 +430,75 @@
 		this.get_terms();
 	}
 
-	get_suppliers_button (frm) {
+	get_suppliers_button(frm) {
 		var doc = frm.doc;
 		var dialog = new frappe.ui.Dialog({
 			title: __("Get Suppliers"),
 			fields: [
 				{
-					"fieldtype": "Select", "label": __("Get Suppliers By"),
-					"fieldname": "search_type",
-					"options": ["Supplier Group", "Tag"],
-					"reqd": 1,
+					fieldtype: "Select",
+					label: __("Get Suppliers By"),
+					fieldname: "search_type",
+					options: ["Supplier Group", "Tag"],
+					reqd: 1,
 					onchange() {
-						if(dialog.get_value('search_type') == 'Tag'){
-							frappe.call({
-								method: 'erpnext.buying.doctype.request_for_quotation.request_for_quotation.get_supplier_tag',
-							}).then(r => {
-								dialog.set_df_property("tag", "options", r.message)
-						});
+						if (dialog.get_value("search_type") == "Tag") {
+							frappe
+								.call({
+									method: "erpnext.buying.doctype.request_for_quotation.request_for_quotation.get_supplier_tag",
+								})
+								.then((r) => {
+									dialog.set_df_property("tag", "options", r.message);
+								});
 						}
-					}
+					},
 				},
 				{
-					"fieldtype": "Link", "label": __("Supplier Group"),
-					"fieldname": "supplier_group",
-					"options": "Supplier Group",
-					"reqd": 0,
-					"depends_on": "eval:doc.search_type == 'Supplier Group'"
+					fieldtype: "Link",
+					label: __("Supplier Group"),
+					fieldname: "supplier_group",
+					options: "Supplier Group",
+					reqd: 0,
+					depends_on: "eval:doc.search_type == 'Supplier Group'",
 				},
 				{
-					"fieldtype": "Select", "label": __("Tag"),
-					"fieldname": "tag",
-					"reqd": 0,
-					"depends_on": "eval:doc.search_type == 'Tag'",
-				}
+					fieldtype: "Select",
+					label: __("Tag"),
+					fieldname: "tag",
+					reqd: 0,
+					depends_on: "eval:doc.search_type == 'Tag'",
+				},
 			],
 			primary_action_label: __("Add Suppliers"),
-			primary_action : (args) => {
-				if(!args) return;
+			primary_action: (args) => {
+				if (!args) return;
 				dialog.hide();
 
 				//Remove blanks
 				for (var j = 0; j < frm.doc.suppliers.length; j++) {
-					if(!Object.prototype.hasOwnProperty.call(frm.doc.suppliers[j], "supplier")) {
+					if (!Object.prototype.hasOwnProperty.call(frm.doc.suppliers[j], "supplier")) {
 						frm.get_field("suppliers").grid.grid_rows[j].remove();
 					}
 				}
 
 				function load_suppliers(r) {
-					if(r.message) {
+					if (r.message) {
 						for (var i = 0; i < r.message.length; i++) {
 							var exists = false;
 							let supplier = "";
-							if (r.message[i].constructor === Array){
+							if (r.message[i].constructor === Array) {
 								supplier = r.message[i][0];
 							} else {
 								supplier = r.message[i].name;
 							}
 
-							for (var j = 0; j < doc.suppliers.length;j++) {
+							for (var j = 0; j < doc.suppliers.length; j++) {
 								if (supplier === doc.suppliers[j].supplier) {
 									exists = true;
 								}
 							}
-							if(!exists) {
-								var d = frm.add_child('suppliers');
+							if (!exists) {
+								var d = frm.add_child("suppliers");
 								d.supplier = supplier;
 								frm.script_manager.trigger("supplier", d.doctype, d.name);
 							}
@@ -473,10 +512,10 @@
 						type: "GET",
 						method: "frappe.desk.doctype.tag.tag.get_tagged_docs",
 						args: {
-							"doctype": "Supplier",
-							"tag": args.tag
+							doctype: "Supplier",
+							tag: args.tag,
 						},
-						callback: load_suppliers
+						callback: load_suppliers,
 					});
 				} else if (args.supplier_group) {
 					return frappe.call({
@@ -485,13 +524,12 @@
 							doctype: "Supplier",
 							order_by: "name",
 							fields: ["name"],
-							filters: [["Supplier", "supplier_group", "=", args.supplier_group]]
-
+							filters: [["Supplier", "supplier_group", "=", args.supplier_group]],
 						},
-						callback: load_suppliers
+						callback: load_suppliers,
 					});
 				}
-			}
+			},
 		});
 
 		dialog.show();
@@ -499,4 +537,4 @@
 };
 
 // for backward compatibility: combine new and previous states
-extend_cscript(cur_frm.cscript, new erpnext.buying.RequestforQuotationController({frm: cur_frm}));
+extend_cscript(cur_frm.cscript, new erpnext.buying.RequestforQuotationController({ frm: cur_frm }));
diff --git a/erpnext/buying/doctype/supplier/supplier.js b/erpnext/buying/doctype/supplier/supplier.js
index 70d2782..b74474b 100644
--- a/erpnext/buying/doctype/supplier/supplier.js
+++ b/erpnext/buying/doctype/supplier/supplier.js
@@ -3,65 +3,65 @@
 
 frappe.ui.form.on("Supplier", {
 	setup: function (frm) {
-		frm.set_query('default_price_list', { 'buying': 1 });
+		frm.set_query("default_price_list", { buying: 1 });
 		if (frm.doc.__islocal == 1) {
 			frm.set_value("represents_company", "");
 		}
-		frm.set_query('account', 'accounts', function (doc, cdt, cdn) {
+		frm.set_query("account", "accounts", function (doc, cdt, cdn) {
 			let d = locals[cdt][cdn];
 			return {
 				filters: {
-					'account_type': 'Payable',
-					'root_type': 'Liability',
-					'company': d.company,
-					"is_group": 0
-				}
-			}
+					account_type: "Payable",
+					root_type: "Liability",
+					company: d.company,
+					is_group: 0,
+				},
+			};
 		});
 
-		frm.set_query('advance_account', 'accounts', function (doc, cdt, cdn) {
+		frm.set_query("advance_account", "accounts", function (doc, cdt, cdn) {
 			let d = locals[cdt][cdn];
 			return {
 				filters: {
-					"account_type": "Payable",
-					"root_type": "Asset",
-					"company": d.company,
-					"is_group": 0
-				}
-			}
+					account_type: "Payable",
+					root_type: "Asset",
+					company: d.company,
+					is_group: 0,
+				},
+			};
 		});
 
-		frm.set_query("default_bank_account", function() {
+		frm.set_query("default_bank_account", function () {
 			return {
 				filters: {
-					"is_company_account":1
-				}
-			}
+					is_company_account: 1,
+				},
+			};
 		});
 
-		frm.set_query("supplier_primary_contact", function(doc) {
+		frm.set_query("supplier_primary_contact", function (doc) {
 			return {
 				query: "erpnext.buying.doctype.supplier.supplier.get_supplier_primary_contact",
 				filters: {
-					"supplier": doc.name
-				}
+					supplier: doc.name,
+				},
 			};
 		});
 
-		frm.set_query("supplier_primary_address", function(doc) {
+		frm.set_query("supplier_primary_address", function (doc) {
 			return {
 				filters: {
-					"link_doctype": "Supplier",
-					"link_name": doc.name
-				}
+					link_doctype: "Supplier",
+					link_name: doc.name,
+				},
 			};
 		});
 
-		frm.set_query("user", "portal_users", function(doc) {
+		frm.set_query("user", "portal_users", function (doc) {
 			return {
 				filters: {
-					"ignore_user_type": true,
-				}
+					ignore_user_type: true,
+				},
 			};
 		});
 	},
@@ -74,65 +74,94 @@
 		}
 
 		if (frm.doc.__islocal) {
-			hide_field(['address_html','contact_html']);
+			hide_field(["address_html", "contact_html"]);
 			frappe.contacts.clear_address_and_contact(frm);
-		}
-		else {
-			unhide_field(['address_html','contact_html']);
+		} else {
+			unhide_field(["address_html", "contact_html"]);
 			frappe.contacts.render_address_and_contact(frm);
 
 			// custom buttons
-			frm.add_custom_button(__('Accounting Ledger'), function () {
-				frappe.set_route('query-report', 'General Ledger',
-					{ party_type: 'Supplier', party: frm.doc.name, party_name: frm.doc.supplier_name });
-			}, __("View"));
+			frm.add_custom_button(
+				__("Accounting Ledger"),
+				function () {
+					frappe.set_route("query-report", "General Ledger", {
+						party_type: "Supplier",
+						party: frm.doc.name,
+						party_name: frm.doc.supplier_name,
+					});
+				},
+				__("View")
+			);
 
-			frm.add_custom_button(__('Accounts Payable'), function () {
-				frappe.set_route('query-report', 'Accounts Payable', { party_type: "Supplier", party: frm.doc.name });
-			}, __("View"));
+			frm.add_custom_button(
+				__("Accounts Payable"),
+				function () {
+					frappe.set_route("query-report", "Accounts Payable", {
+						party_type: "Supplier",
+						party: frm.doc.name,
+					});
+				},
+				__("View")
+			);
 
-			frm.add_custom_button(__('Bank Account'), function () {
-				erpnext.utils.make_bank_account(frm.doc.doctype, frm.doc.name);
-			}, __('Create'));
+			frm.add_custom_button(
+				__("Bank Account"),
+				function () {
+					erpnext.utils.make_bank_account(frm.doc.doctype, frm.doc.name);
+				},
+				__("Create")
+			);
 
-			frm.add_custom_button(__('Pricing Rule'), function () {
-				erpnext.utils.make_pricing_rule(frm.doc.doctype, frm.doc.name);
-			}, __('Create'));
+			frm.add_custom_button(
+				__("Pricing Rule"),
+				function () {
+					erpnext.utils.make_pricing_rule(frm.doc.doctype, frm.doc.name);
+				},
+				__("Create")
+			);
 
-			frm.add_custom_button(__('Get Supplier Group Details'), function () {
-				frm.trigger("get_supplier_group_details");
-			}, __('Actions'));
+			frm.add_custom_button(
+				__("Get Supplier Group Details"),
+				function () {
+					frm.trigger("get_supplier_group_details");
+				},
+				__("Actions")
+			);
 
 			if (cint(frappe.defaults.get_default("enable_common_party_accounting"))) {
-				frm.add_custom_button(__('Link with Customer'), function () {
-					frm.trigger('show_party_link_dialog');
-				}, __('Actions'));
+				frm.add_custom_button(
+					__("Link with Customer"),
+					function () {
+						frm.trigger("show_party_link_dialog");
+					},
+					__("Actions")
+				);
 			}
 
 			// indicators
 			erpnext.utils.set_party_dashboard_indicators(frm);
 		}
 	},
-	get_supplier_group_details: function(frm) {
+	get_supplier_group_details: function (frm) {
 		frappe.call({
 			method: "get_supplier_group_details",
 			doc: frm.doc,
-			callback: function() {
+			callback: function () {
 				frm.refresh();
-			}
+			},
 		});
 	},
 
-	supplier_primary_address: function(frm) {
+	supplier_primary_address: function (frm) {
 		if (frm.doc.supplier_primary_address) {
 			frappe.call({
-				method: 'frappe.contacts.doctype.address.address.get_address_display',
+				method: "frappe.contacts.doctype.address.address.get_address_display",
 				args: {
-					"address_dict": frm.doc.supplier_primary_address
+					address_dict: frm.doc.supplier_primary_address,
 				},
-				callback: function(r) {
+				callback: function (r) {
 					frm.set_value("primary_address", r.message);
-				}
+				},
 			});
 		}
 		if (!frm.doc.supplier_primary_address) {
@@ -140,56 +169,60 @@
 		}
 	},
 
-	supplier_primary_contact: function(frm) {
+	supplier_primary_contact: function (frm) {
 		if (!frm.doc.supplier_primary_contact) {
 			frm.set_value("mobile_no", "");
 			frm.set_value("email_id", "");
 		}
 	},
 
-	is_internal_supplier: function(frm) {
+	is_internal_supplier: function (frm) {
 		if (frm.doc.is_internal_supplier == 1) {
 			frm.toggle_reqd("represents_company", true);
-		}
-		else {
+		} else {
 			frm.toggle_reqd("represents_company", false);
 		}
 	},
-	show_party_link_dialog: function(frm) {
+	show_party_link_dialog: function (frm) {
 		const dialog = new frappe.ui.Dialog({
-			title: __('Select a Customer'),
-			fields: [{
-				fieldtype: 'Link', label: __('Customer'),
-				options: 'Customer', fieldname: 'customer', reqd: 1
-			}],
-			primary_action: function({ customer }) {
+			title: __("Select a Customer"),
+			fields: [
+				{
+					fieldtype: "Link",
+					label: __("Customer"),
+					options: "Customer",
+					fieldname: "customer",
+					reqd: 1,
+				},
+			],
+			primary_action: function ({ customer }) {
 				frappe.call({
-					method: 'erpnext.accounts.doctype.party_link.party_link.create_party_link',
+					method: "erpnext.accounts.doctype.party_link.party_link.create_party_link",
 					args: {
-						primary_role: 'Supplier',
+						primary_role: "Supplier",
 						primary_party: frm.doc.name,
-						secondary_party: customer
+						secondary_party: customer,
 					},
 					freeze: true,
-					callback: function() {
+					callback: function () {
 						dialog.hide();
 						frappe.msgprint({
-							message: __('Successfully linked to Customer'),
-							alert: true
+							message: __("Successfully linked to Customer"),
+							alert: true,
 						});
 					},
-					error: function() {
+					error: function () {
 						dialog.hide();
 						frappe.msgprint({
-							message: __('Linking to Customer Failed. Please try again.'),
-							title: __('Linking Failed'),
-							indicator: 'red'
+							message: __("Linking to Customer Failed. Please try again."),
+							title: __("Linking Failed"),
+							indicator: "red",
 						});
-					}
+					},
 				});
 			},
-			primary_action_label: __('Create Link')
+			primary_action_label: __("Create Link"),
 		});
 		dialog.show();
-	}
+	},
 });
diff --git a/erpnext/buying/doctype/supplier/supplier_list.js b/erpnext/buying/doctype/supplier/supplier_list.js
index c776b00..987c1e0 100644
--- a/erpnext/buying/doctype/supplier/supplier_list.js
+++ b/erpnext/buying/doctype/supplier/supplier_list.js
@@ -1,8 +1,8 @@
-frappe.listview_settings['Supplier'] = {
+frappe.listview_settings["Supplier"] = {
 	add_fields: ["supplier_name", "supplier_group", "image", "on_hold"],
-	get_indicator: function(doc) {
-		if(cint(doc.on_hold)) {
+	get_indicator: function (doc) {
+		if (cint(doc.on_hold)) {
 			return [__("On Hold"), "red"];
 		}
-	}
+	},
 };
diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js
index addf5a5..c169871 100644
--- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js
+++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js
@@ -2,12 +2,14 @@
 // License: GNU General Public License v3. See license.txt
 
 erpnext.buying.setup_buying_controller();
-erpnext.buying.SupplierQuotationController = class SupplierQuotationController extends erpnext.buying.BuyingController {
+erpnext.buying.SupplierQuotationController = class SupplierQuotationController extends (
+	erpnext.buying.BuyingController
+) {
 	setup() {
 		this.frm.custom_make_buttons = {
-			'Purchase Order': 'Purchase Order',
-			'Quotation': 'Quotation'
-		}
+			"Purchase Order": "Purchase Order",
+			Quotation: "Quotation",
+		};
 
 		super.setup();
 	}
@@ -17,89 +19,90 @@
 		super.refresh();
 
 		if (this.frm.doc.__islocal && !this.frm.doc.valid_till) {
-			this.frm.set_value('valid_till', frappe.datetime.add_months(this.frm.doc.transaction_date, 1));
+			this.frm.set_value("valid_till", frappe.datetime.add_months(this.frm.doc.transaction_date, 1));
 		}
 		if (this.frm.doc.docstatus === 1) {
-			cur_frm.add_custom_button(__("Purchase Order"), this.make_purchase_order,
-				__('Create'));
-			cur_frm.page.set_inner_btn_group_as_primary(__('Create'));
-			cur_frm.add_custom_button(__("Quotation"), this.make_quotation,
-				__('Create'));
-		}
-		else if (this.frm.doc.docstatus===0) {
-
-			this.frm.add_custom_button(__('Material Request'),
-				function() {
+			cur_frm.add_custom_button(__("Purchase Order"), this.make_purchase_order, __("Create"));
+			cur_frm.page.set_inner_btn_group_as_primary(__("Create"));
+			cur_frm.add_custom_button(__("Quotation"), this.make_quotation, __("Create"));
+		} else if (this.frm.doc.docstatus === 0) {
+			this.frm.add_custom_button(
+				__("Material Request"),
+				function () {
 					erpnext.utils.map_current_doc({
 						method: "erpnext.stock.doctype.material_request.material_request.make_supplier_quotation",
 						source_doctype: "Material Request",
 						target: me.frm,
 						setters: {
 							schedule_date: undefined,
-							status: undefined
+							status: undefined,
 						},
 						get_query_filters: {
 							material_request_type: "Purchase",
 							docstatus: 1,
 							status: ["!=", "Stopped"],
 							per_ordered: ["<", 100],
-							company: me.frm.doc.company
-						}
-					})
-				}, __("Get Items From"));
+							company: me.frm.doc.company,
+						},
+					});
+				},
+				__("Get Items From")
+			);
 
 			// Link Material Requests
-			this.frm.add_custom_button(__('Link to Material Requests'),
-				function() {
+			this.frm.add_custom_button(
+				__("Link to Material Requests"),
+				function () {
 					erpnext.buying.link_to_mrs(me.frm);
-				}, __("Tools"));
+				},
+				__("Tools")
+			);
 
-			this.frm.add_custom_button(__("Request for Quotation"),
-			function() {
-				if (!me.frm.doc.supplier) {
-					frappe.throw({message:__("Please select a Supplier"), title:__("Mandatory")})
-				}
-				erpnext.utils.map_current_doc({
-					method: "erpnext.buying.doctype.request_for_quotation.request_for_quotation.make_supplier_quotation_from_rfq",
-					source_doctype: "Request for Quotation",
-					target: me.frm,
-					setters: {
-						transaction_date: null
-					},
-					get_query_filters: {
-						supplier: me.frm.doc.supplier,
-						company: me.frm.doc.company
-					},
-					get_query_method: "erpnext.buying.doctype.request_for_quotation.request_for_quotation.get_rfq_containing_supplier"
-
-				})
-			}, __("Get Items From"));
+			this.frm.add_custom_button(
+				__("Request for Quotation"),
+				function () {
+					if (!me.frm.doc.supplier) {
+						frappe.throw({ message: __("Please select a Supplier"), title: __("Mandatory") });
+					}
+					erpnext.utils.map_current_doc({
+						method: "erpnext.buying.doctype.request_for_quotation.request_for_quotation.make_supplier_quotation_from_rfq",
+						source_doctype: "Request for Quotation",
+						target: me.frm,
+						setters: {
+							transaction_date: null,
+						},
+						get_query_filters: {
+							supplier: me.frm.doc.supplier,
+							company: me.frm.doc.company,
+						},
+						get_query_method:
+							"erpnext.buying.doctype.request_for_quotation.request_for_quotation.get_rfq_containing_supplier",
+					});
+				},
+				__("Get Items From")
+			);
 		}
 	}
 
 	make_purchase_order() {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.buying.doctype.supplier_quotation.supplier_quotation.make_purchase_order",
-			frm: cur_frm
-		})
+			frm: cur_frm,
+		});
 	}
 	make_quotation() {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.buying.doctype.supplier_quotation.supplier_quotation.make_quotation",
-			frm: cur_frm
-		})
-
+			frm: cur_frm,
+		});
 	}
 };
 
 // for backward compatibility: combine new and previous states
-extend_cscript(cur_frm.cscript, new erpnext.buying.SupplierQuotationController({frm: cur_frm}));
+extend_cscript(cur_frm.cscript, new erpnext.buying.SupplierQuotationController({ frm: cur_frm }));
 
-cur_frm.fields_dict['items'].grid.get_field('project').get_query =
-	function(doc, cdt, cdn) {
-		return{
-			filters:[
-				['Project', 'status', 'not in', 'Completed, Cancelled']
-			]
-		}
-	}
+cur_frm.fields_dict["items"].grid.get_field("project").get_query = function (doc, cdt, cdn) {
+	return {
+		filters: [["Project", "status", "not in", "Completed, Cancelled"]],
+	};
+};
diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation_list.js b/erpnext/buying/doctype/supplier_quotation/supplier_quotation_list.js
index 73685ca..99fe24d 100644
--- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation_list.js
+++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation_list.js
@@ -1,22 +1,22 @@
-frappe.listview_settings['Supplier Quotation'] = {
+frappe.listview_settings["Supplier Quotation"] = {
 	add_fields: ["supplier", "base_grand_total", "status", "company", "currency"],
-	get_indicator: function(doc) {
-		if(doc.status==="Ordered") {
+	get_indicator: function (doc) {
+		if (doc.status === "Ordered") {
 			return [__("Ordered"), "green", "status,=,Ordered"];
-		} else if(doc.status==="Rejected") {
+		} else if (doc.status === "Rejected") {
 			return [__("Lost"), "gray", "status,=,Lost"];
-		} else if(doc.status==="Expired") {
+		} else if (doc.status === "Expired") {
 			return [__("Expired"), "gray", "status,=,Expired"];
 		}
 	},
 
-	onload: function(listview) {
-		listview.page.add_action_item(__("Purchase Order"), ()=>{
+	onload: function (listview) {
+		listview.page.add_action_item(__("Purchase Order"), () => {
 			erpnext.bulk_transaction_processing.create(listview, "Supplier Quotation", "Purchase Order");
 		});
 
-		listview.page.add_action_item(__("Purchase Invoice"), ()=>{
+		listview.page.add_action_item(__("Purchase Invoice"), () => {
 			erpnext.bulk_transaction_processing.create(listview, "Supplier Quotation", "Purchase Invoice");
 		});
-	}
+	},
 };
diff --git a/erpnext/buying/doctype/supplier_scorecard/supplier_scorecard.js b/erpnext/buying/doctype/supplier_scorecard/supplier_scorecard.js
index e9d5678..ca806f8 100644
--- a/erpnext/buying/doctype/supplier_scorecard/supplier_scorecard.js
+++ b/erpnext/buying/doctype/supplier_scorecard/supplier_scorecard.js
@@ -2,55 +2,51 @@
 // For license information, please see license.txt
 
 frappe.ui.form.on("Supplier Scorecard", {
-	setup: function(frm) {
-		if (frm.doc.indicator_color !== "")	{
-			frm.set_indicator_formatter("status", function(doc) {
+	setup: function (frm) {
+		if (frm.doc.indicator_color !== "") {
+			frm.set_indicator_formatter("status", function (doc) {
 				return doc.indicator_color.toLowerCase();
 			});
 		}
 	},
-	onload: function(frm) {
-		if (frm.doc.__unsaved == 1)	{
+	onload: function (frm) {
+		if (frm.doc.__unsaved == 1) {
 			loadAllStandings(frm);
 		}
 	},
-	load_criteria: function(frm) {
+	load_criteria: function (frm) {
 		frappe.call({
 			method: "erpnext.buying.doctype.supplier_scorecard_criteria.supplier_scorecard_criteria.get_criteria_list",
-			callback: function(r) {
-				frm.set_value('criteria', []);
-				for (var i = 0; i < r.message.length; i++)
-				{
+			callback: function (r) {
+				frm.set_value("criteria", []);
+				for (var i = 0; i < r.message.length; i++) {
 					var row = frm.add_child("criteria");
 					row.criteria_name = r.message[i].name;
 					frm.script_manager.trigger("criteria_name", row.doctype, row.name);
 				}
 				refresh_field("criteria");
-			}
+			},
 		});
-	}
-
+	},
 });
 
 frappe.ui.form.on("Supplier Scorecard Scoring Standing", {
-
-	standing_name: function(frm, cdt, cdn) {
+	standing_name: function (frm, cdt, cdn) {
 		var d = frappe.get_doc(cdt, cdn);
 		if (d.standing_name) {
 			return frm.call({
 				method: "erpnext.buying.doctype.supplier_scorecard_standing.supplier_scorecard_standing.get_scoring_standing",
 				child: d,
 				args: {
-					standing_name: d.standing_name
-				}
+					standing_name: d.standing_name,
+				},
 			});
 		}
-	}
+	},
 });
 
 frappe.ui.form.on("Supplier Scorecard Scoring Criteria", {
-
-	criteria_name: function(frm, cdt, cdn) {
+	criteria_name: function (frm, cdt, cdn) {
 		var d = frappe.get_doc(cdt, cdn);
 		if (d.criteria_name) {
 			return frm.call({
@@ -58,36 +54,34 @@
 				args: {
 					fieldname: "weight",
 					doctype: "Supplier Scorecard Criteria",
-					filters: {name: d.criteria_name}
+					filters: { name: d.criteria_name },
 				},
-				callback: function(r) {
-					if(r.message){
+				callback: function (r) {
+					if (r.message) {
 						d.weight = r.message.weight;
-						frm.refresh_field('criteria', 'weight');
+						frm.refresh_field("criteria", "weight");
 					}
-				}
+				},
 			});
 		}
-	}
+	},
 });
 
-var loadAllStandings = function(frm) {
+var loadAllStandings = function (frm) {
 	frappe.call({
 		method: "erpnext.buying.doctype.supplier_scorecard_standing.supplier_scorecard_standing.get_standings_list",
-		callback: function(r) {
-			for (var j = 0; j < frm.doc.standings.length; j++)
-			{
-				if(!Object.prototype.hasOwnProperty.call(frm.doc.standings[j], "standing_name")) {
+		callback: function (r) {
+			for (var j = 0; j < frm.doc.standings.length; j++) {
+				if (!Object.prototype.hasOwnProperty.call(frm.doc.standings[j], "standing_name")) {
 					frm.get_field("standings").grid.grid_rows[j].remove();
 				}
 			}
-			for (var i = 0; i < r.message.length; i++)
-			{
+			for (var i = 0; i < r.message.length; i++) {
 				var new_row = frm.add_child("standings");
 				new_row.standing_name = r.message[i].name;
 				frm.script_manager.trigger("standing_name", new_row.doctype, new_row.name);
 			}
 			refresh_field("standings");
-		}
+		},
 	});
 };
diff --git a/erpnext/buying/doctype/supplier_scorecard/supplier_scorecard_list.js b/erpnext/buying/doctype/supplier_scorecard/supplier_scorecard_list.js
index edf0b04..87f43ab 100644
--- a/erpnext/buying/doctype/supplier_scorecard/supplier_scorecard_list.js
+++ b/erpnext/buying/doctype/supplier_scorecard/supplier_scorecard_list.js
@@ -1,16 +1,13 @@
 // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.listview_settings["Supplier Scorecard"] = {
 	add_fields: ["indicator_color", "status"],
-	get_indicator: function(doc) {
-
+	get_indicator: function (doc) {
 		if (doc.indicator_color) {
 			return [__(doc.status), doc.indicator_color.toLowerCase(), "status,=," + doc.status];
 		} else {
 			return [__("Unknown"), "gray", "status,=,''"];
 		}
 	},
-
-}
+};
diff --git a/erpnext/buying/doctype/supplier_scorecard_criteria/supplier_scorecard_criteria.js b/erpnext/buying/doctype/supplier_scorecard_criteria/supplier_scorecard_criteria.js
index 2186cd8..70a0c0b 100644
--- a/erpnext/buying/doctype/supplier_scorecard_criteria/supplier_scorecard_criteria.js
+++ b/erpnext/buying/doctype/supplier_scorecard_criteria/supplier_scorecard_criteria.js
@@ -2,5 +2,5 @@
 // For license information, please see license.txt
 
 frappe.ui.form.on("Supplier Scorecard Criteria", {
-	refresh: function() {}
+	refresh: function () {},
 });
diff --git a/erpnext/buying/doctype/supplier_scorecard_period/supplier_scorecard_period.js b/erpnext/buying/doctype/supplier_scorecard_period/supplier_scorecard_period.js
index 62079cc..3b6f543 100644
--- a/erpnext/buying/doctype/supplier_scorecard_period/supplier_scorecard_period.js
+++ b/erpnext/buying/doctype/supplier_scorecard_period/supplier_scorecard_period.js
@@ -2,12 +2,12 @@
 // For license information, please see license.txt
 
 frappe.ui.form.on("Supplier Scorecard Period", {
-	onload: function(frm) {
+	onload: function (frm) {
 		let criteria_grid = frm.get_field("criteria").grid;
 		criteria_grid.toggle_enable("criteria_name", false);
 		criteria_grid.toggle_enable("weight", false);
 		criteria_grid.toggle_display("max_score", true);
 		criteria_grid.toggle_display("formula", true);
 		criteria_grid.toggle_display("score", true);
-	}
+	},
 });
diff --git a/erpnext/buying/doctype/supplier_scorecard_standing/supplier_scorecard_standing.js b/erpnext/buying/doctype/supplier_scorecard_standing/supplier_scorecard_standing.js
index 22756e7..9bdd670 100644
--- a/erpnext/buying/doctype/supplier_scorecard_standing/supplier_scorecard_standing.js
+++ b/erpnext/buying/doctype/supplier_scorecard_standing/supplier_scorecard_standing.js
@@ -1,9 +1,6 @@
 // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.ui.form.on("Supplier Scorecard Standing", {
-	refresh: function() {
-
-	}
+	refresh: function () {},
 });
diff --git a/erpnext/buying/doctype/supplier_scorecard_variable/supplier_scorecard_variable.js b/erpnext/buying/doctype/supplier_scorecard_variable/supplier_scorecard_variable.js
index b3b4321..4423cab 100644
--- a/erpnext/buying/doctype/supplier_scorecard_variable/supplier_scorecard_variable.js
+++ b/erpnext/buying/doctype/supplier_scorecard_variable/supplier_scorecard_variable.js
@@ -2,7 +2,5 @@
 // For license information, please see license.txt
 
 frappe.ui.form.on("Supplier Scorecard Variable", {
-	refresh: function() {
-
-	}
+	refresh: function () {},
 });
diff --git a/erpnext/buying/report/procurement_tracker/procurement_tracker.js b/erpnext/buying/report/procurement_tracker/procurement_tracker.js
index 7e4822c..ada528b 100644
--- a/erpnext/buying/report/procurement_tracker/procurement_tracker.js
+++ b/erpnext/buying/report/procurement_tracker/procurement_tracker.js
@@ -1,9 +1,8 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Procurement Tracker"] = {
-	"filters": [
+	filters: [
 		{
 			fieldname: "company",
 			label: __("Company"),
@@ -30,10 +29,10 @@
 			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
 		},
 		{
-			fieldname:"to_date",
+			fieldname: "to_date",
 			label: __("To Date"),
 			fieldtype: "Date",
 			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
 		},
-	]
-}
+	],
+};
diff --git a/erpnext/buying/report/purchase_analytics/purchase_analytics.js b/erpnext/buying/report/purchase_analytics/purchase_analytics.js
index 250b334..23a1880 100644
--- a/erpnext/buying/report/purchase_analytics/purchase_analytics.js
+++ b/erpnext/buying/report/purchase_analytics/purchase_analytics.js
@@ -1,49 +1,48 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Purchase Analytics"] = {
-	"filters": [
+	filters: [
 		{
 			fieldname: "tree_type",
 			label: __("Tree Type"),
 			fieldtype: "Select",
-			options: ["Supplier Group","Supplier","Item Group","Item"],
+			options: ["Supplier Group", "Supplier", "Item Group", "Item"],
 			default: "Supplier",
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			fieldname: "doc_type",
 			label: __("based_on"),
 			fieldtype: "Select",
-			options: ["Purchase Order","Purchase Receipt","Purchase Invoice"],
+			options: ["Purchase Order", "Purchase Receipt", "Purchase Invoice"],
 			default: "Purchase Invoice",
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			fieldname: "value_quantity",
 			label: __("Value Or Qty"),
 			fieldtype: "Select",
 			options: [
-				{ "value": "Value", "label": __("Value") },
-				{ "value": "Quantity", "label": __("Quantity") },
+				{ value: "Value", label: __("Value") },
+				{ value: "Quantity", label: __("Quantity") },
 			],
 			default: "Value",
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			fieldname: "from_date",
 			label: __("From Date"),
 			fieldtype: "Date",
 			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
-			reqd: 1
+			reqd: 1,
 		},
 		{
-			fieldname:"to_date",
+			fieldname: "to_date",
 			label: __("To Date"),
 			fieldtype: "Date",
 			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			fieldname: "company",
@@ -51,22 +50,21 @@
 			fieldtype: "Link",
 			options: "Company",
 			default: frappe.defaults.get_user_default("Company"),
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			fieldname: "range",
 			label: __("Range"),
 			fieldtype: "Select",
 			options: [
-				{ "value": "Weekly", "label": __("Weekly") },
-				{ "value": "Monthly", "label": __("Monthly") },
-				{ "value": "Quarterly", "label": __("Quarterly") },
-				{ "value": "Yearly", "label": __("Yearly") }
+				{ value: "Weekly", label: __("Weekly") },
+				{ value: "Monthly", label: __("Monthly") },
+				{ value: "Quarterly", label: __("Quarterly") },
+				{ value: "Yearly", label: __("Yearly") },
 			],
 			default: "Monthly",
-			reqd: 1
-		}
-
+			reqd: 1,
+		},
 	],
 	get_datatable_options(options) {
 		return Object.assign(options, {
@@ -75,34 +73,26 @@
 				onCheckRow: function (data) {
 					if (!data) return;
 
-					const data_doctype = $(
-						data[2].html
-					)[0].attributes.getNamedItem("data-doctype").value;
+					const data_doctype = $(data[2].html)[0].attributes.getNamedItem("data-doctype").value;
 					const tree_type = frappe.query_report.filters[0].value;
 					if (data_doctype != tree_type) return;
 
 					let row_name = data[2].content;
 					let length = data.length;
-					let row_values = '';
+					let row_values = "";
 
 					if (tree_type == "Supplier") {
-						row_values = data
-							.slice(4, length - 1)
-							.map(function (column) {
-								return column.content;
-							});
+						row_values = data.slice(4, length - 1).map(function (column) {
+							return column.content;
+						});
 					} else if (tree_type == "Item") {
-						row_values = data
-							.slice(5, length - 1)
-							.map(function (column) {
-								return column.content;
-							});
+						row_values = data.slice(5, length - 1).map(function (column) {
+							return column.content;
+						});
 					} else {
-						row_values = data
-							.slice(3, length - 1)
-							.map(function (column) {
-								return column.content;
-							});
+						row_values = data.slice(3, length - 1).map(function (column) {
+							return column.content;
+						});
 					}
 
 					let entry = {
@@ -113,13 +103,13 @@
 					let raw_data = frappe.query_report.chart.data;
 					let new_datasets = raw_data.datasets;
 
-					let element_found = new_datasets.some((element, index, array)=>{
-						if(element.name == row_name){
-							array.splice(index, 1)
-							return true
+					let element_found = new_datasets.some((element, index, array) => {
+						if (element.name == row_name) {
+							array.splice(index, 1);
+							return true;
 						}
-						return false
-					})
+						return false;
+					});
 
 					if (!element_found) {
 						new_datasets.push(entry);
@@ -128,12 +118,14 @@
 						labels: raw_data.labels,
 						datasets: new_datasets,
 					};
-					const new_options = Object.assign({}, frappe.query_report.chart_options, {data: new_data});
+					const new_options = Object.assign({}, frappe.query_report.chart_options, {
+						data: new_data,
+					});
 					frappe.query_report.render_chart(new_options);
 
 					frappe.query_report.raw_chart_data = new_data;
 				},
 			},
 		});
-	}
-}
+	},
+};
diff --git a/erpnext/buying/report/purchase_order_analysis/purchase_order_analysis.js b/erpnext/buying/report/purchase_order_analysis/purchase_order_analysis.js
index 3bf4f2b..8575633 100644
--- a/erpnext/buying/report/purchase_order_analysis/purchase_order_analysis.js
+++ b/erpnext/buying/report/purchase_order_analysis/purchase_order_analysis.js
@@ -1,80 +1,79 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Purchase Order Analysis"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname": "company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"width": "80",
-			"options": "Company",
-			"reqd": 1,
-			"default": frappe.defaults.get_default("company")
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			width: "80",
+			options: "Company",
+			reqd: 1,
+			default: frappe.defaults.get_default("company"),
 		},
 		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"width": "80",
-			"reqd": 1,
-			"default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			width: "80",
+			reqd: 1,
+			default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"width": "80",
-			"reqd": 1,
-			"default": frappe.datetime.get_today()
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			width: "80",
+			reqd: 1,
+			default: frappe.datetime.get_today(),
 		},
 		{
-			"fieldname":"project",
-			"label": __("Project"),
-			"fieldtype": "Link",
-			"width": "80",
-			"options": "Project"
+			fieldname: "project",
+			label: __("Project"),
+			fieldtype: "Link",
+			width: "80",
+			options: "Project",
 		},
 		{
-			"fieldname": "name",
-			"label": __("Purchase Order"),
-			"fieldtype": "Link",
-			"width": "80",
-			"options": "Purchase Order",
-			"get_query": () =>{
+			fieldname: "name",
+			label: __("Purchase Order"),
+			fieldtype: "Link",
+			width: "80",
+			options: "Purchase Order",
+			get_query: () => {
 				return {
-					filters: { "docstatus": 1 }
-				}
-			}
+					filters: { docstatus: 1 },
+				};
+			},
 		},
 		{
-			"fieldname": "status",
-			"label": __("Status"),
-			"fieldtype": "MultiSelectList",
-			"width": "80",
-			get_data: function(txt) {
-				let status = ["To Pay", "To Bill", "To Receive", "To Receive and Bill", "Completed"]
-				let options = []
-				for (let option of status){
+			fieldname: "status",
+			label: __("Status"),
+			fieldtype: "MultiSelectList",
+			width: "80",
+			get_data: function (txt) {
+				let status = ["To Pay", "To Bill", "To Receive", "To Receive and Bill", "Completed"];
+				let options = [];
+				for (let option of status) {
 					options.push({
-						"value": option,
-						"label": __(option),
-						"description": ""
-					})
+						value: option,
+						label: __(option),
+						description: "",
+					});
 				}
-				return options
-			}
+				return options;
+			},
 		},
 		{
-			"fieldname": "group_by_po",
-			"label": __("Group by Purchase Order"),
-			"fieldtype": "Check",
-			"default": 0
-		}
+			fieldname: "group_by_po",
+			label: __("Group by Purchase Order"),
+			fieldtype: "Check",
+			default: 0,
+		},
 	],
 
-	"formatter": function (value, row, column, data, default_formatter) {
+	formatter: function (value, row, column, data, default_formatter) {
 		value = default_formatter(value, row, column, data);
 		let format_fields = ["received_qty", "billed_amount"];
 
@@ -82,5 +81,5 @@
 			value = "<span style='color:green'>" + value + "</span>";
 		}
 		return value;
-	}
+	},
 };
diff --git a/erpnext/buying/report/purchase_order_trends/purchase_order_trends.js b/erpnext/buying/report/purchase_order_trends/purchase_order_trends.js
index 90919dc..366fff1 100644
--- a/erpnext/buying/report/purchase_order_trends/purchase_order_trends.js
+++ b/erpnext/buying/report/purchase_order_trends/purchase_order_trends.js
@@ -1,8 +1,8 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.require("assets/erpnext/js/purchase_trends_filters.js", function() {
+frappe.require("assets/erpnext/js/purchase_trends_filters.js", function () {
 	frappe.query_reports["Purchase Order Trends"] = {
-		filters: erpnext.get_purchase_trends_filters()
-	}
+		filters: erpnext.get_purchase_trends_filters(),
+	};
 });
diff --git a/erpnext/buying/report/requested_items_to_order_and_receive/requested_items_to_order_and_receive.js b/erpnext/buying/report/requested_items_to_order_and_receive/requested_items_to_order_and_receive.js
index cb05109..039ac2c 100644
--- a/erpnext/buying/report/requested_items_to_order_and_receive/requested_items_to_order_and_receive.js
+++ b/erpnext/buying/report/requested_items_to_order_and_receive/requested_items_to_order_and_receive.js
@@ -1,76 +1,75 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Requested Items to Order and Receive"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname": "company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"width": "80",
-			"options": "Company",
-			"reqd": 1,
-			"default": frappe.defaults.get_default("company")
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			width: "80",
+			options: "Company",
+			reqd: 1,
+			default: frappe.defaults.get_default("company"),
 		},
 		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"width": "80",
-			"reqd": 1,
-			"default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			width: "80",
+			reqd: 1,
+			default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"width": "80",
-			"reqd": 1,
-			"default": frappe.datetime.get_today()
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			width: "80",
+			reqd: 1,
+			default: frappe.datetime.get_today(),
 		},
 		{
-			"fieldname": "material_request",
-			"label": __("Material Request"),
-			"fieldtype": "Link",
-			"width": "80",
-			"options": "Material Request",
-			"get_query": () => {
+			fieldname: "material_request",
+			label: __("Material Request"),
+			fieldtype: "Link",
+			width: "80",
+			options: "Material Request",
+			get_query: () => {
 				return {
 					filters: {
-						"docstatus": 1,
-						"material_request_type": "Purchase",
-						"per_received": ["<", 100]
-					}
-				}
-			}
+						docstatus: 1,
+						material_request_type: "Purchase",
+						per_received: ["<", 100],
+					},
+				};
+			},
 		},
 		{
-			"fieldname": "item_code",
-			"label": __("Item"),
-			"fieldtype": "Link",
-			"width": "80",
-			"options": "Item",
-			"get_query": () => {
+			fieldname: "item_code",
+			label: __("Item"),
+			fieldtype: "Link",
+			width: "80",
+			options: "Item",
+			get_query: () => {
 				return {
-					query: "erpnext.controllers.queries.item_query"
-				}
-			}
+					query: "erpnext.controllers.queries.item_query",
+				};
+			},
 		},
 		{
-			"fieldname": "group_by_mr",
-			"label": __("Group by Material Request"),
-			"fieldtype": "Check",
-			"default": 0
-		}
+			fieldname: "group_by_mr",
+			label: __("Group by Material Request"),
+			fieldtype: "Check",
+			default: 0,
+		},
 	],
 
-	"formatter": function (value, row, column, data, default_formatter) {
+	formatter: function (value, row, column, data, default_formatter) {
 		value = default_formatter(value, row, column, data);
 
 		if (column.fieldname == "ordered_qty" && data && data.ordered_qty > 0) {
 			value = "<span style='color:green'>" + value + "</span>";
 		}
 		return value;
-	}
+	},
 };
diff --git a/erpnext/buying/report/subcontract_order_summary/subcontract_order_summary.js b/erpnext/buying/report/subcontract_order_summary/subcontract_order_summary.js
index 800b8ab..8606fae 100644
--- a/erpnext/buying/report/subcontract_order_summary/subcontract_order_summary.js
+++ b/erpnext/buying/report/subcontract_order_summary/subcontract_order_summary.js
@@ -1,42 +1,41 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Subcontract Order Summary"] = {
-	"filters": [
+	filters: [
 		{
 			label: __("Company"),
 			fieldname: "company",
 			fieldtype: "Link",
 			options: "Company",
 			default: frappe.defaults.get_user_default("Company"),
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			label: __("From Date"),
 			fieldname: "from_date",
 			fieldtype: "Date",
 			default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			label: __("To Date"),
 			fieldname: "to_date",
 			fieldtype: "Date",
 			default: frappe.datetime.get_today(),
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			label: __("Order Type"),
 			fieldname: "order_type",
 			fieldtype: "Select",
 			options: ["Purchase Order", "Subcontracting Order"],
-			default: "Subcontracting Order"
+			default: "Subcontracting Order",
 		},
 		{
 			label: __("Subcontract Order"),
 			fieldname: "name",
-			fieldtype: "Data"
-		}
-	]
-};
\ No newline at end of file
+			fieldtype: "Data",
+		},
+	],
+};
diff --git a/erpnext/buying/report/subcontracted_item_to_be_received/subcontracted_item_to_be_received.js b/erpnext/buying/report/subcontracted_item_to_be_received/subcontracted_item_to_be_received.js
index 35be2a9..f20d249 100644
--- a/erpnext/buying/report/subcontracted_item_to_be_received/subcontracted_item_to_be_received.js
+++ b/erpnext/buying/report/subcontracted_item_to_be_received/subcontracted_item_to_be_received.js
@@ -1,36 +1,35 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Subcontracted Item To Be Received"] = {
-	"filters": [
+	filters: [
 		{
 			label: __("Order Type"),
 			fieldname: "order_type",
 			fieldtype: "Select",
 			options: ["Purchase Order", "Subcontracting Order"],
-			default: "Subcontracting Order"
+			default: "Subcontracting Order",
 		},
 		{
 			fieldname: "supplier",
 			label: __("Supplier"),
 			fieldtype: "Link",
 			options: "Supplier",
-			reqd: 1
+			reqd: 1,
 		},
 		{
-			fieldname:"from_date",
+			fieldname: "from_date",
 			label: __("From Date"),
 			fieldtype: "Date",
 			default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
-			reqd: 1
+			reqd: 1,
 		},
 		{
-			fieldname:"to_date",
+			fieldname: "to_date",
 			label: __("To Date"),
 			fieldtype: "Date",
 			default: frappe.datetime.get_today(),
-			reqd: 1
+			reqd: 1,
 		},
-	]
+	],
 };
diff --git a/erpnext/buying/report/subcontracted_raw_materials_to_be_transferred/subcontracted_raw_materials_to_be_transferred.js b/erpnext/buying/report/subcontracted_raw_materials_to_be_transferred/subcontracted_raw_materials_to_be_transferred.js
index 33b26dc..999fae5 100644
--- a/erpnext/buying/report/subcontracted_raw_materials_to_be_transferred/subcontracted_raw_materials_to_be_transferred.js
+++ b/erpnext/buying/report/subcontracted_raw_materials_to_be_transferred/subcontracted_raw_materials_to_be_transferred.js
@@ -1,36 +1,35 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Subcontracted Raw Materials To Be Transferred"] = {
-	"filters": [
+	filters: [
 		{
 			label: __("Order Type"),
 			fieldname: "order_type",
 			fieldtype: "Select",
 			options: ["Purchase Order", "Subcontracting Order"],
-			default: "Subcontracting Order"
+			default: "Subcontracting Order",
 		},
 		{
 			fieldname: "supplier",
 			label: __("Supplier"),
 			fieldtype: "Link",
 			options: "Supplier",
-			reqd: 1
+			reqd: 1,
 		},
 		{
-			fieldname:"from_date",
+			fieldname: "from_date",
 			label: __("From Date"),
 			fieldtype: "Date",
 			default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
-			reqd: 1
+			reqd: 1,
 		},
 		{
-			fieldname:"to_date",
+			fieldname: "to_date",
 			label: __("To Date"),
 			fieldtype: "Date",
 			default: frappe.datetime.get_today(),
-			reqd: 1
+			reqd: 1,
 		},
-	]
-}
+	],
+};
diff --git a/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js b/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js
index 579c0a6..c109abd 100644
--- a/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js
+++ b/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js
@@ -9,23 +9,23 @@
 			options: "Company",
 			fieldname: "company",
 			default: frappe.defaults.get_user_default("Company"),
-			"reqd": 1
+			reqd: 1,
 		},
 		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"width": "80",
-			"reqd": 1,
-			"default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			width: "80",
+			reqd: 1,
+			default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"width": "80",
-			"reqd": 1,
-			"default": frappe.datetime.get_today()
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			width: "80",
+			reqd: 1,
+			default: frappe.datetime.get_today(),
 		},
 		{
 			default: "",
@@ -34,34 +34,34 @@
 			fieldname: "item_code",
 			fieldtype: "Link",
 			get_query: () => {
-				let quote = frappe.query_report.get_filter_value('supplier_quotation');
+				let quote = frappe.query_report.get_filter_value("supplier_quotation");
 				if (quote != "") {
 					return {
 						query: "erpnext.stock.doctype.quality_inspection.quality_inspection.item_query",
 						filters: {
-							"from": "Supplier Quotation Item",
-							"parent": quote
-						}
-					}
+							from: "Supplier Quotation Item",
+							parent: quote,
+						},
+					};
 				}
-			}
+			},
 		},
 		{
 			fieldname: "supplier",
 			label: __("Supplier"),
 			fieldtype: "MultiSelectList",
-			get_data: function(txt) {
-				return frappe.db.get_link_options('Supplier', txt);
-			}
+			get_data: function (txt) {
+				return frappe.db.get_link_options("Supplier", txt);
+			},
 		},
 		{
 			fieldtype: "MultiSelectList",
 			label: __("Supplier Quotation"),
 			fieldname: "supplier_quotation",
 			default: "",
-			get_data: function(txt) {
-				return frappe.db.get_link_options('Supplier Quotation', txt, {'docstatus': ["<", 2]});
-			}
+			get_data: function (txt) {
+				return frappe.db.get_link_options("Supplier Quotation", txt, { docstatus: ["<", 2] });
+			},
 		},
 		{
 			fieldtype: "Link",
@@ -70,37 +70,36 @@
 			fieldname: "request_for_quotation",
 			default: "",
 			get_query: () => {
-				return { filters: { "docstatus": ["<", 2] } }
-			}
+				return { filters: { docstatus: ["<", 2] } };
+			},
 		},
 		{
-			"fieldname":"group_by",
-			"label": __("Group by"),
-			"fieldtype": "Select",
-			"options": [__("Group by Supplier"), __("Group by Item")],
-			"default": __("Group by Supplier")
+			fieldname: "group_by",
+			label: __("Group by"),
+			fieldtype: "Select",
+			options: [__("Group by Supplier"), __("Group by Item")],
+			default: __("Group by Supplier"),
 		},
 		{
 			fieldtype: "Check",
 			label: __("Include Expired"),
 			fieldname: "include_expired",
-			default: 0
-		}
+			default: 0,
+		},
 	],
 
 	formatter: (value, row, column, data, default_formatter) => {
 		value = default_formatter(value, row, column, data);
 
-		if(column.fieldname === "valid_till" && data.valid_till){
-			if(frappe.datetime.get_diff(data.valid_till, frappe.datetime.nowdate()) <= 1){
+		if (column.fieldname === "valid_till" && data.valid_till) {
+			if (frappe.datetime.get_diff(data.valid_till, frappe.datetime.nowdate()) <= 1) {
 				value = `<div style="color:red">${value}</div>`;
-			}
-			else if (frappe.datetime.get_diff(data.valid_till, frappe.datetime.nowdate()) <= 7){
+			} else if (frappe.datetime.get_diff(data.valid_till, frappe.datetime.nowdate()) <= 7) {
 				value = `<div style="color:darkorange">${value}</div>`;
 			}
 		}
 
-		if(column.fieldname === "price_per_unit" && data.price_per_unit && data.min && data.min === 1){
+		if (column.fieldname === "price_per_unit" && data.price_per_unit && data.min && data.min === 1) {
 			value = `<div style="color:green">${value}</div>`;
 		}
 		return value;
@@ -108,48 +107,53 @@
 
 	onload: (report) => {
 		// Create a button for setting the default supplier
-		report.page.add_inner_button(__("Select Default Supplier"), () => {
-			let reporter = frappe.query_reports["Supplier Quotation Comparison"];
+		report.page.add_inner_button(
+			__("Select Default Supplier"),
+			() => {
+				let reporter = frappe.query_reports["Supplier Quotation Comparison"];
 
-			//Always make a new one so that the latest values get updated
-			reporter.make_default_supplier_dialog(report);
-		}, __("Tools"));
-
+				//Always make a new one so that the latest values get updated
+				reporter.make_default_supplier_dialog(report);
+			},
+			__("Tools")
+		);
 	},
 	make_default_supplier_dialog: (report) => {
 		// Get the name of the item to change
-		if(!report.data) return;
+		if (!report.data) return;
 
 		let filters = report.get_values();
 		let item_code = filters.item_code;
 
 		// Get a list of the suppliers (with a blank as well) for the user to select
-		let suppliers = $.map(report.data, (row, idx)=>{ return row.supplier_name })
+		let suppliers = $.map(report.data, (row, idx) => {
+			return row.supplier_name;
+		});
 
 		// Create a dialog window for the user to pick their supplier
 		let dialog = new frappe.ui.Dialog({
-			title: __('Select Default Supplier'),
+			title: __("Select Default Supplier"),
 			fields: [
 				{
 					reqd: 1,
-					label: 'Supplier',
-					fieldtype: 'Link',
-					options: 'Supplier',
-					fieldname: 'supplier',
+					label: "Supplier",
+					fieldtype: "Link",
+					options: "Supplier",
+					fieldname: "supplier",
 					get_query: () => {
 						return {
 							filters: {
-								'name': ['in', suppliers]
-							}
-						}
-					}
-				}
-			]
+								name: ["in", suppliers],
+							},
+						};
+					},
+				},
+			],
 		});
 
 		dialog.set_primary_action(__("Set Default Supplier"), () => {
 			let values = dialog.get_values();
-			if(values) {
+			if (values) {
 				// Set the default_supplier field of the appropriate Item to the selected supplier
 				frappe.call({
 					method: "frappe.client.set_value",
@@ -163,10 +167,10 @@
 					callback: (r) => {
 						frappe.msgprint(__("Successfully Set Supplier"));
 						dialog.hide();
-					}
+					},
 				});
 			}
 		});
 		dialog.show();
-	}
-}
+	},
+};
diff --git a/erpnext/crm/doctype/appointment/appointment.js b/erpnext/crm/doctype/appointment/appointment.js
index ca38121..54aa9a6 100644
--- a/erpnext/crm/doctype/appointment/appointment.js
+++ b/erpnext/crm/doctype/appointment/appointment.js
@@ -1,26 +1,26 @@
 // Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Appointment', {
-	refresh: function(frm) {
-		if(frm.doc.lead){
-			frm.add_custom_button(frm.doc.lead,()=>{
+frappe.ui.form.on("Appointment", {
+	refresh: function (frm) {
+		if (frm.doc.lead) {
+			frm.add_custom_button(frm.doc.lead, () => {
 				frappe.set_route("Form", "Lead", frm.doc.lead);
 			});
 		}
-		if(frm.doc.calendar_event){
-			frm.add_custom_button(__(frm.doc.calendar_event),()=>{
+		if (frm.doc.calendar_event) {
+			frm.add_custom_button(__(frm.doc.calendar_event), () => {
 				frappe.set_route("Form", "Event", frm.doc.calendar_event);
 			});
 		}
 	},
-	onload: function(frm){
-		frm.set_query("appointment_with", function(){
+	onload: function (frm) {
+		frm.set_query("appointment_with", function () {
 			return {
-				filters : {
-					"name": ["in", ["Customer", "Lead"]]
-				}
+				filters: {
+					name: ["in", ["Customer", "Lead"]],
+				},
 			};
 		});
-	}
+	},
 });
diff --git a/erpnext/crm/doctype/appointment_booking_settings/appointment_booking_settings.js b/erpnext/crm/doctype/appointment_booking_settings/appointment_booking_settings.js
index 0c64eb8..255e665 100644
--- a/erpnext/crm/doctype/appointment_booking_settings/appointment_booking_settings.js
+++ b/erpnext/crm/doctype/appointment_booking_settings/appointment_booking_settings.js
@@ -1,10 +1,14 @@
-frappe.ui.form.on('Appointment Booking Settings', 'validate',check_times);
+frappe.ui.form.on("Appointment Booking Settings", "validate", check_times);
 function check_times(frm) {
 	$.each(frm.doc.availability_of_slots || [], function (i, d) {
-		let from_time = Date.parse('01/01/2019 ' + d.from_time);
-		let to_time = Date.parse('01/01/2019 ' + d.to_time);
+		let from_time = Date.parse("01/01/2019 " + d.from_time);
+		let to_time = Date.parse("01/01/2019 " + d.to_time);
 		if (from_time > to_time) {
-			frappe.throw(__('In row {0} of Appointment Booking Slots: "To Time" must be later than "From Time".', [i + 1]));
+			frappe.throw(
+				__('In row {0} of Appointment Booking Slots: "To Time" must be later than "From Time".', [
+					i + 1,
+				])
+			);
 		}
 	});
 }
diff --git a/erpnext/crm/doctype/campaign/campaign.js b/erpnext/crm/doctype/campaign/campaign.js
index cac45c6..9e4a0a9 100644
--- a/erpnext/crm/doctype/campaign/campaign.js
+++ b/erpnext/crm/doctype/campaign/campaign.js
@@ -1,17 +1,25 @@
 // Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Campaign', {
-	refresh: function(frm) {
+frappe.ui.form.on("Campaign", {
+	refresh: function (frm) {
 		erpnext.toggle_naming_series();
 
 		if (frm.is_new()) {
-			frm.toggle_display("naming_series", frappe.boot.sysdefaults.campaign_naming_by=="Naming Series");
+			frm.toggle_display(
+				"naming_series",
+				frappe.boot.sysdefaults.campaign_naming_by == "Naming Series"
+			);
 		} else {
-			cur_frm.add_custom_button(__("View Leads"), function() {
-				frappe.route_options = {"source": "Campaign", "campaign_name": frm.doc.name};
-				frappe.set_route("List", "Lead");
-			}, "fa fa-list", true);
+			cur_frm.add_custom_button(
+				__("View Leads"),
+				function () {
+					frappe.route_options = { source: "Campaign", campaign_name: frm.doc.name };
+					frappe.set_route("List", "Lead");
+				},
+				"fa fa-list",
+				true
+			);
 		}
-	}
+	},
 });
diff --git a/erpnext/crm/doctype/competitor/competitor.js b/erpnext/crm/doctype/competitor/competitor.js
index a5b617d..abd5934 100644
--- a/erpnext/crm/doctype/competitor/competitor.js
+++ b/erpnext/crm/doctype/competitor/competitor.js
@@ -1,8 +1,7 @@
 // Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Competitor', {
+frappe.ui.form.on("Competitor", {
 	// refresh: function(frm) {
-
 	// }
 });
diff --git a/erpnext/crm/doctype/contract/contract.js b/erpnext/crm/doctype/contract/contract.js
index 7848de7..8d44c22 100644
--- a/erpnext/crm/doctype/contract/contract.js
+++ b/erpnext/crm/doctype/contract/contract.js
@@ -5,12 +5,12 @@
 	contract_template: function (frm) {
 		if (frm.doc.contract_template) {
 			frappe.call({
-				method: 'erpnext.crm.doctype.contract_template.contract_template.get_contract_template',
+				method: "erpnext.crm.doctype.contract_template.contract_template.get_contract_template",
 				args: {
 					template_name: frm.doc.contract_template,
-					doc: frm.doc
+					doc: frm.doc,
 				},
-				callback: function(r) {
+				callback: function (r) {
 					if (r && r.message) {
 						let contract_template = r.message.contract_template;
 						frm.set_value("contract_terms", r.message.contract_terms);
@@ -18,15 +18,15 @@
 
 						if (frm.doc.requires_fulfilment) {
 							// Populate the fulfilment terms table from a contract template, if any
-							r.message.contract_template.fulfilment_terms.forEach(element => {
+							r.message.contract_template.fulfilment_terms.forEach((element) => {
 								let d = frm.add_child("fulfilment_terms");
 								d.requirement = element.requirement;
 							});
 							frm.refresh_field("fulfilment_terms");
 						}
 					}
-				}
+				},
 			});
 		}
-	}
+	},
 });
diff --git a/erpnext/crm/doctype/contract/contract_list.js b/erpnext/crm/doctype/contract/contract_list.js
index 7d56096..e1f8c22 100644
--- a/erpnext/crm/doctype/contract/contract_list.js
+++ b/erpnext/crm/doctype/contract/contract_list.js
@@ -1,4 +1,4 @@
-frappe.listview_settings['Contract'] = {
+frappe.listview_settings["Contract"] = {
 	add_fields: ["status"],
 	get_indicator: function (doc) {
 		if (doc.status == "Unsigned") {
diff --git a/erpnext/crm/doctype/contract_fulfilment_checklist/contract_fulfilment_checklist.js b/erpnext/crm/doctype/contract_fulfilment_checklist/contract_fulfilment_checklist.js
index f0525b1..bdc3fcc 100644
--- a/erpnext/crm/doctype/contract_fulfilment_checklist/contract_fulfilment_checklist.js
+++ b/erpnext/crm/doctype/contract_fulfilment_checklist/contract_fulfilment_checklist.js
@@ -1,8 +1,6 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Contract Fulfilment Checklist', {
-	refresh: function(frm) {
-
-	}
+frappe.ui.form.on("Contract Fulfilment Checklist", {
+	refresh: function (frm) {},
 });
diff --git a/erpnext/crm/doctype/contract_template/contract_template.js b/erpnext/crm/doctype/contract_template/contract_template.js
index 4f7c9a8..5044bbe 100644
--- a/erpnext/crm/doctype/contract_template/contract_template.js
+++ b/erpnext/crm/doctype/contract_template/contract_template.js
@@ -1,8 +1,6 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Contract Template', {
-	refresh: function(frm) {
-
-	}
+frappe.ui.form.on("Contract Template", {
+	refresh: function (frm) {},
 });
diff --git a/erpnext/crm/doctype/crm_settings/crm_settings.js b/erpnext/crm/doctype/crm_settings/crm_settings.js
index c6569d8..0fb695a 100644
--- a/erpnext/crm/doctype/crm_settings/crm_settings.js
+++ b/erpnext/crm/doctype/crm_settings/crm_settings.js
@@ -1,8 +1,7 @@
 // Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('CRM Settings', {
+frappe.ui.form.on("CRM Settings", {
 	// refresh: function(frm) {
-
 	// }
 });
diff --git a/erpnext/crm/doctype/email_campaign/email_campaign.js b/erpnext/crm/doctype/email_campaign/email_campaign.js
index b0e9353..7b090a0 100644
--- a/erpnext/crm/doctype/email_campaign/email_campaign.js
+++ b/erpnext/crm/doctype/email_campaign/email_campaign.js
@@ -1,8 +1,8 @@
 // Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Email Campaign', {
-	email_campaign_for: function(frm) {
-		frm.set_value('recipient', '');
-	}
+frappe.ui.form.on("Email Campaign", {
+	email_campaign_for: function (frm) {
+		frm.set_value("recipient", "");
+	},
 });
diff --git a/erpnext/crm/doctype/email_campaign/email_campaign_list.js b/erpnext/crm/doctype/email_campaign/email_campaign_list.js
index adc399d..3020921 100644
--- a/erpnext/crm/doctype/email_campaign/email_campaign_list.js
+++ b/erpnext/crm/doctype/email_campaign/email_campaign_list.js
@@ -1,11 +1,11 @@
-frappe.listview_settings['Email Campaign'] = {
-	get_indicator: function(doc) {
+frappe.listview_settings["Email Campaign"] = {
+	get_indicator: function (doc) {
 		var colors = {
-			"Unsubscribed": "red",
-			"Scheduled": "blue",
+			Unsubscribed: "red",
+			Scheduled: "blue",
 			"In Progress": "orange",
-			"Completed": "green"
+			Completed: "green",
 		};
 		return [__(doc.status), colors[doc.status], "status,=," + doc.status];
-	}
+	},
 };
diff --git a/erpnext/crm/doctype/lead/lead.js b/erpnext/crm/doctype/lead/lead.js
index b1799ce..0b6cdf2 100644
--- a/erpnext/crm/doctype/lead/lead.js
+++ b/erpnext/crm/doctype/lead/lead.js
@@ -5,41 +5,45 @@
 cur_frm.email_field = "email_id";
 
 erpnext.LeadController = class LeadController extends frappe.ui.form.Controller {
-	setup () {
+	setup() {
 		this.frm.make_methods = {
-			'Customer': this.make_customer,
-			'Quotation': this.make_quotation,
-			'Opportunity': this.make_opportunity
+			Customer: this.make_customer,
+			Quotation: this.make_quotation,
+			Opportunity: this.make_opportunity,
 		};
 
 		// For avoiding integration issues.
-		this.frm.set_df_property('first_name', 'reqd', true);
+		this.frm.set_df_property("first_name", "reqd", true);
 	}
 
-	onload () {
+	onload() {
 		this.frm.set_query("customer", function (doc, cdt, cdn) {
-			return { query: "erpnext.controllers.queries.customer_query" }
+			return { query: "erpnext.controllers.queries.customer_query" };
 		});
 
 		this.frm.set_query("lead_owner", function (doc, cdt, cdn) {
-			return { query: "frappe.core.doctype.user.user.user_query" }
+			return { query: "frappe.core.doctype.user.user.user_query" };
 		});
 	}
 
-	refresh () {
+	refresh() {
 		var me = this;
 		let doc = this.frm.doc;
 		erpnext.toggle_naming_series();
 
 		if (!this.frm.is_new() && doc.__onload && !doc.__onload.is_customer) {
 			this.frm.add_custom_button(__("Customer"), this.make_customer, __("Create"));
-			this.frm.add_custom_button(__("Opportunity"), function() {
-				me.frm.trigger("make_opportunity");
-			}, __("Create"));
+			this.frm.add_custom_button(
+				__("Opportunity"),
+				function () {
+					me.frm.trigger("make_opportunity");
+				},
+				__("Create")
+			);
 			this.frm.add_custom_button(__("Quotation"), this.make_quotation, __("Create"));
 			if (!doc.__onload.linked_prospects.length) {
 				this.frm.add_custom_button(__("Prospect"), this.make_prospect, __("Create"));
-				this.frm.add_custom_button(__('Add to Prospect'), this.add_lead_to_prospect, __('Action'));
+				this.frm.add_custom_button(__("Add to Prospect"), this.add_lead_to_prospect, __("Action"));
 			}
 		}
 
@@ -53,51 +57,55 @@
 		this.show_activities();
 	}
 
-	add_lead_to_prospect () {
+	add_lead_to_prospect() {
 		let me = this;
-		frappe.prompt([
-			{
-				fieldname: 'prospect',
-				label: __('Prospect'),
-				fieldtype: 'Link',
-				options: 'Prospect',
-				reqd: 1
-			}
-		],
-		function(data) {
-			frappe.call({
-				method: 'erpnext.crm.doctype.lead.lead.add_lead_to_prospect',
-				args: {
-					'lead': me.frm.doc.name,
-					'prospect': data.prospect
+		frappe.prompt(
+			[
+				{
+					fieldname: "prospect",
+					label: __("Prospect"),
+					fieldtype: "Link",
+					options: "Prospect",
+					reqd: 1,
 				},
-				callback: function(r) {
-					if (!r.exc) {
-						me.frm.reload_doc();
-					}
-				},
-				freeze: true,
-				freeze_message: __('Adding Lead to Prospect...')
-			});
-		}, __('Add Lead to Prospect'), __('Add'));
+			],
+			function (data) {
+				frappe.call({
+					method: "erpnext.crm.doctype.lead.lead.add_lead_to_prospect",
+					args: {
+						lead: me.frm.doc.name,
+						prospect: data.prospect,
+					},
+					callback: function (r) {
+						if (!r.exc) {
+							me.frm.reload_doc();
+						}
+					},
+					freeze: true,
+					freeze_message: __("Adding Lead to Prospect..."),
+				});
+			},
+			__("Add Lead to Prospect"),
+			__("Add")
+		);
 	}
 
-	make_customer () {
+	make_customer() {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.crm.doctype.lead.lead.make_customer",
-			frm: cur_frm
-		})
+			frm: cur_frm,
+		});
 	}
 
-	make_quotation () {
+	make_quotation() {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.crm.doctype.lead.lead.make_quotation",
-			frm: cur_frm
-		})
+			frm: cur_frm,
+		});
 	}
 
-	make_prospect () {
-		frappe.model.with_doctype("Prospect", function() {
+	make_prospect() {
+		frappe.model.with_doctype("Prospect", function () {
 			let prospect = frappe.model.get_new_doc("Prospect");
 			prospect.company_name = cur_frm.doc.company_name;
 			prospect.no_of_employees = cur_frm.doc.no_of_employees;
@@ -109,14 +117,14 @@
 			prospect.prospect_owner = cur_frm.doc.lead_owner;
 			prospect.notes = cur_frm.doc.notes;
 
-			let leads_row = frappe.model.add_child(prospect, 'leads');
+			let leads_row = frappe.model.add_child(prospect, "leads");
 			leads_row.lead = cur_frm.doc.name;
 
 			frappe.set_route("Form", "Prospect", prospect.name);
 		});
 	}
 
-	company_name () {
+	company_name() {
 		if (!this.frm.doc.lead_name) {
 			this.frm.set_value("lead_name", this.frm.doc.company_name);
 		}
@@ -145,86 +153,91 @@
 	}
 };
 
-
 extend_cscript(cur_frm.cscript, new erpnext.LeadController({ frm: cur_frm }));
 
 frappe.ui.form.on("Lead", {
-	make_opportunity: async function(frm) {
-		let existing_prospect = (await frappe.db.get_value("Prospect Lead",
-			{
-				"lead": frm.doc.name
-			},
-			"name", null, "Prospect"
-		)).message.name;
+	make_opportunity: async function (frm) {
+		let existing_prospect = (
+			await frappe.db.get_value(
+				"Prospect Lead",
+				{
+					lead: frm.doc.name,
+				},
+				"name",
+				null,
+				"Prospect"
+			)
+		).message.name;
 
 		if (!existing_prospect) {
 			var fields = [
 				{
-					"label": "Create Prospect",
-					"fieldname": "create_prospect",
-					"fieldtype": "Check",
-					"default": 1
+					label: "Create Prospect",
+					fieldname: "create_prospect",
+					fieldtype: "Check",
+					default: 1,
 				},
 				{
-					"label": "Prospect Name",
-					"fieldname": "prospect_name",
-					"fieldtype": "Data",
-					"default": frm.doc.company_name,
-					"depends_on": "create_prospect"
-				}
+					label: "Prospect Name",
+					fieldname: "prospect_name",
+					fieldtype: "Data",
+					default: frm.doc.company_name,
+					depends_on: "create_prospect",
+				},
 			];
 		}
-		let existing_contact = (await frappe.db.get_value("Contact",
-			{
-				"first_name": frm.doc.first_name || frm.doc.lead_name,
-				"last_name": frm.doc.last_name
-			},
-			"name"
-		)).message.name;
+		let existing_contact = (
+			await frappe.db.get_value(
+				"Contact",
+				{
+					first_name: frm.doc.first_name || frm.doc.lead_name,
+					last_name: frm.doc.last_name,
+				},
+				"name"
+			)
+		).message.name;
 
 		if (!existing_contact) {
-			fields.push(
-				{
-					"label": "Create Contact",
-					"fieldname": "create_contact",
-					"fieldtype": "Check",
-					"default": "1"
-				}
-			);
+			fields.push({
+				label: "Create Contact",
+				fieldname: "create_contact",
+				fieldtype: "Check",
+				default: "1",
+			});
 		}
 
 		if (fields) {
 			var d = new frappe.ui.Dialog({
-				title: __('Create Opportunity'),
+				title: __("Create Opportunity"),
 				fields: fields,
-				primary_action: function() {
+				primary_action: function () {
 					var data = d.get_values();
 					frappe.call({
-						method: 'create_prospect_and_contact',
+						method: "create_prospect_and_contact",
 						doc: frm.doc,
 						args: {
 							data: data,
 						},
 						freeze: true,
-						callback: function(r) {
+						callback: function (r) {
 							if (!r.exc) {
 								frappe.model.open_mapped_doc({
 									method: "erpnext.crm.doctype.lead.lead.make_opportunity",
-									frm: frm
+									frm: frm,
 								});
 							}
 							d.hide();
-						}
+						},
 					});
 				},
-				primary_action_label: __('Create')
+				primary_action_label: __("Create"),
 			});
 			d.show();
 		} else {
 			frappe.model.open_mapped_doc({
 				method: "erpnext.crm.doctype.lead.lead.make_opportunity",
-				frm: frm
+				frm: frm,
 			});
 		}
-	}
-});
\ No newline at end of file
+	},
+});
diff --git a/erpnext/crm/doctype/lead/lead_list.js b/erpnext/crm/doctype/lead/lead_list.js
index dbeaf60..9741525 100644
--- a/erpnext/crm/doctype/lead/lead_list.js
+++ b/erpnext/crm/doctype/lead/lead_list.js
@@ -1,28 +1,42 @@
-frappe.listview_settings['Lead'] = {
-	onload: function(listview) {
+frappe.listview_settings["Lead"] = {
+	onload: function (listview) {
 		if (frappe.boot.user.can_create.includes("Prospect")) {
-			listview.page.add_action_item(__("Create Prospect"), function() {
-				frappe.model.with_doctype("Prospect", function() {
+			listview.page.add_action_item(__("Create Prospect"), function () {
+				frappe.model.with_doctype("Prospect", function () {
 					let prospect = frappe.model.get_new_doc("Prospect");
 					let leads = listview.get_checked_items();
-					frappe.db.get_value("Lead", leads[0].name, ["company_name", "no_of_employees", "industry", "market_segment", "territory", "fax", "website", "lead_owner"], (r) => {
-						prospect.company_name = r.company_name;
-						prospect.no_of_employees = r.no_of_employees;
-						prospect.industry = r.industry;
-						prospect.market_segment = r.market_segment;
-						prospect.territory = r.territory;
-						prospect.fax = r.fax;
-						prospect.website = r.website;
-						prospect.prospect_owner = r.lead_owner;
+					frappe.db.get_value(
+						"Lead",
+						leads[0].name,
+						[
+							"company_name",
+							"no_of_employees",
+							"industry",
+							"market_segment",
+							"territory",
+							"fax",
+							"website",
+							"lead_owner",
+						],
+						(r) => {
+							prospect.company_name = r.company_name;
+							prospect.no_of_employees = r.no_of_employees;
+							prospect.industry = r.industry;
+							prospect.market_segment = r.market_segment;
+							prospect.territory = r.territory;
+							prospect.fax = r.fax;
+							prospect.website = r.website;
+							prospect.prospect_owner = r.lead_owner;
 
-						leads.forEach(function(lead) {
-							let lead_prospect_row = frappe.model.add_child(prospect, 'leads');
-							lead_prospect_row.lead = lead.name;
-						});
-						frappe.set_route("Form", "Prospect", prospect.name);
-					});
+							leads.forEach(function (lead) {
+								let lead_prospect_row = frappe.model.add_child(prospect, "leads");
+								lead_prospect_row.lead = lead.name;
+							});
+							frappe.set_route("Form", "Prospect", prospect.name);
+						}
+					);
 				});
 			});
 		}
-	}
+	},
 };
diff --git a/erpnext/crm/doctype/lead_source/lead_source.js b/erpnext/crm/doctype/lead_source/lead_source.js
index 3cbe649..5efc750 100644
--- a/erpnext/crm/doctype/lead_source/lead_source.js
+++ b/erpnext/crm/doctype/lead_source/lead_source.js
@@ -1,8 +1,7 @@
 // Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Lead Source', {
+frappe.ui.form.on("Lead Source", {
 	// refresh: function(frm) {
-
 	// }
 });
diff --git a/erpnext/crm/doctype/lost_reason_detail/lost_reason_detail.js b/erpnext/crm/doctype/lost_reason_detail/lost_reason_detail.js
index 08fbdad..c3081f8 100644
--- a/erpnext/crm/doctype/lost_reason_detail/lost_reason_detail.js
+++ b/erpnext/crm/doctype/lost_reason_detail/lost_reason_detail.js
@@ -1,8 +1,6 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Lost Reason Detail', {
-	refresh: function() {
-
-	}
+frappe.ui.form.on("Lost Reason Detail", {
+	refresh: function () {},
 });
diff --git a/erpnext/crm/doctype/market_segment/market_segment.js b/erpnext/crm/doctype/market_segment/market_segment.js
index 94ffdee..b089c52 100644
--- a/erpnext/crm/doctype/market_segment/market_segment.js
+++ b/erpnext/crm/doctype/market_segment/market_segment.js
@@ -1,8 +1,6 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Market Segment', {
-	refresh: function(frm) {
-
-	}
+frappe.ui.form.on("Market Segment", {
+	refresh: function (frm) {},
 });
diff --git a/erpnext/crm/doctype/opportunity/opportunity.js b/erpnext/crm/doctype/opportunity/opportunity.js
index 0b485bb..1c8a80a 100644
--- a/erpnext/crm/doctype/opportunity/opportunity.js
+++ b/erpnext/crm/doctype/opportunity/opportunity.js
@@ -4,38 +4,37 @@
 erpnext.pre_sales.set_as_lost("Opportunity");
 erpnext.sales_common.setup_selling_controller();
 
-
 frappe.ui.form.on("Opportunity", {
-	setup: function(frm) {
+	setup: function (frm) {
 		frm.custom_make_buttons = {
-			'Quotation': 'Quotation',
-			'Supplier Quotation': 'Supplier Quotation'
+			Quotation: "Quotation",
+			"Supplier Quotation": "Supplier Quotation",
 		};
 
-		frm.set_query("opportunity_from", function() {
-			return{
-				"filters": {
-					"name": ["in", ["Customer", "Lead", "Prospect"]],
-				}
-			}
+		frm.set_query("opportunity_from", function () {
+			return {
+				filters: {
+					name: ["in", ["Customer", "Lead", "Prospect"]],
+				},
+			};
 		});
 
 		frm.email_field = "contact_email";
 	},
 
-	validate: function(frm) {
+	validate: function (frm) {
 		if (frm.doc.status == "Lost" && !frm.doc.lost_reasons.length) {
-			frm.trigger('set_as_lost_dialog');
+			frm.trigger("set_as_lost_dialog");
 			frappe.throw(__("Lost Reasons are required in case opportunity is Lost."));
 		}
 	},
 
-	onload_post_render: function(frm) {
+	onload_post_render: function (frm) {
 		frm.get_field("items").grid.set_multiple_add("item_code", "qty");
 	},
 
-	party_name: function(frm) {
-		frm.trigger('set_contact_link');
+	party_name: function (frm) {
+		frm.trigger("set_contact_link");
 
 		if (frm.doc.opportunity_from == "Customer") {
 			erpnext.utils.get_party_details(frm);
@@ -43,75 +42,86 @@
 			erpnext.utils.map_current_doc({
 				method: "erpnext.crm.doctype.lead.lead.make_opportunity",
 				source_name: frm.doc.party_name,
-				frm: frm
+				frm: frm,
 			});
 		}
 	},
 
-	status:function(frm){
-		if (frm.doc.status == "Lost"){
-			frm.trigger('set_as_lost_dialog');
+	status: function (frm) {
+		if (frm.doc.status == "Lost") {
+			frm.trigger("set_as_lost_dialog");
 		}
-
 	},
 
-	customer_address: function(frm, cdt, cdn) {
-		erpnext.utils.get_address_display(frm, 'customer_address', 'address_display', false);
+	customer_address: function (frm, cdt, cdn) {
+		erpnext.utils.get_address_display(frm, "customer_address", "address_display", false);
 	},
 
 	contact_person: erpnext.utils.get_contact_details,
 
-	opportunity_from: function(frm) {
-		frm.trigger('setup_opportunity_from');
+	opportunity_from: function (frm) {
+		frm.trigger("setup_opportunity_from");
 
 		frm.set_value("party_name", "");
 	},
 
-	setup_opportunity_from: function(frm) {
-		frm.trigger('setup_queries');
+	setup_opportunity_from: function (frm) {
+		frm.trigger("setup_queries");
 		frm.trigger("set_dynamic_field_label");
 	},
 
-	refresh: function(frm) {
+	refresh: function (frm) {
 		var doc = frm.doc;
-		frm.trigger('setup_opportunity_from');
+		frm.trigger("setup_opportunity_from");
 		erpnext.toggle_naming_series();
 
-		if(!frm.is_new() && doc.status!=="Lost") {
-			if(doc.items){
-				frm.add_custom_button(__('Supplier Quotation'),
-					function() {
-						frm.trigger("make_supplier_quotation")
-					}, __('Create'));
+		if (!frm.is_new() && doc.status !== "Lost") {
+			if (doc.items) {
+				frm.add_custom_button(
+					__("Supplier Quotation"),
+					function () {
+						frm.trigger("make_supplier_quotation");
+					},
+					__("Create")
+				);
 
-				frm.add_custom_button(__('Request For Quotation'),
-					function() {
-						frm.trigger("make_request_for_quotation")
-					}, __('Create'));
+				frm.add_custom_button(
+					__("Request For Quotation"),
+					function () {
+						frm.trigger("make_request_for_quotation");
+					},
+					__("Create")
+				);
 			}
 
 			if (frm.doc.opportunity_from != "Customer") {
-				frm.add_custom_button(__('Customer'),
-					function() {
-						frm.trigger("make_customer")
-					}, __('Create'));
+				frm.add_custom_button(
+					__("Customer"),
+					function () {
+						frm.trigger("make_customer");
+					},
+					__("Create")
+				);
 			}
 
-			frm.add_custom_button(__('Quotation'),
-				function() {
-					frm.trigger("create_quotation")
-				}, __('Create'));
+			frm.add_custom_button(
+				__("Quotation"),
+				function () {
+					frm.trigger("create_quotation");
+				},
+				__("Create")
+			);
 		}
 
-		if(!frm.doc.__islocal && frm.perm[0].write && frm.doc.docstatus==0) {
-			if(frm.doc.status==="Open") {
-				frm.add_custom_button(__("Close"), function() {
+		if (!frm.doc.__islocal && frm.perm[0].write && frm.doc.docstatus == 0) {
+			if (frm.doc.status === "Open") {
+				frm.add_custom_button(__("Close"), function () {
 					frm.set_value("status", "Closed");
 					frm.save();
 				});
 			} else {
-				frm.add_custom_button(__("Reopen"), function() {
-					frm.set_value("lost_reasons",[])
+				frm.add_custom_button(__("Reopen"), function () {
+					frm.set_value("lost_reasons", []);
 					frm.set_value("status", "Open");
 					frm.save();
 				});
@@ -126,141 +136,149 @@
 		}
 
 		if (frm.doc.opportunity_from && frm.doc.party_name) {
-			frm.trigger('set_contact_link');
+			frm.trigger("set_contact_link");
 		}
 	},
 
-	set_contact_link: function(frm) {
-		if(frm.doc.opportunity_from == "Customer" && frm.doc.party_name) {
-			frappe.dynamic_link = {doc: frm.doc, fieldname: 'party_name', doctype: 'Customer'}
-		} else if(frm.doc.opportunity_from == "Lead" && frm.doc.party_name) {
-			frappe.dynamic_link = {doc: frm.doc, fieldname: 'party_name', doctype: 'Lead'}
+	set_contact_link: function (frm) {
+		if (frm.doc.opportunity_from == "Customer" && frm.doc.party_name) {
+			frappe.dynamic_link = { doc: frm.doc, fieldname: "party_name", doctype: "Customer" };
+		} else if (frm.doc.opportunity_from == "Lead" && frm.doc.party_name) {
+			frappe.dynamic_link = { doc: frm.doc, fieldname: "party_name", doctype: "Lead" };
 		} else if (frm.doc.opportunity_from == "Prospect" && frm.doc.party_name) {
-			frappe.dynamic_link = {doc: frm.doc, fieldname: 'party_name', doctype: 'Prospect'}
+			frappe.dynamic_link = { doc: frm.doc, fieldname: "party_name", doctype: "Prospect" };
 		}
 	},
 
-	currency: function(frm) {
+	currency: function (frm) {
 		let company_currency = erpnext.get_currency(frm.doc.company);
 		if (company_currency != frm.doc.company) {
 			frappe.call({
 				method: "erpnext.setup.utils.get_exchange_rate",
 				args: {
 					from_currency: frm.doc.currency,
-					to_currency: company_currency
+					to_currency: company_currency,
 				},
-				callback: function(r) {
+				callback: function (r) {
 					if (r.message) {
-						frm.set_value('conversion_rate', flt(r.message));
-						frm.set_df_property('conversion_rate', 'description', '1 ' + frm.doc.currency
-						+ ' = [?] ' + company_currency);
+						frm.set_value("conversion_rate", flt(r.message));
+						frm.set_df_property(
+							"conversion_rate",
+							"description",
+							"1 " + frm.doc.currency + " = [?] " + company_currency
+						);
 					}
-				}
+				},
 			});
 		} else {
-			frm.set_value('conversion_rate', 1.0);
-			frm.set_df_property('conversion_rate', 'hidden', 1);
-			frm.set_df_property('conversion_rate', 'description', '');
+			frm.set_value("conversion_rate", 1.0);
+			frm.set_df_property("conversion_rate", "hidden", 1);
+			frm.set_df_property("conversion_rate", "description", "");
 		}
 
-		frm.trigger('opportunity_amount');
-		frm.trigger('set_dynamic_field_label');
+		frm.trigger("opportunity_amount");
+		frm.trigger("set_dynamic_field_label");
 	},
 
-	opportunity_amount: function(frm) {
-		frm.set_value('base_opportunity_amount', flt(frm.doc.opportunity_amount) * flt(frm.doc.conversion_rate));
+	opportunity_amount: function (frm) {
+		frm.set_value(
+			"base_opportunity_amount",
+			flt(frm.doc.opportunity_amount) * flt(frm.doc.conversion_rate)
+		);
 	},
 
-	set_dynamic_field_label: function(frm){
+	set_dynamic_field_label: function (frm) {
 		if (frm.doc.opportunity_from) {
 			frm.set_df_property("party_name", "label", frm.doc.opportunity_from);
 		}
-		frm.trigger('change_grid_labels');
-		frm.trigger('change_form_labels');
+		frm.trigger("change_grid_labels");
+		frm.trigger("change_form_labels");
 	},
 
-	make_supplier_quotation: function(frm) {
+	make_supplier_quotation: function (frm) {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.crm.doctype.opportunity.opportunity.make_supplier_quotation",
-			frm: frm
-		})
+			frm: frm,
+		});
 	},
 
-	make_request_for_quotation: function(frm) {
+	make_request_for_quotation: function (frm) {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.crm.doctype.opportunity.opportunity.make_request_for_quotation",
-			frm: frm
-		})
+			frm: frm,
+		});
 	},
 
-	change_form_labels: function(frm) {
+	change_form_labels: function (frm) {
 		let company_currency = erpnext.get_currency(frm.doc.company);
 		frm.set_currency_labels(["base_opportunity_amount", "base_total"], company_currency);
 		frm.set_currency_labels(["opportunity_amount", "total"], frm.doc.currency);
 
 		// toggle fields
-		frm.toggle_display(["conversion_rate", "base_opportunity_amount", "base_total"],
-			frm.doc.currency != company_currency);
+		frm.toggle_display(
+			["conversion_rate", "base_opportunity_amount", "base_total"],
+			frm.doc.currency != company_currency
+		);
 	},
 
-	change_grid_labels: function(frm) {
+	change_grid_labels: function (frm) {
 		let company_currency = erpnext.get_currency(frm.doc.company);
 		frm.set_currency_labels(["base_rate", "base_amount"], company_currency, "items");
 		frm.set_currency_labels(["rate", "amount"], frm.doc.currency, "items");
 
 		let item_grid = frm.fields_dict.items.grid;
-		$.each(["base_rate", "base_amount"], function(i, fname) {
-			if(frappe.meta.get_docfield(item_grid.doctype, fname))
+		$.each(["base_rate", "base_amount"], function (i, fname) {
+			if (frappe.meta.get_docfield(item_grid.doctype, fname))
 				item_grid.set_column_disp(fname, frm.doc.currency != company_currency);
 		});
 		frm.refresh_fields();
 	},
 
-	calculate_total: function(frm) {
-		let total = 0, base_total = 0;
-		frm.doc.items.forEach(item => {
+	calculate_total: function (frm) {
+		let total = 0,
+			base_total = 0;
+		frm.doc.items.forEach((item) => {
 			total += item.amount;
 			base_total += item.base_amount;
-		})
+		});
 
 		frm.set_value({
-			'total': flt(total),
-			'base_total': flt(base_total)
+			total: flt(total),
+			base_total: flt(base_total),
 		});
 	},
 });
 frappe.ui.form.on("Opportunity Item", {
-	calculate: function(frm, cdt, cdn) {
+	calculate: function (frm, cdt, cdn) {
 		let row = frappe.get_doc(cdt, cdn);
 		frappe.model.set_value(cdt, cdn, "amount", flt(row.qty) * flt(row.rate));
 		frappe.model.set_value(cdt, cdn, "base_rate", flt(frm.doc.conversion_rate) * flt(row.rate));
 		frappe.model.set_value(cdt, cdn, "base_amount", flt(frm.doc.conversion_rate) * flt(row.amount));
 		frm.trigger("calculate_total");
 	},
-	qty: function(frm, cdt, cdn) {
+	qty: function (frm, cdt, cdn) {
 		frm.trigger("calculate", cdt, cdn);
 	},
-	rate: function(frm, cdt, cdn) {
+	rate: function (frm, cdt, cdn) {
 		frm.trigger("calculate", cdt, cdn);
-	}
-})
+	},
+});
 
 // TODO commonify this code
 erpnext.crm.Opportunity = class Opportunity extends frappe.ui.form.Controller {
 	onload() {
-
-		if(!this.frm.doc.status) {
-			this.frm.set_value('status', 'Open');
+		if (!this.frm.doc.status) {
+			this.frm.set_value("status", "Open");
 		}
-		if(!this.frm.doc.company && frappe.defaults.get_user_default("Company")) {
-			this.frm.set_value('company', frappe.defaults.get_user_default("Company"));
+		if (!this.frm.doc.company && frappe.defaults.get_user_default("Company")) {
+			this.frm.set_value("company", frappe.defaults.get_user_default("Company"));
 		}
-		if(!this.frm.doc.currency) {
-			this.frm.set_value('currency', frappe.defaults.get_user_default("Currency"));
+		if (!this.frm.doc.currency) {
+			this.frm.set_value("currency", frappe.defaults.get_user_default("Currency"));
 		}
 
 		this.setup_queries();
-		this.frm.trigger('currency');
+		this.frm.trigger("currency");
 	}
 
 	refresh() {
@@ -271,28 +289,27 @@
 	setup_queries() {
 		var me = this;
 
-		me.frm.set_query('customer_address', erpnext.queries.address_query);
+		me.frm.set_query("customer_address", erpnext.queries.address_query);
 
-		this.frm.set_query("item_code", "items", function() {
+		this.frm.set_query("item_code", "items", function () {
 			return {
 				query: "erpnext.controllers.queries.item_query",
-				filters: {'is_sales_item': 1}
+				filters: { is_sales_item: 1 },
 			};
 		});
 
-		me.frm.set_query('contact_person', erpnext.queries['contact_query'])
+		me.frm.set_query("contact_person", erpnext.queries["contact_query"]);
 
 		if (me.frm.doc.opportunity_from == "Lead") {
-			me.frm.set_query('party_name', erpnext.queries['lead']);
-		}
-		else if (me.frm.doc.opportunity_from == "Customer") {
-			me.frm.set_query('party_name', erpnext.queries['customer']);
+			me.frm.set_query("party_name", erpnext.queries["lead"]);
+		} else if (me.frm.doc.opportunity_from == "Customer") {
+			me.frm.set_query("party_name", erpnext.queries["customer"]);
 		} else if (me.frm.doc.opportunity_from == "Prospect") {
-			me.frm.set_query('party_name', function() {
+			me.frm.set_query("party_name", function () {
 				return {
 					filters: {
-						"company": me.frm.doc.company
-					}
+						company: me.frm.doc.company,
+					},
 				};
 			});
 		}
@@ -301,15 +318,15 @@
 	create_quotation() {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.crm.doctype.opportunity.opportunity.make_quotation",
-			frm: cur_frm
-		})
+			frm: cur_frm,
+		});
 	}
 
 	make_customer() {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.crm.doctype.opportunity.opportunity.make_customer",
-			frm: cur_frm
-		})
+			frm: cur_frm,
+		});
 	}
 
 	show_notes() {
@@ -331,22 +348,22 @@
 	}
 };
 
-extend_cscript(cur_frm.cscript, new erpnext.crm.Opportunity({frm: cur_frm}));
+extend_cscript(cur_frm.cscript, new erpnext.crm.Opportunity({ frm: cur_frm }));
 
-cur_frm.cscript.item_code = function(doc, cdt, cdn) {
+cur_frm.cscript.item_code = function (doc, cdt, cdn) {
 	var d = locals[cdt][cdn];
 	if (d.item_code) {
 		return frappe.call({
 			method: "erpnext.crm.doctype.opportunity.opportunity.get_item_details",
-			args: {"item_code":d.item_code},
-			callback: function(r, rt) {
-				if(r.message) {
-					$.each(r.message, function(k, v) {
+			args: { item_code: d.item_code },
+			callback: function (r, rt) {
+				if (r.message) {
+					$.each(r.message, function (k, v) {
 						frappe.model.set_value(cdt, cdn, k, v);
 					});
-					refresh_field('image_view', d.name, 'items');
+					refresh_field("image_view", d.name, "items");
 				}
-			}
-		})
+			},
+		});
 	}
-}
+};
diff --git a/erpnext/crm/doctype/opportunity/opportunity_list.js b/erpnext/crm/doctype/opportunity/opportunity_list.js
index 24b0514..5028ae1 100644
--- a/erpnext/crm/doctype/opportunity/opportunity_list.js
+++ b/erpnext/crm/doctype/opportunity/opportunity_list.js
@@ -1,31 +1,31 @@
-frappe.listview_settings['Opportunity'] = {
+frappe.listview_settings["Opportunity"] = {
 	add_fields: ["customer_name", "opportunity_type", "opportunity_from", "status"],
-	get_indicator: function(doc) {
+	get_indicator: function (doc) {
 		var indicator = [__(doc.status), frappe.utils.guess_colour(doc.status), "status,=," + doc.status];
-		if(doc.status=="Quotation") {
+		if (doc.status == "Quotation") {
 			indicator[1] = "green";
 		}
 		return indicator;
 	},
-	onload: function(listview) {
+	onload: function (listview) {
 		var method = "erpnext.crm.doctype.opportunity.opportunity.set_multiple_status";
 
-		listview.page.add_menu_item(__("Set as Open"), function() {
-			listview.call_for_selected_items(method, {"status": "Open"});
+		listview.page.add_menu_item(__("Set as Open"), function () {
+			listview.call_for_selected_items(method, { status: "Open" });
 		});
 
-		listview.page.add_menu_item(__("Set as Closed"), function() {
-			listview.call_for_selected_items(method, {"status": "Closed"});
+		listview.page.add_menu_item(__("Set as Closed"), function () {
+			listview.call_for_selected_items(method, { status: "Closed" });
 		});
 
-		if(listview.page.fields_dict.opportunity_from) {
-			listview.page.fields_dict.opportunity_from.get_query = function() {
+		if (listview.page.fields_dict.opportunity_from) {
+			listview.page.fields_dict.opportunity_from.get_query = function () {
 				return {
-					"filters": {
-						"name": ["in", ["Customer", "Lead"]],
-					}
+					filters: {
+						name: ["in", ["Customer", "Lead"]],
+					},
 				};
 			};
 		}
-	}
+	},
 };
diff --git a/erpnext/crm/doctype/opportunity_lost_reason/opportunity_lost_reason.js b/erpnext/crm/doctype/opportunity_lost_reason/opportunity_lost_reason.js
index 877dd59..3f08355 100644
--- a/erpnext/crm/doctype/opportunity_lost_reason/opportunity_lost_reason.js
+++ b/erpnext/crm/doctype/opportunity_lost_reason/opportunity_lost_reason.js
@@ -1,8 +1,6 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Opportunity Lost Reason', {
-	refresh: function() {
-
-	}
+frappe.ui.form.on("Opportunity Lost Reason", {
+	refresh: function () {},
 });
diff --git a/erpnext/crm/doctype/opportunity_type/opportunity_type.js b/erpnext/crm/doctype/opportunity_type/opportunity_type.js
index 174625e..18213ad 100644
--- a/erpnext/crm/doctype/opportunity_type/opportunity_type.js
+++ b/erpnext/crm/doctype/opportunity_type/opportunity_type.js
@@ -1,8 +1,6 @@
 // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Opportunity Type', {
-	refresh: function(frm) {
-
-	}
+frappe.ui.form.on("Opportunity Type", {
+	refresh: function (frm) {},
 });
diff --git a/erpnext/crm/doctype/prospect/prospect.js b/erpnext/crm/doctype/prospect/prospect.js
index c1a7ff5..1bf7f26 100644
--- a/erpnext/crm/doctype/prospect/prospect.js
+++ b/erpnext/crm/doctype/prospect/prospect.js
@@ -1,23 +1,31 @@
 // Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Prospect', {
-	refresh (frm) {
+frappe.ui.form.on("Prospect", {
+	refresh(frm) {
 		if (!frm.is_new() && frappe.boot.user.can_create.includes("Customer")) {
-			frm.add_custom_button(__("Customer"), function() {
-				frappe.model.open_mapped_doc({
-					method: "erpnext.crm.doctype.prospect.prospect.make_customer",
-					frm: frm
-				});
-			}, __("Create"));
+			frm.add_custom_button(
+				__("Customer"),
+				function () {
+					frappe.model.open_mapped_doc({
+						method: "erpnext.crm.doctype.prospect.prospect.make_customer",
+						frm: frm,
+					});
+				},
+				__("Create")
+			);
 		}
 		if (!frm.is_new() && frappe.boot.user.can_create.includes("Opportunity")) {
-			frm.add_custom_button(__("Opportunity"), function() {
-				frappe.model.open_mapped_doc({
-					method: "erpnext.crm.doctype.prospect.prospect.make_opportunity",
-					frm: frm
-				});
-			}, __("Create"));
+			frm.add_custom_button(
+				__("Opportunity"),
+				function () {
+					frappe.model.open_mapped_doc({
+						method: "erpnext.crm.doctype.prospect.prospect.make_opportunity",
+						frm: frm,
+					});
+				},
+				__("Create")
+			);
 		}
 
 		if (!frm.is_new()) {
@@ -29,7 +37,7 @@
 		frm.trigger("show_activities");
 	},
 
-	show_notes (frm) {
+	show_notes(frm) {
 		const crm_notes = new erpnext.utils.CRMNotes({
 			frm: frm,
 			notes_wrapper: $(frm.fields_dict.notes_html.wrapper),
@@ -37,7 +45,7 @@
 		crm_notes.refresh();
 	},
 
-	show_activities (frm) {
+	show_activities(frm) {
 		const crm_activities = new erpnext.utils.CRMActivities({
 			frm: frm,
 			open_activities_wrapper: $(frm.fields_dict.open_activities_html.wrapper),
@@ -45,6 +53,5 @@
 			form_wrapper: $(frm.wrapper),
 		});
 		crm_activities.refresh();
-	}
-
+	},
 });
diff --git a/erpnext/crm/doctype/sales_stage/sales_stage.js b/erpnext/crm/doctype/sales_stage/sales_stage.js
index 0447f78..c6811665 100644
--- a/erpnext/crm/doctype/sales_stage/sales_stage.js
+++ b/erpnext/crm/doctype/sales_stage/sales_stage.js
@@ -1,8 +1,6 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Sales Stage', {
-	refresh: function(frm) {
-
-	}
+frappe.ui.form.on("Sales Stage", {
+	refresh: function (frm) {},
 });
diff --git a/erpnext/crm/report/campaign_efficiency/campaign_efficiency.js b/erpnext/crm/report/campaign_efficiency/campaign_efficiency.js
index 0c4e7f2..a1e51f0 100644
--- a/erpnext/crm/report/campaign_efficiency/campaign_efficiency.js
+++ b/erpnext/crm/report/campaign_efficiency/campaign_efficiency.js
@@ -1,18 +1,18 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 frappe.query_reports["Campaign Efficiency"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname": "from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
 		},
 		{
-			"fieldname": "to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
-		}
-	]
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
+		},
+	],
 };
diff --git a/erpnext/crm/report/first_response_time_for_opportunity/first_response_time_for_opportunity.js b/erpnext/crm/report/first_response_time_for_opportunity/first_response_time_for_opportunity.js
index 4bf8247..efaea49 100644
--- a/erpnext/crm/report/first_response_time_for_opportunity/first_response_time_for_opportunity.js
+++ b/erpnext/crm/report/first_response_time_for_opportunity/first_response_time_for_opportunity.js
@@ -1,43 +1,44 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["First Response Time for Opportunity"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname": "from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"reqd": 1,
-			"default": frappe.datetime.add_days(frappe.datetime.nowdate(), -30)
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			reqd: 1,
+			default: frappe.datetime.add_days(frappe.datetime.nowdate(), -30),
 		},
 		{
-			"fieldname": "to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"reqd": 1,
-			"default": frappe.datetime.nowdate()
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			reqd: 1,
+			default: frappe.datetime.nowdate(),
 		},
 	],
 	get_chart_data: function (_columns, result) {
 		return {
 			data: {
-				labels: result.map(d => d.creation_date),
-				datasets: [{
-					name: "First Response Time",
-					values: result.map(d => d.first_response_time)
-				}]
+				labels: result.map((d) => d.creation_date),
+				datasets: [
+					{
+						name: "First Response Time",
+						values: result.map((d) => d.first_response_time),
+					},
+				],
 			},
 			type: "line",
 			tooltipOptions: {
-				formatTooltipY: d => {
+				formatTooltipY: (d) => {
 					let duration_options = {
 						hide_days: 0,
-						hide_seconds: 0
+						hide_seconds: 0,
 					};
 					return frappe.utils.get_formatted_duration(d, duration_options);
-				}
-			}
-		}
-	}
+				},
+			},
+		};
+	},
 };
diff --git a/erpnext/crm/report/lead_conversion_time/lead_conversion_time.js b/erpnext/crm/report/lead_conversion_time/lead_conversion_time.js
index d7ff9ad..0019337 100644
--- a/erpnext/crm/report/lead_conversion_time/lead_conversion_time.js
+++ b/erpnext/crm/report/lead_conversion_time/lead_conversion_time.js
@@ -1,22 +1,21 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Lead Conversion Time"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			'reqd': 1,
-			"default": frappe.datetime.add_days(frappe.datetime.nowdate(), -30)
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			reqd: 1,
+			default: frappe.datetime.add_days(frappe.datetime.nowdate(), -30),
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			'reqd': 1,
-			"default":frappe.datetime.nowdate()
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			reqd: 1,
+			default: frappe.datetime.nowdate(),
 		},
-	]
+	],
 };
diff --git a/erpnext/crm/report/lead_details/lead_details.js b/erpnext/crm/report/lead_details/lead_details.js
index 66611f6..feecc07 100644
--- a/erpnext/crm/report/lead_details/lead_details.js
+++ b/erpnext/crm/report/lead_details/lead_details.js
@@ -1,52 +1,51 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Lead Details"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company"),
-			"reqd": 1
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
+			reqd: 1,
 		},
 		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.add_months(frappe.datetime.get_today(), -12),
-			"reqd": 1
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.add_months(frappe.datetime.get_today(), -12),
+			reqd: 1,
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today(),
-			"reqd": 1
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.get_today(),
+			reqd: 1,
 		},
 		{
-			"fieldname":"status",
-			"label": __("Status"),
-			"fieldtype": "Select",
+			fieldname: "status",
+			label: __("Status"),
+			fieldtype: "Select",
 			options: [
-				{ "value": "Lead", "label": __("Lead") },
-				{ "value": "Open", "label": __("Open") },
-				{ "value": "Replied", "label": __("Replied") },
-				{ "value": "Opportunity", "label": __("Opportunity") },
-				{ "value": "Quotation", "label": __("Quotation") },
-				{ "value": "Lost Quotation", "label": __("Lost Quotation") },
-				{ "value": "Interested", "label": __("Interested") },
-				{ "value": "Converted", "label": __("Converted") },
-				{ "value": "Do Not Contact", "label": __("Do Not Contact") },
+				{ value: "Lead", label: __("Lead") },
+				{ value: "Open", label: __("Open") },
+				{ value: "Replied", label: __("Replied") },
+				{ value: "Opportunity", label: __("Opportunity") },
+				{ value: "Quotation", label: __("Quotation") },
+				{ value: "Lost Quotation", label: __("Lost Quotation") },
+				{ value: "Interested", label: __("Interested") },
+				{ value: "Converted", label: __("Converted") },
+				{ value: "Do Not Contact", label: __("Do Not Contact") },
 			],
 		},
 		{
-			"fieldname":"territory",
-			"label": __("Territory"),
-			"fieldtype": "Link",
-			"options": "Territory",
-		}
-	]
+			fieldname: "territory",
+			label: __("Territory"),
+			fieldtype: "Link",
+			options: "Territory",
+		},
+	],
 };
diff --git a/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.js b/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.js
index 6fc52a1..bd64641 100644
--- a/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.js
+++ b/erpnext/crm/report/lead_owner_efficiency/lead_owner_efficiency.js
@@ -1,17 +1,18 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
-	frappe.query_reports["Lead Owner Efficiency"] = {
-		"filters": [
-			{
-				"fieldname": "from_date",
-				"label": __("From Date"),
-				"fieldtype": "Date",
-				"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
-			},
-			{
-				"fieldname": "to_date",
-				"label": __("To Date"),
-				"fieldtype": "Date",
-				"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
-			}
-		]};
+frappe.query_reports["Lead Owner Efficiency"] = {
+	filters: [
+		{
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
+		},
+		{
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
+		},
+	],
+};
diff --git a/erpnext/crm/report/lost_opportunity/lost_opportunity.js b/erpnext/crm/report/lost_opportunity/lost_opportunity.js
index 8d59239..7932afe 100644
--- a/erpnext/crm/report/lost_opportunity/lost_opportunity.js
+++ b/erpnext/crm/report/lost_opportunity/lost_opportunity.js
@@ -1,61 +1,60 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Lost Opportunity"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company"),
-			"reqd": 1
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
+			reqd: 1,
 		},
 		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.add_months(frappe.datetime.get_today(), -12),
-			"reqd": 1
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.add_months(frappe.datetime.get_today(), -12),
+			reqd: 1,
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today(),
-			"reqd": 1
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.get_today(),
+			reqd: 1,
 		},
 		{
-			"fieldname":"lost_reason",
-			"label": __("Lost Reason"),
-			"fieldtype": "Link",
-			"options": "Opportunity Lost Reason"
+			fieldname: "lost_reason",
+			label: __("Lost Reason"),
+			fieldtype: "Link",
+			options: "Opportunity Lost Reason",
 		},
 		{
-			"fieldname":"territory",
-			"label": __("Territory"),
-			"fieldtype": "Link",
-			"options": "Territory"
+			fieldname: "territory",
+			label: __("Territory"),
+			fieldtype: "Link",
+			options: "Territory",
 		},
 		{
-			"fieldname":"opportunity_from",
-			"label": __("Opportunity From"),
-			"fieldtype": "Link",
-			"options": "DocType",
-			"get_query": function() {
+			fieldname: "opportunity_from",
+			label: __("Opportunity From"),
+			fieldtype: "Link",
+			options: "DocType",
+			get_query: function () {
 				return {
-					"filters": {
-						"name": ["in", ["Customer", "Lead"]],
-					}
-				}
-			}
+					filters: {
+						name: ["in", ["Customer", "Lead"]],
+					},
+				};
+			},
 		},
 		{
-			"fieldname":"party_name",
-			"label": __("Party"),
-			"fieldtype": "Dynamic Link",
-			"options": "opportunity_from"
+			fieldname: "party_name",
+			label: __("Party"),
+			fieldtype: "Dynamic Link",
+			options: "opportunity_from",
 		},
-	]
+	],
 };
diff --git a/erpnext/crm/report/opportunity_summary_by_sales_stage/opportunity_summary_by_sales_stage.js b/erpnext/crm/report/opportunity_summary_by_sales_stage/opportunity_summary_by_sales_stage.js
index 0aa2143..36361e5 100644
--- a/erpnext/crm/report/opportunity_summary_by_sales_stage/opportunity_summary_by_sales_stage.js
+++ b/erpnext/crm/report/opportunity_summary_by_sales_stage/opportunity_summary_by_sales_stage.js
@@ -1,28 +1,26 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Opportunity Summary by Sales Stage"] = {
-	"filters": [
+	filters: [
 		{
 			fieldname: "based_on",
 			label: __("Based On"),
 			fieldtype: "Select",
 			options: "Opportunity Owner\nSource\nOpportunity Type",
-			default: "Opportunity Owner"
+			default: "Opportunity Owner",
 		},
 		{
 			fieldname: "data_based_on",
 			label: __("Data Based On"),
 			fieldtype: "Select",
 			options: "Number\nAmount",
-			default: "Number"
+			default: "Number",
 		},
 		{
 			fieldname: "from_date",
 			label: __("From Date"),
 			fieldtype: "Date",
-
 		},
 		{
 			fieldname: "to_date",
@@ -33,14 +31,14 @@
 			fieldname: "status",
 			label: __("Status"),
 			fieldtype: "MultiSelectList",
-			get_data: function() {
+			get_data: function () {
 				return [
-					{value: "Open", description: "Status"},
-					{value: "Converted", description: "Status"},
-					{value: "Quotation", description: "Status"},
-					{value: "Replied", description: "Status"}
-				]
-			}
+					{ value: "Open", description: "Status" },
+					{ value: "Converted", description: "Status" },
+					{ value: "Quotation", description: "Status" },
+					{ value: "Replied", description: "Status" },
+				];
+			},
 		},
 		{
 			fieldname: "opportunity_source",
@@ -59,7 +57,7 @@
 			label: __("Company"),
 			fieldtype: "Link",
 			options: "Company",
-			default: frappe.defaults.get_user_default("Company")
-		}
-	]
+			default: frappe.defaults.get_user_default("Company"),
+		},
+	],
 };
diff --git a/erpnext/crm/report/prospects_engaged_but_not_converted/prospects_engaged_but_not_converted.js b/erpnext/crm/report/prospects_engaged_but_not_converted/prospects_engaged_but_not_converted.js
index 6f37719..d625941 100644
--- a/erpnext/crm/report/prospects_engaged_but_not_converted/prospects_engaged_but_not_converted.js
+++ b/erpnext/crm/report/prospects_engaged_but_not_converted/prospects_engaged_but_not_converted.js
@@ -2,24 +2,24 @@
 // For license information, please see license.txt
 
 frappe.query_reports["Prospects Engaged But Not Converted"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname": "lead",
-			"label": __("Lead"),
-			"fieldtype": "Link",
-			"options": "Lead"
+			fieldname: "lead",
+			label: __("Lead"),
+			fieldtype: "Link",
+			options: "Lead",
 		},
 		{
-			"fieldname": "no_of_interaction",
-			"label": __("Number of Interaction"),
-			"fieldtype": "Int",
-			"default": 1
+			fieldname: "no_of_interaction",
+			label: __("Number of Interaction"),
+			fieldtype: "Int",
+			default: 1,
 		},
 		{
-			"fieldname": "lead_age",
-			"label": __("Minimum Lead Age (Days)"),
-			"fieldtype": "Int",
-			"default": 60
+			fieldname: "lead_age",
+			label: __("Minimum Lead Age (Days)"),
+			fieldtype: "Int",
+			default: 60,
 		},
-	]
-}
+	],
+};
diff --git a/erpnext/crm/report/sales_pipeline_analytics/sales_pipeline_analytics.js b/erpnext/crm/report/sales_pipeline_analytics/sales_pipeline_analytics.js
index 3111121..df035c1 100644
--- a/erpnext/crm/report/sales_pipeline_analytics/sales_pipeline_analytics.js
+++ b/erpnext/crm/report/sales_pipeline_analytics/sales_pipeline_analytics.js
@@ -1,70 +1,69 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Sales Pipeline Analytics"] = {
-	"filters": [
+	filters: [
 		{
 			fieldname: "pipeline_by",
 			label: __("Pipeline By"),
 			fieldtype: "Select",
 			options: "Owner\nSales Stage",
-			default: "Owner"
+			default: "Owner",
 		},
 		{
 			fieldname: "from_date",
 			label: __("From Date"),
-			fieldtype: "Date"
+			fieldtype: "Date",
 		},
 		{
 			fieldname: "to_date",
 			label: __("To Date"),
-			fieldtype: "Date"
+			fieldtype: "Date",
 		},
 		{
 			fieldname: "range",
 			label: __("Range"),
 			fieldtype: "Select",
 			options: "Monthly\nQuarterly",
-			default: "Monthly"
+			default: "Monthly",
 		},
 		{
 			fieldname: "assigned_to",
 			label: __("Assigned To"),
 			fieldtype: "Link",
-			options: "User"
+			options: "User",
 		},
 		{
 			fieldname: "status",
 			label: __("Status"),
 			fieldtype: "Select",
-			options: "Open\nQuotation\nConverted\nReplied"
+			options: "Open\nQuotation\nConverted\nReplied",
 		},
 		{
 			fieldname: "based_on",
 			label: __("Based On"),
 			fieldtype: "Select",
 			options: "Number\nAmount",
-			default: "Number"
+			default: "Number",
 		},
 		{
 			fieldname: "company",
 			label: __("Company"),
 			fieldtype: "Link",
 			options: "Company",
-			default: frappe.defaults.get_user_default("Company")
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
 			fieldname: "opportunity_source",
 			label: __("Opportunity Source"),
 			fieldtype: "Link",
-			options: "Lead Source"
+			options: "Lead Source",
 		},
 		{
 			fieldname: "opportunity_type",
 			label: __("Opportunity Type"),
 			fieldtype: "Link",
-			options: "Opportunity Type"
+			options: "Opportunity Type",
 		},
-	]
+	],
 };
diff --git a/erpnext/erpnext_integrations/doctype/plaid_settings/plaid_settings.js b/erpnext/erpnext_integrations/doctype/plaid_settings/plaid_settings.js
index 015e943..fc3bf80 100644
--- a/erpnext/erpnext_integrations/doctype/plaid_settings/plaid_settings.js
+++ b/erpnext/erpnext_integrations/doctype/plaid_settings/plaid_settings.js
@@ -3,20 +3,20 @@
 
 frappe.provide("erpnext.integrations");
 
-frappe.ui.form.on('Plaid Settings', {
+frappe.ui.form.on("Plaid Settings", {
 	enabled: function (frm) {
-		frm.toggle_reqd('plaid_client_id', frm.doc.enabled);
-		frm.toggle_reqd('plaid_secret', frm.doc.enabled);
-		frm.toggle_reqd('plaid_env', frm.doc.enabled);
+		frm.toggle_reqd("plaid_client_id", frm.doc.enabled);
+		frm.toggle_reqd("plaid_secret", frm.doc.enabled);
+		frm.toggle_reqd("plaid_env", frm.doc.enabled);
 	},
 
 	refresh: function (frm) {
 		if (frm.doc.enabled) {
-			frm.add_custom_button(__('Link a new bank account'), () => {
+			frm.add_custom_button(__("Link a new bank account"), () => {
 				new erpnext.integrations.plaidLink(frm);
 			});
 
-			frm.add_custom_button(__('Reset Plaid Link'), () => {
+			frm.add_custom_button(__("Reset Plaid Link"), () => {
 				new erpnext.integrations.plaidLink(frm);
 			});
 
@@ -29,20 +29,23 @@
 
 						frappe.msgprint({
 							title: __("Sync Started"),
-							message: __("The sync has started in the background, please check the {0} list for new records.", [bank_transaction_link]),
-							alert: 1
+							message: __(
+								"The sync has started in the background, please check the {0} list for new records.",
+								[bank_transaction_link]
+							),
+							alert: 1,
 						});
-					}
+					},
 				});
 			}).addClass("btn-primary");
 		}
-	}
+	},
 });
 
 erpnext.integrations.plaidLink = class plaidLink {
 	constructor(parent) {
 		this.frm = parent;
-		this.plaidUrl = 'https://cdn.plaid.com/link/v2/stable/link-initialize.js';
+		this.plaidUrl = "https://cdn.plaid.com/link/v2/stable/link-initialize.js";
 		this.init_config();
 	}
 
@@ -55,9 +58,9 @@
 	}
 
 	async get_link_token() {
-		const token = await this.frm.call("get_link_token").then(resp => resp.message);
+		const token = await this.frm.call("get_link_token").then((resp) => resp.message);
 		if (!token) {
-			frappe.throw(__('Cannot retrieve link token. Check Error Log for more information'));
+			frappe.throw(__("Cannot retrieve link token. Check Error Log for more information"));
 		}
 		return token;
 	}
@@ -84,55 +87,74 @@
 				resolve();
 				return;
 			}
-			const el = document.createElement('script');
-			el.type = 'text/javascript';
+			const el = document.createElement("script");
+			el.type = "text/javascript";
 			el.async = true;
 			el.src = src;
-			el.addEventListener('load', resolve);
-			el.addEventListener('error', reject);
-			el.addEventListener('abort', reject);
+			el.addEventListener("load", resolve);
+			el.addEventListener("error", reject);
+			el.addEventListener("abort", reject);
 			document.head.appendChild(el);
 		});
 	}
 
 	onScriptLoaded(me) {
-		me.linkHandler = Plaid.create({ // eslint-disable-line no-undef
+		me.linkHandler = Plaid.create({
+			// eslint-disable-line no-undef
 			clientName: me.client_name,
 			product: me.product,
 			env: me.plaid_env,
 			token: me.token,
-			onSuccess: me.plaid_success
+			onSuccess: me.plaid_success,
 		});
 	}
 
 	onScriptError(error) {
-		frappe.msgprint(__("There was an issue connecting to Plaid's authentication server. Check browser console for more information"));
+		frappe.msgprint(
+			__(
+				"There was an issue connecting to Plaid's authentication server. Check browser console for more information"
+			)
+		);
 		console.log(error);
 	}
 
 	plaid_success(token, response) {
 		const me = this;
 
-		frappe.prompt({
-			fieldtype: "Link",
-			options: "Company",
-			label: __("Company"),
-			fieldname: "company",
-			reqd: 1
-		}, (data) => {
-			me.company = data.company;
-			frappe.xcall('erpnext.erpnext_integrations.doctype.plaid_settings.plaid_settings.add_institution', {
-				token: token,
-				response: response
-			}).then((result) => {
-				frappe.xcall('erpnext.erpnext_integrations.doctype.plaid_settings.plaid_settings.add_bank_accounts', {
-					response: response,
-					bank: result,
-					company: me.company
-				});
-			}).then(() => {
-				frappe.show_alert({ message: __("Bank accounts added"), indicator: 'green' });
-			});
-		}, __("Select a company"), __("Continue"));
+		frappe.prompt(
+			{
+				fieldtype: "Link",
+				options: "Company",
+				label: __("Company"),
+				fieldname: "company",
+				reqd: 1,
+			},
+			(data) => {
+				me.company = data.company;
+				frappe
+					.xcall(
+						"erpnext.erpnext_integrations.doctype.plaid_settings.plaid_settings.add_institution",
+						{
+							token: token,
+							response: response,
+						}
+					)
+					.then((result) => {
+						frappe.xcall(
+							"erpnext.erpnext_integrations.doctype.plaid_settings.plaid_settings.add_bank_accounts",
+							{
+								response: response,
+								bank: result,
+								company: me.company,
+							}
+						);
+					})
+					.then(() => {
+						frappe.show_alert({ message: __("Bank accounts added"), indicator: "green" });
+					});
+			},
+			__("Select a company"),
+			__("Continue")
+		);
 	}
 };
diff --git a/erpnext/erpnext_integrations/doctype/quickbooks_migrator/quickbooks_migrator.js b/erpnext/erpnext_integrations/doctype/quickbooks_migrator/quickbooks_migrator.js
index bfffcc5..f9364ed 100644
--- a/erpnext/erpnext_integrations/doctype/quickbooks_migrator/quickbooks_migrator.js
+++ b/erpnext/erpnext_integrations/doctype/quickbooks_migrator/quickbooks_migrator.js
@@ -1,71 +1,77 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('QuickBooks Migrator', {
-	connect: function(frm) {
+frappe.ui.form.on("QuickBooks Migrator", {
+	connect: function (frm) {
 		// OAuth requires user intervention to provide application access permissionsto requested scope
 		// Here we open a new window and redirect user to the authorization url.
 		// After user grants us permission to access. We will set authorization details on this doc which will force refresh.
-		window.open(frm.doc.authorization_url)
+		window.open(frm.doc.authorization_url);
 	},
-	fetch_data: function(frm) {
-		frm.call("migrate")
+	fetch_data: function (frm) {
+		frm.call("migrate");
 	},
-	onload: function(frm) {
-		frm.trigger("set_indicator")
-		var domain = frappe.urllib.get_base_url()
-		var redirect_url = `${domain}/api/method/erpnext.erpnext_integrations.doctype.quickbooks_migrator.quickbooks_migrator.callback`
+	onload: function (frm) {
+		frm.trigger("set_indicator");
+		var domain = frappe.urllib.get_base_url();
+		var redirect_url = `${domain}/api/method/erpnext.erpnext_integrations.doctype.quickbooks_migrator.quickbooks_migrator.callback`;
 		if (frm.doc.redirect_url != redirect_url) {
-			frm.set_value("redirect_url", redirect_url)
+			frm.set_value("redirect_url", redirect_url);
 		}
 		// Instead of changing percentage width and message of single progress bar
 		// Show a different porgress bar for every action after some time remove the finished progress bar
- 		// Former approach causes the progress bar to dance back and forth.
-		frm.trigger("set_indicator")
- 		frappe.realtime.on("quickbooks_progress_update", function (data) {
-			frm.dashboard.show_progress(data.message, (data.count / data.total) * 100, data.message)
+		// Former approach causes the progress bar to dance back and forth.
+		frm.trigger("set_indicator");
+		frappe.realtime.on("quickbooks_progress_update", function (data) {
+			frm.dashboard.show_progress(data.message, (data.count / data.total) * 100, data.message);
 			if (data.count == data.total) {
-				window.setTimeout( function(message) {frm.dashboard.hide_progress(message)}, 1500, data.messsage)
+				window.setTimeout(
+					function (message) {
+						frm.dashboard.hide_progress(message);
+					},
+					1500,
+					data.messsage
+				);
 			}
-		})
+		});
 	},
-	refresh: function(frm) {
-		frm.trigger("set_indicator")
+	refresh: function (frm) {
+		frm.trigger("set_indicator");
 		if (!frm.doc.access_token) {
 			// Unset access_token signifies that we don't have enough information to connect to quickbooks api and fetch data
 			if (frm.doc.authorization_url) {
 				frm.add_custom_button(__("Connect to Quickbooks"), function () {
-					frm.trigger("connect")
+					frm.trigger("connect");
 				});
 			}
 		}
 		if (frm.doc.access_token) {
 			// If we have access_token that means we also have refresh_token we don't need user intervention anymore
 			// All we need now is a Company from erpnext
-			frm.remove_custom_button(__("Connect to Quickbooks"))
+			frm.remove_custom_button(__("Connect to Quickbooks"));
 
-			frm.toggle_display("company_settings", 1)
-			frm.set_df_property("company", "reqd", 1)
+			frm.toggle_display("company_settings", 1);
+			frm.set_df_property("company", "reqd", 1);
 			if (frm.doc.company) {
-					frm.add_custom_button(__("Fetch Data"), function () {
-					frm.trigger("fetch_data")
+				frm.add_custom_button(__("Fetch Data"), function () {
+					frm.trigger("fetch_data");
 				});
 			}
 		}
 	},
-	set_indicator: function(frm) {
+	set_indicator: function (frm) {
 		var indicator_map = {
 			"Connecting to QuickBooks": [__("Connecting to QuickBooks"), "orange"],
 			"Connected to QuickBooks": [__("Connected to QuickBooks"), "green"],
 			"In Progress": [__("In Progress"), "orange"],
-			"Complete": [__("Complete"), "green"],
-			"Failed": [__("Failed"), "red"],
-		}
+			Complete: [__("Complete"), "green"],
+			Failed: [__("Failed"), "red"],
+		};
 		if (frm.doc.status) {
-			var indicator = indicator_map[frm.doc.status]
-			var label = indicator[0]
-			var color = indicator[1]
-			frm.page.set_indicator(label, color)
+			var indicator = indicator_map[frm.doc.status];
+			var label = indicator[0];
+			var color = indicator[1];
+			frm.page.set_indicator(label, color);
 		}
 	},
 });
diff --git a/erpnext/erpnext_integrations/doctype/tally_migration/tally_migration.js b/erpnext/erpnext_integrations/doctype/tally_migration/tally_migration.js
index af06b34..556c332 100644
--- a/erpnext/erpnext_integrations/doctype/tally_migration/tally_migration.js
+++ b/erpnext/erpnext_integrations/doctype/tally_migration/tally_migration.js
@@ -16,24 +16,29 @@
 			frm.dashboard.show_progress(data.title, (data.count / data.total) * 100, data.message);
 			let error_occurred = data.count === -1;
 			if (data.count == data.total || error_occurred) {
-				window.setTimeout((title) => {
-					frm.dashboard.hide_progress(title);
-					frm.reload_doc();
-					if (error_occurred) {
-						frappe.msgprint({
-							message: __("An error has occurred during {0}. Check {1} for more details",
-								[
-									repl("<a href='/app/tally-migration/%(tally_document)s' class='variant-click'>%(tally_document)s</a>", {
-										tally_document: frm.docname
-									}),
-									"<a href='/app/error-log' class='variant-click'>Error Log</a>"
-								]
-							),
-							title: __("Tally Migration Error"),
-							indicator: "red"
-						});
-					}
-				}, 2000, data.title);
+				window.setTimeout(
+					(title) => {
+						frm.dashboard.hide_progress(title);
+						frm.reload_doc();
+						if (error_occurred) {
+							frappe.msgprint({
+								message: __("An error has occurred during {0}. Check {1} for more details", [
+									repl(
+										"<a href='/app/tally-migration/%(tally_document)s' class='variant-click'>%(tally_document)s</a>",
+										{
+											tally_document: frm.docname,
+										}
+									),
+									"<a href='/app/error-log' class='variant-click'>Error Log</a>",
+								]),
+								title: __("Tally Migration Error"),
+								indicator: "red",
+							});
+						}
+					},
+					2000,
+					data.title
+				);
 			}
 		});
 	},
@@ -43,10 +48,10 @@
 		erpnext.tally_migration.failed_import_log = JSON.parse(frm.doc.failed_import_log);
 		erpnext.tally_migration.fixed_errors_log = JSON.parse(frm.doc.fixed_errors_log);
 
-		["default_round_off_account", "default_warehouse", "default_cost_center"].forEach(account => {
-			frm.toggle_reqd(account, frm.doc.is_master_data_imported === 1)
-			frm.toggle_enable(account, frm.doc.is_day_book_data_processed != 1)
-		})
+		["default_round_off_account", "default_warehouse", "default_cost_center"].forEach((account) => {
+			frm.toggle_reqd(account, frm.doc.is_master_data_imported === 1);
+			frm.toggle_enable(account, frm.doc.is_day_book_data_processed != 1);
+		});
 
 		if (frm.doc.master_data && !frm.doc.is_master_data_imported) {
 			if (frm.doc.is_master_data_processed) {
@@ -74,27 +79,27 @@
 	},
 
 	erpnext_company: function (frm) {
-		frappe.db.exists("Company", frm.doc.erpnext_company).then(exists => {
+		frappe.db.exists("Company", frm.doc.erpnext_company).then((exists) => {
 			if (exists) {
 				frappe.msgprint(
-					__("Company {0} already exists. Continuing will overwrite the Company and Chart of Accounts", [frm.doc.erpnext_company]),
+					__(
+						"Company {0} already exists. Continuing will overwrite the Company and Chart of Accounts",
+						[frm.doc.erpnext_company]
+					)
 				);
 			}
 		});
 	},
 
 	add_button: function (frm, label, method) {
-		frm.add_custom_button(
-			label,
-			() => {
-				frm.call({
-					doc: frm.doc,
-					method: method,
-					freeze: true
-				});
-				frm.reload_doc();
-			}
-		);
+		frm.add_custom_button(label, () => {
+			frm.call({
+				doc: frm.doc,
+				method: method,
+				freeze: true,
+			});
+			frm.reload_doc();
+		});
 	},
 
 	render_html_table(frm, shown_logs, hidden_logs, field) {
@@ -102,23 +107,26 @@
 			frm.toggle_display(field, true);
 		} else {
 			frm.toggle_display(field, false);
-			return
+			return;
 		}
 		let rows = erpnext.tally_migration.get_html_rows(shown_logs, field);
 		let rows_head, table_caption;
 
-		let table_footer = (hidden_logs && (hidden_logs.length > 0)) ? `<tr class="text-muted">
+		let table_footer =
+			hidden_logs && hidden_logs.length > 0
+				? `<tr class="text-muted">
 				<td colspan="4">And ${hidden_logs.length} more others</td>
-			</tr>`: "";
+			</tr>`
+				: "";
 
 		if (field === "fixed_error_log_preview") {
 			rows_head = `<th width="75%">${__("Meta Data")}</th>
-			<th width="10%">${__("Unresolve")}</th>`
-			table_caption = "Resolved Issues"
+			<th width="10%">${__("Unresolve")}</th>`;
+			table_caption = "Resolved Issues";
 		} else {
 			rows_head = `<th width="75%">${__("Error Message")}</th>
-			<th width="10%">${__("Create")}</th>`
-			table_caption = "Error Log"
+			<th width="10%">${__("Create")}</th>`;
+			table_caption = "Error Log";
 		}
 
 		frm.get_field(field).$wrapper.html(`
@@ -144,7 +152,7 @@
 					summary[row.doc.doctype] = 1;
 				}
 			}
-			return summary
+			return summary;
 		}, {});
 		console.table(summary);
 	},
@@ -177,7 +185,7 @@
 		let hidden_logs = completed_log.slice(20);
 
 		frm.events.render_html_table(frm, logs, hidden_logs, "fixed_error_log_preview");
-	}
+	},
 });
 
 erpnext.tally_migration.getError = (traceback) => {
@@ -186,31 +194,33 @@
 	let message;
 
 	if (is_multiline) {
-		let exc_error_idx = traceback.trim().lastIndexOf("\n") + 1
-		let error_line = traceback.substr(exc_error_idx)
-		let split_str_idx = (error_line.indexOf(':') > 0) ? error_line.indexOf(':') + 1 : 0;
+		let exc_error_idx = traceback.trim().lastIndexOf("\n") + 1;
+		let error_line = traceback.substr(exc_error_idx);
+		let split_str_idx = error_line.indexOf(":") > 0 ? error_line.indexOf(":") + 1 : 0;
 		message = error_line.slice(split_str_idx).trim();
 	} else {
 		message = traceback;
 	}
 
-	return message
-}
+	return message;
+};
 
 erpnext.tally_migration.cleanDoc = (obj) => {
 	/* Strips all null and empty values of your JSON object */
 	let temp = obj;
-	$.each(temp, function(key, value){
-		if (value === "" || value === null){
+	$.each(temp, function (key, value) {
+		if (value === "" || value === null) {
 			delete obj[key];
-		} else if (Object.prototype.toString.call(value) === '[object Object]') {
+		} else if (Object.prototype.toString.call(value) === "[object Object]") {
 			erpnext.tally_migration.cleanDoc(value);
 		} else if ($.isArray(value)) {
-			$.each(value, function (k,v) { erpnext.tally_migration.cleanDoc(v); });
+			$.each(value, function (k, v) {
+				erpnext.tally_migration.cleanDoc(v);
+			});
 		}
 	});
 	return temp;
-}
+};
 
 erpnext.tally_migration.unresolve = (document) => {
 	/* Mark document migration as unresolved ie. move to failed error log */
@@ -218,9 +228,9 @@
 	let failed_log = erpnext.tally_migration.failed_import_log;
 	let fixed_log = erpnext.tally_migration.fixed_errors_log;
 
-	let modified_fixed_log = fixed_log.filter(row => {
+	let modified_fixed_log = fixed_log.filter((row) => {
 		if (!frappe.utils.deep_equal(erpnext.tally_migration.cleanDoc(row.doc), document)) {
-			return row
+			return row;
 		}
 	});
 
@@ -231,7 +241,7 @@
 
 	frm.dirty();
 	frm.save();
-}
+};
 
 erpnext.tally_migration.resolve = (document) => {
 	/* Mark document migration as resolved ie. move to fixed error log */
@@ -239,9 +249,9 @@
 	let failed_log = erpnext.tally_migration.failed_import_log;
 	let fixed_log = erpnext.tally_migration.fixed_errors_log;
 
-	let modified_failed_log = failed_log.filter(row => {
+	let modified_failed_log = failed_log.filter((row) => {
 		if (!frappe.utils.deep_equal(erpnext.tally_migration.cleanDoc(row.doc), document)) {
-			return row
+			return row;
 		}
 	});
 	fixed_log.push({ doc: document, exc: `Solved on ${Date()}` });
@@ -251,27 +261,27 @@
 
 	frm.dirty();
 	frm.save();
-}
+};
 
 erpnext.tally_migration.create_new_doc = (document) => {
 	/* Mark as resolved and create new document */
 	erpnext.tally_migration.resolve(document);
 	return frappe.call({
 		type: "POST",
-		method: 'erpnext.erpnext_integrations.doctype.tally_migration.tally_migration.new_doc',
+		method: "erpnext.erpnext_integrations.doctype.tally_migration.tally_migration.new_doc",
 		args: {
-			document
+			document,
 		},
 		freeze: true,
-		callback: function(r) {
-			if(!r.exc) {
+		callback: function (r) {
+			if (!r.exc) {
 				frappe.model.sync(r.message);
 				frappe.get_doc(r.message.doctype, r.message.name).__run_link_triggers = true;
 				frappe.set_route("Form", r.message.doctype, r.message.name);
 			}
-		}
+		},
 	});
-}
+};
 
 erpnext.tally_migration.get_html_rows = (logs, field) => {
 	let index = 0;
@@ -304,14 +314,18 @@
 				</div>`;
 
 			let create_button = `
-				<button class='btn btn-default btn-xs m-3' type='button' onclick='erpnext.tally_migration.create_new_doc(${JSON.stringify(doc)})'>
+				<button class='btn btn-default btn-xs m-3' type='button' onclick='erpnext.tally_migration.create_new_doc(${JSON.stringify(
+					doc
+				)})'>
 					${__("Create Document")}
-				</button>`
+				</button>`;
 
 			let mark_as_unresolved = `
-				<button class='btn btn-default btn-xs m-3' type='button' onclick='erpnext.tally_migration.unresolve(${JSON.stringify(doc)})'>
+				<button class='btn btn-default btn-xs m-3' type='button' onclick='erpnext.tally_migration.unresolve(${JSON.stringify(
+					doc
+				)})'>
 					${__("Mark as unresolved")}
-				</button>`
+				</button>`;
 
 			if (field === "fixed_error_log_preview") {
 				return `<tr>
@@ -343,7 +357,8 @@
 							</td>
 						</tr>`;
 			}
-		}).join("");
+		})
+		.join("");
 
-	return rows
-}
+	return rows;
+};
diff --git a/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.js b/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.js
index 4480ae5..43c7e1c 100644
--- a/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.js
+++ b/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.js
@@ -2,28 +2,28 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.provide("erpnext.maintenance");
-frappe.ui.form.on('Maintenance Schedule', {
+frappe.ui.form.on("Maintenance Schedule", {
 	setup: function (frm) {
-		frm.set_query('contact_person', erpnext.queries.contact_query);
-		frm.set_query('customer_address', erpnext.queries.address_query);
-		frm.set_query('customer', erpnext.queries.customer);
+		frm.set_query("contact_person", erpnext.queries.contact_query);
+		frm.set_query("customer_address", erpnext.queries.address_query);
+		frm.set_query("customer", erpnext.queries.customer);
 
-		frm.set_query('serial_and_batch_bundle', 'items', (doc, cdt, cdn) => {
+		frm.set_query("serial_and_batch_bundle", "items", (doc, cdt, cdn) => {
 			let item = locals[cdt][cdn];
 
 			return {
 				filters: {
-					'item_code': item.item_code,
-					'voucher_type': 'Maintenance Schedule',
-					'type_of_transaction': 'Maintenance',
-					'company': doc.company,
-				}
-			}
+					item_code: item.item_code,
+					voucher_type: "Maintenance Schedule",
+					type_of_transaction: "Maintenance",
+					company: doc.company,
+				},
+			};
 		});
 	},
 	onload: function (frm) {
 		if (!frm.doc.status) {
-			frm.set_value({ status: 'Draft' });
+			frm.set_value({ status: "Draft" });
 		}
 		if (frm.doc.__islocal) {
 			frm.set_value({ transaction_date: frappe.datetime.get_today() });
@@ -31,128 +31,136 @@
 	},
 	refresh: function (frm) {
 		setTimeout(() => {
-			frm.toggle_display('generate_schedule', !(frm.is_new() || frm.doc.docstatus));
-			frm.toggle_display('schedule', !(frm.is_new()));
+			frm.toggle_display("generate_schedule", !(frm.is_new() || frm.doc.docstatus));
+			frm.toggle_display("schedule", !frm.is_new());
 		}, 10);
 	},
 	customer: function (frm) {
-		erpnext.utils.get_party_details(frm)
+		erpnext.utils.get_party_details(frm);
 	},
 	customer_address: function (frm) {
-		erpnext.utils.get_address_display(frm, 'customer_address', 'address_display');
+		erpnext.utils.get_address_display(frm, "customer_address", "address_display");
 	},
 	contact_person: function (frm) {
 		erpnext.utils.get_contact_details(frm);
 	},
 	generate_schedule: function (frm) {
 		if (frm.is_new()) {
-			frappe.msgprint(__('Please save first'));
+			frappe.msgprint(__("Please save first"));
 		} else {
-			frm.call('generate_schedule');
+			frm.call("generate_schedule");
 		}
-	}
-})
+	},
+});
 
 // TODO commonify this code
 erpnext.maintenance.MaintenanceSchedule = class MaintenanceSchedule extends frappe.ui.form.Controller {
 	refresh() {
-		frappe.dynamic_link = {doc: this.frm.doc, fieldname: 'customer', doctype: 'Customer'}
+		frappe.dynamic_link = { doc: this.frm.doc, fieldname: "customer", doctype: "Customer" };
 
 		var me = this;
 
 		if (this.frm.doc.docstatus === 0) {
-			this.frm.add_custom_button(__('Sales Order'),
+			this.frm.add_custom_button(
+				__("Sales Order"),
 				function () {
 					erpnext.utils.map_current_doc({
 						method: "erpnext.selling.doctype.sales_order.sales_order.make_maintenance_schedule",
 						source_doctype: "Sales Order",
 						target: me.frm,
 						setters: {
-							customer: me.frm.doc.customer || undefined
+							customer: me.frm.doc.customer || undefined,
 						},
 						get_query_filters: {
 							docstatus: 1,
-							company: me.frm.doc.company
-						}
+							company: me.frm.doc.company,
+						},
 					});
-				}, __("Get Items From"));
+				},
+				__("Get Items From")
+			);
 		} else if (this.frm.doc.docstatus === 1) {
 			let schedules = me.frm.doc.schedules;
-			let flag = schedules.some(schedule => schedule.completion_status === "Pending");
+			let flag = schedules.some((schedule) => schedule.completion_status === "Pending");
 			if (flag) {
-				this.frm.add_custom_button(__('Maintenance Visit'), function () {
-					let options = "";
+				this.frm.add_custom_button(
+					__("Maintenance Visit"),
+					function () {
+						let options = "";
 
-					me.frm.call('get_pending_data', {data_type: "items"}).then(r => {
-						options = r.message;
+						me.frm.call("get_pending_data", { data_type: "items" }).then((r) => {
+							options = r.message;
 
-						let schedule_id = "";
-						let d = new frappe.ui.Dialog({
-							title: __("Enter Visit Details"),
-							fields: [{
-								fieldtype: "Select",
-								fieldname: "item_name",
-								label: __("Item Name"),
-								options: options,
-								reqd: 1,
-								onchange: function () {
-									let field = d.get_field("scheduled_date");
-									me.frm.call('get_pending_data',
-										{
-											item_name: this.value,
-											data_type: "date"
-										}).then(r => {
-										field.df.options = r.message;
-										field.refresh();
-									});
-								}
-							},
-							{
-								label: __('Scheduled Date'),
-								fieldname: 'scheduled_date',
-								fieldtype: 'Select',
-								options: "",
-								reqd: 1,
-								onchange: function () {
-									let field = d.get_field('item_name');
-									me.frm.call(
-										'get_pending_data',
-										{
-											item_name: field.value,
-											s_date: this.value,
-											data_type: "id"
-										}).then(r => {
-										schedule_id = r.message;
-									});
-								}
-							},
-							],
-							primary_action_label: 'Create Visit',
-							primary_action(values) {
-								frappe.call({
-									method: "erpnext.maintenance.doctype.maintenance_schedule.maintenance_schedule.make_maintenance_visit",
-									args: {
-										item_name: values.item_name,
-										s_id: schedule_id,
-										source_name: me.frm.doc.name,
+							let schedule_id = "";
+							let d = new frappe.ui.Dialog({
+								title: __("Enter Visit Details"),
+								fields: [
+									{
+										fieldtype: "Select",
+										fieldname: "item_name",
+										label: __("Item Name"),
+										options: options,
+										reqd: 1,
+										onchange: function () {
+											let field = d.get_field("scheduled_date");
+											me.frm
+												.call("get_pending_data", {
+													item_name: this.value,
+													data_type: "date",
+												})
+												.then((r) => {
+													field.df.options = r.message;
+													field.refresh();
+												});
+										},
 									},
-									callback: function (r) {
-										if (!r.exc) {
-											frappe.model.sync(r.message);
-											frappe.set_route("Form", r.message.doctype, r.message.name);
-										}
-									}
-								});
-								d.hide();
-							}
+									{
+										label: __("Scheduled Date"),
+										fieldname: "scheduled_date",
+										fieldtype: "Select",
+										options: "",
+										reqd: 1,
+										onchange: function () {
+											let field = d.get_field("item_name");
+											me.frm
+												.call("get_pending_data", {
+													item_name: field.value,
+													s_date: this.value,
+													data_type: "id",
+												})
+												.then((r) => {
+													schedule_id = r.message;
+												});
+										},
+									},
+								],
+								primary_action_label: "Create Visit",
+								primary_action(values) {
+									frappe.call({
+										method: "erpnext.maintenance.doctype.maintenance_schedule.maintenance_schedule.make_maintenance_visit",
+										args: {
+											item_name: values.item_name,
+											s_id: schedule_id,
+											source_name: me.frm.doc.name,
+										},
+										callback: function (r) {
+											if (!r.exc) {
+												frappe.model.sync(r.message);
+												frappe.set_route("Form", r.message.doctype, r.message.name);
+											}
+										},
+									});
+									d.hide();
+								},
+							});
+							d.show();
 						});
-						d.show();
-				});
-				}, __('Create'));
+					},
+					__("Create")
+				);
 			}
 		}
 	}
-
 };
 
-extend_cscript(cur_frm.cscript, new erpnext.maintenance.MaintenanceSchedule({frm: cur_frm}));
+extend_cscript(cur_frm.cscript, new erpnext.maintenance.MaintenanceSchedule({ frm: cur_frm }));
diff --git a/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.js b/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.js
index e2f6cb3..0a05791 100644
--- a/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.js
+++ b/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.js
@@ -2,11 +2,11 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.provide("erpnext.maintenance");
-frappe.ui.form.on('Maintenance Visit', {
+frappe.ui.form.on("Maintenance Visit", {
 	setup: function (frm) {
-		frm.set_query('contact_person', erpnext.queries.contact_query);
-		frm.set_query('customer_address', erpnext.queries.address_query);
-		frm.set_query('customer', erpnext.queries.customer);
+		frm.set_query("contact_person", erpnext.queries.contact_query);
+		frm.set_query("customer_address", erpnext.queries.address_query);
+		frm.set_query("customer", erpnext.queries.customer);
 	},
 	onload: function (frm) {
 		// filters for serial no based on item code
@@ -15,42 +15,44 @@
 			if (!item_code) {
 				return;
 			}
-			frappe.call({
-				method: "erpnext.maintenance.doctype.maintenance_schedule.maintenance_schedule.get_serial_nos_from_schedule",
-				args: {
-					schedule: frm.doc.maintenance_schedule,
-					item_code: item_code
-				}
-			}).then((r) => {
-				let serial_nos = r.message;
-				frm.set_query('serial_no', 'purposes', () => {
-					if (serial_nos.length > 0) {
+			frappe
+				.call({
+					method: "erpnext.maintenance.doctype.maintenance_schedule.maintenance_schedule.get_serial_nos_from_schedule",
+					args: {
+						schedule: frm.doc.maintenance_schedule,
+						item_code: item_code,
+					},
+				})
+				.then((r) => {
+					let serial_nos = r.message;
+					frm.set_query("serial_no", "purposes", () => {
+						if (serial_nos.length > 0) {
+							return {
+								filters: {
+									item_code: item_code,
+									name: ["in", serial_nos],
+								},
+							};
+						}
 						return {
 							filters: {
-								'item_code': item_code,
-								'name': ["in", serial_nos]
-							}
+								item_code: item_code,
+							},
 						};
-					}
-					return {
-						filters: {
-							'item_code': item_code
-						}
-					};
+					});
 				});
-			});
 		} else {
-			frm.set_query('serial_no', 'purposes', (frm, cdt, cdn) => {
+			frm.set_query("serial_no", "purposes", (frm, cdt, cdn) => {
 				let row = locals[cdt][cdn];
 				return {
 					filters: {
-						'item_code': row.item_code
-					}
+						item_code: row.item_code,
+					},
 				};
 			});
 		}
 		if (!frm.doc.status) {
-			frm.set_value({ status: 'Draft' });
+			frm.set_value({ status: "Draft" });
 		}
 		if (frm.doc.__islocal) {
 			frm.set_value({ mntc_date: frappe.datetime.get_today() });
@@ -60,25 +62,26 @@
 		erpnext.utils.get_party_details(frm);
 	},
 	customer_address: function (frm) {
-		erpnext.utils.get_address_display(frm, 'customer_address', 'address_display');
+		erpnext.utils.get_address_display(frm, "customer_address", "address_display");
 	},
 	contact_person: function (frm) {
 		erpnext.utils.get_contact_details(frm);
-	}
-})
+	},
+});
 
 // TODO commonify this code
 erpnext.maintenance.MaintenanceVisit = class MaintenanceVisit extends frappe.ui.form.Controller {
 	refresh() {
-		frappe.dynamic_link = {doc: this.frm.doc, fieldname: 'customer', doctype: 'Customer'}
+		frappe.dynamic_link = { doc: this.frm.doc, fieldname: "customer", doctype: "Customer" };
 
 		var me = this;
 
 		if (this.frm.doc.docstatus === 0) {
-			this.frm.add_custom_button(__('Maintenance Schedule'),
+			this.frm.add_custom_button(
+				__("Maintenance Schedule"),
 				function () {
 					if (!me.frm.doc.customer) {
-						frappe.msgprint(__('Please select Customer first'));
+						frappe.msgprint(__("Please select Customer first"));
 						return;
 					}
 					erpnext.utils.map_current_doc({
@@ -90,11 +93,14 @@
 						},
 						get_query_filters: {
 							docstatus: 1,
-							company: me.frm.doc.company
-						}
-					})
-				}, __("Get Items From"));
-			this.frm.add_custom_button(__('Warranty Claim'),
+							company: me.frm.doc.company,
+						},
+					});
+				},
+				__("Get Items From")
+			);
+			this.frm.add_custom_button(
+				__("Warranty Claim"),
 				function () {
 					erpnext.utils.map_current_doc({
 						method: "erpnext.support.doctype.warranty_claim.warranty_claim.make_maintenance_visit",
@@ -106,14 +112,17 @@
 						},
 						get_query_filters: {
 							status: ["in", "Open, Work in Progress"],
-							company: me.frm.doc.company
-						}
-					})
-				}, __("Get Items From"));
-			this.frm.add_custom_button(__('Sales Order'),
+							company: me.frm.doc.company,
+						},
+					});
+				},
+				__("Get Items From")
+			);
+			this.frm.add_custom_button(
+				__("Sales Order"),
 				function () {
 					if (!me.frm.doc.customer) {
-						frappe.msgprint(__('Please select Customer first'));
+						frappe.msgprint(__("Please select Customer first"));
 						return;
 					}
 					erpnext.utils.map_current_doc({
@@ -127,11 +136,13 @@
 							docstatus: 1,
 							company: me.frm.doc.company,
 							order_type: me.frm.doc.order_type,
-						}
-					})
-				}, __("Get Items From"));
+						},
+					});
+				},
+				__("Get Items From")
+			);
 		}
 	}
 };
 
-extend_cscript(cur_frm.cscript, new erpnext.maintenance.MaintenanceVisit({frm: cur_frm}));
+extend_cscript(cur_frm.cscript, new erpnext.maintenance.MaintenanceVisit({ frm: cur_frm }));
diff --git a/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit_list.js b/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit_list.js
index e98979d..c47706e 100644
--- a/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit_list.js
+++ b/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit_list.js
@@ -1,11 +1,15 @@
-frappe.listview_settings['Maintenance Visit'] = {
+frappe.listview_settings["Maintenance Visit"] = {
 	add_fields: ["customer", "customer_name", "completion_status", "maintenance_type"],
-	get_indicator: function(doc) {
+	get_indicator: function (doc) {
 		var s = doc.completion_status || "Pending";
-		return [__(s), {
-			"Pending": "blue",
-			"Partially Completed": "orange",
-			"Fully Completed": "green"
-		}[s], "completion_status,=," + doc.completion_status];
-	}
+		return [
+			__(s),
+			{
+				Pending: "blue",
+				"Partially Completed": "orange",
+				"Fully Completed": "green",
+			}[s],
+			"completion_status,=," + doc.completion_status,
+		];
+	},
 };
diff --git a/erpnext/manufacturing/doctype/blanket_order/blanket_order.js b/erpnext/manufacturing/doctype/blanket_order/blanket_order.js
index 716af85..9130109 100644
--- a/erpnext/manufacturing/doctype/blanket_order/blanket_order.js
+++ b/erpnext/manufacturing/doctype/blanket_order/blanket_order.js
@@ -1,60 +1,72 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Blanket Order', {
-	onload: function(frm) {
-		frm.trigger('set_tc_name_filter');
+frappe.ui.form.on("Blanket Order", {
+	onload: function (frm) {
+		frm.trigger("set_tc_name_filter");
 	},
 
-	setup: function(frm) {
+	setup: function (frm) {
 		frm.custom_make_buttons = {
-			'Purchase Order': 'Purchase Order',
-			'Sales Order': 'Sales Order',
-			'Quotation': 'Quotation',
+			"Purchase Order": "Purchase Order",
+			"Sales Order": "Sales Order",
+			Quotation: "Quotation",
 		};
 
 		frm.add_fetch("customer", "customer_name", "customer_name");
 		frm.add_fetch("supplier", "supplier_name", "supplier_name");
 	},
 
-	refresh: function(frm) {
+	refresh: function (frm) {
 		erpnext.hide_company(frm);
 		if (frm.doc.customer && frm.doc.docstatus === 1 && frm.doc.to_date > frappe.datetime.get_today()) {
-			frm.add_custom_button(__("Sales Order"), function() {
-				frappe.model.open_mapped_doc({
-					method: "erpnext.manufacturing.doctype.blanket_order.blanket_order.make_order",
-					frm: frm,
-					args: {
-						doctype: 'Sales Order'
-					}
-				});
-			}, __('Create'));
+			frm.add_custom_button(
+				__("Sales Order"),
+				function () {
+					frappe.model.open_mapped_doc({
+						method: "erpnext.manufacturing.doctype.blanket_order.blanket_order.make_order",
+						frm: frm,
+						args: {
+							doctype: "Sales Order",
+						},
+					});
+				},
+				__("Create")
+			);
 
-			frm.add_custom_button(__("Quotation"), function() {
-				frappe.model.open_mapped_doc({
-					method: "erpnext.manufacturing.doctype.blanket_order.blanket_order.make_order",
-					frm: frm,
-					args: {
-						doctype: 'Quotation'
-					}
-				});
-			}, __('Create'));
+			frm.add_custom_button(
+				__("Quotation"),
+				function () {
+					frappe.model.open_mapped_doc({
+						method: "erpnext.manufacturing.doctype.blanket_order.blanket_order.make_order",
+						frm: frm,
+						args: {
+							doctype: "Quotation",
+						},
+					});
+				},
+				__("Create")
+			);
 		}
 
 		if (frm.doc.supplier && frm.doc.docstatus === 1) {
-			frm.add_custom_button(__("Purchase Order"), function(){
-				frappe.model.open_mapped_doc({
-					method: "erpnext.manufacturing.doctype.blanket_order.blanket_order.make_order",
-					frm: frm,
-					args: {
-						doctype: 'Purchase Order'
-					}
-				});
-			}, __('Create'));
+			frm.add_custom_button(
+				__("Purchase Order"),
+				function () {
+					frappe.model.open_mapped_doc({
+						method: "erpnext.manufacturing.doctype.blanket_order.blanket_order.make_order",
+						frm: frm,
+						args: {
+							doctype: "Purchase Order",
+						},
+					});
+				},
+				__("Create")
+			);
 		}
 	},
 
-	onload_post_render: function(frm) {
+	onload_post_render: function (frm) {
 		frm.get_field("items").grid.set_multiple_add("item_code", "qty");
 	},
 
@@ -66,28 +78,28 @@
 		});
 	},
 
-	set_tc_name_filter: function(frm) {
-		if (frm.doc.blanket_order_type === 'Selling') {
-			frm.set_df_property("customer","reqd", 1);
-			frm.set_df_property("supplier","reqd", 0);
+	set_tc_name_filter: function (frm) {
+		if (frm.doc.blanket_order_type === "Selling") {
+			frm.set_df_property("customer", "reqd", 1);
+			frm.set_df_property("supplier", "reqd", 0);
 			frm.set_value("supplier", "");
 
-			frm.set_query("tc_name", function() {
+			frm.set_query("tc_name", function () {
 				return { filters: { selling: 1 } };
 			});
 		}
-		if (frm.doc.blanket_order_type === 'Purchasing') {
-			frm.set_df_property("supplier","reqd", 1);
-			frm.set_df_property("customer","reqd", 0);
+		if (frm.doc.blanket_order_type === "Purchasing") {
+			frm.set_df_property("supplier", "reqd", 1);
+			frm.set_df_property("customer", "reqd", 0);
 			frm.set_value("customer", "");
 
-			frm.set_query("tc_name", function() {
+			frm.set_query("tc_name", function () {
 				return { filters: { buying: 1 } };
 			});
 		}
 	},
 
 	blanket_order_type: function (frm) {
-		frm.trigger('set_tc_name_filter');
-	}
+		frm.trigger("set_tc_name_filter");
+	},
 });
diff --git a/erpnext/manufacturing/doctype/bom/bom.js b/erpnext/manufacturing/doctype/bom/bom.js
index 8c671e2..2ac28ea 100644
--- a/erpnext/manufacturing/doctype/bom/bom.js
+++ b/erpnext/manufacturing/doctype/bom/bom.js
@@ -6,139 +6,150 @@
 frappe.ui.form.on("BOM", {
 	setup(frm) {
 		frm.custom_make_buttons = {
-			'Work Order': 'Work Order',
-			'Quality Inspection': 'Quality Inspection'
+			"Work Order": "Work Order",
+			"Quality Inspection": "Quality Inspection",
 		};
 
-		frm.set_query("bom_no", "items", function() {
+		frm.set_query("bom_no", "items", function () {
 			return {
 				filters: {
-					'currency': frm.doc.currency,
-					'company': frm.doc.company
-				}
+					currency: frm.doc.currency,
+					company: frm.doc.company,
+				},
 			};
 		});
 
-		frm.set_query("source_warehouse", "items", function() {
+		frm.set_query("source_warehouse", "items", function () {
 			return {
 				filters: {
-					'company': frm.doc.company
-				}
+					company: frm.doc.company,
+				},
 			};
 		});
 
-		frm.set_query("item", function() {
+		frm.set_query("item", function () {
 			return {
 				query: "erpnext.manufacturing.doctype.bom.bom.item_query",
 				filters: {
-					"is_stock_item": 1
-				}
+					is_stock_item: 1,
+				},
 			};
 		});
 
-		frm.set_query("project", function() {
-			return{
-				filters:[
-					['Project', 'status', 'not in', 'Completed, Cancelled']
-				]
+		frm.set_query("project", function () {
+			return {
+				filters: [["Project", "status", "not in", "Completed, Cancelled"]],
 			};
 		});
 
-		frm.set_query("item_code", "items", function(doc) {
+		frm.set_query("item_code", "items", function (doc) {
 			return {
 				query: "erpnext.manufacturing.doctype.bom.bom.item_query",
 				filters: {
-					"include_item_in_manufacturing": 1,
-					"is_fixed_asset": 0
-				}
+					include_item_in_manufacturing: 1,
+					is_fixed_asset: 0,
+				},
 			};
 		});
 
-		frm.set_query("bom_no", "items", function(doc, cdt, cdn) {
+		frm.set_query("bom_no", "items", function (doc, cdt, cdn) {
 			var d = locals[cdt][cdn];
 			return {
 				filters: {
-					'item': d.item_code,
-					'is_active': 1,
-					'docstatus': 1
-				}
+					item: d.item_code,
+					is_active: 1,
+					docstatus: 1,
+				},
 			};
 		});
 	},
 
-	validate: function(frm) {
+	validate: function (frm) {
 		if (frm.doc.fg_based_operating_cost && frm.doc.with_operations) {
-			frappe.throw({message: __("Please check either with operations or FG Based Operating Cost."), title: __("Mandatory")});
+			frappe.throw({
+				message: __("Please check either with operations or FG Based Operating Cost."),
+				title: __("Mandatory"),
+			});
 		}
 	},
 
-	with_operations: function(frm) {
+	with_operations: function (frm) {
 		frm.set_df_property("fg_based_operating_cost", "hidden", frm.doc.with_operations ? 1 : 0);
 	},
 
-	fg_based_operating_cost: function(frm) {
+	fg_based_operating_cost: function (frm) {
 		frm.set_df_property("with_operations", "hidden", frm.doc.fg_based_operating_cost ? 1 : 0);
 	},
 
-	onload_post_render: function(frm) {
+	onload_post_render: function (frm) {
 		frm.get_field("items").grid.set_multiple_add("item_code", "qty");
 	},
 
 	refresh(frm) {
 		frm.toggle_enable("item", frm.doc.__islocal);
 
-		frm.set_indicator_formatter('item_code',
-			function(doc) {
-				if (doc.original_item){
-					return (doc.item_code != doc.original_item) ? "orange" : ""
-				}
-				return ""
+		frm.set_indicator_formatter("item_code", function (doc) {
+			if (doc.original_item) {
+				return doc.item_code != doc.original_item ? "orange" : "";
 			}
-		)
+			return "";
+		});
 
-		if (!frm.is_new() && frm.doc.docstatus<2) {
-			frm.add_custom_button(__("Update Cost"), function() {
+		if (!frm.is_new() && frm.doc.docstatus < 2) {
+			frm.add_custom_button(__("Update Cost"), function () {
 				frm.events.update_cost(frm, true);
 			});
-			frm.add_custom_button(__("Browse BOM"), function() {
+			frm.add_custom_button(__("Browse BOM"), function () {
 				frappe.route_options = {
-					"bom": frm.doc.name
+					bom: frm.doc.name,
 				};
 				frappe.set_route("Tree", "BOM");
 			});
 		}
 
 		if (!frm.is_new() && !frm.doc.docstatus == 0) {
-			frm.add_custom_button(__("New Version"), function() {
+			frm.add_custom_button(__("New Version"), function () {
 				let new_bom = frappe.model.copy_doc(frm.doc);
 				frappe.set_route("Form", "BOM", new_bom.name);
 			});
 		}
 
-		if(frm.doc.docstatus==1) {
-			frm.add_custom_button(__("Work Order"), function() {
-				frm.trigger("make_work_order");
-			}, __("Create"));
+		if (frm.doc.docstatus == 1) {
+			frm.add_custom_button(
+				__("Work Order"),
+				function () {
+					frm.trigger("make_work_order");
+				},
+				__("Create")
+			);
 
 			if (frm.doc.has_variants) {
-				frm.add_custom_button(__("Variant BOM"), function() {
-					frm.trigger("make_variant_bom");
-				}, __("Create"));
+				frm.add_custom_button(
+					__("Variant BOM"),
+					function () {
+						frm.trigger("make_variant_bom");
+					},
+					__("Create")
+				);
 			}
 
 			if (frm.doc.inspection_required) {
-				frm.add_custom_button(__("Quality Inspection"), function() {
-					frm.trigger("make_quality_inspection");
-				}, __("Create"));
+				frm.add_custom_button(
+					__("Quality Inspection"),
+					function () {
+						frm.trigger("make_quality_inspection");
+					},
+					__("Create")
+				);
 			}
 
-			frm.page.set_inner_btn_group_as_primary(__('Create'));
+			frm.page.set_inner_btn_group_as_primary(__("Create"));
 		}
 
-		if(frm.doc.items && frm.doc.allow_alternative_item) {
-			const has_alternative = frm.doc.items.find(i => i.allow_alternative_item === 1);
+		if (frm.doc.items && frm.doc.allow_alternative_item) {
+			const has_alternative = frm.doc.items.find((i) => i.allow_alternative_item === 1);
 			if (frm.doc.docstatus == 0 && has_alternative) {
-				frm.add_custom_button(__('Alternate Item'), () => {
+				frm.add_custom_button(__("Alternate Item"), () => {
 					erpnext.utils.select_alternate_items({
 						frm: frm,
 						child_docname: "items",
@@ -146,23 +157,26 @@
 						child_doctype: "BOM Item",
 						original_item_field: "original_item",
 						condition: (d) => {
-							if (d.allow_alternative_item) {return true;}
-						}
-					})
+							if (d.allow_alternative_item) {
+								return true;
+							}
+						},
+					});
 				});
 			}
 		}
 
-
 		if (frm.doc.has_variants) {
-			frm.set_intro(__('This is a Template BOM and will be used to make the work order for {0} of the item {1}',
-				[
+			frm.set_intro(
+				__("This is a Template BOM and will be used to make the work order for {0} of the item {1}", [
 					`<a class="variants-intro">variants</a>`,
 					`<a href="/app/item/${frm.doc.item}">${frm.doc.item}</a>`,
-				]), true);
+				]),
+				true
+			);
 
 			frm.$wrapper.find(".variants-intro").on("click", () => {
-				frappe.set_route("List", "Item", {"variant_of": frm.doc.item});
+				frappe.set_route("List", "Item", { variant_of: frm.doc.item });
 			});
 		}
 	},
@@ -176,38 +190,43 @@
 					item: item,
 					qty: data.qty || 0.0,
 					project: frm.doc.project,
-					variant_items: variant_items
+					variant_items: variant_items,
 				},
 				freeze: true,
 				callback(r) {
-					if(r.message) {
+					if (r.message) {
 						let doc = frappe.model.sync(r.message)[0];
 						frappe.set_route("Form", doc.doctype, doc.name);
 					}
-				}
+				},
 			});
 		});
 	},
 
 	make_variant_bom(frm) {
-		frm.events.setup_variant_prompt(frm, "Variant BOM", (frm, item, data, variant_items) => {
-			frappe.call({
-				method: "erpnext.manufacturing.doctype.bom.bom.make_variant_bom",
-				args: {
-					source_name: frm.doc.name,
-					bom_no: frm.doc.name,
-					item: item,
-					variant_items: variant_items
-				},
-				freeze: true,
-				callback(r) {
-					if(r.message) {
-						let doc = frappe.model.sync(r.message)[0];
-						frappe.set_route("Form", doc.doctype, doc.name);
-					}
-				}
-			});
-		}, true);
+		frm.events.setup_variant_prompt(
+			frm,
+			"Variant BOM",
+			(frm, item, data, variant_items) => {
+				frappe.call({
+					method: "erpnext.manufacturing.doctype.bom.bom.make_variant_bom",
+					args: {
+						source_name: frm.doc.name,
+						bom_no: frm.doc.name,
+						item: item,
+						variant_items: variant_items,
+					},
+					freeze: true,
+					callback(r) {
+						if (r.message) {
+							let doc = frappe.model.sync(r.message)[0];
+							frappe.set_route("Form", doc.doctype, doc.name);
+						}
+					},
+				});
+			},
+			true
+		);
 	},
 
 	setup_variant_prompt(frm, title, callback, skip_qty_field) {
@@ -215,27 +234,27 @@
 
 		if (frm.doc.has_variants) {
 			fields.push({
-				fieldtype: 'Link',
-				label: __('Variant Item'),
-				fieldname: 'item',
+				fieldtype: "Link",
+				label: __("Variant Item"),
+				fieldname: "item",
 				options: "Item",
 				reqd: 1,
 				get_query() {
 					return {
 						query: "erpnext.controllers.queries.item_query",
 						filters: {
-							"variant_of": frm.doc.item
-						}
+							variant_of: frm.doc.item,
+						},
 					};
-				}
+				},
 			});
 		}
 
 		if (!skip_qty_field) {
 			fields.push({
-				fieldtype: 'Float',
-				label: __('Qty To Manufacture'),
-				fieldname: 'qty',
+				fieldtype: "Float",
+				label: __("Qty To Manufacture"),
+				fieldname: "qty",
 				reqd: 1,
 				default: 1,
 				onchange: () => {
@@ -244,29 +263,23 @@
 						acc[item.item_code] = item.qty;
 						return acc;
 					}, {});
-					const mf_qty = cur_dialog.fields_list.filter(
-						(f) => f.df.fieldname === "qty"
-					)[0]?.value;
-					const items = cur_dialog.fields.filter(
-						(f) => f.fieldname === "items"
-					)[0]?.data;
+					const mf_qty = cur_dialog.fields_list.filter((f) => f.df.fieldname === "qty")[0]?.value;
+					const items = cur_dialog.fields.filter((f) => f.fieldname === "items")[0]?.data;
 
 					if (!items) {
 						return;
 					}
 
 					items.forEach((item) => {
-						item.qty =
-							(variant_items_map[item.item_code] * mf_qty) /
-							quantity;
+						item.qty = (variant_items_map[item.item_code] * mf_qty) / quantity;
 					});
 
 					cur_dialog.refresh();
-				}
+				},
 			});
 		}
 
-		var has_template_rm = frm.doc.items.filter(d => d.has_variants === 1) || [];
+		var has_template_rm = frm.doc.items.filter((d) => d.has_variants === 1) || [];
 		if (has_template_rm && has_template_rm.length > 0) {
 			fields.push({
 				fieldname: "items",
@@ -296,10 +309,10 @@
 							return {
 								query: "erpnext.controllers.queries.item_query",
 								filters: {
-									"variant_of": data.item_code
-								}
+									variant_of: data.item_code,
+								},
 							};
-						}
+						},
 					},
 					{
 						fieldname: "qty",
@@ -312,44 +325,48 @@
 						fieldname: "source_warehouse",
 						label: __("Source Warehouse"),
 						fieldtype: "Link",
-						options: "Warehouse"
+						options: "Warehouse",
 					},
 					{
 						fieldname: "operation",
 						label: __("Operation"),
 						fieldtype: "Data",
 						hidden: 1,
-					}
+					},
 				],
 				in_place_edit: true,
 				data: [],
-				get_data () {
+				get_data() {
 					return [];
 				},
 			});
 		}
 
-		let dialog = frappe.prompt(fields, data => {
-			let item = data.item || frm.doc.item;
-			let variant_items = data.items || [];
+		let dialog = frappe.prompt(
+			fields,
+			(data) => {
+				let item = data.item || frm.doc.item;
+				let variant_items = data.items || [];
 
-			variant_items.forEach(d => {
-				if (!d.variant_item_code) {
-					frappe.throw(__("Select variant item code for the template item {0}", [d.item_code]));
-				}
-			})
+				variant_items.forEach((d) => {
+					if (!d.variant_item_code) {
+						frappe.throw(__("Select variant item code for the template item {0}", [d.item_code]));
+					}
+				});
 
-			callback(frm, item, data, variant_items);
+				callback(frm, item, data, variant_items);
+			},
+			__(title),
+			__("Create")
+		);
 
-		}, __(title), __("Create"));
-
-		has_template_rm.forEach(d => {
+		has_template_rm.forEach((d) => {
 			dialog.fields_dict.items.df.data.push({
-				"item_code": d.item_code,
-				"variant_item_code": "",
-				"qty": d.qty,
-				"source_warehouse": d.source_warehouse,
-				"operation": d.operation
+				item_code: d.item_code,
+				variant_item_code: "",
+				qty: d.qty,
+				source_warehouse: d.source_warehouse,
+				operation: d.operation,
 			});
 		});
 
@@ -361,11 +378,11 @@
 	make_quality_inspection(frm) {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.stock.doctype.quality_inspection.quality_inspection.make_quality_inspection",
-			frm: frm
-		})
+			frm: frm,
+		});
 	},
 
-	update_cost(frm, save_doc=false) {
+	update_cost(frm, save_doc = false) {
 		return frappe.call({
 			doc: frm.doc,
 			method: "update_cost",
@@ -373,12 +390,12 @@
 			args: {
 				update_parent: true,
 				save: save_doc,
-				from_child_bom: false
+				from_child_bom: false,
 			},
 			callback(r) {
 				refresh_field("items");
-				if(!r.exc) frm.refresh_fields();
-			}
+				if (!r.exc) frm.refresh_fields();
+			},
 		});
 	},
 
@@ -400,39 +417,39 @@
 						erpnext.bom.calculate_op_cost(frm.doc);
 						erpnext.bom.calculate_total(frm.doc);
 					}
-				}
+				},
 			});
 		}
 	},
 
 	process_loss_percentage(frm) {
-		let qty = 0.0
+		let qty = 0.0;
 		if (frm.doc.process_loss_percentage) {
 			qty = (frm.doc.quantity * frm.doc.process_loss_percentage) / 100;
 		}
 
 		frm.set_value("process_loss_qty", qty);
-	}
+	},
 });
 
 erpnext.bom.BomController = class BomController extends erpnext.TransactionController {
 	conversion_rate(doc) {
-		if(this.frm.doc.currency === this.get_company_currency()) {
+		if (this.frm.doc.currency === this.get_company_currency()) {
 			this.frm.set_value("conversion_rate", 1.0);
 		} else {
 			erpnext.bom.update_cost(doc);
 		}
 	}
 
-	item_code(doc, cdt, cdn){
+	item_code(doc, cdt, cdn) {
 		var scrap_items = false;
 		var child = locals[cdt][cdn];
-		if (child.doctype == 'BOM Scrap Item') {
+		if (child.doctype == "BOM Scrap Item") {
 			scrap_items = true;
 		}
 
 		if (child.bom_no) {
-			child.bom_no = '';
+			child.bom_no = "";
 		}
 
 		get_bom_material_detail(doc, cdt, cdn, scrap_items);
@@ -460,26 +477,26 @@
 	}
 };
 
-extend_cscript(cur_frm.cscript, new erpnext.bom.BomController({frm: cur_frm}));
+extend_cscript(cur_frm.cscript, new erpnext.bom.BomController({ frm: cur_frm }));
 
-cur_frm.cscript.hour_rate = function(doc) {
+cur_frm.cscript.hour_rate = function (doc) {
 	erpnext.bom.calculate_op_cost(doc);
 	erpnext.bom.calculate_total(doc);
 };
 
 cur_frm.cscript.time_in_mins = cur_frm.cscript.hour_rate;
 
-cur_frm.cscript.bom_no = function(doc, cdt, cdn) {
+cur_frm.cscript.bom_no = function (doc, cdt, cdn) {
 	get_bom_material_detail(doc, cdt, cdn, false);
 };
 
-cur_frm.cscript.is_default = function(doc) {
+cur_frm.cscript.is_default = function (doc) {
 	if (doc.is_default) cur_frm.set_value("is_active", 1);
 };
 
-var get_bom_material_detail = function(doc, cdt, cdn, scrap_items) {
+var get_bom_material_detail = function (doc, cdt, cdn, scrap_items) {
 	if (!doc.company) {
-		frappe.throw({message: __("Please select a Company first."), title: __("Mandatory")});
+		frappe.throw({ message: __("Please select a Company first."), title: __("Mandatory") });
 	}
 
 	var d = locals[cdt][cdn];
@@ -488,20 +505,20 @@
 			doc: doc,
 			method: "get_bom_material_detail",
 			args: {
-				"company": doc.company,
-				"item_code": d.item_code,
-				"bom_no": d.bom_no != null ? d.bom_no: '',
-				"scrap_items": scrap_items,
-				"qty": d.qty,
-				"stock_qty": d.stock_qty,
-				"include_item_in_manufacturing": d.include_item_in_manufacturing,
-				"uom": d.uom,
-				"stock_uom": d.stock_uom,
-				"conversion_factor": d.conversion_factor,
-				"sourced_by_supplier": d.sourced_by_supplier,
-				"do_not_explode": d.do_not_explode
+				company: doc.company,
+				item_code: d.item_code,
+				bom_no: d.bom_no != null ? d.bom_no : "",
+				scrap_items: scrap_items,
+				qty: d.qty,
+				stock_qty: d.stock_qty,
+				include_item_in_manufacturing: d.include_item_in_manufacturing,
+				uom: d.uom,
+				stock_uom: d.stock_uom,
+				conversion_factor: d.conversion_factor,
+				sourced_by_supplier: d.sourced_by_supplier,
+				do_not_explode: d.do_not_explode,
 			},
-			callback: function(r) {
+			callback: function (r) {
 				d = locals[cdt][cdn];
 
 				$.extend(d, r.message);
@@ -513,18 +530,18 @@
 				erpnext.bom.calculate_scrap_materials_cost(doc);
 				erpnext.bom.calculate_total(doc);
 			},
-			freeze: true
+			freeze: true,
 		});
 	}
 };
 
-cur_frm.cscript.qty = function(doc) {
+cur_frm.cscript.qty = function (doc) {
 	erpnext.bom.calculate_rm_cost(doc);
 	erpnext.bom.calculate_scrap_materials_cost(doc);
 	erpnext.bom.calculate_total(doc);
 };
 
-cur_frm.cscript.rate = function(doc, cdt, cdn) {
+cur_frm.cscript.rate = function (doc, cdt, cdn) {
 	var d = locals[cdt][cdn];
 	const is_scrap_item = cdt == "BOM Scrap Item";
 
@@ -538,52 +555,60 @@
 	}
 };
 
-erpnext.bom.update_cost = function(doc) {
+erpnext.bom.update_cost = function (doc) {
 	erpnext.bom.calculate_op_cost(doc);
 	erpnext.bom.calculate_rm_cost(doc);
 	erpnext.bom.calculate_scrap_materials_cost(doc);
 	erpnext.bom.calculate_total(doc);
 };
 
-erpnext.bom.calculate_op_cost = function(doc) {
+erpnext.bom.calculate_op_cost = function (doc) {
 	doc.operating_cost = 0.0;
 	doc.base_operating_cost = 0.0;
 
-	if(doc.with_operations) {
+	if (doc.with_operations) {
 		doc.operations.forEach((item) => {
-			let operating_cost = flt(flt(item.hour_rate) * flt(item.time_in_mins) / 60, 2);
+			let operating_cost = flt((flt(item.hour_rate) * flt(item.time_in_mins)) / 60, 2);
 			let base_operating_cost = flt(operating_cost * doc.conversion_rate, 2);
-			frappe.model.set_value('BOM Operation',item.name, {
-				"operating_cost": operating_cost,
-				"base_operating_cost": base_operating_cost
+			frappe.model.set_value("BOM Operation", item.name, {
+				operating_cost: operating_cost,
+				base_operating_cost: base_operating_cost,
 			});
 
 			doc.operating_cost += operating_cost;
 			doc.base_operating_cost += base_operating_cost;
 		});
-	} else if(doc.fg_based_operating_cost) {
+	} else if (doc.fg_based_operating_cost) {
 		let total_operating_cost = doc.quantity * flt(doc.operating_cost_per_bom_quantity);
 		doc.operating_cost = total_operating_cost;
 		doc.base_operating_cost = flt(total_operating_cost * doc.conversion_rate, 2);
 	}
-	refresh_field(['operating_cost', 'base_operating_cost']);
+	refresh_field(["operating_cost", "base_operating_cost"]);
 };
 
 // rm : raw material
-erpnext.bom.calculate_rm_cost = function(doc) {
+erpnext.bom.calculate_rm_cost = function (doc) {
 	var rm = doc.items || [];
 	var total_rm_cost = 0;
 	var base_total_rm_cost = 0;
-	for(var i=0;i<rm.length;i++) {
+	for (var i = 0; i < rm.length; i++) {
 		var amount = flt(rm[i].rate) * flt(rm[i].qty);
 		var base_amount = amount * flt(doc.conversion_rate);
 
-		frappe.model.set_value('BOM Item', rm[i].name, 'base_rate',
-			flt(rm[i].rate) * flt(doc.conversion_rate));
-		frappe.model.set_value('BOM Item', rm[i].name, 'amount', amount);
-		frappe.model.set_value('BOM Item', rm[i].name, 'base_amount', base_amount);
-		frappe.model.set_value('BOM Item', rm[i].name,
-			'qty_consumed_per_unit', flt(rm[i].stock_qty)/flt(doc.quantity));
+		frappe.model.set_value(
+			"BOM Item",
+			rm[i].name,
+			"base_rate",
+			flt(rm[i].rate) * flt(doc.conversion_rate)
+		);
+		frappe.model.set_value("BOM Item", rm[i].name, "amount", amount);
+		frappe.model.set_value("BOM Item", rm[i].name, "base_amount", base_amount);
+		frappe.model.set_value(
+			"BOM Item",
+			rm[i].name,
+			"qty_consumed_per_unit",
+			flt(rm[i].stock_qty) / flt(doc.quantity)
+		);
 
 		total_rm_cost += amount;
 		base_total_rm_cost += base_amount;
@@ -593,19 +618,19 @@
 };
 
 // sm : scrap material
-erpnext.bom.calculate_scrap_materials_cost = function(doc) {
+erpnext.bom.calculate_scrap_materials_cost = function (doc) {
 	var sm = doc.scrap_items || [];
 	var total_sm_cost = 0;
 	var base_total_sm_cost = 0;
 
-	for(var i=0;i<sm.length;i++) {
+	for (var i = 0; i < sm.length; i++) {
 		var base_rate = flt(sm[i].rate) * flt(doc.conversion_rate);
 		var amount = flt(sm[i].rate) * flt(sm[i].stock_qty);
 		var base_amount = amount * flt(doc.conversion_rate);
 
-		frappe.model.set_value('BOM Scrap Item',sm[i].name, 'base_rate', base_rate);
-		frappe.model.set_value('BOM Scrap Item',sm[i].name, 'amount', amount);
-		frappe.model.set_value('BOM Scrap Item',sm[i].name, 'base_amount', base_amount);
+		frappe.model.set_value("BOM Scrap Item", sm[i].name, "base_rate", base_rate);
+		frappe.model.set_value("BOM Scrap Item", sm[i].name, "amount", amount);
+		frappe.model.set_value("BOM Scrap Item", sm[i].name, "base_amount", base_amount);
 
 		total_sm_cost += amount;
 		base_total_sm_cost += base_amount;
@@ -616,83 +641,87 @@
 };
 
 // Calculate Total Cost
-erpnext.bom.calculate_total = function(doc) {
+erpnext.bom.calculate_total = function (doc) {
 	var total_cost = flt(doc.operating_cost) + flt(doc.raw_material_cost) - flt(doc.scrap_material_cost);
-	var base_total_cost = flt(doc.base_operating_cost) + flt(doc.base_raw_material_cost)
-		- flt(doc.base_scrap_material_cost);
+	var base_total_cost =
+		flt(doc.base_operating_cost) + flt(doc.base_raw_material_cost) - flt(doc.base_scrap_material_cost);
 
 	cur_frm.set_value("total_cost", total_cost);
 	cur_frm.set_value("base_total_cost", base_total_cost);
 };
 
-cur_frm.cscript.validate = function(doc) {
+cur_frm.cscript.validate = function (doc) {
 	erpnext.bom.update_cost(doc);
 };
 
-frappe.ui.form.on("BOM Operation", "operation", function(frm, cdt, cdn) {
+frappe.ui.form.on("BOM Operation", "operation", function (frm, cdt, cdn) {
 	var d = locals[cdt][cdn];
 
-	if(!d.operation) return;
+	if (!d.operation) return;
 
 	frappe.call({
-		"method": "frappe.client.get",
+		method: "frappe.client.get",
 		args: {
 			doctype: "Operation",
-			name: d.operation
+			name: d.operation,
 		},
 		callback: function (data) {
-			if(data.message.description) {
+			if (data.message.description) {
 				frappe.model.set_value(d.doctype, d.name, "description", data.message.description);
 			}
-			if(data.message.workstation) {
+			if (data.message.workstation) {
 				frappe.model.set_value(d.doctype, d.name, "workstation", data.message.workstation);
 			}
-		}
+		},
 	});
 });
 
-frappe.ui.form.on("BOM Operation", "workstation", function(frm, cdt, cdn) {
+frappe.ui.form.on("BOM Operation", "workstation", function (frm, cdt, cdn) {
 	var d = locals[cdt][cdn];
-	if(!d.workstation) return;
+	if (!d.workstation) return;
 	frappe.call({
-		"method": "frappe.client.get",
+		method: "frappe.client.get",
 		args: {
 			doctype: "Workstation",
-			name: d.workstation
+			name: d.workstation,
 		},
 		callback: function (data) {
 			frappe.model.set_value(d.doctype, d.name, "base_hour_rate", data.message.hour_rate);
-			frappe.model.set_value(d.doctype, d.name, "hour_rate",
-				flt(flt(data.message.hour_rate) / flt(frm.doc.conversion_rate)), 2);
+			frappe.model.set_value(
+				d.doctype,
+				d.name,
+				"hour_rate",
+				flt(flt(data.message.hour_rate) / flt(frm.doc.conversion_rate)),
+				2
+			);
 
 			erpnext.bom.calculate_op_cost(frm.doc);
 			erpnext.bom.calculate_total(frm.doc);
-		}
+		},
 	});
 });
 
 frappe.ui.form.on("BOM Item", {
-	do_not_explode: function(frm, cdt, cdn) {
+	do_not_explode: function (frm, cdt, cdn) {
 		get_bom_material_detail(frm.doc, cdt, cdn, false);
-	}
-})
+	},
+});
 
-
-frappe.ui.form.on("BOM Item", "qty", function(frm, cdt, cdn) {
+frappe.ui.form.on("BOM Item", "qty", function (frm, cdt, cdn) {
 	var d = locals[cdt][cdn];
 	d.stock_qty = d.qty * d.conversion_factor;
 	refresh_field("stock_qty", d.name, d.parentfield);
 });
 
-frappe.ui.form.on("BOM Item", "item_code", function(frm, cdt, cdn) {
+frappe.ui.form.on("BOM Item", "item_code", function (frm, cdt, cdn) {
 	var d = locals[cdt][cdn];
-	frappe.db.get_value('Item', {name: d.item_code}, 'allow_alternative_item', (r) => {
-		d.allow_alternative_item = r.allow_alternative_item
-	})
+	frappe.db.get_value("Item", { name: d.item_code }, "allow_alternative_item", (r) => {
+		d.allow_alternative_item = r.allow_alternative_item;
+	});
 	refresh_field("allow_alternative_item", d.name, d.parentfield);
 });
 
-frappe.ui.form.on("BOM Item", "sourced_by_supplier", function(frm, cdt, cdn) {
+frappe.ui.form.on("BOM Item", "sourced_by_supplier", function (frm, cdt, cdn) {
 	var d = locals[cdt][cdn];
 	if (d.sourced_by_supplier) {
 		d.rate = 0;
@@ -700,7 +729,7 @@
 	}
 });
 
-frappe.ui.form.on("BOM Item", "rate", function(frm, cdt, cdn) {
+frappe.ui.form.on("BOM Item", "rate", function (frm, cdt, cdn) {
 	var d = locals[cdt][cdn];
 	if (d.sourced_by_supplier) {
 		d.rate = 0;
@@ -708,37 +737,41 @@
 	}
 });
 
-frappe.ui.form.on("BOM Operation", "operations_remove", function(frm) {
+frappe.ui.form.on("BOM Operation", "operations_remove", function (frm) {
 	erpnext.bom.calculate_op_cost(frm.doc);
 	erpnext.bom.calculate_total(frm.doc);
 });
 
-frappe.ui.form.on("BOM Item", "items_remove", function(frm) {
+frappe.ui.form.on("BOM Item", "items_remove", function (frm) {
 	erpnext.bom.calculate_rm_cost(frm.doc);
 	erpnext.bom.calculate_total(frm.doc);
 });
 
-frappe.tour['BOM'] = [
+frappe.tour["BOM"] = [
 	{
 		fieldname: "item",
 		title: "Item",
-		description: __("Select the Item to be manufactured. The Item name, UoM, Company, and Currency will be fetched automatically.")
+		description: __(
+			"Select the Item to be manufactured. The Item name, UoM, Company, and Currency will be fetched automatically."
+		),
 	},
 	{
 		fieldname: "quantity",
 		title: "Quantity",
-		description: __("Enter the quantity of the Item that will be manufactured from this Bill of Materials.")
+		description: __(
+			"Enter the quantity of the Item that will be manufactured from this Bill of Materials."
+		),
 	},
 	{
 		fieldname: "with_operations",
 		title: "With Operations",
-		description: __("To add Operations tick the 'With Operations' checkbox.")
+		description: __("To add Operations tick the 'With Operations' checkbox."),
 	},
 	{
 		fieldname: "items",
 		title: "Raw Materials",
-		description: __("Select the raw materials (Items) required to manufacture the Item")
-	}
+		description: __("Select the raw materials (Items) required to manufacture the Item"),
+	},
 ];
 
 frappe.ui.form.on("BOM Scrap Item", {
diff --git a/erpnext/manufacturing/doctype/bom/bom_list.js b/erpnext/manufacturing/doctype/bom/bom_list.js
index 4b5887f..a26df54 100644
--- a/erpnext/manufacturing/doctype/bom/bom_list.js
+++ b/erpnext/manufacturing/doctype/bom/bom_list.js
@@ -1,16 +1,16 @@
-frappe.listview_settings['BOM'] = {
+frappe.listview_settings["BOM"] = {
 	add_fields: ["is_active", "is_default", "total_cost", "has_variants"],
-	get_indicator: function(doc) {
-		if(doc.is_active && doc.has_variants) {
+	get_indicator: function (doc) {
+		if (doc.is_active && doc.has_variants) {
 			return [__("Template"), "orange", "has_variants,=,Yes"];
-		} else if(doc.is_default) {
+		} else if (doc.is_default) {
 			return [__("Default"), "green", "is_default,=,Yes"];
-		} else if(doc.is_active) {
+		} else if (doc.is_active) {
 			return [__("Active"), "blue", "is_active,=,Yes"];
-		} else if(!doc.is_active) {
+		} else if (!doc.is_active) {
 			return [__("Not active"), "gray", "is_active,=,No"];
 		}
-	}
+	},
 };
 
 frappe.help.youtube_id["BOM"] = "hDV0c1OeWLo";
diff --git a/erpnext/manufacturing/doctype/bom/bom_tree.js b/erpnext/manufacturing/doctype/bom/bom_tree.js
index fb99add..534de0e 100644
--- a/erpnext/manufacturing/doctype/bom/bom_tree.js
+++ b/erpnext/manufacturing/doctype/bom/bom_tree.js
@@ -1,12 +1,12 @@
 frappe.treeview_settings["BOM"] = {
-	get_tree_nodes: 'erpnext.manufacturing.doctype.bom.bom.get_children',
+	get_tree_nodes: "erpnext.manufacturing.doctype.bom.bom.get_children",
 	filters: [
 		{
 			fieldname: "bom",
-			fieldtype:"Link",
+			fieldtype: "Link",
 			options: "BOM",
-			label: __("BOM")
-		}
+			label: __("BOM"),
+		},
 	],
 	title: "BOM",
 	breadcrumb: "Manufacturing",
@@ -14,21 +14,21 @@
 	root_label: "BOM", //fieldname from filters
 	get_tree_root: false,
 	show_expand_all: false,
-	get_label: function(node) {
-		if(node.data.qty) {
+	get_label: function (node) {
+		if (node.data.qty) {
 			return node.data.qty + " x " + node.data.item_code;
 		} else {
 			return node.data.item_code || node.data.value;
 		}
 	},
-	onload: function(me) {
+	onload: function (me) {
 		var label = frappe.get_route()[0] + "/" + frappe.get_route()[1];
-		if(frappe.pages[label]) {
+		if (frappe.pages[label]) {
 			delete frappe.pages[label];
 		}
 
 		var filter = me.opts.filters[0];
-		if(frappe.route_options && frappe.route_options[filter.fieldname]) {
+		if (frappe.route_options && frappe.route_options[filter.fieldname]) {
 			var val = frappe.route_options[filter.fieldname];
 			delete frappe.route_options[filter.fieldname];
 			filter.default = "";
@@ -41,28 +41,27 @@
 	toolbar: [
 		{ toggle_btn: true },
 		{
-			label:__("Edit"),
-			condition: function(node) {
+			label: __("Edit"),
+			condition: function (node) {
 				return node.expandable;
 			},
-			click: function(node) {
-
+			click: function (node) {
 				frappe.set_route("Form", "BOM", node.data.value);
-			}
-		}
+			},
+		},
 	],
 	menu_items: [
 		{
 			label: __("New BOM"),
-			action: function() {
-				frappe.new_doc("BOM", true)
+			action: function () {
+				frappe.new_doc("BOM", true);
 			},
-			condition: 'frappe.boot.user.can_create.indexOf("BOM") !== -1'
-		}
+			condition: 'frappe.boot.user.can_create.indexOf("BOM") !== -1',
+		},
 	],
-	onrender: function(node) {
-		if(node.is_root && node.data.value!="BOM") {
-			frappe.model.with_doc("BOM", node.data.value, function() {
+	onrender: function (node) {
+		if (node.is_root && node.data.value != "BOM") {
+			frappe.model.with_doc("BOM", node.data.value, function () {
 				var bom = frappe.model.get_doc("BOM", node.data.value);
 				node.data.image = escape(bom.image) || "";
 				node.data.description = bom.description || "";
@@ -70,5 +69,5 @@
 			});
 		}
 	},
-	view_template: 'bom_item_preview'
-}
+	view_template: "bom_item_preview",
+};
diff --git a/erpnext/manufacturing/doctype/bom_creator/bom_creator.js b/erpnext/manufacturing/doctype/bom_creator/bom_creator.js
index 3bd2021..32231aa 100644
--- a/erpnext/manufacturing/doctype/bom_creator/bom_creator.js
+++ b/erpnext/manufacturing/doctype/bom_creator/bom_creator.js
@@ -11,11 +11,10 @@
 		frm.dashboard.clear_comment();
 
 		if (!frm.is_new()) {
-			if ((!frappe.bom_configurator
-				|| frappe.bom_configurator.bom_configurator !== frm.doc.name)) {
+			if (!frappe.bom_configurator || frappe.bom_configurator.bom_configurator !== frm.doc.name) {
 				frm.trigger("build_tree");
 			}
-		} else if (!frm.doc.items?.length ) {
+		} else if (!frm.doc.items?.length) {
 			let $parent = $(frm.fields_dict["bom_creator"].wrapper);
 			$parent.empty();
 			frm.trigger("make_new_entry");
@@ -27,7 +26,7 @@
 		$parent.empty();
 		frm.toggle_enable("item_code", false);
 
-		frappe.require('bom_configurator.bundle.js').then(() => {
+		frappe.require("bom_configurator.bundle.js").then(() => {
 			frappe.bom_configurator = new frappe.ui.BOMConfigurator({
 				wrapper: $parent,
 				page: $parent,
@@ -45,7 +44,7 @@
 					label: __("Name"),
 					fieldtype: "Data",
 					fieldname: "name",
-					reqd: 1
+					reqd: 1,
 				},
 				{ fieldtype: "Column Break" },
 				{
@@ -62,7 +61,7 @@
 					fieldtype: "Link",
 					fieldname: "item_code",
 					options: "Item",
-					reqd: 1
+					reqd: 1,
 				},
 				{ fieldtype: "Column Break" },
 				{
@@ -70,7 +69,7 @@
 					fieldtype: "Float",
 					fieldname: "qty",
 					reqd: 1,
-					default: 1.0
+					default: 1.0,
 				},
 				{ fieldtype: "Section Break" },
 				{
@@ -79,7 +78,7 @@
 					fieldname: "currency",
 					options: "Currency",
 					reqd: 1,
-					default: frappe.defaults.get_global_default("currency")
+					default: frappe.defaults.get_global_default("currency"),
 				},
 				{ fieldtype: "Column Break" },
 				{
@@ -87,42 +86,40 @@
 					fieldtype: "Float",
 					fieldname: "conversion_rate",
 					reqd: 1,
-					default: 1.0
+					default: 1.0,
 				},
 			],
 			primary_action_label: __("Create"),
 			primary_action: (values) => {
 				values.doctype = frm.doc.doctype;
-				frappe.db
-					.insert(values)
-					.then((doc) => {
-						frappe.set_route("Form", doc.doctype, doc.name);
-					});
-			}
-		})
+				frappe.db.insert(values).then((doc) => {
+					frappe.set_route("Form", doc.doctype, doc.name);
+				});
+			},
+		});
 
 		dialog.fields_dict.item_code.get_query = "erpnext.controllers.queries.item_query";
 		dialog.show();
 	},
 
 	set_queries(frm) {
-		frm.set_query("bom_no", "items", function(doc, cdt, cdn) {
+		frm.set_query("bom_no", "items", function (doc, cdt, cdn) {
 			let item = frappe.get_doc(cdt, cdn);
 			return {
 				filters: {
 					item: item.item_code,
-				}
-			}
+				},
+			};
 		});
-		frm.set_query("item_code", "items", function() {
+		frm.set_query("item_code", "items", function () {
 			return {
 				query: "erpnext.controllers.queries.item_query",
-			}
+			};
 		});
-		frm.set_query("fg_item", "items", function() {
+		frm.set_query("fg_item", "items", function () {
 			return {
 				query: "erpnext.controllers.queries.item_query",
-			}
+			};
 		});
 	},
 
@@ -134,8 +131,7 @@
 
 	set_root_item(frm) {
 		if (frm.is_new() && frm.doc.items?.length) {
-			frappe.model.set_value(frm.doc.items[0].doctype,
-				frm.doc.items[0].name, "is_root", 1);
+			frappe.model.set_value(frm.doc.items[0].doctype, frm.doc.items[0].name, "is_root", 1);
 		}
 	},
 
@@ -157,8 +153,8 @@
 		frm.call({
 			method: "enqueue_create_boms",
 			doc: frm.doc,
-		})
-	}
+		});
+	},
 });
 
 frappe.ui.form.on("BOM Creator Item", {
@@ -176,24 +172,23 @@
 				method: "get_default_bom",
 				doc: frm.doc,
 				args: {
-					item_code: item.item_code
+					item_code: item.item_code,
 				},
 				callback(r) {
 					if (r.message) {
 						frappe.model.set_value(cdt, cdn, "bom_no", r.message);
 					}
-				}
-			})
+				},
+			});
 		} else {
 			frappe.model.set_value(cdt, cdn, "bom_no", "");
 		}
-	}
+	},
 });
 
-
 erpnext.bom.BomConfigurator = class BomConfigurator extends erpnext.TransactionController {
 	conversion_rate(doc) {
-		if(this.frm.doc.currency === this.get_company_currency()) {
+		if (this.frm.doc.currency === this.get_company_currency()) {
 			this.frm.set_value("conversion_rate", 1.0);
 		} else {
 			erpnext.bom.update_cost(doc);
@@ -222,4 +217,4 @@
 	}
 };
 
-extend_cscript(cur_frm.cscript, new erpnext.bom.BomConfigurator({frm: cur_frm}));
+extend_cscript(cur_frm.cscript, new erpnext.bom.BomConfigurator({ frm: cur_frm }));
diff --git a/erpnext/manufacturing/doctype/bom_creator/bom_creator_list.js b/erpnext/manufacturing/doctype/bom_creator/bom_creator_list.js
index 423b721..880994c 100644
--- a/erpnext/manufacturing/doctype/bom_creator/bom_creator_list.js
+++ b/erpnext/manufacturing/doctype/bom_creator/bom_creator_list.js
@@ -1,4 +1,4 @@
-frappe.listview_settings['BOM Creator'] = {
+frappe.listview_settings["BOM Creator"] = {
 	add_fields: ["status"],
 	get_indicator: function (doc) {
 		if (doc.status === "Draft") {
diff --git a/erpnext/manufacturing/doctype/bom_update_log/bom_update_log.js b/erpnext/manufacturing/doctype/bom_update_log/bom_update_log.js
index 6da808e..7664c29 100644
--- a/erpnext/manufacturing/doctype/bom_update_log/bom_update_log.js
+++ b/erpnext/manufacturing/doctype/bom_update_log/bom_update_log.js
@@ -1,8 +1,7 @@
 // Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('BOM Update Log', {
+frappe.ui.form.on("BOM Update Log", {
 	// refresh: function(frm) {
-
 	// }
 });
diff --git a/erpnext/manufacturing/doctype/bom_update_log/bom_update_log_list.js b/erpnext/manufacturing/doctype/bom_update_log/bom_update_log_list.js
index bc709d8..cdaee70 100644
--- a/erpnext/manufacturing/doctype/bom_update_log/bom_update_log_list.js
+++ b/erpnext/manufacturing/doctype/bom_update_log/bom_update_log_list.js
@@ -1,11 +1,11 @@
-frappe.listview_settings['BOM Update Log'] = {
+frappe.listview_settings["BOM Update Log"] = {
 	add_fields: ["status"],
 	get_indicator: (doc) => {
 		let status_map = {
-			"Queued": "orange",
+			Queued: "orange",
 			"In Progress": "blue",
-			"Completed": "green",
-			"Failed": "red"
+			Completed: "green",
+			Failed: "red",
 		};
 
 		return [__(doc.status), status_map[doc.status], "status,=," + doc.status];
@@ -15,16 +15,14 @@
 			return;
 		}
 
-		let sidebar_entry = $(
-			'<ul class="list-unstyled sidebar-menu log-retention-note"></ul>'
-		).appendTo(cur_list.page.sidebar);
+		let sidebar_entry = $('<ul class="list-unstyled sidebar-menu log-retention-note"></ul>').appendTo(
+			cur_list.page.sidebar
+		);
 		let message = __("Note: Automatic log deletion only applies to logs of type <i>Update Cost</i>");
 		$(`<hr><div class='text-muted'>${message}</div>`).appendTo(sidebar_entry);
 
 		frappe.require("logtypes.bundle.js", () => {
 			frappe.utils.logtypes.show_log_retention_message(cur_list.doctype);
 		});
-
-
 	},
-};
\ No newline at end of file
+};
diff --git a/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.js b/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.js
index 7ba6517..5cdb425 100644
--- a/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.js
+++ b/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.js
@@ -1,24 +1,24 @@
 // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('BOM Update Tool', {
-	setup: function(frm) {
-		frm.set_query("current_bom", function() {
+frappe.ui.form.on("BOM Update Tool", {
+	setup: function (frm) {
+		frm.set_query("current_bom", function () {
 			return {
 				query: "erpnext.controllers.queries.bom",
-				filters: {name: "!" + frm.doc.new_bom}
+				filters: { name: "!" + frm.doc.new_bom },
 			};
 		});
 
-		frm.set_query("new_bom", function() {
+		frm.set_query("new_bom", function () {
 			return {
 				query: "erpnext.controllers.queries.bom",
-				filters: {name: "!" + frm.doc.current_bom}
+				filters: { name: "!" + frm.doc.current_bom },
 			};
 		});
 	},
 
-	refresh: function(frm) {
+	refresh: function (frm) {
 		frm.disable_save();
 		frm.events.disable_button(frm, "replace");
 
@@ -27,7 +27,7 @@
 		});
 	},
 
-	disable_button: (frm, field, disable=true) => {
+	disable_button: (frm, field, disable = true) => {
 		frm.get_field(field).input.disabled = disable;
 	},
 
@@ -50,15 +50,15 @@
 				freeze: true,
 				args: {
 					boms: {
-						"current_bom": frm.doc.current_bom,
-						"new_bom": frm.doc.new_bom
-					}
+						current_bom: frm.doc.current_bom,
+						new_bom: frm.doc.new_bom,
+					},
 				},
-				callback: result => {
+				callback: (result) => {
 					if (result && result.message && !result.exc) {
 						frm.events.confirm_job_start(frm, result.message);
 					}
-				}
+				},
 			});
 		}
 	},
@@ -67,20 +67,22 @@
 		frappe.call({
 			method: "erpnext.manufacturing.doctype.bom_update_tool.bom_update_tool.enqueue_update_cost",
 			freeze: true,
-			callback: result => {
+			callback: (result) => {
 				if (result && result.message && !result.exc) {
 					frm.events.confirm_job_start(frm, result.message);
 				}
-			}
+			},
 		});
 	},
 
 	confirm_job_start: (frm, log_data) => {
 		let log_link = frappe.utils.get_form_link("BOM Update Log", log_data.name, true);
 		frappe.msgprint({
-			"message": __("BOM Updation is queued and may take a few minutes. Check {0} for progress.", [log_link]),
-			"title": __("BOM Update Initiated"),
-			"indicator": "blue"
+			message: __("BOM Updation is queued and may take a few minutes. Check {0} for progress.", [
+				log_link,
+			]),
+			title: __("BOM Update Initiated"),
+			indicator: "blue",
 		});
-	}
+	},
 });
diff --git a/erpnext/manufacturing/doctype/downtime_entry/downtime_entry.js b/erpnext/manufacturing/doctype/downtime_entry/downtime_entry.js
index 3b7f5ba..516e33c 100644
--- a/erpnext/manufacturing/doctype/downtime_entry/downtime_entry.js
+++ b/erpnext/manufacturing/doctype/downtime_entry/downtime_entry.js
@@ -1,8 +1,7 @@
 // Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Downtime Entry', {
+frappe.ui.form.on("Downtime Entry", {
 	// refresh: function(frm) {
-
 	// }
 });
diff --git a/erpnext/manufacturing/doctype/job_card/job_card.js b/erpnext/manufacturing/doctype/job_card/job_card.js
index 6621275..4cc60a3 100644
--- a/erpnext/manufacturing/doctype/job_card/job_card.js
+++ b/erpnext/manufacturing/doctype/job_card/job_card.js
@@ -1,40 +1,38 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Job Card', {
-	setup: function(frm) {
-		frm.set_query('operation', function() {
+frappe.ui.form.on("Job Card", {
+	setup: function (frm) {
+		frm.set_query("operation", function () {
 			return {
-				query: 'erpnext.manufacturing.doctype.job_card.job_card.get_operations',
+				query: "erpnext.manufacturing.doctype.job_card.job_card.get_operations",
 				filters: {
-					'work_order': frm.doc.work_order
-				}
+					work_order: frm.doc.work_order,
+				},
 			};
 		});
 
 		frm.set_query("serial_and_batch_bundle", () => {
 			return {
 				filters: {
-					'item_code': frm.doc.production_item,
-					'voucher_type': frm.doc.doctype,
-					'voucher_no': ["in", [frm.doc.name, ""]],
-					'is_cancelled': 0,
-				}
-			}
+					item_code: frm.doc.production_item,
+					voucher_type: frm.doc.doctype,
+					voucher_no: ["in", [frm.doc.name, ""]],
+					is_cancelled: 0,
+				},
+			};
 		});
 
-		frm.set_indicator_formatter('sub_operation',
-			function(doc) {
-				if (doc.status == "Pending") {
-					return "red";
-				} else {
-					return doc.status === "Complete" ? "green" : "orange";
-				}
+		frm.set_indicator_formatter("sub_operation", function (doc) {
+			if (doc.status == "Pending") {
+				return "red";
+			} else {
+				return doc.status === "Complete" ? "green" : "orange";
 			}
-		);
+		});
 	},
 
-	refresh: function(frm) {
+	refresh: function (frm) {
 		frappe.flags.pause_job = 0;
 		frappe.flags.resume_job = 0;
 		let has_items = frm.doc.items && frm.doc.items.length;
@@ -44,8 +42,7 @@
 			return;
 		}
 
-		let has_stock_entry = frm.doc.__onload &&
-			frm.doc.__onload.has_stock_entry ? true : false;
+		let has_stock_entry = frm.doc.__onload && frm.doc.__onload.has_stock_entry ? true : false;
 
 		frm.toggle_enable("for_quantity", !has_stock_entry);
 
@@ -71,33 +68,45 @@
 		}
 
 		if (frm.doc.docstatus == 1 && !frm.doc.is_corrective_job_card) {
-			frm.trigger('setup_corrective_job_card');
+			frm.trigger("setup_corrective_job_card");
 		}
 
-		frm.set_query("quality_inspection", function() {
+		frm.set_query("quality_inspection", function () {
 			return {
 				query: "erpnext.stock.doctype.quality_inspection.quality_inspection.quality_inspection_query",
 				filters: {
-					"item_code": frm.doc.production_item,
-					"reference_name": frm.doc.name
-				}
+					item_code: frm.doc.production_item,
+					reference_name: frm.doc.name,
+				},
 			};
 		});
 
 		frm.trigger("toggle_operation_number");
 
-		if (frm.doc.docstatus == 0 && !frm.is_new() &&
-			(frm.doc.for_quantity > frm.doc.total_completed_qty || !frm.doc.for_quantity)
-			&& (frm.doc.items || !frm.doc.items.length || frm.doc.for_quantity == frm.doc.transferred_qty)) {
-
+		if (
+			frm.doc.docstatus == 0 &&
+			!frm.is_new() &&
+			(frm.doc.for_quantity > frm.doc.total_completed_qty || !frm.doc.for_quantity) &&
+			(frm.doc.items || !frm.doc.items.length || frm.doc.for_quantity == frm.doc.transferred_qty)
+		) {
 			// if Job Card is link to Work Order, the job card must not be able to start if Work Order not "Started"
 			// and if stock mvt for WIP is required
 			if (frm.doc.work_order) {
-				frappe.db.get_value('Work Order', frm.doc.work_order, ['skip_transfer', 'status'], (result) => {
-					if (result.skip_transfer === 1 || result.status == 'In Process' || frm.doc.transferred_qty > 0 || !frm.doc.items.length) {
-						frm.trigger("prepare_timer_buttons");
+				frappe.db.get_value(
+					"Work Order",
+					frm.doc.work_order,
+					["skip_transfer", "status"],
+					(result) => {
+						if (
+							result.skip_transfer === 1 ||
+							result.status == "In Process" ||
+							frm.doc.transferred_qty > 0 ||
+							!frm.doc.items.length
+						) {
+							frm.trigger("prepare_timer_buttons");
+						}
 					}
-				});
+				);
 			} else {
 				frm.trigger("prepare_timer_buttons");
 			}
@@ -106,100 +115,114 @@
 		frm.trigger("setup_quality_inspection");
 
 		if (frm.doc.work_order) {
-			frappe.db.get_value('Work Order', frm.doc.work_order,
-				'transfer_material_against').then((r) => {
-				if (r.message.transfer_material_against == 'Work Order') {
-					frm.set_df_property('items', 'hidden', 1);
+			frappe.db.get_value("Work Order", frm.doc.work_order, "transfer_material_against").then((r) => {
+				if (r.message.transfer_material_against == "Work Order") {
+					frm.set_df_property("items", "hidden", 1);
 				}
 			});
 		}
 
-		let sbb_field = frm.get_docfield('serial_and_batch_bundle');
+		let sbb_field = frm.get_docfield("serial_and_batch_bundle");
 		if (sbb_field) {
 			sbb_field.get_route_options_for_new_doc = () => {
 				return {
-					'item_code': frm.doc.production_item,
-					'warehouse': frm.doc.wip_warehouse,
-					'voucher_type': frm.doc.doctype,
-				}
+					item_code: frm.doc.production_item,
+					warehouse: frm.doc.wip_warehouse,
+					voucher_type: frm.doc.doctype,
+				};
 			};
 		}
 	},
 
-	setup_quality_inspection: function(frm) {
+	setup_quality_inspection: function (frm) {
 		let quality_inspection_field = frm.get_docfield("quality_inspection");
-		quality_inspection_field.get_route_options_for_new_doc = function(frm) {
-			return  {
-				"inspection_type": "In Process",
-				"reference_type": "Job Card",
-				"reference_name": frm.doc.name,
-				"item_code": frm.doc.production_item,
-				"item_name": frm.doc.item_name,
-				"item_serial_no": frm.doc.serial_no,
-				"batch_no": frm.doc.batch_no,
-				"quality_inspection_template": frm.doc.quality_inspection_template,
+		quality_inspection_field.get_route_options_for_new_doc = function (frm) {
+			return {
+				inspection_type: "In Process",
+				reference_type: "Job Card",
+				reference_name: frm.doc.name,
+				item_code: frm.doc.production_item,
+				item_name: frm.doc.item_name,
+				item_serial_no: frm.doc.serial_no,
+				batch_no: frm.doc.batch_no,
+				quality_inspection_template: frm.doc.quality_inspection_template,
 			};
 		};
 	},
 
-	setup_corrective_job_card: function(frm) {
-		frm.add_custom_button(__('Corrective Job Card'), () => {
-			let operations = frm.doc.sub_operations.map(d => d.sub_operation).concat(frm.doc.operation);
+	setup_corrective_job_card: function (frm) {
+		frm.add_custom_button(
+			__("Corrective Job Card"),
+			() => {
+				let operations = frm.doc.sub_operations.map((d) => d.sub_operation).concat(frm.doc.operation);
 
-			let fields = [
-				{
-					fieldtype: 'Link', label: __('Corrective Operation'), options: 'Operation',
-					fieldname: 'operation', get_query() {
-						return {
-							filters: {
-								"is_corrective_operation": 1
-							}
-						};
-					}
-				}, {
-					fieldtype: 'Link', label: __('For Operation'), options: 'Operation',
-					fieldname: 'for_operation', get_query() {
-						return {
-							filters: {
-								"name": ["in", operations]
-							}
-						};
-					}
-				}
-			];
+				let fields = [
+					{
+						fieldtype: "Link",
+						label: __("Corrective Operation"),
+						options: "Operation",
+						fieldname: "operation",
+						get_query() {
+							return {
+								filters: {
+									is_corrective_operation: 1,
+								},
+							};
+						},
+					},
+					{
+						fieldtype: "Link",
+						label: __("For Operation"),
+						options: "Operation",
+						fieldname: "for_operation",
+						get_query() {
+							return {
+								filters: {
+									name: ["in", operations],
+								},
+							};
+						},
+					},
+				];
 
-			frappe.prompt(fields, d => {
-				frm.events.make_corrective_job_card(frm, d.operation, d.for_operation);
-			}, __("Select Corrective Operation"));
-		}, __('Make'));
+				frappe.prompt(
+					fields,
+					(d) => {
+						frm.events.make_corrective_job_card(frm, d.operation, d.for_operation);
+					},
+					__("Select Corrective Operation")
+				);
+			},
+			__("Make")
+		);
 	},
 
-	make_corrective_job_card: function(frm, operation, for_operation) {
+	make_corrective_job_card: function (frm, operation, for_operation) {
 		frappe.call({
-			method: 'erpnext.manufacturing.doctype.job_card.job_card.make_corrective_job_card',
+			method: "erpnext.manufacturing.doctype.job_card.job_card.make_corrective_job_card",
 			args: {
 				source_name: frm.doc.name,
 				operation: operation,
-				for_operation: for_operation
+				for_operation: for_operation,
 			},
-			callback: function(r) {
+			callback: function (r) {
 				if (r.message) {
 					frappe.model.sync(r.message);
 					frappe.set_route("Form", r.message.doctype, r.message.name);
 				}
-			}
+			},
 		});
 	},
 
-	operation: function(frm) {
+	operation: function (frm) {
 		frm.trigger("toggle_operation_number");
 
 		if (frm.doc.operation && frm.doc.work_order) {
 			frappe.call({
 				method: "erpnext.manufacturing.doctype.job_card.job_card.get_operation_details",
 				args: {
-					"work_order":frm.doc.work_order,
-					"operation":frm.doc.operation
+					work_order: frm.doc.work_order,
+					operation: frm.doc.operation,
 				},
 				callback: function (r) {
 					if (r.message) {
@@ -209,11 +232,13 @@
 							let args = [];
 
 							r.message.forEach((row) => {
-								args.push({ "label": row.idx, "value": row.name });
+								args.push({ label: row.idx, value: row.name });
 							});
 
-							let description = __("Operation {0} added multiple times in the work order {1}",
-								[frm.doc.operation, frm.doc.work_order]);
+							let description = __("Operation {0} added multiple times in the work order {1}", [
+								frm.doc.operation,
+								frm.doc.work_order,
+							]);
 
 							frm.set_df_property("operation_row_number", "options", args);
 							frm.set_df_property("operation_row_number", "description", description);
@@ -221,8 +246,8 @@
 
 						frm.trigger("toggle_operation_number");
 					}
-				}
-			})
+				},
+			});
 		}
 	},
 
@@ -237,16 +262,24 @@
 		frm.toggle_reqd("operation_row_number", !frm.doc.operation_id && frm.doc.operation);
 	},
 
-	prepare_timer_buttons: function(frm) {
+	prepare_timer_buttons: function (frm) {
 		frm.trigger("make_dashboard");
 
 		if (!frm.doc.started_time && !frm.doc.current_time) {
 			frm.add_custom_button(__("Start Job"), () => {
 				if ((frm.doc.employee && !frm.doc.employee.length) || !frm.doc.employee) {
-					frappe.prompt({fieldtype: 'Table MultiSelect', label: __('Select Employees'),
-						options: "Job Card Time Log", fieldname: 'employees'}, d => {
-						frm.events.start_job(frm, "Work In Progress", d.employees);
-					}, __("Assign Job to Employee"));
+					frappe.prompt(
+						{
+							fieldtype: "Table MultiSelect",
+							label: __("Select Employees"),
+							options: "Job Card Time Log",
+							fieldname: "employees",
+						},
+						(d) => {
+							frm.events.start_job(frm, "Work In Progress", d.employees);
+						},
+						__("Assign Job to Employee")
+					);
 				} else {
 					frm.events.start_job(frm, "Work In Progress", frm.doc.employee);
 				}
@@ -268,16 +301,24 @@
 					set_qty = false;
 					let last_op_row = sub_operations[sub_operations.length - 2];
 
-					if (last_op_row.status == 'Complete') {
+					if (last_op_row.status == "Complete") {
 						set_qty = true;
 					}
 				}
 
 				if (set_qty) {
-					frappe.prompt({fieldtype: 'Float', label: __('Completed Quantity'),
-						fieldname: 'qty', default: frm.doc.for_quantity}, data => {
-						frm.events.complete_job(frm, "Complete", data.qty);
-					}, __("Enter Value"));
+					frappe.prompt(
+						{
+							fieldtype: "Float",
+							label: __("Completed Quantity"),
+							fieldname: "qty",
+							default: frm.doc.for_quantity,
+						},
+						(data) => {
+							frm.events.complete_job(frm, "Complete", data.qty);
+						},
+						__("Enter Value")
+					);
 				} else {
 					frm.events.complete_job(frm, "Complete", 0.0);
 				}
@@ -285,64 +326,63 @@
 		}
 	},
 
-	start_job: function(frm, status, employee) {
+	start_job: function (frm, status, employee) {
 		const args = {
 			job_card_id: frm.doc.name,
 			start_time: frappe.datetime.now_datetime(),
 			employees: employee,
-			status: status
+			status: status,
 		};
 		frm.events.make_time_log(frm, args);
 	},
 
-	complete_job: function(frm, status, completed_qty) {
+	complete_job: function (frm, status, completed_qty) {
 		const args = {
 			job_card_id: frm.doc.name,
 			complete_time: frappe.datetime.now_datetime(),
 			status: status,
-			completed_qty: completed_qty
+			completed_qty: completed_qty,
 		};
 		frm.events.make_time_log(frm, args);
 	},
 
-	make_time_log: function(frm, args) {
+	make_time_log: function (frm, args) {
 		frm.events.update_sub_operation(frm, args);
 
 		frappe.call({
 			method: "erpnext.manufacturing.doctype.job_card.job_card.make_time_log",
 			args: {
-				args: args
+				args: args,
 			},
 			freeze: true,
 			callback: function () {
 				frm.reload_doc();
 				frm.trigger("make_dashboard");
-			}
+			},
 		});
 	},
 
-	update_sub_operation: function(frm, args) {
+	update_sub_operation: function (frm, args) {
 		if (frm.doc.sub_operations && frm.doc.sub_operations.length) {
-			let sub_operations = frm.doc.sub_operations.filter(d => d.status != 'Complete');
+			let sub_operations = frm.doc.sub_operations.filter((d) => d.status != "Complete");
 			if (sub_operations && sub_operations.length) {
 				args["sub_operation"] = sub_operations[0].sub_operation;
 			}
 		}
 	},
 
-	validate: function(frm) {
+	validate: function (frm) {
 		if ((!frm.doc.time_logs || !frm.doc.time_logs.length) && frm.doc.started_time) {
 			frm.trigger("reset_timer");
 		}
 	},
 
-	reset_timer: function(frm) {
-		frm.set_value('started_time' , '');
+	reset_timer: function (frm) {
+		frm.set_value("started_time", "");
 	},
 
-	make_dashboard: function(frm) {
-		if(frm.doc.__islocal)
-			return;
+	make_dashboard: function (frm) {
+		if (frm.doc.__islocal) return;
 
 		function setCurrentIncrement() {
 			currentIncrement += 1;
@@ -351,16 +391,22 @@
 
 		function updateStopwatch(increment) {
 			var hours = Math.floor(increment / 3600);
-			var minutes = Math.floor((increment - (hours * 3600)) / 60);
-			var seconds = increment - (hours * 3600) - (minutes * 60);
+			var minutes = Math.floor((increment - hours * 3600) / 60);
+			var seconds = increment - hours * 3600 - minutes * 60;
 
-			$(section).find(".hours").text(hours < 10 ? ("0" + hours.toString()) : hours.toString());
-			$(section).find(".minutes").text(minutes < 10 ? ("0" + minutes.toString()) : minutes.toString());
-			$(section).find(".seconds").text(seconds < 10 ? ("0" + seconds.toString()) : seconds.toString());
+			$(section)
+				.find(".hours")
+				.text(hours < 10 ? "0" + hours.toString() : hours.toString());
+			$(section)
+				.find(".minutes")
+				.text(minutes < 10 ? "0" + minutes.toString() : minutes.toString());
+			$(section)
+				.find(".seconds")
+				.text(seconds < 10 ? "0" + seconds.toString() : seconds.toString());
 		}
 
 		function initialiseTimer() {
-			const interval = setInterval(function() {
+			const interval = setInterval(function () {
 				var current = setCurrentIncrement();
 				updateStopwatch(current);
 			}, 1000);
@@ -384,75 +430,76 @@
 			if (frm.doc.status == "On Hold") {
 				updateStopwatch(currentIncrement);
 			} else {
-				currentIncrement += moment(frappe.datetime.now_datetime()).diff(moment(frm.doc.started_time),"seconds");
+				currentIncrement += moment(frappe.datetime.now_datetime()).diff(
+					moment(frm.doc.started_time),
+					"seconds"
+				);
 				initialiseTimer();
 			}
 		}
 	},
 
-	hide_timer: function(frm) {
+	hide_timer: function (frm) {
 		frm.toolbar.page.inner_toolbar.find(".stopwatch").remove();
 	},
 
-	for_quantity: function(frm) {
+	for_quantity: function (frm) {
 		frm.doc.items = [];
 		frm.call({
 			method: "get_required_items",
 			doc: frm.doc,
-			callback: function() {
+			callback: function () {
 				refresh_field("items");
-			}
-		})
+			},
+		});
 	},
 
-	make_material_request: function(frm) {
+	make_material_request: function (frm) {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.manufacturing.doctype.job_card.job_card.make_material_request",
 			frm: frm,
-			run_link_triggers: true
+			run_link_triggers: true,
 		});
 	},
 
-	make_stock_entry: function(frm) {
+	make_stock_entry: function (frm) {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.manufacturing.doctype.job_card.job_card.make_stock_entry",
 			frm: frm,
-			run_link_triggers: true
+			run_link_triggers: true,
 		});
 	},
 
-	timer: function(frm) {
-		return `<button> Start </button>`
+	timer: function (frm) {
+		return `<button> Start </button>`;
 	},
 
-	set_total_completed_qty: function(frm) {
+	set_total_completed_qty: function (frm) {
 		frm.doc.total_completed_qty = 0;
-		frm.doc.time_logs.forEach(d => {
+		frm.doc.time_logs.forEach((d) => {
 			if (d.completed_qty) {
 				frm.doc.total_completed_qty += d.completed_qty;
 			}
 		});
 
 		if (frm.doc.total_completed_qty && frm.doc.for_quantity > frm.doc.total_completed_qty) {
-			let flt_precision = precision('for_quantity', frm.doc);
-			let process_loss_qty = (
-				flt(frm.doc.for_quantity, flt_precision)
-				- flt(frm.doc.total_completed_qty, flt_precision)
-			);
+			let flt_precision = precision("for_quantity", frm.doc);
+			let process_loss_qty =
+				flt(frm.doc.for_quantity, flt_precision) - flt(frm.doc.total_completed_qty, flt_precision);
 
-			frm.set_value('process_loss_qty', process_loss_qty);
+			frm.set_value("process_loss_qty", process_loss_qty);
 		}
 
 		refresh_field("total_completed_qty");
-	}
+	},
 });
 
-frappe.ui.form.on('Job Card Time Log', {
-	completed_qty: function(frm) {
+frappe.ui.form.on("Job Card Time Log", {
+	completed_qty: function (frm) {
 		frm.events.set_total_completed_qty(frm);
 	},
 
-	to_time: function(frm) {
-		frm.set_value('started_time', '');
-	}
-})
+	to_time: function (frm) {
+		frm.set_value("started_time", "");
+	},
+});
diff --git a/erpnext/manufacturing/doctype/job_card/job_card_calendar.js b/erpnext/manufacturing/doctype/job_card/job_card_calendar.js
index 9e32085..7b32a6e 100644
--- a/erpnext/manufacturing/doctype/job_card/job_card_calendar.js
+++ b/erpnext/manufacturing/doctype/job_card/job_card_calendar.js
@@ -1,31 +1,31 @@
 frappe.views.calendar["Job Card"] = {
 	field_map: {
-		"start": "from_time",
-		"end": "to_time",
-		"id": "name",
-		"title": "subject",
-		"color": "color",
-		"allDay": "allDay",
-		"progress": "progress"
+		start: "from_time",
+		end: "to_time",
+		id: "name",
+		title: "subject",
+		color: "color",
+		allDay: "allDay",
+		progress: "progress",
 	},
 	gantt: {
 		field_map: {
-			"start": "expected_start_date",
-			"end": "expected_end_date",
-			"id": "name",
-			"title": "subject",
-			"color": "color",
-			"allDay": "allDay",
-			"progress": "progress"
-		}
+			start: "expected_start_date",
+			end: "expected_end_date",
+			id: "name",
+			title: "subject",
+			color: "color",
+			allDay: "allDay",
+			progress: "progress",
+		},
 	},
 	filters: [
 		{
-			"fieldtype": "Link",
-			"fieldname": "employee",
-			"options": "Employee",
-			"label": __("Employee")
-		}
+			fieldtype: "Link",
+			fieldname: "employee",
+			options: "Employee",
+			label: __("Employee"),
+		},
 	],
-	get_events_method: "erpnext.manufacturing.doctype.job_card.job_card.get_job_details"
+	get_events_method: "erpnext.manufacturing.doctype.job_card.job_card.get_job_details",
 };
diff --git a/erpnext/manufacturing/doctype/job_card/job_card_list.js b/erpnext/manufacturing/doctype/job_card/job_card_list.js
index 99fca95..e417b7f 100644
--- a/erpnext/manufacturing/doctype/job_card/job_card_list.js
+++ b/erpnext/manufacturing/doctype/job_card/job_card_list.js
@@ -1,17 +1,17 @@
-frappe.listview_settings['Job Card'] = {
+frappe.listview_settings["Job Card"] = {
 	has_indicator_for_draft: true,
 	add_fields: ["expected_start_date", "expected_end_date"],
-	get_indicator: function(doc) {
+	get_indicator: function (doc) {
 		const status_colors = {
 			"Work In Progress": "orange",
-			"Completed": "green",
-			"Cancelled": "red",
+			Completed: "green",
+			Cancelled: "red",
 			"Material Transferred": "blue",
-			"Open": "red",
+			Open: "red",
 		};
 		const status = doc.status || "Open";
 		const color = status_colors[status] || "blue";
 
 		return [__(status), color, `status,=,${status}`];
-	}
+	},
 };
diff --git a/erpnext/manufacturing/doctype/manufacturing_settings/manufacturing_settings.js b/erpnext/manufacturing/doctype/manufacturing_settings/manufacturing_settings.js
index a0122a4..f54478a 100644
--- a/erpnext/manufacturing/doctype/manufacturing_settings/manufacturing_settings.js
+++ b/erpnext/manufacturing/doctype/manufacturing_settings/manufacturing_settings.js
@@ -1,33 +1,40 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Manufacturing Settings', {
-});
+frappe.ui.form.on("Manufacturing Settings", {});
 
 frappe.tour["Manufacturing Settings"] = [
 	{
 		fieldname: "material_consumption",
 		title: __("Allow Multiple Material Consumption"),
-		description: __("If ticked, multiple materials can be used for a single Work Order. This is useful if one or more time consuming products are being manufactured.")
+		description: __(
+			"If ticked, multiple materials can be used for a single Work Order. This is useful if one or more time consuming products are being manufactured."
+		),
 	},
 	{
 		fieldname: "backflush_raw_materials_based_on",
 		title: __("Backflush Raw Materials"),
-		description: __("The Stock Entry of type 'Manufacture' is known as backflush. Raw materials being consumed to manufacture finished goods is known as backflushing. <br><br> When creating Manufacture Entry, raw-material items are backflushed based on BOM of production item. If you want raw-material items to be backflushed based on Material Transfer entry made against that Work Order instead, then you can set it under this field.")
+		description: __(
+			"The Stock Entry of type 'Manufacture' is known as backflush. Raw materials being consumed to manufacture finished goods is known as backflushing. <br><br> When creating Manufacture Entry, raw-material items are backflushed based on BOM of production item. If you want raw-material items to be backflushed based on Material Transfer entry made against that Work Order instead, then you can set it under this field."
+		),
 	},
 	{
 		fieldname: "default_wip_warehouse",
 		title: __("Work In Progress Warehouse"),
-		description: __("This Warehouse will be auto-updated in the Work In Progress Warehouse field of Work Orders.")
+		description: __(
+			"This Warehouse will be auto-updated in the Work In Progress Warehouse field of Work Orders."
+		),
 	},
 	{
 		fieldname: "default_fg_warehouse",
 		title: __("Finished Goods Warehouse"),
-		description: __("This Warehouse will be auto-updated in the Target Warehouse field of Work Order.")
+		description: __("This Warehouse will be auto-updated in the Target Warehouse field of Work Order."),
 	},
 	{
 		fieldname: "update_bom_costs_automatically",
 		title: __("Update BOM Cost Automatically"),
-		description: __("If ticked, the BOM cost will be automatically updated based on Valuation Rate / Price List Rate / last purchase rate of raw materials.")
-	}
+		description: __(
+			"If ticked, the BOM cost will be automatically updated based on Valuation Rate / Price List Rate / last purchase rate of raw materials."
+		),
+	},
 ];
diff --git a/erpnext/manufacturing/doctype/material_request_plan_item/material_request_plan_item.js b/erpnext/manufacturing/doctype/material_request_plan_item/material_request_plan_item.js
index 61c0a99..7a9e2b9 100644
--- a/erpnext/manufacturing/doctype/material_request_plan_item/material_request_plan_item.js
+++ b/erpnext/manufacturing/doctype/material_request_plan_item/material_request_plan_item.js
@@ -1,8 +1,6 @@
 // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Material Request Plan Item', {
-	refresh: function() {
-
-	}
+frappe.ui.form.on("Material Request Plan Item", {
+	refresh: function () {},
 });
diff --git a/erpnext/manufacturing/doctype/operation/operation.js b/erpnext/manufacturing/doctype/operation/operation.js
index ea73fd6..c51ea72 100644
--- a/erpnext/manufacturing/doctype/operation/operation.js
+++ b/erpnext/manufacturing/doctype/operation/operation.js
@@ -1,32 +1,34 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Operation', {
-	setup: function(frm) {
-		frm.set_query('operation', 'sub_operations', function() {
+frappe.ui.form.on("Operation", {
+	setup: function (frm) {
+		frm.set_query("operation", "sub_operations", function () {
 			return {
 				filters: {
-					'name': ['not in', [frm.doc.name]]
-				}
+					name: ["not in", [frm.doc.name]],
+				},
 			};
 		});
-	}
+	},
 });
 
-frappe.tour['Operation'] = [
+frappe.tour["Operation"] = [
 	{
 		fieldname: "__newname",
 		title: "Operation Name",
-		description: __("Enter a name for the Operation, for example, Cutting.")
+		description: __("Enter a name for the Operation, for example, Cutting."),
 	},
 	{
 		fieldname: "workstation",
 		title: "Default Workstation",
-		description: __("Select the Default Workstation where the Operation will be performed. This will be fetched in BOMs and Work Orders.")
+		description: __(
+			"Select the Default Workstation where the Operation will be performed. This will be fetched in BOMs and Work Orders."
+		),
 	},
 	{
 		fieldname: "sub_operations",
 		title: "Sub Operations",
-		description: __("If an operation is divided into sub operations, they can be added here.")
-	}
+		description: __("If an operation is divided into sub operations, they can be added here."),
+	},
 ];
diff --git a/erpnext/manufacturing/doctype/plant_floor/plant_floor.js b/erpnext/manufacturing/doctype/plant_floor/plant_floor.js
index 67e5acd..becdbdb 100644
--- a/erpnext/manufacturing/doctype/plant_floor/plant_floor.js
+++ b/erpnext/manufacturing/doctype/plant_floor/plant_floor.js
@@ -14,16 +14,16 @@
 
 			return {
 				filters: {
-					"is_group": 0,
-					"company": doc.company
-				}
-			}
+					is_group: 0,
+					company: doc.company,
+				},
+			};
 		});
 	},
 
 	refresh(frm) {
-		frm.trigger('prepare_stock_dashboard')
-		frm.trigger('prepare_workstation_dashboard')
+		frm.trigger("prepare_stock_dashboard");
+		frm.trigger("prepare_workstation_dashboard");
 	},
 
 	prepare_workstation_dashboard(frm) {
@@ -52,7 +52,6 @@
 	},
 });
 
-
 class VisualStock {
 	constructor(opts) {
 		Object.assign(this, opts);
@@ -62,7 +61,7 @@
 	make() {
 		this.prepare_filters();
 		this.prepare_stock_summary({
-			start:0
+			start: 0,
 		});
 	}
 
@@ -81,17 +80,18 @@
 				fieldname: "item_code",
 				placeholder: __("Item"),
 				options: "Item",
-				onchange: () => this.prepare_stock_summary({
-					start:0,
-					item_code: this.item_filter.value
-				})
+				onchange: () =>
+					this.prepare_stock_summary({
+						start: 0,
+						item_code: this.item_filter.value,
+					}),
 			},
-			parent: this.wrapper.find('.filter-section'),
+			parent: this.wrapper.find(".filter-section"),
 			render_input: true,
 		});
 
-		this.item_filter.$wrapper.addClass('form-column col-sm-3');
-		this.item_filter.$wrapper.find('.clearfix').hide();
+		this.item_filter.$wrapper.addClass("form-column col-sm-3");
+		this.item_filter.$wrapper.find(".clearfix").hide();
 
 		this.item_group_filter = frappe.ui.form.make_control({
 			df: {
@@ -99,25 +99,28 @@
 				fieldname: "item_group",
 				placeholder: __("Item Group"),
 				options: "Item Group",
-				change: () => this.prepare_stock_summary({
-					start:0,
-					item_group: this.item_group_filter.value
-				})
+				change: () =>
+					this.prepare_stock_summary({
+						start: 0,
+						item_group: this.item_group_filter.value,
+					}),
 			},
-			parent: this.wrapper.find('.filter-section'),
+			parent: this.wrapper.find(".filter-section"),
 			render_input: true,
 		});
 
-		this.item_group_filter.$wrapper.addClass('form-column col-sm-3');
-		this.item_group_filter.$wrapper.find('.clearfix').hide();
+		this.item_group_filter.$wrapper.addClass("form-column col-sm-3");
+		this.item_group_filter.$wrapper.find(".clearfix").hide();
 	}
 
 	prepare_stock_summary(args) {
-		let {start, item_code, item_group} = args;
+		let { start, item_code, item_group } = args;
 
-		this.get_stock_summary(start, item_code, item_group).then(stock_summary => {
-			this.wrapper.find('.stock-summary-container').remove();
-			this.wrapper.append(`<div class="col-sm-12 stock-summary-container" style="margin-bottom:20px"></div>`);
+		this.get_stock_summary(start, item_code, item_group).then((stock_summary) => {
+			this.wrapper.find(".stock-summary-container").remove();
+			this.wrapper.append(
+				`<div class="col-sm-12 stock-summary-container" style="margin-bottom:20px"></div>`
+			);
 			this.stock_summary = stock_summary.message;
 			this.render_stock_summary();
 			this.bind_events();
@@ -131,8 +134,8 @@
 				warehouse: this.frm.doc.warehouse,
 				start: start,
 				item_code: item_code,
-				item_group: item_group
-			}
+				item_group: item_group,
+			},
 		});
 
 		return stock_summary;
@@ -140,71 +143,80 @@
 
 	render_stock_summary() {
 		let template = frappe.render_template("stock_summary_template", {
-			stock_summary: this.stock_summary
+			stock_summary: this.stock_summary,
 		});
 
-		this.wrapper.find('.stock-summary-container').append(template);
+		this.wrapper.find(".stock-summary-container").append(template);
 	}
 
 	bind_events() {
-		this.wrapper.find('.btn-add').click((e) => {
-			this.item_code = decodeURI($(e.currentTarget).attr('data-item-code'));
+		this.wrapper.find(".btn-add").click((e) => {
+			this.item_code = decodeURI($(e.currentTarget).attr("data-item-code"));
 
-			this.make_stock_entry([
-				{
-					label: __("For Item"),
-					fieldname: "item_code",
-					fieldtype: "Data",
-					read_only: 1,
-					default: this.item_code
-				},
-				{
-					label: __("Quantity"),
-					fieldname: "qty",
-					fieldtype: "Float",
-					reqd: 1
-				}
-			], __("Add Stock"), "Material Receipt")
+			this.make_stock_entry(
+				[
+					{
+						label: __("For Item"),
+						fieldname: "item_code",
+						fieldtype: "Data",
+						read_only: 1,
+						default: this.item_code,
+					},
+					{
+						label: __("Quantity"),
+						fieldname: "qty",
+						fieldtype: "Float",
+						reqd: 1,
+					},
+				],
+				__("Add Stock"),
+				"Material Receipt"
+			);
 		});
 
-		this.wrapper.find('.btn-move').click((e) => {
-			this.item_code = decodeURI($(e.currentTarget).attr('data-item-code'));
+		this.wrapper.find(".btn-move").click((e) => {
+			this.item_code = decodeURI($(e.currentTarget).attr("data-item-code"));
 
-			this.make_stock_entry([
-				{
-					label: __("For Item"),
-					fieldname: "item_code",
-					fieldtype: "Data",
-					read_only: 1,
-					default: this.item_code
-				},
-				{
-					label: __("Quantity"),
-					fieldname: "qty",
-					fieldtype: "Float",
-					reqd: 1
-				},
-				{
-					label: __("To Warehouse"),
-					fieldname: "to_warehouse",
-					fieldtype: "Link",
-					options: "Warehouse",
-					reqd: 1,
-					get_query: () => {
-						return {
-							filters: {
-								"is_group": 0,
-								"company": this.frm.doc.company
-							}
-						}
-					}
-				}
-			], __("Move Stock"), "Material Transfer")
+			this.make_stock_entry(
+				[
+					{
+						label: __("For Item"),
+						fieldname: "item_code",
+						fieldtype: "Data",
+						read_only: 1,
+						default: this.item_code,
+					},
+					{
+						label: __("Quantity"),
+						fieldname: "qty",
+						fieldtype: "Float",
+						reqd: 1,
+					},
+					{
+						label: __("To Warehouse"),
+						fieldname: "to_warehouse",
+						fieldtype: "Link",
+						options: "Warehouse",
+						reqd: 1,
+						get_query: () => {
+							return {
+								filters: {
+									is_group: 0,
+									company: this.frm.doc.company,
+								},
+							};
+						},
+					},
+				],
+				__("Move Stock"),
+				"Material Transfer"
+			);
 		});
 	}
 
 	make_stock_entry(fields, title, stock_entry_type) {
-		frappe.prompt(fields,
+		frappe.prompt(
+			fields,
 			(values) => {
 				this.values = values;
 				this.stock_entry_type = stock_entry_type;
@@ -221,9 +233,11 @@
 							var doc = frappe.model.sync(r.message);
 							frappe.set_route("Form", r.message.doctype, r.message.name);
 						}
-					}
-				})
-			}, __(title), __("Create")
+					},
+				});
+			},
+			__(title),
+			__("Create")
 		);
 	}
 
@@ -245,12 +259,12 @@
 		this.values = {
 			...this.values,
 			...{
-				"company": this.frm.doc.company,
-				"item_code": this.item_code,
-				"from_warehouse": from_warehouse,
-				"to_warehouse": to_warehouse,
-				"purpose": this.stock_entry_type,
-			}
-		}
+				company: this.frm.doc.company,
+				item_code: this.item_code,
+				from_warehouse: from_warehouse,
+				to_warehouse: to_warehouse,
+				purpose: this.stock_entry_type,
+			},
+		};
 	}
-}
\ No newline at end of file
+}
diff --git a/erpnext/manufacturing/doctype/production_plan/production_plan.js b/erpnext/manufacturing/doctype/production_plan/production_plan.js
index 667ece2..54d1414 100644
--- a/erpnext/manufacturing/doctype/production_plan/production_plan.js
+++ b/erpnext/manufacturing/doctype/production_plan/production_plan.js
@@ -1,11 +1,10 @@
 // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Production Plan', {
-
+frappe.ui.form.on("Production Plan", {
 	before_save(frm) {
 		// preserve temporary names on production plan item to re-link sub-assembly items
-		frm.doc.po_items.forEach(item => {
+		frm.doc.po_items.forEach((item) => {
 			item.temporary_name = item.name;
 		});
 	},
@@ -14,8 +13,8 @@
 		frm.trigger("setup_queries");
 
 		frm.custom_make_buttons = {
-			'Work Order': 'Work Order / Subcontract PO',
-			'Material Request': 'Material Request',
+			"Work Order": "Work Order / Subcontract PO",
+			"Material Request": "Material Request",
 		};
 	},
 
@@ -25,36 +24,36 @@
 				query: "erpnext.manufacturing.doctype.production_plan.production_plan.sales_order_query",
 				filters: {
 					company: frm.doc.company,
-				}
-			}
+				},
+			};
 		});
 
-		frm.set_query('for_warehouse', function(doc) {
+		frm.set_query("for_warehouse", function (doc) {
 			return {
 				filters: {
 					company: doc.company,
-					is_group: 0
-				}
-			}
+					is_group: 0,
+				},
+			};
 		});
 
-		frm.set_query('material_request', 'material_requests', function() {
+		frm.set_query("material_request", "material_requests", function () {
 			return {
 				filters: {
 					material_request_type: "Manufacture",
 					docstatus: 1,
 					status: ["!=", "Stopped"],
-				}
+				},
 			};
 		});
 
 		frm.set_query("item_code", "po_items", (doc, cdt, cdn) => {
 			return {
 				query: "erpnext.controllers.queries.item_query",
-				filters:{
-					'is_stock_item': 1,
-				}
-			}
+				filters: {
+					is_stock_item: 1,
+				},
+			};
 		});
 
 		frm.set_query("bom_no", "po_items", (doc, cdt, cdn) => {
@@ -62,25 +61,25 @@
 			if (d.item_code) {
 				return {
 					query: "erpnext.controllers.queries.bom",
-					filters:{'item': d.item_code, 'docstatus': 1}
-				}
+					filters: { item: d.item_code, docstatus: 1 },
+				};
 			} else frappe.msgprint(__("Please enter Item first"));
 		});
 
 		frm.set_query("warehouse", "mr_items", (doc) => {
 			return {
 				filters: {
-					company: doc.company
-				}
-			}
+					company: doc.company,
+				},
+			};
 		});
 
 		frm.set_query("warehouse", "po_items", (doc) => {
 			return {
 				filters: {
-					company: doc.company
-				}
-			}
+					company: doc.company,
+				},
+			};
 		});
 	},
 
@@ -89,36 +88,62 @@
 			frm.trigger("show_progress");
 
 			if (frm.doc.status !== "Completed") {
-				frm.add_custom_button(__("Production Plan Summary"), ()=> {
-					frappe.set_route('query-report', 'Production Plan Summary', {production_plan: frm.doc.name});
-				}, __('View'));
+				frm.add_custom_button(
+					__("Production Plan Summary"),
+					() => {
+						frappe.set_route("query-report", "Production Plan Summary", {
+							production_plan: frm.doc.name,
+						});
+					},
+					__("View")
+				);
 
-				if  (frm.doc.status === "Closed") {
-					frm.add_custom_button(__("Re-open"), function() {
-						frm.events.close_open_production_plan(frm, false);
-					}, __("Status"));
+				if (frm.doc.status === "Closed") {
+					frm.add_custom_button(
+						__("Re-open"),
+						function () {
+							frm.events.close_open_production_plan(frm, false);
+						},
+						__("Status")
+					);
 				} else {
-					frm.add_custom_button(__("Close"), function() {
-						frm.events.close_open_production_plan(frm, true);
-					}, __("Status"));
+					frm.add_custom_button(
+						__("Close"),
+						function () {
+							frm.events.close_open_production_plan(frm, true);
+						},
+						__("Status")
+					);
 				}
 
 				if (frm.doc.po_items && frm.doc.status !== "Closed") {
-					frm.add_custom_button(__("Work Order / Subcontract PO"), ()=> {
-						frm.trigger("make_work_order");
-					}, __('Create'));
+					frm.add_custom_button(
+						__("Work Order / Subcontract PO"),
+						() => {
+							frm.trigger("make_work_order");
+						},
+						__("Create")
+					);
 				}
 
-				if (frm.doc.mr_items && frm.doc.mr_items.length && !in_list(['Material Requested', 'Closed'], frm.doc.status)) {
-					frm.add_custom_button(__("Material Request"), ()=> {
-						frm.trigger("make_material_request");
-					}, __('Create'));
+				if (
+					frm.doc.mr_items &&
+					frm.doc.mr_items.length &&
+					!in_list(["Material Requested", "Closed"], frm.doc.status)
+				) {
+					frm.add_custom_button(
+						__("Material Request"),
+						() => {
+							frm.trigger("make_material_request");
+						},
+						__("Create")
+					);
 				}
 			}
 		}
 
 		if (frm.doc.status !== "Closed") {
-			frm.page.set_inner_btn_group_as_primary(__('Create'));
+			frm.page.set_inner_btn_group_as_primary(__("Create"));
 		}
 		frm.trigger("material_requirement");
 
@@ -145,19 +170,19 @@
 								${__("Planned Qty: Quantity, for which, Work Order has been raised, but is pending to be manufactured.")}
 							</li>
 							<li>
-								${__('Requested Qty: Quantity requested for purchase, but not ordered.')}
+								${__("Requested Qty: Quantity requested for purchase, but not ordered.")}
 							</li>
 							<li>
-								${__('Ordered Qty: Quantity ordered for purchase, but not received.')}
+								${__("Ordered Qty: Quantity ordered for purchase, but not received.")}
 							</li>
 							<li>
 								${__("Reserved Qty: Quantity ordered for sale, but not delivered.")}
 							</li>
 							<li>
-								${__('Reserved Qty for Production: Raw materials quantity to make manufacturing items.')}
+								${__("Reserved Qty for Production: Raw materials quantity to make manufacturing items.")}
 							</li>
 							<li>
-								${__('Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.')}
+								${__("Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.")}
 							</li>
 						</ul>
 					</div>
@@ -168,15 +193,15 @@
 		set_field_options("projected_qty_formula", projected_qty_formula);
 	},
 
-	close_open_production_plan(frm, close=false) {
+	close_open_production_plan(frm, close = false) {
 		frappe.call({
 			method: "set_status",
 			freeze: true,
 			doc: frm.doc,
-			args: {close : close, update_bin: true},
-			callback: function() {
+			args: { close: close, update_bin: true },
+			callback: function () {
 				frm.reload_doc();
-			}
+			},
 		});
 	},
 
@@ -185,19 +210,19 @@
 			method: "make_work_order",
 			freeze: true,
 			doc: frm.doc,
-			callback: function() {
+			callback: function () {
 				frm.reload_doc();
-			}
+			},
 		});
 	},
 
 	make_material_request(frm) {
-
-		frappe.confirm(__("Do you want to submit the material request"),
-			function() {
+		frappe.confirm(
+			__("Do you want to submit the material request"),
+			function () {
 				frm.events.create_material_request(frm, 1);
 			},
-			function() {
+			function () {
 				frm.events.create_material_request(frm, 0);
 			}
 		);
@@ -210,9 +235,9 @@
 			method: "make_material_request",
 			freeze: true,
 			doc: frm.doc,
-			callback: function(r) {
+			callback: function (r) {
 				frm.reload_doc();
-			}
+			},
 		});
 	},
 
@@ -220,9 +245,9 @@
 		frappe.call({
 			method: "get_open_sales_orders",
 			doc: frm.doc,
-			callback: function(r) {
+			callback: function (r) {
 				refresh_field("sales_orders");
-			}
+			},
 		});
 	},
 
@@ -230,22 +255,22 @@
 		frappe.call({
 			method: "get_pending_material_requests",
 			doc: frm.doc,
-			callback: function() {
-				refresh_field('material_requests');
-			}
+			callback: function () {
+				refresh_field("material_requests");
+			},
 		});
 	},
 
 	get_items(frm) {
-		frm.clear_table('prod_plan_references');
+		frm.clear_table("prod_plan_references");
 
 		frappe.call({
 			method: "get_items",
 			freeze: true,
 			doc: frm.doc,
 			callback: function () {
-				refresh_field('po_items');
-			}
+				refresh_field("po_items");
+			},
 		});
 	},
 	combine_items(frm) {
@@ -255,12 +280,12 @@
 			method: "get_items",
 			freeze: true,
 			doc: frm.doc,
-			callback: function() {
+			callback: function () {
 				frm.refresh_field("po_items");
 				if (frm.doc.sub_assembly_items.length > 0) {
 					frm.trigger("get_sub_assembly_items");
 				}
-			}
+			},
 		});
 	},
 
@@ -278,9 +303,9 @@
 			method: "get_sub_assembly_items",
 			freeze: true,
 			doc: frm.doc,
-			callback: function() {
+			callback: function () {
 				refresh_field("sub_assembly_items");
-			}
+			},
 		});
 	},
 
@@ -294,9 +319,11 @@
 			frappe.throw(__("Select the Warehouse"));
 		}
 
-		frm.events.get_items_for_material_requests(frm, [{
-			warehouse: frm.doc.for_warehouse
-		}]);
+		frm.events.get_items_for_material_requests(frm, [
+			{
+				warehouse: frm.doc.for_warehouse,
+			},
+		]);
 	},
 
 	transfer_materials(frm) {
@@ -315,26 +342,26 @@
 				title: title,
 				fields: [
 					{
-						'label': __('Transfer From Warehouses'),
-						'fieldtype': 'Table MultiSelect',
-						'fieldname': 'warehouses',
-						'options': 'Production Plan Material Request Warehouse',
+						label: __("Transfer From Warehouses"),
+						fieldtype: "Table MultiSelect",
+						fieldname: "warehouses",
+						options: "Production Plan Material Request Warehouse",
 						get_query: function () {
 							return {
 								filters: {
-									company: frm.doc.company
-								}
+									company: frm.doc.company,
+								},
 							};
 						},
 					},
 					{
-						'label': __('For Warehouse'),
-						'fieldtype': 'Link',
-						'fieldname': 'target_warehouse',
-						'read_only': true,
-						'default': frm.doc.for_warehouse
-					}
-				]
+						label: __("For Warehouse"),
+						fieldtype: "Link",
+						fieldname: "target_warehouse",
+						read_only: true,
+						default: frm.doc.for_warehouse,
+					},
+				],
 			});
 
 			dialog.show();
@@ -353,82 +380,90 @@
 			freeze: true,
 			args: {
 				doc: frm.doc,
-				warehouses: warehouses || []
+				warehouses: warehouses || [],
 			},
-			callback: function(r) {
-				if(r.message) {
-					frm.set_value('mr_items', []);
-					r.message.forEach(row => {
-						let d = frm.add_child('mr_items');
+			callback: function (r) {
+				if (r.message) {
+					frm.set_value("mr_items", []);
+					r.message.forEach((row) => {
+						let d = frm.add_child("mr_items");
 						for (let field in row) {
-							if (field !== 'name') {
+							if (field !== "name") {
 								d[field] = row[field];
 							}
 						}
 					});
 				}
-				refresh_field('mr_items');
-			}
+				refresh_field("mr_items");
+			},
 		});
 	},
 
 	download_materials_required(frm) {
-		const fields = [{
-			fieldname: 'warehouses',
-			fieldtype: 'Table MultiSelect',
-			label: __('Warehouses'),
-			default: frm.doc.from_warehouse,
-			options: "Production Plan Material Request Warehouse",
-			get_query: function () {
-				return {
-					filters: {
-						company: frm.doc.company
-					}
-				};
+		const fields = [
+			{
+				fieldname: "warehouses",
+				fieldtype: "Table MultiSelect",
+				label: __("Warehouses"),
+				default: frm.doc.from_warehouse,
+				options: "Production Plan Material Request Warehouse",
+				get_query: function () {
+					return {
+						filters: {
+							company: frm.doc.company,
+						},
+					};
+				},
 			},
-		}];
+		];
 
-		frappe.prompt(fields, (row) => {
-			let get_template_url = 'erpnext.manufacturing.doctype.production_plan.production_plan.download_raw_materials';
-			open_url_post(frappe.request.url, {
-				cmd: get_template_url,
-				doc: frm.doc,
-				warehouses: row.warehouses
-			});
-		}, __('Select Warehouses to get Stock for Materials Planning'), __('Get Stock'));
+		frappe.prompt(
+			fields,
+			(row) => {
+				let get_template_url =
+					"erpnext.manufacturing.doctype.production_plan.production_plan.download_raw_materials";
+				open_url_post(frappe.request.url, {
+					cmd: get_template_url,
+					doc: frm.doc,
+					warehouses: row.warehouses,
+				});
+			},
+			__("Select Warehouses to get Stock for Materials Planning"),
+			__("Get Stock")
+		);
 	},
 
 	show_progress(frm) {
 		var bars = [];
-		var message = '';
-		var title = '';
+		var message = "";
+		var title = "";
 
 		// produced qty
 		let item_wise_qty = {};
 		frm.doc.po_items.forEach((data) => {
-			if(!item_wise_qty[data.item_code]) {
+			if (!item_wise_qty[data.item_code]) {
 				item_wise_qty[data.item_code] = data.produced_qty;
 			} else {
 				item_wise_qty[data.item_code] += data.produced_qty;
 			}
-		})
+		});
 
 		if (item_wise_qty) {
 			for (var key in item_wise_qty) {
-				title += __('Item {0}: {1} qty produced. ', [key, item_wise_qty[key]]);
+				title += __("Item {0}: {1} qty produced. ", [key, item_wise_qty[key]]);
 			}
 		}
 
 		bars.push({
-			'title': title,
-			'width': (frm.doc.total_produced_qty / frm.doc.total_planned_qty * 100) + '%',
-			'progress_class': 'progress-bar-success'
+			title: title,
+			width: (frm.doc.total_produced_qty / frm.doc.total_planned_qty) * 100 + "%",
+			progress_class: "progress-bar-success",
 		});
-		if (bars[0].width == '0%') {
-			bars[0].width = '0.5%';
+		if (bars[0].width == "0%") {
+			bars[0].width = "0.5%";
 		}
 		message = title;
-		frm.dashboard.add_progress(__('Status'), bars, message);
+		frm.dashboard.add_progress(__("Status"), bars, message);
 	},
 });
 
@@ -439,13 +474,13 @@
 			frappe.call({
 				method: "erpnext.manufacturing.doctype.production_plan.production_plan.get_item_data",
 				args: {
-					item_code: row.item_code
+					item_code: row.item_code,
 				},
-				callback: function(r) {
+				callback: function (r) {
 					for (let key in r.message) {
 						frappe.model.set_value(cdt, cdn, key, r.message[key]);
 					}
-				}
+				},
 			});
 		}
 	},
@@ -460,30 +495,29 @@
 				args: {
 					row: row,
 					company: frm.doc.company,
-					for_warehouse: row.warehouse
+					for_warehouse: row.warehouse,
 				},
-				callback: function(r) {
+				callback: function (r) {
 					if (r.message) {
-						let {projected_qty, actual_qty} = r.message[0];
+						let { projected_qty, actual_qty } = r.message[0];
 
 						frappe.model.set_value(cdt, cdn, {
-							'projected_qty': projected_qty,
-							'actual_qty': actual_qty
+							projected_qty: projected_qty,
+							actual_qty: actual_qty,
 						});
 					}
-				}
-			})
+				},
+			});
 		}
 	},
 
 	material_request_type(frm, cdt, cdn) {
 		let row = locals[cdt][cdn];
 
-		if (row.from_warehouse &&
-			row.material_request_type !== "Material Transfer") {
-				frappe.model.set_value(cdt, cdn, 'from_warehouse', '');
+		if (row.from_warehouse && row.material_request_type !== "Material Transfer") {
+			frappe.model.set_value(cdt, cdn, "from_warehouse", "");
 		}
-	}
+	},
 });
 
 frappe.ui.form.on("Production Plan Sales Order", {
@@ -506,53 +540,61 @@
 						method: "erpnext.manufacturing.doctype.production_plan.production_plan.get_so_details",
 						args: { sales_order },
 						callback(r) {
-							const {transaction_date, customer, grand_total} = r.message;
-							frappe.model.set_value(cdt, cdn, 'sales_order_date', transaction_date);
-							frappe.model.set_value(cdt, cdn, 'customer', customer);
-							frappe.model.set_value(cdt, cdn, 'grand_total', grand_total);
-						}
+							const { transaction_date, customer, grand_total } = r.message;
+							frappe.model.set_value(cdt, cdn, "sales_order_date", transaction_date);
+							frappe.model.set_value(cdt, cdn, "customer", customer);
+							frappe.model.set_value(cdt, cdn, "grand_total", grand_total);
+						},
 					});
-				}
+				},
 			});
 		}
-	}
+	},
 });
 
 frappe.ui.form.on("Production Plan Sub Assembly Item", {
 	fg_warehouse(frm, cdt, cdn) {
 		erpnext.utils.copy_value_in_all_rows(frm.doc, cdt, cdn, "sub_assembly_items", "fg_warehouse");
 	},
-})
+});
 
-frappe.tour['Production Plan'] = [
+frappe.tour["Production Plan"] = [
 	{
 		fieldname: "get_items_from",
 		title: "Get Items From",
-		description: __("Select whether to get items from a Sales Order or a Material Request. For now select <b>Sales Order</b>.\n A Production Plan can also be created manually where you can select the Items to manufacture.")
+		description: __(
+			"Select whether to get items from a Sales Order or a Material Request. For now select <b>Sales Order</b>.\n A Production Plan can also be created manually where you can select the Items to manufacture."
+		),
 	},
 	{
 		fieldname: "get_sales_orders",
 		title: "Get Sales Orders",
-		description: __("Click on Get Sales Orders to fetch sales orders based on the above filters.")
+		description: __("Click on Get Sales Orders to fetch sales orders based on the above filters."),
 	},
 	{
 		fieldname: "get_items",
 		title: "Get Finished Goods for Manufacture",
-		description: __("Click on 'Get Finished Goods for Manufacture' to fetch the items from the above Sales Orders. Items only for which a BOM is present will be fetched.")
+		description: __(
+			"Click on 'Get Finished Goods for Manufacture' to fetch the items from the above Sales Orders. Items only for which a BOM is present will be fetched."
+		),
 	},
 	{
 		fieldname: "po_items",
 		title: "Finished Goods",
-		description: __("On expanding a row in the Items to Manufacture table, you'll see an option to 'Include Exploded Items'. Ticking this includes raw materials of the sub-assembly items in the production process.")
+		description: __(
+			"On expanding a row in the Items to Manufacture table, you'll see an option to 'Include Exploded Items'. Ticking this includes raw materials of the sub-assembly items in the production process."
+		),
 	},
 	{
 		fieldname: "include_non_stock_items",
 		title: "Include Non Stock Items",
-		description: __("To include non-stock items in the material request planning. i.e. Items for which 'Maintain Stock' checkbox is unticked.")
+		description: __(
+			"To include non-stock items in the material request planning. i.e. Items for which 'Maintain Stock' checkbox is unticked."
+		),
 	},
 	{
 		fieldname: "include_subcontracted_items",
 		title: "Include Subcontracted Items",
-		description: __("To add subcontracted Item's raw materials if include exploded items is disabled.")
-	}
+		description: __("To add subcontracted Item's raw materials if include exploded items is disabled."),
+	},
 ];
diff --git a/erpnext/manufacturing/doctype/production_plan/production_plan_list.js b/erpnext/manufacturing/doctype/production_plan/production_plan_list.js
index 8f94686..bfef6e1 100644
--- a/erpnext/manufacturing/doctype/production_plan/production_plan_list.js
+++ b/erpnext/manufacturing/doctype/production_plan/production_plan_list.js
@@ -1,4 +1,4 @@
-frappe.listview_settings['Production Plan'] = {
+frappe.listview_settings["Production Plan"] = {
 	hide_name_column: true,
 	add_fields: ["status"],
 	filters: [["status", "!=", "Closed"]],
@@ -6,14 +6,18 @@
 		if (doc.status === "Submitted") {
 			return [__("Not Started"), "orange", "status,=,Submitted"];
 		} else {
-			return [__(doc.status), {
-				"Draft": "red",
-				"In Process": "orange",
-				"Completed": "green",
-				"Material Requested": "yellow",
-				"Cancelled": "gray",
-				"Closed": "grey"
-			}[doc.status], "status,=," + doc.status];
+			return [
+				__(doc.status),
+				{
+					Draft: "red",
+					"In Process": "orange",
+					Completed: "green",
+					"Material Requested": "yellow",
+					Cancelled: "gray",
+					Closed: "grey",
+				}[doc.status],
+				"status,=," + doc.status,
+			];
 		}
-	}
+	},
 };
diff --git a/erpnext/manufacturing/doctype/production_plan_material_request_warehouse/production_plan_material_request_warehouse.js b/erpnext/manufacturing/doctype/production_plan_material_request_warehouse/production_plan_material_request_warehouse.js
index 53f8758..d4e74fa 100644
--- a/erpnext/manufacturing/doctype/production_plan_material_request_warehouse/production_plan_material_request_warehouse.js
+++ b/erpnext/manufacturing/doctype/production_plan_material_request_warehouse/production_plan_material_request_warehouse.js
@@ -1,8 +1,7 @@
 // Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Production Plan Material Request Warehouse', {
+frappe.ui.form.on("Production Plan Material Request Warehouse", {
 	// refresh: function(frm) {
-
 	// }
 });
diff --git a/erpnext/manufacturing/doctype/routing/routing.js b/erpnext/manufacturing/doctype/routing/routing.js
index 784e83a..fe67fe3 100644
--- a/erpnext/manufacturing/doctype/routing/routing.js
+++ b/erpnext/manufacturing/doctype/routing/routing.js
@@ -1,38 +1,39 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Routing', {
-	refresh: function(frm) {
+frappe.ui.form.on("Routing", {
+	refresh: function (frm) {
 		frm.trigger("display_sequence_id_column");
 	},
 
-	onload: function(frm) {
+	onload: function (frm) {
 		frm.trigger("display_sequence_id_column");
 	},
 
-	display_sequence_id_column: function(frm) {
-		frm.fields_dict.operations.grid.update_docfield_property(
-			'sequence_id', 	'in_list_view', 1
+	display_sequence_id_column: function (frm) {
+		frm.fields_dict.operations.grid.update_docfield_property("sequence_id", "in_list_view", 1);
+	},
+
+	calculate_operating_cost: function (frm, child) {
+		const operating_cost = flt(
+			(flt(child.hour_rate) * flt(child.time_in_mins)) / 60,
+			precision("operating_cost", child)
 		);
-	},
-
-	calculate_operating_cost: function(frm, child) {
-		const operating_cost = flt(flt(child.hour_rate) * flt(child.time_in_mins) / 60, precision("operating_cost", child));
 		frappe.model.set_value(child.doctype, child.name, "operating_cost", operating_cost);
-	}
+	},
 });
 
-frappe.ui.form.on('BOM Operation', {
-	operation: function(frm, cdt, cdn) {
+frappe.ui.form.on("BOM Operation", {
+	operation: function (frm, cdt, cdn) {
 		const d = locals[cdt][cdn];
 
-		if(!d.operation) return;
+		if (!d.operation) return;
 
 		frappe.call({
-			"method": "frappe.client.get",
+			method: "frappe.client.get",
 			args: {
 				doctype: "Operation",
-				name: d.operation
+				name: d.operation,
 			},
 			callback: function (data) {
 				if (data.message.description) {
@@ -44,41 +45,43 @@
 				}
 
 				frm.events.calculate_operating_cost(frm, d);
-			}
+			},
 		});
 	},
 
-	workstation: function(frm, cdt, cdn) {
+	workstation: function (frm, cdt, cdn) {
 		const d = locals[cdt][cdn];
-		if(!d.workstation) return;
+		if (!d.workstation) return;
 		frappe.call({
-			"method": "frappe.client.get",
+			method: "frappe.client.get",
 			args: {
 				doctype: "Workstation",
-				name: d.workstation
+				name: d.workstation,
 			},
 			callback: function (data) {
 				frappe.model.set_value(d.doctype, d.name, "hour_rate", data.message.hour_rate);
 				frm.events.calculate_operating_cost(frm, d);
-			}
+			},
 		});
 	},
 
-	time_in_mins: function(frm, cdt, cdn) {
+	time_in_mins: function (frm, cdt, cdn) {
 		const d = locals[cdt][cdn];
 		frm.events.calculate_operating_cost(frm, d);
-	}
+	},
 });
 
-frappe.tour['Routing'] = [
+frappe.tour["Routing"] = [
 	{
 		fieldname: "routing_name",
 		title: "Routing Name",
-		description: __("Enter a name for Routing.")
+		description: __("Enter a name for Routing."),
 	},
 	{
 		fieldname: "operations",
 		title: "BOM Operations",
-		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.")
-	}
+		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/sub_operation/sub_operation.js b/erpnext/manufacturing/doctype/sub_operation/sub_operation.js
index be9db6a..8d6d3dd 100644
--- a/erpnext/manufacturing/doctype/sub_operation/sub_operation.js
+++ b/erpnext/manufacturing/doctype/sub_operation/sub_operation.js
@@ -1,8 +1,7 @@
 // Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Sub Operation', {
+frappe.ui.form.on("Sub Operation", {
 	// refresh: function(frm) {
-
 	// }
 });
diff --git a/erpnext/manufacturing/doctype/work_order/work_order.js b/erpnext/manufacturing/doctype/work_order/work_order.js
index d9cc212..42f6943 100644
--- a/erpnext/manufacturing/doctype/work_order/work_order.js
+++ b/erpnext/manufacturing/doctype/work_order/work_order.js
@@ -2,70 +2,70 @@
 // For license information, please see license.txt
 
 frappe.ui.form.on("Work Order", {
-	setup: function(frm) {
+	setup: function (frm) {
 		frm.custom_make_buttons = {
-			'Stock Entry': 'Start',
-			'Pick List': 'Create Pick List',
-			'Job Card': 'Create Job Card'
+			"Stock Entry": "Start",
+			"Pick List": "Create Pick List",
+			"Job Card": "Create Job Card",
 		};
 
 		// Set query for warehouses
-		frm.set_query("wip_warehouse", function() {
+		frm.set_query("wip_warehouse", function () {
 			return {
 				filters: {
-					'company': frm.doc.company,
-				}
+					company: frm.doc.company,
+				},
 			};
 		});
 
-		frm.set_query("source_warehouse", function() {
+		frm.set_query("source_warehouse", function () {
 			return {
 				filters: {
-					'company': frm.doc.company,
-				}
+					company: frm.doc.company,
+				},
 			};
 		});
 
-		frm.set_query("source_warehouse", "required_items", function() {
+		frm.set_query("source_warehouse", "required_items", function () {
 			return {
 				filters: {
-					'company': frm.doc.company,
-				}
+					company: frm.doc.company,
+				},
 			};
 		});
 
-		frm.set_query("sales_order", function() {
+		frm.set_query("sales_order", function () {
 			return {
 				filters: {
-					"status": ["not in", ["Closed", "On Hold"]]
-				}
+					status: ["not in", ["Closed", "On Hold"]],
+				},
 			};
 		});
 
-		frm.set_query("fg_warehouse", function() {
+		frm.set_query("fg_warehouse", function () {
 			return {
 				filters: {
-					'company': frm.doc.company,
-					'is_group': 0
-				}
+					company: frm.doc.company,
+					is_group: 0,
+				},
 			};
 		});
 
-		frm.set_query("scrap_warehouse", function() {
+		frm.set_query("scrap_warehouse", function () {
 			return {
 				filters: {
-					'company': frm.doc.company,
-					'is_group': 0
-				}
+					company: frm.doc.company,
+					is_group: 0,
+				},
 			};
 		});
 
 		// Set query for BOM
-		frm.set_query("bom_no", function() {
+		frm.set_query("bom_no", function () {
 			if (frm.doc.production_item) {
 				return {
 					query: "erpnext.controllers.queries.bom",
-					filters: {item: cstr(frm.doc.production_item)}
+					filters: { item: cstr(frm.doc.production_item) },
 				};
 			} else {
 				frappe.msgprint(__("Please enter Production Item first"));
@@ -73,60 +73,62 @@
 		});
 
 		// Set query for FG Item
-		frm.set_query("production_item", function() {
+		frm.set_query("production_item", function () {
 			return {
 				query: "erpnext.controllers.queries.item_query",
 				filters: {
-					"is_stock_item": 1,
-				}
+					is_stock_item: 1,
+				},
 			};
 		});
 
 		// Set query for FG Item
-		frm.set_query("project", function() {
-			return{
-				filters:[
-					['Project', 'status', 'not in', 'Completed, Cancelled']
-				]
+		frm.set_query("project", function () {
+			return {
+				filters: [["Project", "status", "not in", "Completed, Cancelled"]],
 			};
 		});
 
-		frm.set_query("operation", "required_items", function() {
+		frm.set_query("operation", "required_items", function () {
 			return {
 				query: "erpnext.manufacturing.doctype.work_order.work_order.get_bom_operations",
 				filters: {
-					'parent': frm.doc.bom_no,
-					'parenttype': 'BOM'
-				}
+					parent: frm.doc.bom_no,
+					parenttype: "BOM",
+				},
 			};
 		});
 
 		// formatter for work order operation
-		frm.set_indicator_formatter('operation',
-			function(doc) { return (frm.doc.qty==doc.completed_qty) ? "green" : "orange"; });
+		frm.set_indicator_formatter("operation", function (doc) {
+			return frm.doc.qty == doc.completed_qty ? "green" : "orange";
+		});
 	},
 
-	onload: function(frm) {
-		if (!frm.doc.status)
-			frm.doc.status = 'Draft';
+	onload: function (frm) {
+		if (!frm.doc.status) frm.doc.status = "Draft";
 
 		frm.add_fetch("sales_order", "project", "project");
 
-		if(frm.doc.__islocal) {
+		if (frm.doc.__islocal) {
 			frm.set_value({
-				"actual_start_date": "",
-				"actual_end_date": ""
+				actual_start_date: "",
+				actual_end_date: "",
 			});
 			erpnext.work_order.set_default_warehouse(frm);
 		}
 	},
 
-	source_warehouse: function(frm) {
+	source_warehouse: function (frm) {
 		let transaction_controller = new erpnext.TransactionController();
-		transaction_controller.autofill_warehouse(frm.doc.required_items, "source_warehouse", frm.doc.source_warehouse);
+		transaction_controller.autofill_warehouse(
+			frm.doc.required_items,
+			"source_warehouse",
+			frm.doc.source_warehouse
+		);
 	},
 
-	refresh: function(frm) {
+	refresh: function (frm) {
 		erpnext.toggle_naming_series();
 		erpnext.work_order.set_custom_buttons(frm);
 		frm.set_intro("");
@@ -139,27 +141,30 @@
 		}
 
 		if (frm.doc.status != "Closed") {
-			if (frm.doc.docstatus === 1 && frm.doc.status !== "Completed"
-				&& frm.doc.operations && frm.doc.operations.length) {
-
-				const not_completed = frm.doc.operations.filter(d => {
-					if (d.status != 'Completed') {
+			if (
+				frm.doc.docstatus === 1 &&
+				frm.doc.status !== "Completed" &&
+				frm.doc.operations &&
+				frm.doc.operations.length
+			) {
+				const not_completed = frm.doc.operations.filter((d) => {
+					if (d.status != "Completed") {
 						return true;
 					}
 				});
 
 				if (not_completed && not_completed.length) {
-					frm.add_custom_button(__('Create Job Card'), () => {
+					frm.add_custom_button(__("Create Job Card"), () => {
 						frm.trigger("make_job_card");
-					}).addClass('btn-primary');
+					}).addClass("btn-primary");
 				}
 			}
 		}
 
-		if(frm.doc.required_items && frm.doc.allow_alternative_item) {
-			const has_alternative = frm.doc.required_items.find(i => i.allow_alternative_item === 1);
+		if (frm.doc.required_items && frm.doc.allow_alternative_item) {
+			const has_alternative = frm.doc.required_items.find((i) => i.allow_alternative_item === 1);
 			if (frm.doc.docstatus == 0 && has_alternative) {
-				frm.add_custom_button(__('Alternate Item'), () => {
+				frm.add_custom_button(__("Alternate Item"), () => {
 					erpnext.utils.select_alternate_items({
 						frm: frm,
 						child_docname: "required_items",
@@ -167,16 +172,20 @@
 						child_doctype: "Work Order Item",
 						original_item_field: "original_item",
 						condition: (d) => {
-							if (d.allow_alternative_item) {return true;}
-						}
+							if (d.allow_alternative_item) {
+								return true;
+							}
+						},
 					});
 				});
 			}
 		}
 
-		if (frm.doc.status == "Completed" &&
-			frm.doc.__onload.backflush_raw_materials_based_on == "Material Transferred for Manufacture") {
-			frm.add_custom_button(__('Create BOM'), () => {
+		if (
+			frm.doc.status == "Completed" &&
+			frm.doc.__onload.backflush_raw_materials_based_on == "Material Transferred for Manufacture"
+		) {
+			frm.add_custom_button(__("Create BOM"), () => {
 				frm.trigger("make_bom");
 			});
 		}
@@ -184,120 +193,128 @@
 		frm.trigger("add_custom_button_to_return_components");
 	},
 
-	add_custom_button_to_return_components: function(frm) {
+	add_custom_button_to_return_components: function (frm) {
 		if (frm.doc.docstatus === 1 && in_list(["Closed", "Completed"], frm.doc.status)) {
-			let non_consumed_items = frm.doc.required_items.filter(d =>{
-				return flt(d.consumed_qty) < flt(d.transferred_qty - d.returned_qty)
+			let non_consumed_items = frm.doc.required_items.filter((d) => {
+				return flt(d.consumed_qty) < flt(d.transferred_qty - d.returned_qty);
 			});
 
 			if (non_consumed_items && non_consumed_items.length) {
-				frm.add_custom_button(__("Return Components"), function() {
+				frm.add_custom_button(__("Return Components"), function () {
 					frm.trigger("create_stock_return_entry");
 				}).addClass("btn-primary");
 			}
 		}
 	},
 
-	create_stock_return_entry: function(frm) {
+	create_stock_return_entry: function (frm) {
 		frappe.call({
 			method: "erpnext.manufacturing.doctype.work_order.work_order.make_stock_return_entry",
 			args: {
-				"work_order": frm.doc.name,
+				work_order: frm.doc.name,
 			},
-			callback: function(r) {
-				if(!r.exc) {
+			callback: function (r) {
+				if (!r.exc) {
 					let doc = frappe.model.sync(r.message);
 					frappe.set_route("Form", doc[0].doctype, doc[0].name);
 				}
-			}
+			},
 		});
 	},
 
-	make_job_card: function(frm) {
+	make_job_card: function (frm) {
 		let qty = 0;
 		let operations_data = [];
 
-		const dialog = frappe.prompt({fieldname: 'operations', fieldtype: 'Table', label: __('Operations'),
-			fields: [
-				{
-					fieldtype: 'Link',
-					fieldname: 'operation',
-					label: __('Operation'),
-					read_only: 1,
-					in_list_view: 1
+		const dialog = frappe.prompt(
+			{
+				fieldname: "operations",
+				fieldtype: "Table",
+				label: __("Operations"),
+				fields: [
+					{
+						fieldtype: "Link",
+						fieldname: "operation",
+						label: __("Operation"),
+						read_only: 1,
+						in_list_view: 1,
+					},
+					{
+						fieldtype: "Link",
+						fieldname: "workstation",
+						label: __("Workstation"),
+						read_only: 1,
+						in_list_view: 1,
+					},
+					{
+						fieldtype: "Data",
+						fieldname: "name",
+						label: __("Operation Id"),
+					},
+					{
+						fieldtype: "Float",
+						fieldname: "pending_qty",
+						label: __("Pending Qty"),
+					},
+					{
+						fieldtype: "Float",
+						fieldname: "qty",
+						label: __("Quantity to Manufacture"),
+						read_only: 0,
+						in_list_view: 1,
+					},
+					{
+						fieldtype: "Float",
+						fieldname: "batch_size",
+						label: __("Batch Size"),
+						read_only: 1,
+					},
+					{
+						fieldtype: "Int",
+						fieldname: "sequence_id",
+						label: __("Sequence Id"),
+						read_only: 1,
+					},
+				],
+				data: operations_data,
+				in_place_edit: true,
+				get_data: function () {
+					return operations_data;
 				},
-				{
-					fieldtype: 'Link',
-					fieldname: 'workstation',
-					label: __('Workstation'),
-					read_only: 1,
-					in_list_view: 1
-				},
-				{
-					fieldtype: 'Data',
-					fieldname: 'name',
-					label: __('Operation Id')
-				},
-				{
-					fieldtype: 'Float',
-					fieldname: 'pending_qty',
-					label: __('Pending Qty'),
-				},
-				{
-					fieldtype: 'Float',
-					fieldname: 'qty',
-					label: __('Quantity to Manufacture'),
-					read_only: 0,
-					in_list_view: 1,
-				},
-				{
-					fieldtype: 'Float',
-					fieldname: 'batch_size',
-					label: __('Batch Size'),
-					read_only: 1
-				},
-				{
-					fieldtype: 'Int',
-					fieldname: 'sequence_id',
-					label: __('Sequence Id'),
-					read_only: 1
-				},
-			],
-			data: operations_data,
-			in_place_edit: true,
-			get_data: function() {
-				return operations_data;
-			}
-		}, function(data) {
-			frappe.call({
-				method: "erpnext.manufacturing.doctype.work_order.work_order.make_job_card",
-				freeze: true,
-				args: {
-					work_order: frm.doc.name,
-					operations: data.operations,
-				},
-				callback: function() {
-					frm.reload_doc();
-				}
-			});
-		}, __("Job Card"), __("Create"));
+			},
+			function (data) {
+				frappe.call({
+					method: "erpnext.manufacturing.doctype.work_order.work_order.make_job_card",
+					freeze: true,
+					args: {
+						work_order: frm.doc.name,
+						operations: data.operations,
+					},
+					callback: function () {
+						frm.reload_doc();
+					},
+				});
+			},
+			__("Job Card"),
+			__("Create")
+		);
 
-		dialog.fields_dict["operations"].grid.wrapper.find('.grid-add-row').hide();
+		dialog.fields_dict["operations"].grid.wrapper.find(".grid-add-row").hide();
 
 		var pending_qty = 0;
-		frm.doc.operations.forEach(data => {
-			if(data.completed_qty + data.process_loss_qty != frm.doc.qty) {
+		frm.doc.operations.forEach((data) => {
+			if (data.completed_qty + data.process_loss_qty != frm.doc.qty) {
 				pending_qty = frm.doc.qty - flt(data.completed_qty) - flt(data.process_loss_qty);
 
 				if (pending_qty) {
 					dialog.fields_dict.operations.df.data.push({
-						'name': data.name,
-						'operation': data.operation,
-						'workstation': data.workstation,
-						'batch_size': data.batch_size,
-						'qty': pending_qty,
-						'pending_qty': pending_qty,
-						'sequence_id': data.sequence_id
+						name: data.name,
+						operation: data.operation,
+						workstation: data.workstation,
+						batch_size: data.batch_size,
+						qty: pending_qty,
+						pending_qty: pending_qty,
+						sequence_id: data.sequence_id,
 					});
 				}
 			}
@@ -305,202 +322,212 @@
 		dialog.fields_dict.operations.grid.refresh();
 	},
 
-	make_bom: function(frm) {
+	make_bom: function (frm) {
 		frappe.call({
 			method: "make_bom",
 			doc: frm.doc,
-			callback: function(r){
+			callback: function (r) {
 				if (r.message) {
 					var doc = frappe.model.sync(r.message)[0];
 					frappe.set_route("Form", doc.doctype, doc.name);
 				}
-			}
+			},
 		});
 	},
 
-	show_progress_for_items: function(frm) {
+	show_progress_for_items: function (frm) {
 		var bars = [];
-		var message = '';
+		var message = "";
 		var added_min = false;
 
 		// produced qty
-		var title = __('{0} items produced', [frm.doc.produced_qty]);
+		var title = __("{0} items produced", [frm.doc.produced_qty]);
 		bars.push({
-			'title': title,
-			'width': (frm.doc.produced_qty / frm.doc.qty * 100) + '%',
-			'progress_class': 'progress-bar-success'
+			title: title,
+			width: (frm.doc.produced_qty / frm.doc.qty) * 100 + "%",
+			progress_class: "progress-bar-success",
 		});
-		if (bars[0].width == '0%') {
-			bars[0].width = '0.5%';
+		if (bars[0].width == "0%") {
+			bars[0].width = "0.5%";
 			added_min = 0.5;
 		}
 		message = title;
 		// pending qty
-		if(!frm.doc.skip_transfer){
+		if (!frm.doc.skip_transfer) {
 			var pending_complete = frm.doc.material_transferred_for_manufacturing - frm.doc.produced_qty;
-			if(pending_complete) {
-				var width = ((pending_complete / frm.doc.qty * 100) - added_min);
-				title = __('{0} items in progress', [pending_complete]);
+			if (pending_complete) {
+				var width = (pending_complete / frm.doc.qty) * 100 - added_min;
+				title = __("{0} items in progress", [pending_complete]);
 				bars.push({
-					'title': title,
-					'width': (width > 100 ? "99.5" : width)  + '%',
-					'progress_class': 'progress-bar-warning'
+					title: title,
+					width: (width > 100 ? "99.5" : width) + "%",
+					progress_class: "progress-bar-warning",
 				});
-				message = message + '. ' + title;
+				message = message + ". " + title;
 			}
 		}
-		frm.dashboard.add_progress(__('Status'), bars, message);
+		frm.dashboard.add_progress(__("Status"), bars, message);
 	},
 
-	show_progress_for_operations: function(frm) {
+	show_progress_for_operations: function (frm) {
 		if (frm.doc.operations && frm.doc.operations.length) {
-
 			let progress_class = {
 				"Work in Progress": "progress-bar-warning",
-				"Completed": "progress-bar-success"
+				Completed: "progress-bar-success",
 			};
 
 			let bars = [];
-			let message = '';
-			let title = '';
+			let message = "";
+			let title = "";
 			let status_wise_oprtation_data = {};
 			let total_completed_qty = frm.doc.qty * frm.doc.operations.length;
 
-			frm.doc.operations.forEach(d => {
+			frm.doc.operations.forEach((d) => {
 				if (!status_wise_oprtation_data[d.status]) {
 					status_wise_oprtation_data[d.status] = [d.completed_qty, d.operation];
 				} else {
 					status_wise_oprtation_data[d.status][0] += d.completed_qty;
-					status_wise_oprtation_data[d.status][1] += ', ' + d.operation;
+					status_wise_oprtation_data[d.status][1] += ", " + d.operation;
 				}
 			});
 
 			for (let key in status_wise_oprtation_data) {
 				title = __("{0} Operations: {1}", [key, status_wise_oprtation_data[key][1].bold()]);
 				bars.push({
-					'title': title,
-					'width': status_wise_oprtation_data[key][0] / total_completed_qty * 100  + '%',
-					'progress_class': progress_class[key]
+					title: title,
+					width: (status_wise_oprtation_data[key][0] / total_completed_qty) * 100 + "%",
+					progress_class: progress_class[key],
 				});
 
-				message += title + '. ';
+				message += title + ". ";
 			}
 
-			frm.dashboard.add_progress(__('Status'), bars, message);
+			frm.dashboard.add_progress(__("Status"), bars, message);
 		}
 	},
 
-	production_item: function(frm) {
+	production_item: function (frm) {
 		if (frm.doc.production_item) {
 			frappe.call({
 				method: "erpnext.manufacturing.doctype.work_order.work_order.get_item_details",
 				args: {
 					item: frm.doc.production_item,
-					project: frm.doc.project
+					project: frm.doc.project,
 				},
 				freeze: true,
-				callback: function(r) {
-					if(r.message) {
-						frm.set_value('sales_order', "");
-						frm.trigger('set_sales_order');
+				callback: function (r) {
+					if (r.message) {
+						frm.set_value("sales_order", "");
+						frm.trigger("set_sales_order");
 						erpnext.in_production_item_onchange = true;
 
-						$.each(["description", "stock_uom", "project", "bom_no", "allow_alternative_item",
-							"transfer_material_against", "item_name"], function(i, field) {
-							frm.set_value(field, r.message[field]);
-						});
+						$.each(
+							[
+								"description",
+								"stock_uom",
+								"project",
+								"bom_no",
+								"allow_alternative_item",
+								"transfer_material_against",
+								"item_name",
+							],
+							function (i, field) {
+								frm.set_value(field, r.message[field]);
+							}
+						);
 
-						if(r.message["set_scrap_wh_mandatory"]){
+						if (r.message["set_scrap_wh_mandatory"]) {
 							frm.toggle_reqd("scrap_warehouse", true);
 						}
 						erpnext.in_production_item_onchange = false;
 					}
-				}
+				},
 			});
 		}
 	},
 
-	project: function(frm) {
-		if(!erpnext.in_production_item_onchange && !frm.doc.bom_no) {
+	project: function (frm) {
+		if (!erpnext.in_production_item_onchange && !frm.doc.bom_no) {
 			frm.trigger("production_item");
 		}
 	},
 
-	bom_no: function(frm) {
+	bom_no: function (frm) {
 		return frm.call({
 			doc: frm.doc,
 			method: "get_items_and_operations_from_bom",
 			freeze: true,
-			callback: function(r) {
-				if(r.message["set_scrap_wh_mandatory"]){
+			callback: function (r) {
+				if (r.message["set_scrap_wh_mandatory"]) {
 					frm.toggle_reqd("scrap_warehouse", true);
 				}
-			}
+			},
 		});
 	},
 
-	use_multi_level_bom: function(frm) {
-		if(frm.doc.bom_no) {
+	use_multi_level_bom: function (frm) {
+		if (frm.doc.bom_no) {
 			frm.trigger("bom_no");
 		}
 	},
 
-	qty: function(frm) {
-		frm.trigger('bom_no');
+	qty: function (frm) {
+		frm.trigger("bom_no");
 	},
 
-	before_submit: function(frm) {
+	before_submit: function (frm) {
 		frm.fields_dict.required_items.grid.toggle_reqd("source_warehouse", true);
-		frm.toggle_reqd("transfer_material_against",
-			frm.doc.operations && frm.doc.operations.length > 0);
+		frm.toggle_reqd("transfer_material_against", frm.doc.operations && frm.doc.operations.length > 0);
 	},
 
-	set_sales_order: function(frm) {
-		if(frm.doc.production_item) {
+	set_sales_order: function (frm) {
+		if (frm.doc.production_item) {
 			frappe.call({
 				method: "erpnext.manufacturing.doctype.work_order.work_order.query_sales_order",
 				args: { production_item: frm.doc.production_item },
-				callback: function(r) {
-					frm.set_query("sales_order", function() {
+				callback: function (r) {
+					frm.set_query("sales_order", function () {
 						erpnext.in_production_item_onchange = true;
 						return {
-							filters: [
-								["Sales Order","name", "in", r.message]
-							]
+							filters: [["Sales Order", "name", "in", r.message]],
 						};
 					});
-				}
+				},
 			});
 		}
 	},
 
-	additional_operating_cost: function(frm) {
+	additional_operating_cost: function (frm) {
 		erpnext.work_order.calculate_cost(frm.doc);
 		erpnext.work_order.calculate_total_cost(frm);
 	},
 });
 
 frappe.ui.form.on("Work Order Item", {
-	source_warehouse: function(frm, cdt, cdn) {
+	source_warehouse: function (frm, cdt, cdn) {
 		var row = locals[cdt][cdn];
-		if(!row.item_code) {
+		if (!row.item_code) {
 			frappe.throw(__("Please set the Item Code first"));
-		} else if(row.source_warehouse) {
+		} else if (row.source_warehouse) {
 			frappe.call({
-				"method": "erpnext.stock.utils.get_latest_stock_qty",
+				method: "erpnext.stock.utils.get_latest_stock_qty",
 				args: {
 					item_code: row.item_code,
-					warehouse: row.source_warehouse
+					warehouse: row.source_warehouse,
 				},
 				callback: function (r) {
-					frappe.model.set_value(row.doctype, row.name,
-						"available_qty_at_source_warehouse", r.message);
-				}
+					frappe.model.set_value(
+						row.doctype,
+						row.name,
+						"available_qty_at_source_warehouse",
+						r.message
+					);
+				},
 			});
 		}
 	},
 
-	item_code: function(frm, cdt, cdn) {
+	item_code: function (frm, cdt, cdn) {
 		let row = locals[cdt][cdn];
 
 		if (row.item_code) {
@@ -508,94 +535,104 @@
 				method: "erpnext.stock.doctype.item.item.get_item_details",
 				args: {
 					item_code: row.item_code,
-					company: frm.doc.company
+					company: frm.doc.company,
 				},
-				callback: function(r) {
+				callback: function (r) {
 					if (r.message) {
 						frappe.model.set_value(cdt, cdn, {
-							"required_qty": row.required_qty || 1,
-							"item_name": r.message.item_name,
-							"description": r.message.description,
-							"source_warehouse": r.message.default_warehouse,
-							"allow_alternative_item": r.message.allow_alternative_item,
-							"include_item_in_manufacturing": r.message.include_item_in_manufacturing
+							required_qty: row.required_qty || 1,
+							item_name: r.message.item_name,
+							description: r.message.description,
+							source_warehouse: r.message.default_warehouse,
+							allow_alternative_item: r.message.allow_alternative_item,
+							include_item_in_manufacturing: r.message.include_item_in_manufacturing,
 						});
 					}
-				}
+				},
 			});
 		}
-	}
+	},
 });
 
 frappe.ui.form.on("Work Order Operation", {
-	workstation: function(frm, cdt, cdn) {
+	workstation: function (frm, cdt, cdn) {
 		var d = locals[cdt][cdn];
 		if (d.workstation) {
 			frappe.call({
-				"method": "frappe.client.get",
+				method: "frappe.client.get",
 				args: {
 					doctype: "Workstation",
-					name: d.workstation
+					name: d.workstation,
 				},
 				callback: function (data) {
 					frappe.model.set_value(d.doctype, d.name, "hour_rate", data.message.hour_rate);
 					erpnext.work_order.calculate_cost(frm.doc);
 					erpnext.work_order.calculate_total_cost(frm);
-				}
+				},
 			});
 		}
 	},
-	time_in_mins: function(frm, cdt, cdn) {
+	time_in_mins: function (frm, cdt, cdn) {
 		erpnext.work_order.calculate_cost(frm.doc);
 		erpnext.work_order.calculate_total_cost(frm);
 	},
 });
 
 erpnext.work_order = {
-	set_custom_buttons: function(frm) {
+	set_custom_buttons: function (frm) {
 		var doc = frm.doc;
 
 		if (doc.status !== "Closed") {
-			frm.add_custom_button(__('Close'), function() {
-				frappe.confirm(__("Once the Work Order is Closed. It can't be resumed."),
-					() => {
+			frm.add_custom_button(
+				__("Close"),
+				function () {
+					frappe.confirm(__("Once the Work Order is Closed. It can't be resumed."), () => {
 						erpnext.work_order.change_work_order_status(frm, "Closed");
-					}
-				);
-			}, __("Status"));
+					});
+				},
+				__("Status")
+			);
 		}
 
 		if (doc.docstatus === 1 && !in_list(["Closed", "Completed"], doc.status)) {
-			if (doc.status != 'Stopped' && doc.status != 'Completed') {
-				frm.add_custom_button(__('Stop'), function() {
-					erpnext.work_order.change_work_order_status(frm, "Stopped");
-				}, __("Status"));
-			} else if (doc.status == 'Stopped') {
-				frm.add_custom_button(__('Re-open'), function() {
-					erpnext.work_order.change_work_order_status(frm, "Resumed");
-				}, __("Status"));
+			if (doc.status != "Stopped" && doc.status != "Completed") {
+				frm.add_custom_button(
+					__("Stop"),
+					function () {
+						erpnext.work_order.change_work_order_status(frm, "Stopped");
+					},
+					__("Status")
+				);
+			} else if (doc.status == "Stopped") {
+				frm.add_custom_button(
+					__("Re-open"),
+					function () {
+						erpnext.work_order.change_work_order_status(frm, "Resumed");
+					},
+					__("Status")
+				);
 			}
 
-			const show_start_btn = (frm.doc.skip_transfer
-				|| frm.doc.transfer_material_against == 'Job Card') ? 0 : 1;
+			const show_start_btn =
+				frm.doc.skip_transfer || frm.doc.transfer_material_against == "Job Card" ? 0 : 1;
 
 			if (show_start_btn) {
 				let pending_to_transfer = frm.doc.required_items.some(
-					item => flt(item.transferred_qty) < flt(item.required_qty)
+					(item) => flt(item.transferred_qty) < flt(item.required_qty)
 				);
-				if (pending_to_transfer && frm.doc.status != 'Stopped') {
+				if (pending_to_transfer && frm.doc.status != "Stopped") {
 					frm.has_start_btn = true;
-					frm.add_custom_button(__('Create Pick List'), function() {
+					frm.add_custom_button(__("Create Pick List"), function () {
 						erpnext.work_order.create_pick_list(frm);
 					});
-					var start_btn = frm.add_custom_button(__('Start'), function() {
-						erpnext.work_order.make_se(frm, 'Material Transfer for Manufacture');
+					var start_btn = frm.add_custom_button(__("Start"), function () {
+						erpnext.work_order.make_se(frm, "Material Transfer for Manufacture");
 					});
-					start_btn.addClass('btn-primary');
+					start_btn.addClass("btn-primary");
 				}
 			}
 
-			if (frm.doc.status != 'Stopped') {
+			if (frm.doc.status != "Stopped") {
 				// If "Material Consumption is check in Manufacturing Settings, allow Material Consumption
 				if (frm.doc.__onload && frm.doc.__onload.material_consumption == 1) {
 					if (flt(doc.material_transferred_for_manufacturing) > 0 || frm.doc.skip_transfer) {
@@ -604,89 +641,102 @@
 						var tbl = frm.doc.required_items || [];
 						var tbl_lenght = tbl.length;
 						for (var i = 0, len = tbl_lenght; i < len; i++) {
-							let wo_item_qty = frm.doc.required_items[i].transferred_qty || frm.doc.required_items[i].required_qty;
+							let wo_item_qty =
+								frm.doc.required_items[i].transferred_qty ||
+								frm.doc.required_items[i].required_qty;
 							if (flt(wo_item_qty) > flt(frm.doc.required_items[i].consumed_qty)) {
 								counter += 1;
 							}
 						}
 						if (counter > 0) {
-							var consumption_btn = frm.add_custom_button(__('Material Consumption'), function() {
-								const backflush_raw_materials_based_on = frm.doc.__onload.backflush_raw_materials_based_on;
-								erpnext.work_order.make_consumption_se(frm, backflush_raw_materials_based_on);
-							});
-							consumption_btn.addClass('btn-primary');
+							var consumption_btn = frm.add_custom_button(
+								__("Material Consumption"),
+								function () {
+									const backflush_raw_materials_based_on =
+										frm.doc.__onload.backflush_raw_materials_based_on;
+									erpnext.work_order.make_consumption_se(
+										frm,
+										backflush_raw_materials_based_on
+									);
+								}
+							);
+							consumption_btn.addClass("btn-primary");
 						}
 					}
 				}
 
-				if(!frm.doc.skip_transfer){
+				if (!frm.doc.skip_transfer) {
 					if (flt(doc.material_transferred_for_manufacturing) > 0) {
-						if ((flt(doc.produced_qty) < flt(doc.material_transferred_for_manufacturing))) {
+						if (flt(doc.produced_qty) < flt(doc.material_transferred_for_manufacturing)) {
 							frm.has_finish_btn = true;
 
-							let finish_btn = frm.add_custom_button(__('Finish'), function() {
-								erpnext.work_order.make_se(frm, 'Manufacture');
+							let finish_btn = frm.add_custom_button(__("Finish"), function () {
+								erpnext.work_order.make_se(frm, "Manufacture");
 							});
 
-							if(doc.material_transferred_for_manufacturing>=doc.qty) {
+							if (doc.material_transferred_for_manufacturing >= doc.qty) {
 								// all materials transferred for manufacturing, make this primary
-								finish_btn.addClass('btn-primary');
+								finish_btn.addClass("btn-primary");
 							}
 						} else if (frm.doc.__onload && frm.doc.__onload.overproduction_percentage) {
 							let allowance_percentage = frm.doc.__onload.overproduction_percentage;
 
 							if (allowance_percentage > 0) {
-								let allowed_qty = frm.doc.qty + ((allowance_percentage / 100) * frm.doc.qty);
+								let allowed_qty = frm.doc.qty + (allowance_percentage / 100) * frm.doc.qty;
 
-								if ((flt(doc.produced_qty) < allowed_qty)) {
-									frm.add_custom_button(__('Finish'), function() {
-										erpnext.work_order.make_se(frm, 'Manufacture');
+								if (flt(doc.produced_qty) < allowed_qty) {
+									frm.add_custom_button(__("Finish"), function () {
+										erpnext.work_order.make_se(frm, "Manufacture");
 									});
 								}
 							}
 						}
 					}
 				} else {
-					if ((flt(doc.produced_qty) < flt(doc.qty))) {
-						let finish_btn = frm.add_custom_button(__('Finish'), function() {
-							erpnext.work_order.make_se(frm, 'Manufacture');
+					if (flt(doc.produced_qty) < flt(doc.qty)) {
+						let finish_btn = frm.add_custom_button(__("Finish"), function () {
+							erpnext.work_order.make_se(frm, "Manufacture");
 						});
-						finish_btn.addClass('btn-primary');
+						finish_btn.addClass("btn-primary");
 					}
 				}
 			}
 		}
 	},
-	calculate_cost: function(doc) {
-		if (doc.operations){
+	calculate_cost: function (doc) {
+		if (doc.operations) {
 			var op = doc.operations;
 			doc.planned_operating_cost = 0.0;
-			for(var i=0;i<op.length;i++) {
-				var planned_operating_cost = flt(flt(op[i].hour_rate) * flt(op[i].time_in_mins) / 60, 2);
-				frappe.model.set_value('Work Order Operation', op[i].name,
-					"planned_operating_cost", planned_operating_cost);
+			for (var i = 0; i < op.length; i++) {
+				var planned_operating_cost = flt((flt(op[i].hour_rate) * flt(op[i].time_in_mins)) / 60, 2);
+				frappe.model.set_value(
+					"Work Order Operation",
+					op[i].name,
+					"planned_operating_cost",
+					planned_operating_cost
+				);
 				doc.planned_operating_cost += planned_operating_cost;
 			}
-			refresh_field('planned_operating_cost');
+			refresh_field("planned_operating_cost");
 		}
 	},
 
-	calculate_total_cost: function(frm) {
+	calculate_total_cost: function (frm) {
 		let variable_cost = flt(frm.doc.actual_operating_cost) || flt(frm.doc.planned_operating_cost);
-		frm.set_value("total_operating_cost", (flt(frm.doc.additional_operating_cost) + variable_cost));
+		frm.set_value("total_operating_cost", flt(frm.doc.additional_operating_cost) + variable_cost);
 	},
 
-	set_default_warehouse: function(frm) {
+	set_default_warehouse: function (frm) {
 		if (!(frm.doc.wip_warehouse || frm.doc.fg_warehouse)) {
 			frappe.call({
 				method: "erpnext.manufacturing.doctype.work_order.work_order.get_default_warehouse",
-				callback: function(r) {
+				callback: function (r) {
 					if (!r.exe) {
 						frm.set_value("wip_warehouse", r.message.wip_warehouse);
 						frm.set_value("fg_warehouse", r.message.fg_warehouse);
 						frm.set_value("scrap_warehouse", r.message.scrap_warehouse);
 					}
-				}
+				},
 			});
 		}
 	},
@@ -696,166 +746,187 @@
 		if (frm.doc.skip_transfer) {
 			max = flt(frm.doc.qty) - flt(frm.doc.produced_qty);
 		} else {
-			if (purpose === 'Manufacture') {
+			if (purpose === "Manufacture") {
 				max = flt(frm.doc.material_transferred_for_manufacturing) - flt(frm.doc.produced_qty);
 			} else {
 				max = flt(frm.doc.qty) - flt(frm.doc.material_transferred_for_manufacturing);
 			}
 		}
-		return flt(max, precision('qty'));
+		return flt(max, precision("qty"));
 	},
 
-	show_prompt_for_qty_input: function(frm, purpose) {
+	show_prompt_for_qty_input: function (frm, purpose) {
 		let max = this.get_max_transferable_qty(frm, purpose);
 		return new Promise((resolve, reject) => {
-			frappe.prompt({
-				fieldtype: 'Float',
-				label: __('Qty for {0}', [__(purpose)]),
-				fieldname: 'qty',
-				description: __('Max: {0}', [max]),
-				default: max
-			}, data => {
-				max += (frm.doc.qty * (frm.doc.__onload.overproduction_percentage || 0.0)) / 100;
+			frappe.prompt(
+				{
+					fieldtype: "Float",
+					label: __("Qty for {0}", [__(purpose)]),
+					fieldname: "qty",
+					description: __("Max: {0}", [max]),
+					default: max,
+				},
+				(data) => {
+					max += (frm.doc.qty * (frm.doc.__onload.overproduction_percentage || 0.0)) / 100;
 
-				if (data.qty > max) {
-					frappe.msgprint(__('Quantity must not be more than {0}', [max]));
-					reject();
-				}
-				data.purpose = purpose;
-				resolve(data);
-			}, __('Select Quantity'), __('Create'));
+					if (data.qty > max) {
+						frappe.msgprint(__("Quantity must not be more than {0}", [max]));
+						reject();
+					}
+					data.purpose = purpose;
+					resolve(data);
+				},
+				__("Select Quantity"),
+				__("Create")
+			);
 		});
 	},
 
-	make_se: function(frm, purpose) {
+	make_se: function (frm, purpose) {
 		this.show_prompt_for_qty_input(frm, purpose)
-			.then(data => {
-				return frappe.xcall('erpnext.manufacturing.doctype.work_order.work_order.make_stock_entry', {
-					'work_order_id': frm.doc.name,
-					'purpose': purpose,
-					'qty': data.qty
+			.then((data) => {
+				return frappe.xcall("erpnext.manufacturing.doctype.work_order.work_order.make_stock_entry", {
+					work_order_id: frm.doc.name,
+					purpose: purpose,
+					qty: data.qty,
 				});
-			}).then(stock_entry => {
+			})
+			.then((stock_entry) => {
 				frappe.model.sync(stock_entry);
-				frappe.set_route('Form', stock_entry.doctype, stock_entry.name);
+				frappe.set_route("Form", stock_entry.doctype, stock_entry.name);
 			});
-
 	},
 
-	create_pick_list: function(frm, purpose='Material Transfer for Manufacture') {
+	create_pick_list: function (frm, purpose = "Material Transfer for Manufacture") {
 		this.show_prompt_for_qty_input(frm, purpose)
-			.then(data => {
-				return frappe.xcall('erpnext.manufacturing.doctype.work_order.work_order.create_pick_list', {
-					'source_name': frm.doc.name,
-					'for_qty': data.qty
+			.then((data) => {
+				return frappe.xcall("erpnext.manufacturing.doctype.work_order.work_order.create_pick_list", {
+					source_name: frm.doc.name,
+					for_qty: data.qty,
 				});
-			}).then(pick_list => {
+			})
+			.then((pick_list) => {
 				frappe.model.sync(pick_list);
-				frappe.set_route('Form', pick_list.doctype, pick_list.name);
+				frappe.set_route("Form", pick_list.doctype, pick_list.name);
 			});
 	},
 
-	make_consumption_se: function(frm, backflush_raw_materials_based_on) {
+	make_consumption_se: function (frm, backflush_raw_materials_based_on) {
 		let max = 0;
-		if(!frm.doc.skip_transfer){
-			max = (backflush_raw_materials_based_on === "Material Transferred for Manufacture") ?
-				flt(frm.doc.material_transferred_for_manufacturing) - flt(frm.doc.produced_qty) :
-				flt(frm.doc.qty) - flt(frm.doc.produced_qty);
-				// flt(frm.doc.qty) - flt(frm.doc.material_transferred_for_manufacturing);
+		if (!frm.doc.skip_transfer) {
+			max =
+				backflush_raw_materials_based_on === "Material Transferred for Manufacture"
+					? flt(frm.doc.material_transferred_for_manufacturing) - flt(frm.doc.produced_qty)
+					: flt(frm.doc.qty) - flt(frm.doc.produced_qty);
+			// flt(frm.doc.qty) - flt(frm.doc.material_transferred_for_manufacturing);
 		} else {
 			max = flt(frm.doc.qty) - flt(frm.doc.produced_qty);
 		}
 
 		frappe.call({
-			method:"erpnext.manufacturing.doctype.work_order.work_order.make_stock_entry",
+			method: "erpnext.manufacturing.doctype.work_order.work_order.make_stock_entry",
 			args: {
-				"work_order_id": frm.doc.name,
-				"purpose": "Material Consumption for Manufacture",
-				"qty": max
+				work_order_id: frm.doc.name,
+				purpose: "Material Consumption for Manufacture",
+				qty: max,
 			},
-			callback: function(r) {
+			callback: function (r) {
 				var doclist = frappe.model.sync(r.message);
 				frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
-			}
+			},
 		});
 	},
 
-	change_work_order_status: function(frm, status) {
-		let method_name = status=="Closed" ? "close_work_order" : "stop_unstop";
+	change_work_order_status: function (frm, status) {
+		let method_name = status == "Closed" ? "close_work_order" : "stop_unstop";
 		frappe.call({
 			method: `erpnext.manufacturing.doctype.work_order.work_order.${method_name}`,
 			freeze: true,
 			freeze_message: __("Updating Work Order status"),
 			args: {
 				work_order: frm.doc.name,
-				status: status
+				status: status,
 			},
-			callback: function(r) {
-				if(r.message) {
+			callback: function (r) {
+				if (r.message) {
 					frm.set_value("status", r.message);
 					frm.reload_doc();
 				}
-			}
+			},
 		});
-	}
+	},
 };
 
-frappe.tour['Work Order'] = [
+frappe.tour["Work Order"] = [
 	{
 		fieldname: "production_item",
 		title: "Item to Manufacture",
-		description: __("Select the Item to be manufactured.")
+		description: __("Select the Item to be manufactured."),
 	},
 	{
 		fieldname: "bom_no",
 		title: "BOM No",
-		description: __("The default BOM for that item will be fetched by the system. You can also change the BOM.")
+		description: __(
+			"The default BOM for that item will be fetched by the system. You can also change the BOM."
+		),
 	},
 	{
 		fieldname: "qty",
 		title: "Qty to Manufacture",
-		description: __("Enter the quantity to manufacture. Raw material Items will be fetched only when this is set.")
+		description: __(
+			"Enter the quantity to manufacture. Raw material Items will be fetched only when this is set."
+		),
 	},
 	{
 		fieldname: "use_multi_level_bom",
 		title: "Use Multi-Level BOM",
-		description: __("This is enabled by default. If you want to plan materials for sub-assemblies of the Item you're manufacturing leave this enabled. If you plan and manufacture the sub-assemblies separately, you can disable this checkbox.")
+		description: __(
+			"This is enabled by default. If you want to plan materials for sub-assemblies of the Item you're manufacturing leave this enabled. If you plan and manufacture the sub-assemblies separately, you can disable this checkbox."
+		),
 	},
 	{
 		fieldname: "source_warehouse",
 		title: "Source Warehouse",
-		description: __("The warehouse where you store your raw materials. Each required item can have a separate source warehouse. Group warehouse also can be selected as source warehouse. On submission of the Work Order, the raw materials will be reserved in these warehouses for production usage.")
+		description: __(
+			"The warehouse where you store your raw materials. Each required item can have a separate source warehouse. Group warehouse also can be selected as source warehouse. On submission of the Work Order, the raw materials will be reserved in these warehouses for production usage."
+		),
 	},
 	{
 		fieldname: "fg_warehouse",
 		title: "Target Warehouse",
-		description: __("The warehouse where you store finished Items before they are shipped.")
+		description: __("The warehouse where you store finished Items before they are shipped."),
 	},
 	{
 		fieldname: "wip_warehouse",
 		title: "Work-in-Progress Warehouse",
-		description: __("The warehouse where your Items will be transferred when you begin production. Group Warehouse can also be selected as a Work in Progress warehouse.")
+		description: __(
+			"The warehouse where your Items will be transferred when you begin production. Group Warehouse can also be selected as a Work in Progress warehouse."
+		),
 	},
 	{
 		fieldname: "scrap_warehouse",
 		title: "Scrap Warehouse",
-		description: __("If the BOM results in Scrap material, the Scrap Warehouse needs to be selected.")
+		description: __("If the BOM results in Scrap material, the Scrap Warehouse needs to be selected."),
 	},
 	{
 		fieldname: "required_items",
 		title: "Required Items",
-		description: __("All the required items (raw materials) will be fetched from BOM and populated in this table. Here you can also change the Source Warehouse for any item. And during the production, you can track transferred raw materials from this table.")
+		description: __(
+			"All the required items (raw materials) will be fetched from BOM and populated in this table. Here you can also change the Source Warehouse for any item. And during the production, you can track transferred raw materials from this table."
+		),
 	},
 	{
 		fieldname: "planned_start_date",
 		title: "Planned Start Date",
-		description: __("Set the Planned Start Date (an Estimated Date at which you want the Production to begin)")
+		description: __(
+			"Set the Planned Start Date (an Estimated Date at which you want the Production to begin)"
+		),
 	},
 	{
 		fieldname: "operations",
 		title: "Operations",
-		description: __("If the selected BOM has Operations mentioned in it, the system will fetch all Operations from BOM, these values can be changed.")
+		description: __(
+			"If the selected BOM has Operations mentioned in it, the system will fetch all Operations from BOM, these values can be changed."
+		),
 	},
-
-
 ];
diff --git a/erpnext/manufacturing/doctype/work_order/work_order_calendar.js b/erpnext/manufacturing/doctype/work_order/work_order_calendar.js
index 7ce05e9..90ce74c 100644
--- a/erpnext/manufacturing/doctype/work_order/work_order_calendar.js
+++ b/erpnext/manufacturing/doctype/work_order/work_order_calendar.js
@@ -2,23 +2,23 @@
 // For license information, please see license.txt
 
 frappe.views.calendar["Work Order"] = {
-	fields:  ["planned_start_date", "planned_end_date", "status", "produced_qty", "qty", "name", "name"],
+	fields: ["planned_start_date", "planned_end_date", "status", "produced_qty", "qty", "name", "name"],
 	field_map: {
-		"start": "planned_start_date",
-		"end": "planned_end_date",
-		"id": "name",
-		"title": "name",
-		"status": "status",
-		"allDay": "allDay",
-		"progress": function(data) {
-			return flt(data.produced_qty) / data.qty * 100;
-		}
+		start: "planned_start_date",
+		end: "planned_end_date",
+		id: "name",
+		title: "name",
+		status: "status",
+		allDay: "allDay",
+		progress: function (data) {
+			return (flt(data.produced_qty) / data.qty) * 100;
+		},
 	},
 	gantt: true,
-	get_css_class: function(data) {
-		if(data.status==="Completed") {
+	get_css_class: function (data) {
+		if (data.status === "Completed") {
 			return "success";
-		} else if(data.status==="In Process") {
+		} else if (data.status === "In Process") {
 			return "warning";
 		} else {
 			return "danger";
@@ -26,23 +26,23 @@
 	},
 	filters: [
 		{
-			"fieldtype": "Link",
-			"fieldname": "sales_order",
-			"options": "Sales Order",
-			"label": __("Sales Order")
+			fieldtype: "Link",
+			fieldname: "sales_order",
+			options: "Sales Order",
+			label: __("Sales Order"),
 		},
 		{
-			"fieldtype": "Link",
-			"fieldname": "production_item",
-			"options": "Item",
-			"label": __("Production Item")
+			fieldtype: "Link",
+			fieldname: "production_item",
+			options: "Item",
+			label: __("Production Item"),
 		},
 		{
-			"fieldtype": "Link",
-			"fieldname": "wip_warehouse",
-			"options": "Warehouse",
-			"label": __("WIP Warehouse")
-		}
+			fieldtype: "Link",
+			fieldname: "wip_warehouse",
+			options: "Warehouse",
+			label: __("WIP Warehouse"),
+		},
 	],
-	get_events_method: "frappe.desk.calendar.get_events"
-}
+	get_events_method: "frappe.desk.calendar.get_events",
+};
diff --git a/erpnext/manufacturing/doctype/work_order/work_order_list.js b/erpnext/manufacturing/doctype/work_order/work_order_list.js
index 81c23bb..1e1e566 100644
--- a/erpnext/manufacturing/doctype/work_order/work_order_list.js
+++ b/erpnext/manufacturing/doctype/work_order/work_order_list.js
@@ -1,19 +1,31 @@
-frappe.listview_settings['Work Order'] = {
-	add_fields: ["bom_no", "status", "sales_order", "qty",
-		"produced_qty", "expected_delivery_date", "planned_start_date", "planned_end_date"],
+frappe.listview_settings["Work Order"] = {
+	add_fields: [
+		"bom_no",
+		"status",
+		"sales_order",
+		"qty",
+		"produced_qty",
+		"expected_delivery_date",
+		"planned_start_date",
+		"planned_end_date",
+	],
 	filters: [["status", "!=", "Stopped"]],
-	get_indicator: function(doc) {
-		if(doc.status==="Submitted") {
+	get_indicator: function (doc) {
+		if (doc.status === "Submitted") {
 			return [__("Not Started"), "orange", "status,=,Submitted"];
 		} else {
-			return [__(doc.status), {
-				"Draft": "red",
-				"Stopped": "red",
-				"Not Started": "red",
-				"In Process": "orange",
-				"Completed": "green",
-				"Cancelled": "gray"
-			}[doc.status], "status,=," + doc.status];
+			return [
+				__(doc.status),
+				{
+					Draft: "red",
+					Stopped: "red",
+					"Not Started": "red",
+					"In Process": "orange",
+					Completed: "green",
+					Cancelled: "gray",
+				}[doc.status],
+				"status,=," + doc.status,
+			];
 		}
-	}
+	},
 };
diff --git a/erpnext/manufacturing/doctype/workstation/_test_workstation.js b/erpnext/manufacturing/doctype/workstation/_test_workstation.js
index f2dced8..8d0a75c 100644
--- a/erpnext/manufacturing/doctype/workstation/_test_workstation.js
+++ b/erpnext/manufacturing/doctype/workstation/_test_workstation.js
@@ -1,4 +1,3 @@
-
 // rename this file from _test_[name] to test_[name] to activate
 // and remove above this line
 
@@ -8,16 +7,16 @@
 	// number of asserts
 	assert.expect(1);
 
-	frappe.run_serially('Workstation', [
+	frappe.run_serially("Workstation", [
 		// insert a new Workstation
-		() => frappe.tests.make([
-			// values to be set
-			{key: 'value'}
-		]),
+		() =>
+			frappe.tests.make([
+				// values to be set
+				{ key: "value" },
+			]),
 		() => {
-			assert.equal(cur_frm.doc.key, 'value');
+			assert.equal(cur_frm.doc.key, "value");
 		},
-		() => done()
+		() => done(),
 	]);
-
 });
diff --git a/erpnext/manufacturing/doctype/workstation/workstation.js b/erpnext/manufacturing/doctype/workstation/workstation.js
index e3ad3fe..255383b 100644
--- a/erpnext/manufacturing/doctype/workstation/workstation.js
+++ b/erpnext/manufacturing/doctype/workstation/workstation.js
@@ -3,7 +3,8 @@
 
 frappe.ui.form.on("Workstation", {
 	set_illustration_image(frm) {
-		let status_image_field = frm.doc.status == "Production" ? frm.doc.on_status_image : frm.doc.off_status_image;
+		let status_image_field =
+			frm.doc.status == "Production" ? frm.doc.on_status_image : frm.doc.off_status_image;
 		if (status_image_field) {
 			frm.sidebar.image_wrapper.find(".sidebar-image").attr("src", status_image_field);
 		}
@@ -20,22 +21,21 @@
 
 		let workstation_dashboard = new WorkstationDashboard({
 			wrapper: $parent,
-			frm: frm
+			frm: frm,
 		});
 	},
 
 	onload(frm) {
-		if(frm.is_new())
-		{
+		if (frm.is_new()) {
 			frappe.call({
-				type:"GET",
-				method:"erpnext.manufacturing.doctype.workstation.workstation.get_default_holiday_list",
-				callback: function(r) {
-					if(!r.exe && r.message){
+				type: "GET",
+				method: "erpnext.manufacturing.doctype.workstation.workstation.get_default_holiday_list",
+				callback: function (r) {
+					if (!r.exe && r.message) {
 						cur_frm.set_value("holiday_list", r.message);
 					}
-				}
-			})
+				},
+			});
 		}
 	},
 
@@ -44,40 +44,43 @@
 			frm.call({
 				method: "set_data_based_on_workstation_type",
 				doc: frm.doc,
-				callback: function(r) {
+				callback: function (r) {
 					frm.refresh_fields();
-				}
-			})
+				},
+			});
 		}
-	}
+	},
 });
 
-frappe.tour['Workstation'] = [
+frappe.tour["Workstation"] = [
 	{
 		fieldname: "workstation_name",
 		title: "Workstation Name",
-		description: __("You can set it as a machine name or operation type. For example, stiching machine 12")
+		description: __(
+			"You can set it as a machine name or operation type. For example, stiching machine 12"
+		),
 	},
 	{
 		fieldname: "production_capacity",
 		title: "Production Capacity",
-		description: __("No. of parallel job cards which can be allowed on this workstation. Example: 2 would mean this workstation can process production for two Work Orders at a time.")
+		description: __(
+			"No. of parallel job cards which can be allowed on this workstation. Example: 2 would mean this workstation can process production for two Work Orders at a time."
+		),
 	},
 	{
 		fieldname: "holiday_list",
 		title: "Holiday List",
-		description: __("A Holiday List can be added to exclude counting these days for the Workstation.")
+		description: __("A Holiday List can be added to exclude counting these days for the Workstation."),
 	},
 	{
 		fieldname: "working_hours",
 		title: "Working Hours",
-		description: __("Under Working Hours table, you can add start and end times for a Workstation. For example, a Workstation may be active from 9 am to 1 pm, then 2 pm to 5 pm. You can also specify the working hours based on shifts. While scheduling a Work Order, the system will check for the availability of the Workstation based on the working hours specified.")
+		description: __(
+			"Under Working Hours table, you can add start and end times for a Workstation. For example, a Workstation may be active from 9 am to 1 pm, then 2 pm to 5 pm. You can also specify the working hours based on shifts. While scheduling a Work Order, the system will check for the availability of the Workstation based on the working hours specified."
+		),
 	},
-
-
 ];
 
-
 class WorkstationDashboard {
 	constructor({ wrapper, frm }) {
 		this.$wrapper = $(wrapper);
@@ -90,20 +93,20 @@
 		frappe.call({
 			method: "erpnext.manufacturing.doctype.workstation.workstation.get_job_cards",
 			args: {
-				workstation: this.frm.doc.name
+				workstation: this.frm.doc.name,
 			},
 			callback: (r) => {
 				if (r.message) {
 					this.job_cards = r.message;
 					this.render_job_cards();
 				}
-			}
+			},
 		});
 	}
 
 	render_job_cards() {
-		let template  = frappe.render_template("workstation_job_card", {
-			data: this.job_cards
+		let template = frappe.render_template("workstation_job_card", {
+			data: this.job_cards,
 		});
 
 		this.$wrapper.html(template);
@@ -114,11 +117,18 @@
 
 	toggle_job_card() {
 		this.$wrapper.find(".collapse-indicator-job").on("click", (e) => {
-			$(e.currentTarget).closest(".form-dashboard-section").find(".section-body-job-card").toggleClass("hide")
-			if ($(e.currentTarget).closest(".form-dashboard-section").find(".section-body-job-card").hasClass("hide"))
-				$(e.currentTarget).html(frappe.utils.icon("es-line-down", "sm", "mb-1"))
-			else
-				$(e.currentTarget).html(frappe.utils.icon("es-line-up", "sm", "mb-1"))
+			$(e.currentTarget)
+				.closest(".form-dashboard-section")
+				.find(".section-body-job-card")
+				.toggleClass("hide");
+			if (
+				$(e.currentTarget)
+					.closest(".form-dashboard-section")
+					.find(".section-body-job-card")
+					.hasClass("hide")
+			)
+				$(e.currentTarget).html(frappe.utils.icon("es-line-down", "sm", "mb-1"));
+			else $(e.currentTarget).html(frappe.utils.icon("es-line-up", "sm", "mb-1"));
 		});
 	}
 
@@ -142,80 +152,90 @@
 
 	start_job(job_card) {
 		let me = this;
-		frappe.prompt([
-			{
-				fieldtype: 'Datetime',
-				label: __('Start Time'),
-				fieldname: 'start_time',
-				reqd: 1,
-				default: frappe.datetime.now_datetime()
-			},
-			{
-				label: __('Operator'),
-				fieldname: 'employee',
-				fieldtype: 'Link',
-				options: 'Employee',
-			}
-		], data => {
-			this.frm.call({
-				method: "start_job",
-				doc: this.frm.doc,
-				args: {
-					job_card: job_card,
-					from_time: data.start_time,
-					employee: data.employee,
+		frappe.prompt(
+			[
+				{
+					fieldtype: "Datetime",
+					label: __("Start Time"),
+					fieldname: "start_time",
+					reqd: 1,
+					default: frappe.datetime.now_datetime(),
 				},
-				callback(r) {
-					if (r.message) {
-						me.job_cards = [r.message];
-						me.prepare_timer()
-						me.update_job_card_details();
-					}
-				}
-			});
-		}, __("Enter Value"), __("Start Job"));
+				{
+					label: __("Operator"),
+					fieldname: "employee",
+					fieldtype: "Link",
+					options: "Employee",
+				},
+			],
+			(data) => {
+				this.frm.call({
+					method: "start_job",
+					doc: this.frm.doc,
+					args: {
+						job_card: job_card,
+						from_time: data.start_time,
+						employee: data.employee,
+					},
+					callback(r) {
+						if (r.message) {
+							me.job_cards = [r.message];
+							me.prepare_timer();
+							me.update_job_card_details();
+						}
+					},
+				});
+			},
+			__("Enter Value"),
+			__("Start Job")
+		);
 	}
 
 	complete_job(job_card, qty_to_manufacture) {
 		let me = this;
 		let fields = [
 			{
-				fieldtype: 'Float',
-				label: __('Completed Quantity'),
-				fieldname: 'qty',
+				fieldtype: "Float",
+				label: __("Completed Quantity"),
+				fieldname: "qty",
 				reqd: 1,
-				default: flt(qty_to_manufacture || 0)
+				default: flt(qty_to_manufacture || 0),
 			},
 			{
-				fieldtype: 'Datetime',
-				label: __('End Time'),
-				fieldname: 'end_time',
-				default: frappe.datetime.now_datetime()
+				fieldtype: "Datetime",
+				label: __("End Time"),
+				fieldname: "end_time",
+				default: frappe.datetime.now_datetime(),
 			},
 		];
 
-		frappe.prompt(fields, data => {
-			if (data.qty <= 0) {
-				frappe.throw(__("Quantity should be greater than 0"));
-			}
-
-			this.frm.call({
-				method: "complete_job",
-				doc: this.frm.doc,
-				args: {
-					job_card: job_card,
-					qty: data.qty,
-					to_time: data.end_time,
-				},
-				callback: function(r) {
-					if (r.message) {
-						me.job_cards = [r.message];
-						me.prepare_timer()
-						me.update_job_card_details();
-					}
+		frappe.prompt(
+			fields,
+			(data) => {
+				if (data.qty <= 0) {
+					frappe.throw(__("Quantity should be greater than 0"));
 				}
-			});
-		}, __("Enter Value"), __("Submit"));
+
+				this.frm.call({
+					method: "complete_job",
+					doc: this.frm.doc,
+					args: {
+						job_card: job_card,
+						qty: data.qty,
+						to_time: data.end_time,
+					},
+					callback: function (r) {
+						if (r.message) {
+							me.job_cards = [r.message];
+							me.prepare_timer();
+							me.update_job_card_details();
+						}
+					},
+				});
+			},
+			__("Enter Value"),
+			__("Submit")
+		);
 	}
 
 	make_material_request(job_card) {
@@ -229,7 +249,7 @@
 					var doc = frappe.model.sync(r.message)[0];
 					frappe.set_route("Form", doc.doctype, doc.name);
 				}
-			}
+			},
 		});
 	}
 
@@ -248,18 +268,17 @@
 
 	update_job_card_details() {
 		let color_map = {
-			"Pending": "var(--bg-blue)",
+			Pending: "var(--bg-blue)",
 			"In Process": "var(--bg-yellow)",
-			"Submitted": "var(--bg-blue)",
-			"Open": "var(--bg-gray)",
-			"Closed": "var(--bg-green)",
+			Submitted: "var(--bg-blue)",
+			Open: "var(--bg-gray)",
+			Closed: "var(--bg-green)",
 			"Work In Progress": "var(--bg-orange)",
-		}
+		};
 
 		this.job_cards.forEach((data) => {
-			let job_card_selector =  this.$wrapper.find(`
-				[data-name='${data.name}']`
-			);
+			let job_card_selector = this.$wrapper.find(`
+				[data-name='${data.name}']`);
 
 			$(job_card_selector).find(".job-card-status").text(data.status);
 			$(job_card_selector).find(".job-card-status").css("backgroundColor", color_map[data.status]);
@@ -284,20 +303,26 @@
 	updateStopwatch(data) {
 		let increment = data._current_time;
 		let hours = Math.floor(increment / 3600);
-		let minutes = Math.floor((increment - (hours * 3600)) / 60);
-		let seconds = cint(increment - (hours * 3600) - (minutes * 60));
+		let minutes = Math.floor((increment - hours * 3600) / 60);
+		let seconds = cint(increment - hours * 3600 - minutes * 60);
 
-		let job_card_selector = `[data-job-card='${data.name}']`
-		let timer_selector =  this.$wrapper.find(job_card_selector)
+		let job_card_selector = `[data-job-card='${data.name}']`;
+		let timer_selector = this.$wrapper.find(job_card_selector);
 
-		$(timer_selector).find(".hours").text(hours < 10 ? ("0" + hours.toString()) : hours.toString());
-		$(timer_selector).find(".minutes").text(minutes < 10 ? ("0" + minutes.toString()) : minutes.toString());
-		$(timer_selector).find(".seconds").text(seconds < 10 ? ("0" + seconds.toString()) : seconds.toString());
+		$(timer_selector)
+			.find(".hours")
+			.text(hours < 10 ? "0" + hours.toString() : hours.toString());
+		$(timer_selector)
+			.find(".minutes")
+			.text(minutes < 10 ? "0" + minutes.toString() : minutes.toString());
+		$(timer_selector)
+			.find(".seconds")
+			.text(seconds < 10 ? "0" + seconds.toString() : seconds.toString());
 	}
 
 	get_current_time(data) {
 		let current_time = 0.0;
-		data.time_logs.forEach(d => {
+		data.time_logs.forEach((d) => {
 			if (d.to_time) {
 				if (d.time_in_mins) {
 					current_time += flt(d.time_in_mins, 2) * 60;
@@ -315,4 +340,4 @@
 	get_seconds_diff(d1, d2) {
 		return moment(d1).diff(d2, "seconds");
 	}
-}
\ No newline at end of file
+}
diff --git a/erpnext/manufacturing/doctype/workstation/workstation_list.js b/erpnext/manufacturing/doctype/workstation/workstation_list.js
index 86928ca..3372263 100644
--- a/erpnext/manufacturing/doctype/workstation/workstation_list.js
+++ b/erpnext/manufacturing/doctype/workstation/workstation_list.js
@@ -1,16 +1,15 @@
-
-frappe.listview_settings['Workstation'] = {
+frappe.listview_settings["Workstation"] = {
 	add_fields: ["status"],
-	get_indicator: function(doc) {
+	get_indicator: function (doc) {
 		let color_map = {
-			"Production": "green",
-			"Off": "gray",
-			"Idle": "gray",
-			"Problem": "red",
-			"Maintenance": "yellow",
-			"Setup": "blue",
-		}
+			Production: "green",
+			Off: "gray",
+			Idle: "gray",
+			Problem: "red",
+			Maintenance: "yellow",
+			Setup: "blue",
+		};
 
 		return [__(doc.status), color_map[doc.status], true];
-	}
+	},
 };
diff --git a/erpnext/manufacturing/doctype/workstation_type/workstation_type.js b/erpnext/manufacturing/doctype/workstation_type/workstation_type.js
index 419fa6c..f0b3ed3 100644
--- a/erpnext/manufacturing/doctype/workstation_type/workstation_type.js
+++ b/erpnext/manufacturing/doctype/workstation_type/workstation_type.js
@@ -1,8 +1,7 @@
 // Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Workstation Type', {
+frappe.ui.form.on("Workstation Type", {
 	// refresh: function(frm) {
-
 	// }
 });
diff --git a/erpnext/manufacturing/page/bom_comparison_tool/bom_comparison_tool.js b/erpnext/manufacturing/page/bom_comparison_tool/bom_comparison_tool.js
index 1bcb1ef..fcb7e88 100644
--- a/erpnext/manufacturing/page/bom_comparison_tool/bom_comparison_tool.js
+++ b/erpnext/manufacturing/page/bom_comparison_tool/bom_comparison_tool.js
@@ -1,12 +1,12 @@
-frappe.pages['bom-comparison-tool'].on_page_load = function(wrapper) {
+frappe.pages["bom-comparison-tool"].on_page_load = function (wrapper) {
 	var page = frappe.ui.make_app_page({
 		parent: wrapper,
-		title: __('BOM Comparison Tool'),
-		single_column: true
+		title: __("BOM Comparison Tool"),
+		single_column: true,
 	});
 
 	new erpnext.BOMComparisonTool(page);
-}
+};
 
 erpnext.BOMComparisonTool = class BOMComparisonTool {
 	constructor(page) {
@@ -18,45 +18,45 @@
 		this.form = new frappe.ui.FieldGroup({
 			fields: [
 				{
-					label: __('BOM 1'),
-					fieldname: 'name1',
-					fieldtype: 'Link',
-					options: 'BOM',
+					label: __("BOM 1"),
+					fieldname: "name1",
+					fieldtype: "Link",
+					options: "BOM",
 					change: () => this.fetch_and_render(),
 					get_query: () => {
 						return {
 							filters: {
-								"name": ["not in", [this.form.get_value("name2") || ""]]
-							}
-						}
-					}
+								name: ["not in", [this.form.get_value("name2") || ""]],
+							},
+						};
+					},
 				},
 				{
-					fieldtype: 'Column Break'
+					fieldtype: "Column Break",
 				},
 				{
-					label: __('BOM 2'),
-					fieldname: 'name2',
-					fieldtype: 'Link',
-					options: 'BOM',
+					label: __("BOM 2"),
+					fieldname: "name2",
+					fieldtype: "Link",
+					options: "BOM",
 					change: () => this.fetch_and_render(),
 					get_query: () => {
 						return {
 							filters: {
-								"name": ["not in", [this.form.get_value("name1") || ""]]
-							}
-						}
-					}
+								name: ["not in", [this.form.get_value("name1") || ""]],
+							},
+						};
+					},
 				},
 				{
-					fieldtype: 'Section Break'
+					fieldtype: "Section Break",
 				},
 				{
-					fieldtype: 'HTML',
-					fieldname: 'preview'
-				}
+					fieldtype: "HTML",
+					fieldname: "preview",
+				},
 			],
-			body: this.page.body
+			body: this.page.body,
 		});
 		this.form.make();
 	}
@@ -64,33 +64,34 @@
 	fetch_and_render() {
 		let { name1, name2 } = this.form.get_values();
 		if (!(name1 && name2)) {
-			this.form.get_field('preview').html('');
+			this.form.get_field("preview").html("");
 			return;
 		}
 
 		// set working state
-		this.form.get_field('preview').html(`
+		this.form.get_field("preview").html(`
 			<div class="text-muted margin-top">
 				${__("Fetching...")}
 			</div>
 		`);
 
-		frappe.call('erpnext.manufacturing.doctype.bom.bom.get_bom_diff', {
-			bom1: name1,
-			bom2: name2
-		}).then(r => {
-			let diff = r.message;
-			frappe.model.with_doctype('BOM', () => {
-				this.render('BOM', name1, name2, diff);
+		frappe
+			.call("erpnext.manufacturing.doctype.bom.bom.get_bom_diff", {
+				bom1: name1,
+				bom2: name2,
+			})
+			.then((r) => {
+				let diff = r.message;
+				frappe.model.with_doctype("BOM", () => {
+					this.render("BOM", name1, name2, diff);
+				});
 			});
-		});
 	}
 
 	render(doctype, name1, name2, diff) {
-
 		let change_html = (title, doctype, changed) => {
 			let values_changed = this.get_changed_values(doctype, changed)
-				.map(change => {
+				.map((change) => {
 					let [fieldname, value1, value2] = change;
 					return `
 						<tr>
@@ -100,14 +101,14 @@
 						</tr>
 					`;
 				})
-				.join('');
+				.join("");
 
 			return `
 				<h4 class="margin-top">${title}</h4>
 				<div>
 					<table class="table table-bordered">
 						<tr>
-							<th width="33%">${__('Field')}</th>
+							<th width="33%">${__("Field")}</th>
 							<th width="33%">${name1}</th>
 							<th width="33%">${name2}</th>
 						</tr>
@@ -115,28 +116,30 @@
 					</table>
 				</div>
 			`;
-		}
+		};
 
-		let value_changes = change_html(__('Values Changed'), doctype, diff.changed);
+		let value_changes = change_html(__("Values Changed"), doctype, diff.changed);
 
-		let row_changes_by_fieldname = group_items(diff.row_changed, change => change[0]);
+		let row_changes_by_fieldname = group_items(diff.row_changed, (change) => change[0]);
 
-		let table_changes = Object.keys(row_changes_by_fieldname).map(fieldname => {
-			let changes = row_changes_by_fieldname[fieldname];
-			let df = frappe.meta.get_docfield(doctype, fieldname);
-
-			let html = changes.map(change => {
-				let [fieldname,, item_code, changes] = change;
+		let table_changes = Object.keys(row_changes_by_fieldname)
+			.map((fieldname) => {
+				let changes = row_changes_by_fieldname[fieldname];
 				let df = frappe.meta.get_docfield(doctype, fieldname);
-				let child_doctype = df.options;
-				let values_changed = this.get_changed_values(child_doctype, changes);
 
-				return values_changed.map((change, i) => {
-					let [fieldname, value1, value2] = change;
-					let th = i === 0
-						? `<th rowspan="${values_changed.length}">${item_code}</th>`
-						: '';
-					return `
+				let html = changes
+					.map((change) => {
+						let [fieldname, , item_code, changes] = change;
+						let df = frappe.meta.get_docfield(doctype, fieldname);
+						let child_doctype = df.options;
+						let values_changed = this.get_changed_values(child_doctype, changes);
+
+						return values_changed
+							.map((change, i) => {
+								let [fieldname, value1, value2] = change;
+								let th =
+									i === 0 ? `<th rowspan="${values_changed.length}">${item_code}</th>` : "";
+								return `
 						<tr>
 							${th}
 							<td>${frappe.meta.get_label(child_doctype, fieldname)}</td>
@@ -144,54 +147,58 @@
 							<td>${value2}</td>
 						</tr>
 					`;
-				}).join('');
-			}).join('');
+							})
+							.join("");
+					})
+					.join("");
 
-			return `
-				<h4 class="margin-top">${__('Changes in {0}', [df.label])}</h4>
+				return `
+				<h4 class="margin-top">${__("Changes in {0}", [df.label])}</h4>
 				<table class="table table-bordered">
 					<tr>
-						<th width="25%">${__('Item Code')}</th>
-						<th width="25%">${__('Field')}</th>
+						<th width="25%">${__("Item Code")}</th>
+						<th width="25%">${__("Field")}</th>
 						<th width="25%">${name1}</th>
 						<th width="25%">${name2}</th>
 					</tr>
 					${html}
 				</table>
 			`;
-		}).join('');
+			})
+			.join("");
 
 		let get_added_removed_html = (title, grouped_items) => {
-			return Object.keys(grouped_items).map(fieldname => {
-				let rows = grouped_items[fieldname];
-				let df = frappe.meta.get_docfield(doctype, fieldname);
-				let fields = frappe.meta.get_docfields(df.options)
-					.filter(df => df.in_list_view);
+			return Object.keys(grouped_items)
+				.map((fieldname) => {
+					let rows = grouped_items[fieldname];
+					let df = frappe.meta.get_docfield(doctype, fieldname);
+					let fields = frappe.meta.get_docfields(df.options).filter((df) => df.in_list_view);
 
-				let html = rows.map(row => {
-					let [, doc] = row;
-					let cells = fields
-						.map(df => `<td>${doc[df.fieldname]}</td>`)
-						.join('');
-					return `<tr>${cells}</tr>`;
-				}).join('');
+					let html = rows
+						.map((row) => {
+							let [, doc] = row;
+							let cells = fields.map((df) => `<td>${doc[df.fieldname]}</td>`).join("");
+							return `<tr>${cells}</tr>`;
+						})
+						.join("");
 
-				let header = fields.map(df => `<th>${df.label}</th>`).join('');
-				return `
+					let header = fields.map((df) => `<th>${df.label}</th>`).join("");
+					return `
 					<h4 class="margin-top">${$.format(title, [df.label])}</h4>
 					<table class="table table-bordered">
 						<tr>${header}</tr>
 						${html}
 					</table>
 				`;
-			}).join('');
+				})
+				.join("");
 		};
 
-		let added_by_fieldname = group_items(diff.added, change => change[0]);
-		let removed_by_fieldname = group_items(diff.removed, change => change[0]);
+		let added_by_fieldname = group_items(diff.added, (change) => change[0]);
+		let removed_by_fieldname = group_items(diff.removed, (change) => change[0]);
 
-		let added_html = get_added_removed_html(__('Rows Added in {0}'), added_by_fieldname);
-		let removed_html = get_added_removed_html(__('Rows Removed in {0}'), removed_by_fieldname);
+		let added_html = get_added_removed_html(__("Rows Added in {0}"), added_by_fieldname);
+		let removed_html = get_added_removed_html(__("Rows Removed in {0}"), removed_by_fieldname);
 
 		let html = `
 			${value_changes}
@@ -200,14 +207,14 @@
 			${removed_html}
 		`;
 
-		this.form.get_field('preview').html(html);
+		this.form.get_field("preview").html(html);
 	}
 
 	get_changed_values(doctype, changed) {
-		return changed.filter(change => {
+		return changed.filter((change) => {
 			let [fieldname, value1, value2] = change;
-			if (!value1) value1 = '';
-			if (!value2) value2 = '';
+			if (!value1) value1 = "";
+			if (!value2) value2 = "";
 			if (value1 === value2) return false;
 			let df = frappe.meta.get_docfield(doctype, fieldname);
 			if (!df) return false;
diff --git a/erpnext/manufacturing/page/visual_plant_floor/visual_plant_floor.js b/erpnext/manufacturing/page/visual_plant_floor/visual_plant_floor.js
index 38667e8..0d2c090 100644
--- a/erpnext/manufacturing/page/visual_plant_floor/visual_plant_floor.js
+++ b/erpnext/manufacturing/page/visual_plant_floor/visual_plant_floor.js
@@ -1,13 +1,12 @@
-
-
-frappe.pages['visual-plant-floor'].on_page_load = function(wrapper) {
+frappe.pages["visual-plant-floor"].on_page_load = function (wrapper) {
 	var page = frappe.ui.make_app_page({
 		parent: wrapper,
-		title: 'Visual Plant Floor',
-		single_column: true
+		title: "Visual Plant Floor",
+		single_column: true,
 	});
 
 	frappe.visual_plant_floor = new frappe.ui.VisualPlantFloor(
-		{wrapper: $(wrapper).find('.layout-main-section')}, wrapper.page
+		{ wrapper: $(wrapper).find(".layout-main-section") },
+		wrapper.page
 	);
-}
\ No newline at end of file
+};
diff --git a/erpnext/manufacturing/report/bom_explorer/bom_explorer.js b/erpnext/manufacturing/report/bom_explorer/bom_explorer.js
index 50191bf..f9feb01 100644
--- a/erpnext/manufacturing/report/bom_explorer/bom_explorer.js
+++ b/erpnext/manufacturing/report/bom_explorer/bom_explorer.js
@@ -1,15 +1,14 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["BOM Explorer"] = {
-	"filters": [
+	filters: [
 		{
 			fieldname: "bom",
 			label: __("BOM"),
 			fieldtype: "Link",
 			options: "BOM",
-			reqd: 1
+			reqd: 1,
 		},
-	]
+	],
 };
diff --git a/erpnext/manufacturing/report/bom_operations_time/bom_operations_time.js b/erpnext/manufacturing/report/bom_operations_time/bom_operations_time.js
index 8729775..27bccf6 100644
--- a/erpnext/manufacturing/report/bom_operations_time/bom_operations_time.js
+++ b/erpnext/manufacturing/report/bom_operations_time/bom_operations_time.js
@@ -1,42 +1,41 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["BOM Operations Time"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname": "item_code",
-			"label": __("Item Code"),
-			"fieldtype": "Link",
-			"width": "100",
-			"options": "Item",
-			"get_query": () =>{
+			fieldname: "item_code",
+			label: __("Item Code"),
+			fieldtype: "Link",
+			width: "100",
+			options: "Item",
+			get_query: () => {
 				return {
-					filters: { "is_stock_item": 1 }
-				}
-			}
+					filters: { is_stock_item: 1 },
+				};
+			},
 		},
 		{
-			"fieldname": "bom_id",
-			"label": __("BOM ID"),
-			"fieldtype": "MultiSelectList",
-			"width": "100",
-			"options": "BOM",
-			"get_data": function(txt) {
+			fieldname: "bom_id",
+			label: __("BOM ID"),
+			fieldtype: "MultiSelectList",
+			width: "100",
+			options: "BOM",
+			get_data: function (txt) {
 				return frappe.db.get_link_options("BOM", txt);
 			},
-			"get_query": () =>{
+			get_query: () => {
 				return {
-					filters: { "docstatus": 1, "is_active": 1, "with_operations": 1 }
-				}
-			}
+					filters: { docstatus: 1, is_active: 1, with_operations: 1 },
+				};
+			},
 		},
 		{
-			"fieldname": "workstation",
-			"label": __("Workstation"),
-			"fieldtype": "Link",
-			"width": "100",
-			"options": "Workstation"
+			fieldname: "workstation",
+			label: __("Workstation"),
+			fieldtype: "Link",
+			width: "100",
+			options: "Workstation",
 		},
-	]
+	],
 };
diff --git a/erpnext/manufacturing/report/bom_stock_calculated/bom_stock_calculated.js b/erpnext/manufacturing/report/bom_stock_calculated/bom_stock_calculated.js
index 8e66f70..76a9512 100644
--- a/erpnext/manufacturing/report/bom_stock_calculated/bom_stock_calculated.js
+++ b/erpnext/manufacturing/report/bom_stock_calculated/bom_stock_calculated.js
@@ -1,34 +1,33 @@
 // Copyright (c) 2016, Epoch Consulting and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["BOM Stock Calculated"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname": "bom",
-			"label": __("BOM"),
-			"fieldtype": "Link",
-			"options": "BOM",
-			"reqd": 1
+			fieldname: "bom",
+			label: __("BOM"),
+			fieldtype: "Link",
+			options: "BOM",
+			reqd: 1,
 		},
 		{
-			"fieldname": "warehouse",
-			"label": __("Warehouse"),
-			"fieldtype": "Link",
-			"options": "Warehouse",
+			fieldname: "warehouse",
+			label: __("Warehouse"),
+			fieldtype: "Link",
+			options: "Warehouse",
 		},
 		{
-			"fieldname": "qty_to_make",
-			"label": __("Quantity to Make"),
-			"fieldtype": "Float",
-			"default": "1.0",
-			"reqd": 1
+			fieldname: "qty_to_make",
+			label: __("Quantity to Make"),
+			fieldtype: "Float",
+			default: "1.0",
+			reqd: 1,
 		},
 		{
-			"fieldname": "show_exploded_view",
-			"label": __("Show exploded view"),
-			"fieldtype": "Check",
-			"default": false,
-		}
-	]
-}
+			fieldname: "show_exploded_view",
+			label: __("Show exploded view"),
+			fieldtype: "Check",
+			default: false,
+		},
+	],
+};
diff --git a/erpnext/manufacturing/report/bom_stock_report/bom_stock_report.js b/erpnext/manufacturing/report/bom_stock_report/bom_stock_report.js
index e7f67ca..91d73d0 100644
--- a/erpnext/manufacturing/report/bom_stock_report/bom_stock_report.js
+++ b/erpnext/manufacturing/report/bom_stock_report/bom_stock_report.js
@@ -1,38 +1,41 @@
 frappe.query_reports["BOM Stock Report"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname": "bom",
-			"label": __("BOM"),
-			"fieldtype": "Link",
-			"options": "BOM",
-			"reqd": 1
-		}, {
-			"fieldname": "warehouse",
-			"label": __("Warehouse"),
-			"fieldtype": "Link",
-			"options": "Warehouse",
-			"reqd": 1
-		}, {
-			"fieldname": "show_exploded_view",
-			"label": __("Show exploded view"),
-			"fieldtype": "Check"
-		}, {
-			"fieldname": "qty_to_produce",
-			"label": __("Quantity to Produce"),
-			"fieldtype": "Int",
-			"default": "1"
-		 },
+			fieldname: "bom",
+			label: __("BOM"),
+			fieldtype: "Link",
+			options: "BOM",
+			reqd: 1,
+		},
+		{
+			fieldname: "warehouse",
+			label: __("Warehouse"),
+			fieldtype: "Link",
+			options: "Warehouse",
+			reqd: 1,
+		},
+		{
+			fieldname: "show_exploded_view",
+			label: __("Show exploded view"),
+			fieldtype: "Check",
+		},
+		{
+			fieldname: "qty_to_produce",
+			label: __("Quantity to Produce"),
+			fieldtype: "Int",
+			default: "1",
+		},
 	],
-	"formatter": function(value, row, column, data, default_formatter) {
+	formatter: function (value, row, column, data, default_formatter) {
 		value = default_formatter(value, row, column, data);
 
 		if (column.id == "item") {
 			if (data["in_stock_qty"] >= data["required_qty"]) {
-				value = `<a style='color:green' href="/app/item/${data['item']}" data-doctype="Item">${data['item']}</a>`;
+				value = `<a style='color:green' href="/app/item/${data["item"]}" data-doctype="Item">${data["item"]}</a>`;
 			} else {
-				value = `<a style='color:red' href="/app/item/${data['item']}" data-doctype="Item">${data['item']}</a>`;
+				value = `<a style='color:red' href="/app/item/${data["item"]}" data-doctype="Item">${data["item"]}</a>`;
 			}
 		}
-		return value
-	}
-}
+		return value;
+	},
+};
diff --git a/erpnext/manufacturing/report/bom_variance_report/bom_variance_report.js b/erpnext/manufacturing/report/bom_variance_report/bom_variance_report.js
index db6f4d7..58d8d1f 100644
--- a/erpnext/manufacturing/report/bom_variance_report/bom_variance_report.js
+++ b/erpnext/manufacturing/report/bom_variance_report/bom_variance_report.js
@@ -1,29 +1,28 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["BOM Variance Report"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"bom_no",
-			"label": __("BOM No"),
-			"fieldtype": "Link",
-			"options": "BOM"
+			fieldname: "bom_no",
+			label: __("BOM No"),
+			fieldtype: "Link",
+			options: "BOM",
 		},
 		{
-			"fieldname":"work_order",
-			"label": __("Work Order"),
-			"fieldtype": "Link",
-			"options": "Work Order",
-			"get_query": function() {
-				var bom_no = frappe.query_report.get_filter_value('bom_no');
-				return{
+			fieldname: "work_order",
+			label: __("Work Order"),
+			fieldtype: "Link",
+			options: "Work Order",
+			get_query: function () {
+				var bom_no = frappe.query_report.get_filter_value("bom_no");
+				return {
 					query: "erpnext.manufacturing.report.bom_variance_report.bom_variance_report.get_work_orders",
 					filters: {
-						'bom_no': bom_no
-					}
-				}
-			}
+						bom_no: bom_no,
+					},
+				};
+			},
 		},
-	]
-}
+	],
+};
diff --git a/erpnext/manufacturing/report/cost_of_poor_quality_report/cost_of_poor_quality_report.js b/erpnext/manufacturing/report/cost_of_poor_quality_report/cost_of_poor_quality_report.js
index d0249ba..d534513 100644
--- a/erpnext/manufacturing/report/cost_of_poor_quality_report/cost_of_poor_quality_report.js
+++ b/erpnext/manufacturing/report/cost_of_poor_quality_report/cost_of_poor_quality_report.js
@@ -1,26 +1,27 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Cost of Poor Quality Report"] = {
-	"filters": [
+	filters: [
 		{
 			label: __("Company"),
 			fieldname: "company",
 			fieldtype: "Link",
 			options: "Company",
 			default: frappe.defaults.get_user_default("Company"),
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			label: __("From Date"),
-			fieldname:"from_date",
+			fieldname: "from_date",
 			fieldtype: "Datetime",
-			default: frappe.datetime.convert_to_system_tz(frappe.datetime.add_months(frappe.datetime.now_datetime(), -1)),
+			default: frappe.datetime.convert_to_system_tz(
+				frappe.datetime.add_months(frappe.datetime.now_datetime(), -1)
+			),
 		},
 		{
 			label: __("To Date"),
-			fieldname:"to_date",
+			fieldname: "to_date",
 			fieldtype: "Datetime",
 			default: frappe.datetime.now_datetime(),
 		},
@@ -29,45 +30,45 @@
 			fieldname: "name",
 			fieldtype: "Link",
 			options: "Job Card",
-			get_query: function() {
+			get_query: function () {
 				return {
 					filters: {
 						is_corrective_job_card: 1,
-						docstatus: 1
-					}
-				}
-			}
+						docstatus: 1,
+					},
+				};
+			},
 		},
 		{
 			label: __("Work Order"),
 			fieldname: "work_order",
 			fieldtype: "Link",
-			options: "Work Order"
+			options: "Work Order",
 		},
 		{
 			label: __("Operation"),
 			fieldname: "operation",
 			fieldtype: "Link",
 			options: "Operation",
-			get_query: function() {
+			get_query: function () {
 				return {
 					filters: {
-						is_corrective_operation: 1
-					}
-				}
-			}
+						is_corrective_operation: 1,
+					},
+				};
+			},
 		},
 		{
 			label: __("Workstation"),
 			fieldname: "workstation",
 			fieldtype: "Link",
-			options: "Workstation"
+			options: "Workstation",
 		},
 		{
 			label: __("Item"),
 			fieldname: "production_item",
 			fieldtype: "Link",
-			options: "Item"
+			options: "Item",
 		},
 		{
 			label: __("Serial No"),
@@ -75,14 +76,14 @@
 			fieldtype: "Link",
 			options: "Serial No",
 			depends_on: "eval: doc.production_item",
-			get_query: function() {
-				var item_code = frappe.query_report.get_filter_value('production_item');
+			get_query: function () {
+				var item_code = frappe.query_report.get_filter_value("production_item");
 				return {
 					filters: {
-						item_code: item_code
-					}
-				}
-			}
+						item_code: item_code,
+					},
+				};
+			},
 		},
 		{
 			label: __("Batch No"),
@@ -90,14 +91,14 @@
 			fieldtype: "Link",
 			options: "Batch No",
 			depends_on: "eval: doc.production_item",
-			get_query: function() {
-				var item_code = frappe.query_report.get_filter_value('production_item');
+			get_query: function () {
+				var item_code = frappe.query_report.get_filter_value("production_item");
 				return {
 					filters: {
-						item: item_code
-					}
-				}
-			}
+						item: item_code,
+					},
+				};
+			},
 		},
-	]
+	],
 };
diff --git a/erpnext/manufacturing/report/downtime_analysis/downtime_analysis.js b/erpnext/manufacturing/report/downtime_analysis/downtime_analysis.js
index 0589260..0eadc72 100644
--- a/erpnext/manufacturing/report/downtime_analysis/downtime_analysis.js
+++ b/erpnext/manufacturing/report/downtime_analysis/downtime_analysis.js
@@ -1,19 +1,20 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Downtime Analysis"] = {
-	"filters": [
+	filters: [
 		{
 			label: __("From Date"),
-			fieldname:"from_date",
+			fieldname: "from_date",
 			fieldtype: "Datetime",
-			default: frappe.datetime.convert_to_system_tz(frappe.datetime.add_months(frappe.datetime.now_datetime(), -1)),
-			reqd: 1
+			default: frappe.datetime.convert_to_system_tz(
+				frappe.datetime.add_months(frappe.datetime.now_datetime(), -1)
+			),
+			reqd: 1,
 		},
 		{
 			label: __("To Date"),
-			fieldname:"to_date",
+			fieldname: "to_date",
 			fieldtype: "Datetime",
 			default: frappe.datetime.now_datetime(),
 			reqd: 1,
@@ -22,7 +23,7 @@
 			label: __("Machine"),
 			fieldname: "workstation",
 			fieldtype: "Link",
-			options: "Workstation"
-		}
-	]
+			options: "Workstation",
+		},
+	],
 };
diff --git a/erpnext/manufacturing/report/exponential_smoothing_forecasting/exponential_smoothing_forecasting.js b/erpnext/manufacturing/report/exponential_smoothing_forecasting/exponential_smoothing_forecasting.js
index 3795bd3..23fa9ab 100644
--- a/erpnext/manufacturing/report/exponential_smoothing_forecasting/exponential_smoothing_forecasting.js
+++ b/erpnext/manufacturing/report/exponential_smoothing_forecasting/exponential_smoothing_forecasting.js
@@ -1,97 +1,96 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Exponential Smoothing Forecasting"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"reqd": 1,
-			"default": frappe.defaults.get_user_default("Company")
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			reqd: 1,
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today(),
-			"reqd": 1
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.get_today(),
+			reqd: 1,
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.add_months(frappe.datetime.get_today(), 12),
-			"reqd": 1
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.add_months(frappe.datetime.get_today(), 12),
+			reqd: 1,
 		},
 		{
-			"fieldname":"based_on_document",
-			"label": __("Based On Document"),
-			"fieldtype": "Select",
-			"options": ["Sales Order", "Sales Invoice", "Delivery Note", "Quotation"],
-			"default": "Sales Order",
-			"reqd": 1
+			fieldname: "based_on_document",
+			label: __("Based On Document"),
+			fieldtype: "Select",
+			options: ["Sales Order", "Sales Invoice", "Delivery Note", "Quotation"],
+			default: "Sales Order",
+			reqd: 1,
 		},
 		{
-			"fieldname":"based_on_field",
-			"label": __("Based On"),
-			"fieldtype": "Select",
-			"options": ["Qty", "Amount"],
-			"default": "Qty",
-			"reqd": 1
+			fieldname: "based_on_field",
+			label: __("Based On"),
+			fieldtype: "Select",
+			options: ["Qty", "Amount"],
+			default: "Qty",
+			reqd: 1,
 		},
 		{
-			"fieldname":"no_of_years",
-			"label": __("Based On Data ( in years )"),
-			"fieldtype": "Select",
-			"options": [3, 6, 9],
-			"default": 3,
-			"reqd": 1
+			fieldname: "no_of_years",
+			label: __("Based On Data ( in years )"),
+			fieldtype: "Select",
+			options: [3, 6, 9],
+			default: 3,
+			reqd: 1,
 		},
 		{
-			"fieldname": "periodicity",
-			"label": __("Periodicity"),
-			"fieldtype": "Select",
-			"options": [
-				{ "value": "Monthly", "label": __("Monthly") },
-				{ "value": "Quarterly", "label": __("Quarterly") },
-				{ "value": "Half-Yearly", "label": __("Half-Yearly") },
-				{ "value": "Yearly", "label": __("Yearly") }
+			fieldname: "periodicity",
+			label: __("Periodicity"),
+			fieldtype: "Select",
+			options: [
+				{ value: "Monthly", label: __("Monthly") },
+				{ value: "Quarterly", label: __("Quarterly") },
+				{ value: "Half-Yearly", label: __("Half-Yearly") },
+				{ value: "Yearly", label: __("Yearly") },
 			],
-			"default": "Yearly",
-			"reqd": 1
+			default: "Yearly",
+			reqd: 1,
 		},
 		{
-			"fieldname":"smoothing_constant",
-			"label": __("Smoothing Constant"),
-			"fieldtype": "Select",
-			"options": [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0],
-			"reqd": 1,
-			"default": 0.3
+			fieldname: "smoothing_constant",
+			label: __("Smoothing Constant"),
+			fieldtype: "Select",
+			options: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0],
+			reqd: 1,
+			default: 0.3,
 		},
 		{
-			"fieldname":"item_code",
-			"label": __("Item Code"),
-			"fieldtype": "Link",
-			"options": "Item"
+			fieldname: "item_code",
+			label: __("Item Code"),
+			fieldtype: "Link",
+			options: "Item",
 		},
 		{
-			"fieldname":"warehouse",
-			"label": __("Warehouse"),
-			"fieldtype": "Link",
-			"options": "Warehouse",
+			fieldname: "warehouse",
+			label: __("Warehouse"),
+			fieldtype: "Link",
+			options: "Warehouse",
 			get_query: () => {
-				var company = frappe.query_report.get_filter_value('company');
+				var company = frappe.query_report.get_filter_value("company");
 				if (company) {
 					return {
 						filters: {
-							'company': company
-						}
+							company: company,
+						},
 					};
 				}
-			}
-		}
-	]
+			},
+		},
+	],
 };
diff --git a/erpnext/manufacturing/report/job_card_summary/job_card_summary.js b/erpnext/manufacturing/report/job_card_summary/job_card_summary.js
index 4b3f86f..2196500 100644
--- a/erpnext/manufacturing/report/job_card_summary/job_card_summary.js
+++ b/erpnext/manufacturing/report/job_card_summary/job_card_summary.js
@@ -1,16 +1,15 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Job Card Summary"] = {
-	"filters": [
+	filters: [
 		{
 			label: __("Company"),
 			fieldname: "company",
 			fieldtype: "Link",
 			options: "Company",
 			default: frappe.defaults.get_user_default("Company"),
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			fieldname: "fiscal_year",
@@ -19,30 +18,30 @@
 			options: "Fiscal Year",
 			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
 			reqd: 1,
-			on_change: function(query_report) {
+			on_change: function (query_report) {
 				var fiscal_year = query_report.get_values().fiscal_year;
 				if (!fiscal_year) {
 					return;
 				}
-				frappe.model.with_doc("Fiscal Year", fiscal_year, function(r) {
+				frappe.model.with_doc("Fiscal Year", fiscal_year, function (r) {
 					var fy = frappe.model.get_doc("Fiscal Year", fiscal_year);
 					frappe.query_report.set_filter_value({
 						from_date: fy.year_start_date,
-						to_date: fy.year_end_date
+						to_date: fy.year_end_date,
 					});
 				});
-			}
+			},
 		},
 		{
 			label: __("From Posting Date"),
-			fieldname:"from_date",
+			fieldname: "from_date",
 			fieldtype: "Date",
 			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			label: __("To Posting Date"),
-			fieldname:"to_date",
+			fieldname: "to_date",
 			fieldtype: "Date",
 			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
 			reqd: 1,
@@ -51,35 +50,35 @@
 			label: __("Status"),
 			fieldname: "status",
 			fieldtype: "Select",
-			options: ["", "Open", "Work In Progress", "Completed", "On Hold"]
+			options: ["", "Open", "Work In Progress", "Completed", "On Hold"],
 		},
 		{
 			label: __("Work Orders"),
 			fieldname: "work_order",
 			fieldtype: "MultiSelectList",
-			get_data: function(txt) {
-				return frappe.db.get_link_options('Work Order', txt);
-			}
+			get_data: function (txt) {
+				return frappe.db.get_link_options("Work Order", txt);
+			},
 		},
 		{
 			label: __("Production Item"),
 			fieldname: "production_item",
 			fieldtype: "MultiSelectList",
-			get_data: function(txt) {
-				return frappe.db.get_link_options('Item', txt);
-			}
+			get_data: function (txt) {
+				return frappe.db.get_link_options("Item", txt);
+			},
 		},
 		{
 			label: __("Workstation"),
 			fieldname: "workstation",
 			fieldtype: "Link",
-			options: "Workstation"
+			options: "Workstation",
 		},
 		{
 			label: __("Operation"),
 			fieldname: "operation",
 			fieldtype: "Link",
-			options: "Operation"
-		}
-	]
+			options: "Operation",
+		},
+	],
 };
diff --git a/erpnext/manufacturing/report/process_loss_report/process_loss_report.js b/erpnext/manufacturing/report/process_loss_report/process_loss_report.js
index c08413d..89cc558 100644
--- a/erpnext/manufacturing/report/process_loss_report/process_loss_report.js
+++ b/erpnext/manufacturing/report/process_loss_report/process_loss_report.js
@@ -1,44 +1,43 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Process Loss Report"] = {
 	filters: [
-    {
-      label: __("Company"),
-      fieldname: "company",
-      fieldtype: "Link",
-      options: "Company",
-      mandatory: true,
-      default: frappe.defaults.get_user_default("Company"),
-    },
 		{
-      label: __("Item"),
-      fieldname: "item",
-      fieldtype: "Link",
-      options: "Item",
-      mandatory: false,
+			label: __("Company"),
+			fieldname: "company",
+			fieldtype: "Link",
+			options: "Company",
+			mandatory: true,
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
-      label: __("Work Order"),
-      fieldname: "work_order",
-      fieldtype: "Link",
-      options: "Work Order",
-      mandatory: false,
+			label: __("Item"),
+			fieldname: "item",
+			fieldtype: "Link",
+			options: "Item",
+			mandatory: false,
 		},
-    {
-      label: __("From Date"),
-      fieldname: "from_date",
-      fieldtype: "Date",
-      mandatory: true,
-      default: frappe.datetime.year_start(),
-    },
-    {
-      label: __("To Date"),
-      fieldname: "to_date",
-      fieldtype: "Date",
-      mandatory: true,
-      default: frappe.datetime.get_today(),
-    },
-	]
+		{
+			label: __("Work Order"),
+			fieldname: "work_order",
+			fieldtype: "Link",
+			options: "Work Order",
+			mandatory: false,
+		},
+		{
+			label: __("From Date"),
+			fieldname: "from_date",
+			fieldtype: "Date",
+			mandatory: true,
+			default: frappe.datetime.year_start(),
+		},
+		{
+			label: __("To Date"),
+			fieldname: "to_date",
+			fieldtype: "Date",
+			mandatory: true,
+			default: frappe.datetime.get_today(),
+		},
+	],
 };
diff --git a/erpnext/manufacturing/report/production_analytics/production_analytics.js b/erpnext/manufacturing/report/production_analytics/production_analytics.js
index 77529a5..208cd32 100644
--- a/erpnext/manufacturing/report/production_analytics/production_analytics.js
+++ b/erpnext/manufacturing/report/production_analytics/production_analytics.js
@@ -1,43 +1,42 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Production Analytics"] = {
-	"filters": [
+	filters: [
 		{
 			fieldname: "company",
 			label: __("Company"),
 			fieldtype: "Link",
 			options: "Company",
 			default: frappe.defaults.get_user_default("Company"),
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			fieldname: "from_date",
 			label: __("From Date"),
 			fieldtype: "Date",
 			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
-			reqd: 1
+			reqd: 1,
 		},
 		{
-			fieldname:"to_date",
+			fieldname: "to_date",
 			label: __("To Date"),
 			fieldtype: "Date",
 			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			fieldname: "range",
 			label: __("Range"),
 			fieldtype: "Select",
 			options: [
-				{ "value": "Weekly", "label": __("Weekly") },
-				{ "value": "Monthly", "label": __("Monthly") },
-				{ "value": "Quarterly", "label": __("Quarterly") },
-				{ "value": "Yearly", "label": __("Yearly") }
+				{ value: "Weekly", label: __("Weekly") },
+				{ value: "Monthly", label: __("Monthly") },
+				{ value: "Quarterly", label: __("Quarterly") },
+				{ value: "Yearly", label: __("Yearly") },
 			],
 			default: "Monthly",
-			reqd: 1
-		}
-	]
-}
+			reqd: 1,
+		},
+	],
+};
diff --git a/erpnext/manufacturing/report/production_plan_summary/production_plan_summary.js b/erpnext/manufacturing/report/production_plan_summary/production_plan_summary.js
index afe4a6e..0e89a25 100644
--- a/erpnext/manufacturing/report/production_plan_summary/production_plan_summary.js
+++ b/erpnext/manufacturing/report/production_plan_summary/production_plan_summary.js
@@ -1,30 +1,29 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Production Plan Summary"] = {
-	"filters": [
+	filters: [
 		{
 			fieldname: "production_plan",
 			label: __("Production Plan"),
 			fieldtype: "Link",
 			options: "Production Plan",
 			reqd: 1,
-			get_query: function() {
+			get_query: function () {
 				return {
 					filters: {
-						"docstatus": 1
-					}
+						docstatus: 1,
+					},
 				};
-			}
-		}
+			},
+		},
 	],
-	"formatter": function(value, row, column, data, default_formatter) {
+	formatter: function (value, row, column, data, default_formatter) {
 		value = default_formatter(value, row, column, data);
 
 		if (column.fieldname == "item_code") {
-			var color = data.pending_qty > 0 ? 'red': 'green';
-			value = `<a style='color:${color}' href="/app/item/${data['item_code']}" data-doctype="Item">${data['item_code']}</a>`;
+			var color = data.pending_qty > 0 ? "red" : "green";
+			value = `<a style='color:${color}' href="/app/item/${data["item_code"]}" data-doctype="Item">${data["item_code"]}</a>`;
 		}
 
 		return value;
diff --git a/erpnext/manufacturing/report/production_planning_report/production_planning_report.js b/erpnext/manufacturing/report/production_planning_report/production_planning_report.js
index 4225832..d6ca248 100644
--- a/erpnext/manufacturing/report/production_planning_report/production_planning_report.js
+++ b/erpnext/manufacturing/report/production_planning_report/production_planning_report.js
@@ -1,108 +1,111 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Production Planning Report"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"reqd": 1,
-			"default": frappe.defaults.get_user_default("Company")
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			reqd: 1,
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
-			"fieldname":"based_on",
-			"label": __("Based On"),
-			"fieldtype": "Select",
-			"options": ["Sales Order", "Material Request", "Work Order"],
-			"default": "Sales Order",
-			"reqd": 1,
-			on_change: function() {
+			fieldname: "based_on",
+			label: __("Based On"),
+			fieldtype: "Select",
+			options: ["Sales Order", "Material Request", "Work Order"],
+			default: "Sales Order",
+			reqd: 1,
+			on_change: function () {
 				let filters = frappe.query_report.filters;
-				let based_on = frappe.query_report.get_filter_value('based_on');
+				let based_on = frappe.query_report.get_filter_value("based_on");
 				let options = {
 					"Sales Order": ["Delivery Date", "Total Amount"],
 					"Material Request": ["Required Date"],
-					"Work Order": ["Planned Start Date"]
-				}
+					"Work Order": ["Planned Start Date"],
+				};
 
-				filters.forEach(d => {
+				filters.forEach((d) => {
 					if (d.fieldname == "order_by") {
 						d.df.options = options[based_on];
-						d.set_input(d.df.options)
+						d.set_input(d.df.options);
 					}
 				});
 
 				frappe.query_report.refresh();
-			}
+			},
 		},
 		{
-			"fieldname":"docnames",
-			"label": __("Document Name"),
-			"fieldtype": "MultiSelectList",
-			"options": "Sales Order",
-			"get_data": function(txt) {
+			fieldname: "docnames",
+			label: __("Document Name"),
+			fieldtype: "MultiSelectList",
+			options: "Sales Order",
+			get_data: function (txt) {
 				if (!frappe.query_report.filters) return;
 
-				let based_on = frappe.query_report.get_filter_value('based_on');
+				let based_on = frappe.query_report.get_filter_value("based_on");
 				if (!based_on) return;
 
 				return frappe.db.get_link_options(based_on, txt);
 			},
-			"get_query": function() {
-				var company = frappe.query_report.get_filter_value('company');
+			get_query: function () {
+				var company = frappe.query_report.get_filter_value("company");
 				return {
 					filters: {
-						"docstatus": 1,
-						"company": company
-					}
+						docstatus: 1,
+						company: company,
+					},
 				};
-			}
+			},
 		},
 		{
-			"fieldname":"raw_material_warehouse",
-			"label": __("Raw Material Warehouse"),
-			"fieldtype": "Link",
-			"options": "Warehouse",
-			"depends_on": "eval: doc.based_on != 'Work Order'",
-			"get_query": function() {
-				var company = frappe.query_report.get_filter_value('company');
+			fieldname: "raw_material_warehouse",
+			label: __("Raw Material Warehouse"),
+			fieldtype: "Link",
+			options: "Warehouse",
+			depends_on: "eval: doc.based_on != 'Work Order'",
+			get_query: function () {
+				var company = frappe.query_report.get_filter_value("company");
 				return {
 					filters: {
-						"company": company
-					}
+						company: company,
+					},
 				};
-			}
+			},
 		},
 		{
-			"fieldname":"order_by",
-			"label": __("Order By"),
-			"fieldtype": "Select",
-			"options": ["Delivery Date", "Total Amount"],
-			"default": "Delivery Date"
+			fieldname: "order_by",
+			label: __("Order By"),
+			fieldtype: "Select",
+			options: ["Delivery Date", "Total Amount"],
+			default: "Delivery Date",
 		},
 		{
-			"fieldname":"include_subassembly_raw_materials",
-			"label": __("Include Sub-assembly Raw Materials"),
-			"fieldtype": "Check",
-			"depends_on": "eval: doc.based_on != 'Work Order'",
-			"default": 0
+			fieldname: "include_subassembly_raw_materials",
+			label: __("Include Sub-assembly Raw Materials"),
+			fieldtype: "Check",
+			depends_on: "eval: doc.based_on != 'Work Order'",
+			default: 0,
 		},
 	],
-	"formatter": function(value, row, column, data, default_formatter) {
+	formatter: function (value, row, column, data, default_formatter) {
 		value = default_formatter(value, row, column, data);
 
-		if (column.fieldname == "production_item_name" && data && data.qty_to_manufacture > data.available_qty ) {
+		if (
+			column.fieldname == "production_item_name" &&
+			data &&
+			data.qty_to_manufacture > data.available_qty
+		) {
 			value = `<div style="color:red">${value}</div>`;
 		}
 
-		if (column.fieldname == "production_item" && !data.name ) {
+		if (column.fieldname == "production_item" && !data.name) {
 			value = "";
 		}
 
-		if (column.fieldname == "raw_material_name" && data && data.required_qty > data.allotted_qty ) {
+		if (column.fieldname == "raw_material_name" && data && data.required_qty > data.allotted_qty) {
 			value = `<div style="color:red">${value}</div>`;
 		}
 
diff --git a/erpnext/manufacturing/report/quality_inspection_summary/quality_inspection_summary.js b/erpnext/manufacturing/report/quality_inspection_summary/quality_inspection_summary.js
index 905d185..6c237d6 100644
--- a/erpnext/manufacturing/report/quality_inspection_summary/quality_inspection_summary.js
+++ b/erpnext/manufacturing/report/quality_inspection_summary/quality_inspection_summary.js
@@ -1,19 +1,18 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Quality Inspection Summary"] = {
-	"filters": [
+	filters: [
 		{
 			label: __("From Date"),
-			fieldname:"from_date",
+			fieldname: "from_date",
 			fieldtype: "Date",
 			default: frappe.datetime.add_months(frappe.datetime.get_today(), -12),
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			label: __("To Date"),
-			fieldname:"to_date",
+			fieldname: "to_date",
 			fieldtype: "Date",
 			default: frappe.datetime.get_today(),
 			reqd: 1,
@@ -22,19 +21,19 @@
 			label: __("Status"),
 			fieldname: "status",
 			fieldtype: "Select",
-			options: ["", "Accepted", "Rejected"]
+			options: ["", "Accepted", "Rejected"],
 		},
 		{
 			label: __("Item Code"),
 			fieldname: "item_code",
 			fieldtype: "Link",
-			options: "Item"
+			options: "Item",
 		},
 		{
 			label: __("Inspected By"),
 			fieldname: "inspected_by",
 			fieldtype: "Link",
-			options: "User"
-		}
-	]
+			options: "User",
+		},
+	],
 };
diff --git a/erpnext/manufacturing/report/work_order_consumed_materials/work_order_consumed_materials.js b/erpnext/manufacturing/report/work_order_consumed_materials/work_order_consumed_materials.js
index 70d7f92..b9ad4e2 100644
--- a/erpnext/manufacturing/report/work_order_consumed_materials/work_order_consumed_materials.js
+++ b/erpnext/manufacturing/report/work_order_consumed_materials/work_order_consumed_materials.js
@@ -1,67 +1,66 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Work Order Consumed Materials"] = {
-	"filters": [
+	filters: [
 		{
 			label: __("Company"),
 			fieldname: "company",
 			fieldtype: "Link",
 			options: "Company",
 			default: frappe.defaults.get_user_default("Company"),
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			label: __("From Date"),
-			fieldname:"from_date",
+			fieldname: "from_date",
 			fieldtype: "Date",
 			default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
-			reqd: 1
+			reqd: 1,
 		},
 		{
-			fieldname:"to_date",
+			fieldname: "to_date",
 			label: __("To Date"),
 			fieldtype: "Date",
 			default: frappe.datetime.get_today(),
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			label: __("Work Order"),
 			fieldname: "name",
 			fieldtype: "Link",
 			options: "Work Order",
-			get_query: function() {
+			get_query: function () {
 				return {
 					filters: {
-						status: ["in", ["In Process", "Completed", "Stopped"]]
-					}
-				}
-			}
+						status: ["in", ["In Process", "Completed", "Stopped"]],
+					},
+				};
+			},
 		},
 		{
 			label: __("Production Item"),
 			fieldname: "production_item",
 			fieldtype: "Link",
 			depends_on: "eval: !doc.name",
-			options: "Item"
+			options: "Item",
 		},
 		{
 			label: __("Status"),
 			fieldname: "status",
 			fieldtype: "Select",
-			options: ["", "In Process", "Completed", "Stopped"]
+			options: ["", "In Process", "Completed", "Stopped"],
 		},
 		{
 			label: __("Excess Materials Consumed"),
 			fieldname: "show_extra_consumed_materials",
-			fieldtype: "Check"
-		}
+			fieldtype: "Check",
+		},
 	],
-	"formatter": function(value, row, column, data, default_formatter) {
+	formatter: function (value, row, column, data, default_formatter) {
 		value = default_formatter(value, row, column, data);
 
-		if (column.fieldname == "raw_material_name" && data && data.extra_consumed_qty > 0 ) {
+		if (column.fieldname == "raw_material_name" && data && data.extra_consumed_qty > 0) {
 			value = `<div style="color:red">${value}</div>`;
 		}
 
diff --git a/erpnext/manufacturing/report/work_order_stock_report/work_order_stock_report.js b/erpnext/manufacturing/report/work_order_stock_report/work_order_stock_report.js
index cf651cb..758056a 100644
--- a/erpnext/manufacturing/report/work_order_stock_report/work_order_stock_report.js
+++ b/erpnext/manufacturing/report/work_order_stock_report/work_order_stock_report.js
@@ -1,14 +1,13 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Work Order Stock Report"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname": "warehouse",
-			"label": __("Warehouse"),
-			"fieldtype": "Link",
-			"options": "Warehouse"
-		}
-	]
-}
+			fieldname: "warehouse",
+			label: __("Warehouse"),
+			fieldtype: "Link",
+			options: "Warehouse",
+		},
+	],
+};
diff --git a/erpnext/manufacturing/report/work_order_summary/work_order_summary.js b/erpnext/manufacturing/report/work_order_summary/work_order_summary.js
index d0242f4..f48f8b7 100644
--- a/erpnext/manufacturing/report/work_order_summary/work_order_summary.js
+++ b/erpnext/manufacturing/report/work_order_summary/work_order_summary.js
@@ -1,34 +1,33 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Work Order Summary"] = {
-	"filters": [
+	filters: [
 		{
 			label: __("Company"),
 			fieldname: "company",
 			fieldtype: "Link",
 			options: "Company",
 			default: frappe.defaults.get_user_default("Company"),
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			label: __("Based On"),
-			fieldname:"based_on",
+			fieldname: "based_on",
 			fieldtype: "Select",
 			options: "Creation Date\nPlanned Date\nActual Date",
-			default: "Creation Date"
+			default: "Creation Date",
 		},
 		{
 			label: __("From Posting Date"),
-			fieldname:"from_date",
+			fieldname: "from_date",
 			fieldtype: "Date",
 			default: frappe.datetime.add_months(frappe.datetime.get_today(), -3),
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			label: __("To Posting Date"),
-			fieldname:"to_date",
+			fieldname: "to_date",
 			fieldtype: "Date",
 			default: frappe.datetime.get_today(),
 			reqd: 1,
@@ -37,36 +36,36 @@
 			label: __("Status"),
 			fieldname: "status",
 			fieldtype: "Select",
-			options: ["", "Not Started", "In Process", "Completed", "Stopped", "Closed"]
+			options: ["", "Not Started", "In Process", "Completed", "Stopped", "Closed"],
 		},
 		{
 			label: __("Sales Orders"),
 			fieldname: "sales_order",
 			fieldtype: "MultiSelectList",
-			get_data: function(txt) {
-				return frappe.db.get_link_options('Sales Order', txt);
-			}
+			get_data: function (txt) {
+				return frappe.db.get_link_options("Sales Order", txt);
+			},
 		},
 		{
 			label: __("Production Item"),
 			fieldname: "production_item",
 			fieldtype: "MultiSelectList",
-			get_data: function(txt) {
-				return frappe.db.get_link_options('Item', txt);
-			}
+			get_data: function (txt) {
+				return frappe.db.get_link_options("Item", txt);
+			},
 		},
 		{
 			label: __("Age"),
-			fieldname:"age",
+			fieldname: "age",
 			fieldtype: "Int",
-			default: "0"
+			default: "0",
 		},
 		{
 			label: __("Charts Based On"),
-			fieldname:"charts_based_on",
+			fieldname: "charts_based_on",
 			fieldtype: "Select",
 			options: ["Status", "Age", "Quantity"],
-			default: "Status"
+			default: "Status",
 		},
-	]
+	],
 };
diff --git a/erpnext/projects/doctype/activity_cost/activity_cost.js b/erpnext/projects/doctype/activity_cost/activity_cost.js
index 2d22caa..d47b574 100644
--- a/erpnext/projects/doctype/activity_cost/activity_cost.js
+++ b/erpnext/projects/doctype/activity_cost/activity_cost.js
@@ -1 +1 @@
-cur_frm.add_fetch('employee', 'employee_name', 'employee_name');
+cur_frm.add_fetch("employee", "employee_name", "employee_name");
diff --git a/erpnext/projects/doctype/activity_type/activity_type.js b/erpnext/projects/doctype/activity_type/activity_type.js
index f1ba882..b620cdd 100644
--- a/erpnext/projects/doctype/activity_type/activity_type.js
+++ b/erpnext/projects/doctype/activity_type/activity_type.js
@@ -1,12 +1,15 @@
 frappe.ui.form.on("Activity Type", {
-	onload: function(frm) {
-		frm.set_currency_labels(["billing_rate", "costing_rate"], frappe.defaults.get_global_default('currency'));
+	onload: function (frm) {
+		frm.set_currency_labels(
+			["billing_rate", "costing_rate"],
+			frappe.defaults.get_global_default("currency")
+		);
 	},
 
-	refresh: function(frm) {
-		frm.add_custom_button(__("Activity Cost per Employee"), function() {
-			frappe.route_options = {"activity_type": frm.doc.name};
+	refresh: function (frm) {
+		frm.add_custom_button(__("Activity Cost per Employee"), function () {
+			frappe.route_options = { activity_type: frm.doc.name };
 			frappe.set_route("List", "Activity Cost");
 		});
-	}
+	},
 });
diff --git a/erpnext/projects/doctype/project/project.js b/erpnext/projects/doctype/project/project.js
index e0dd198..16ac8db 100644
--- a/erpnext/projects/doctype/project/project.js
+++ b/erpnext/projects/doctype/project/project.js
@@ -3,16 +3,16 @@
 frappe.ui.form.on("Project", {
 	setup(frm) {
 		frm.make_methods = {
-			'Timesheet': () => {
+			Timesheet: () => {
 				open_form(frm, "Timesheet", "Timesheet Detail", "time_logs");
 			},
-			'Purchase Order': () => {
+			"Purchase Order": () => {
 				open_form(frm, "Purchase Order", "Purchase Order Item", "items");
 			},
-			'Purchase Receipt': () => {
+			"Purchase Receipt": () => {
 				open_form(frm, "Purchase Receipt", "Purchase Receipt Item", "items");
 			},
-			'Purchase Invoice': () => {
+			"Purchase Invoice": () => {
 				open_form(frm, "Purchase Invoice", "Purchase Invoice Item", "items");
 			},
 		};
@@ -22,31 +22,31 @@
 		so.get_route_options_for_new_doc = () => {
 			if (frm.is_new()) return {};
 			return {
-				"customer": frm.doc.customer,
-				"project_name": frm.doc.name
+				customer: frm.doc.customer,
+				project_name: frm.doc.name,
 			};
 		};
 
-		frm.set_query('customer', 'erpnext.controllers.queries.customer_query');
+		frm.set_query("customer", "erpnext.controllers.queries.customer_query");
 
 		frm.set_query("user", "users", function () {
 			return {
-				query: "erpnext.projects.doctype.project.project.get_users_for_project"
+				query: "erpnext.projects.doctype.project.project.get_users_for_project",
 			};
 		});
 
 		frm.set_query("department", function (doc) {
 			return {
 				filters: {
-					"company": doc.company,
-				}
+					company: doc.company,
+				},
 			};
 		});
 
 		// sales order
-		frm.set_query('sales_order', function () {
+		frm.set_query("sales_order", function () {
 			var filters = {
-				'project': ["in", frm.doc.__islocal ? [""] : [frm.doc.name, ""]]
+				project: ["in", frm.doc.__islocal ? [""] : [frm.doc.name, ""]],
 			};
 
 			if (frm.doc.customer) {
@@ -54,7 +54,7 @@
 			}
 
 			return {
-				filters: filters
+				filters: filters,
 			};
 		});
 	},
@@ -65,108 +65,133 @@
 		} else {
 			frm.add_web_link("/projects?project=" + encodeURIComponent(frm.doc.name));
 
-			frm.trigger('show_dashboard');
+			frm.trigger("show_dashboard");
 		}
 		frm.trigger("set_custom_buttons");
 	},
 
-	set_custom_buttons: function(frm) {
+	set_custom_buttons: function (frm) {
 		if (!frm.is_new()) {
-			frm.add_custom_button(__('Duplicate Project with Tasks'), () => {
-				frm.events.create_duplicate(frm);
-			}, __("Actions"));
+			frm.add_custom_button(
+				__("Duplicate Project with Tasks"),
+				() => {
+					frm.events.create_duplicate(frm);
+				},
+				__("Actions")
+			);
 
-			frm.add_custom_button(__('Update Total Purchase Cost'), () => {
-				frm.events.update_total_purchase_cost(frm);
-			}, __("Actions"));
+			frm.add_custom_button(
+				__("Update Total Purchase Cost"),
+				() => {
+					frm.events.update_total_purchase_cost(frm);
+				},
+				__("Actions")
+			);
 
 			frm.trigger("set_project_status_button");
 
-
 			if (frappe.model.can_read("Task")) {
-				frm.add_custom_button(__("Gantt Chart"), function () {
-					frappe.route_options = {
-						"project": frm.doc.name
-					};
-					frappe.set_route("List", "Task", "Gantt");
-				}, __("View"));
+				frm.add_custom_button(
+					__("Gantt Chart"),
+					function () {
+						frappe.route_options = {
+							project: frm.doc.name,
+						};
+						frappe.set_route("List", "Task", "Gantt");
+					},
+					__("View")
+				);
 
-				frm.add_custom_button(__("Kanban Board"), () => {
-					frappe.call('erpnext.projects.doctype.project.project.create_kanban_board_if_not_exists', {
-						project: frm.doc.name
-					}).then(() => {
-						frappe.set_route('List', 'Task', 'Kanban', frm.doc.project_name);
-					});
-				}, __("View"));
+				frm.add_custom_button(
+					__("Kanban Board"),
+					() => {
+						frappe
+							.call(
+								"erpnext.projects.doctype.project.project.create_kanban_board_if_not_exists",
+								{
+									project: frm.doc.name,
+								}
+							)
+							.then(() => {
+								frappe.set_route("List", "Task", "Kanban", frm.doc.project_name);
+							});
+					},
+					__("View")
+				);
 			}
 		}
-
-
 	},
 
-	update_total_purchase_cost: function(frm) {
+	update_total_purchase_cost: function (frm) {
 		frappe.call({
 			method: "erpnext.projects.doctype.project.project.recalculate_project_total_purchase_cost",
-			args: {project: frm.doc.name},
+			args: { project: frm.doc.name },
 			freeze: true,
-			freeze_message: __('Recalculating Purchase Cost against this Project...'),
-			callback: function(r) {
+			freeze_message: __("Recalculating Purchase Cost against this Project..."),
+			callback: function (r) {
 				if (r && !r.exc) {
-					frappe.msgprint(__('Total Purchase Cost has been updated'));
+					frappe.msgprint(__("Total Purchase Cost has been updated"));
 					frm.refresh();
 				}
-			}
-
+			},
 		});
 	},
 
-	set_project_status_button: function(frm) {
-		frm.add_custom_button(__('Set Project Status'), () => {
-			let d = new frappe.ui.Dialog({
-				"title": __("Set Project Status"),
-				"fields": [
-					{
-						"fieldname": "status",
-						"fieldtype": "Select",
-						"label": "Status",
-						"reqd": 1,
-						"options": "Completed\nCancelled",
+	set_project_status_button: function (frm) {
+		frm.add_custom_button(
+			__("Set Project Status"),
+			() => {
+				let d = new frappe.ui.Dialog({
+					title: __("Set Project Status"),
+					fields: [
+						{
+							fieldname: "status",
+							fieldtype: "Select",
+							label: "Status",
+							reqd: 1,
+							options: "Completed\nCancelled",
+						},
+					],
+					primary_action: function () {
+						frm.events.set_status(frm, d.get_values().status);
+						d.hide();
 					},
-				],
-				primary_action: function() {
-					frm.events.set_status(frm, d.get_values().status);
-					d.hide();
-				},
-				primary_action_label: __("Set Project Status")
-			}).show();
-		}, __("Actions"));
+					primary_action_label: __("Set Project Status"),
+				}).show();
+			},
+			__("Actions")
+		);
 	},
 
-	create_duplicate: function(frm) {
-		return new Promise(resolve => {
-			frappe.prompt('Project Name', (data) => {
-				frappe.xcall('erpnext.projects.doctype.project.project.create_duplicate_project',
-					{
+	create_duplicate: function (frm) {
+		return new Promise((resolve) => {
+			frappe.prompt("Project Name", (data) => {
+				frappe
+					.xcall("erpnext.projects.doctype.project.project.create_duplicate_project", {
 						prev_doc: frm.doc,
-						project_name: data.value
-					}).then(() => {
-					frappe.set_route('Form', "Project", data.value);
-					frappe.show_alert(__("Duplicate project has been created"));
-				});
+						project_name: data.value,
+					})
+					.then(() => {
+						frappe.set_route("Form", "Project", data.value);
+						frappe.show_alert(__("Duplicate project has been created"));
+					});
 				resolve();
 			});
 		});
 	},
 
-	set_status: function(frm, status) {
-		frappe.confirm(__('Set Project and all Tasks to status {0}?', [status.bold()]), () => {
-			frappe.xcall('erpnext.projects.doctype.project.project.set_project_status',
-				{project: frm.doc.name, status: status}).then(() => {
-				frm.reload_doc();
-			});
+	set_status: function (frm, status) {
+		frappe.confirm(__("Set Project and all Tasks to status {0}?", [status.bold()]), () => {
+			frappe
+				.xcall("erpnext.projects.doctype.project.project.set_project_status", {
+					project: frm.doc.name,
+					status: status,
+				})
+				.then(() => {
+					frm.reload_doc();
+				});
 		});
 	},
-
 });
 
 function open_form(frm, doctype, child_doctype, parentfield) {
@@ -184,5 +209,4 @@
 
 		frappe.ui.form.make_quick_entry(doctype, null, null, new_doc);
 	});
-
 }
diff --git a/erpnext/projects/doctype/project/project_list.js b/erpnext/projects/doctype/project/project_list.js
index 5ad4bb7..1503b1e 100644
--- a/erpnext/projects/doctype/project/project_list.js
+++ b/erpnext/projects/doctype/project/project_list.js
@@ -1,11 +1,11 @@
-frappe.listview_settings['Project'] = {
+frappe.listview_settings["Project"] = {
 	add_fields: ["status", "priority", "is_active", "percent_complete", "expected_end_date", "project_name"],
-	filters:[["status","=", "Open"]],
-	get_indicator: function(doc) {
-		if(doc.status=="Open" && doc.percent_complete) {
+	filters: [["status", "=", "Open"]],
+	get_indicator: function (doc) {
+		if (doc.status == "Open" && doc.percent_complete) {
 			return [__("{0}%", [cint(doc.percent_complete)]), "orange", "percent_complete,>,0|status,=,Open"];
 		} else {
 			return [__(doc.status), frappe.utils.guess_colour(doc.status), "status,=," + doc.status];
 		}
-	}
+	},
 };
diff --git a/erpnext/projects/doctype/project/project_timesheet.js b/erpnext/projects/doctype/project/project_timesheet.js
index 32df04f..bc6de31 100644
--- a/erpnext/projects/doctype/project/project_timesheet.js
+++ b/erpnext/projects/doctype/project/project_timesheet.js
@@ -1,53 +1,63 @@
-
-QUnit.test("test project", function(assert) {
+QUnit.test("test project", function (assert) {
 	assert.expect(6);
 	let done = assert.async();
-	var task_title = ["Documentation","Implementation","Testing"];
+	var task_title = ["Documentation", "Implementation", "Testing"];
 
 	// To create a timesheet with different tasks and costs
-	let timesheet = (title,start_time,end_time,bill_rate,cost_rate) => {
+	let timesheet = (title, start_time, end_time, bill_rate, cost_rate) => {
 		return frappe.run_serially([
-			() => frappe.db.get_value('Task', {'subject': title}, 'name'),
+			() => frappe.db.get_value("Task", { subject: title }, "name"),
 			(task) => {
 				// Creating timesheet for a project
-				return frappe.tests.make('Timesheet', [
-					{time_logs:[
-						[
-							{activity_type: 'Communication'},
-							{from_time: start_time},
-							{to_time: end_time},
-							{hours: 2},
-							{project: 'Test App'},
-							{task: task.name},
-							{billable: '1'},
-							{billing_rate: bill_rate},
-							{costing_rate: cost_rate}
-						]
-					]}
+				return frappe.tests.make("Timesheet", [
+					{
+						time_logs: [
+							[
+								{ activity_type: "Communication" },
+								{ from_time: start_time },
+								{ to_time: end_time },
+								{ hours: 2 },
+								{ project: "Test App" },
+								{ task: task.name },
+								{ billable: "1" },
+								{ billing_rate: bill_rate },
+								{ costing_rate: cost_rate },
+							],
+						],
+					},
 				]);
 			},
 			// To check if a correct billable and costing amount is calculated for every task
 			() => {
-				if(title=== 'Documentation')
-				{
-					assert.ok(cur_frm.get_field('total_billable_amount').get_value()==20,
-						'Billable amount for Documentation task is correctly calculated');
-					assert.ok(cur_frm.get_field('total_costing_amount').get_value()==16,
-						'Costing amount for Documentation task is correctly calculated');
+				if (title === "Documentation") {
+					assert.ok(
+						cur_frm.get_field("total_billable_amount").get_value() == 20,
+						"Billable amount for Documentation task is correctly calculated"
+					);
+					assert.ok(
+						cur_frm.get_field("total_costing_amount").get_value() == 16,
+						"Costing amount for Documentation task is correctly calculated"
+					);
 				}
-				if(title=== 'Implementation')
-				{
-					assert.ok(cur_frm.get_field('total_billable_amount').get_value()==40,
-						'Billable amount for Implementation task is correctly calculated');
-					assert.ok(cur_frm.get_field('total_costing_amount').get_value()==32,
-						'Costing amount for Implementation task is correctly calculated');
+				if (title === "Implementation") {
+					assert.ok(
+						cur_frm.get_field("total_billable_amount").get_value() == 40,
+						"Billable amount for Implementation task is correctly calculated"
+					);
+					assert.ok(
+						cur_frm.get_field("total_costing_amount").get_value() == 32,
+						"Costing amount for Implementation task is correctly calculated"
+					);
 				}
-				if(title=== 'Testing')
-				{
-					assert.ok(cur_frm.get_field('total_billable_amount').get_value()==60,
-						'Billable amount for Testing task correctly calculated');
-					assert.ok(cur_frm.get_field('total_costing_amount').get_value()==50,
-						'Costing amount for Testing task is correctly calculated');
+				if (title === "Testing") {
+					assert.ok(
+						cur_frm.get_field("total_billable_amount").get_value() == 60,
+						"Billable amount for Testing task correctly calculated"
+					);
+					assert.ok(
+						cur_frm.get_field("total_costing_amount").get_value() == 50,
+						"Costing amount for Testing task is correctly calculated"
+					);
 				}
 			},
 		]);
@@ -55,37 +65,39 @@
 	frappe.run_serially([
 		() => {
 			// Creating project with task
-			return frappe.tests.make('Project', [
-				{ project_name: 'Test App'},
-				{ expected_start_date: '2017-07-22'},
-				{ expected_end_date: '2017-09-22'},
-				{ estimated_costing: '10,000.00'},
-				{ tasks:[
-					[
-						{title: 'Documentation'},
-						{start_date: '2017-07-24'},
-						{end_date: '2017-07-31'},
-						{description: 'To make a proper documentation defining requirements etc'}
+			return frappe.tests.make("Project", [
+				{ project_name: "Test App" },
+				{ expected_start_date: "2017-07-22" },
+				{ expected_end_date: "2017-09-22" },
+				{ estimated_costing: "10,000.00" },
+				{
+					tasks: [
+						[
+							{ title: "Documentation" },
+							{ start_date: "2017-07-24" },
+							{ end_date: "2017-07-31" },
+							{ description: "To make a proper documentation defining requirements etc" },
+						],
+						[
+							{ title: "Implementation" },
+							{ start_date: "2017-08-01" },
+							{ end_date: "2017-08-01" },
+							{ description: "Writing algorithms and to code the functionalities" },
+						],
+						[
+							{ title: "Testing" },
+							{ start_date: "2017-08-01" },
+							{ end_date: "2017-08-15" },
+							{ description: "To make the test cases and test the functionalities" },
+						],
 					],
-					[
-						{title: 'Implementation'},
-						{start_date: '2017-08-01'},
-						{end_date: '2017-08-01'},
-						{description: 'Writing algorithms and to code the functionalities'}
-					],
-					[
-						{title: 'Testing'},
-						{start_date: '2017-08-01'},
-						{end_date: '2017-08-15'},
-						{description: 'To make the test cases and test the functionalities'}
-					]
-				]}
+				},
 			]);
 		},
 		// Creating Timesheet with different tasks
-		() => timesheet(task_title[0],'2017-07-24 13:00:00','2017-07-24 13:00:00',10,8),
-		() => timesheet(task_title[1],'2017-07-25 13:00:00','2017-07-25 15:00:00',20,16),
-		() => timesheet(task_title[2],'2017-07-26 13:00:00','2017-07-26 15:00:00',30,25),
-		() => done()
+		() => timesheet(task_title[0], "2017-07-24 13:00:00", "2017-07-24 13:00:00", 10, 8),
+		() => timesheet(task_title[1], "2017-07-25 13:00:00", "2017-07-25 15:00:00", 20, 16),
+		() => timesheet(task_title[2], "2017-07-26 13:00:00", "2017-07-26 15:00:00", 30, 25),
+		() => done(),
 	]);
 });
diff --git a/erpnext/projects/doctype/project_template/project_template.js b/erpnext/projects/doctype/project_template/project_template.js
index 3d3c15c..a2d008a 100644
--- a/erpnext/projects/doctype/project_template/project_template.js
+++ b/erpnext/projects/doctype/project_template/project_template.js
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Project Template', {
+frappe.ui.form.on("Project Template", {
 	// refresh: function(frm) {
 
 	// }
@@ -9,19 +9,19 @@
 		frm.set_query("task", "tasks", function () {
 			return {
 				filters: {
-					"is_template": 1
-				}
+					is_template: 1,
+				},
 			};
 		});
-	}
+	},
 });
 
-frappe.ui.form.on('Project Template Task', {
+frappe.ui.form.on("Project Template Task", {
 	task: function (frm, cdt, cdn) {
 		var row = locals[cdt][cdn];
 		frappe.db.get_value("Task", row.task, "subject", (value) => {
 			row.subject = value.subject;
 			refresh_field("tasks");
 		});
-	}
+	},
 });
diff --git a/erpnext/projects/doctype/project_type/project_type.js b/erpnext/projects/doctype/project_type/project_type.js
index e3dda5e..8506c78 100644
--- a/erpnext/projects/doctype/project_type/project_type.js
+++ b/erpnext/projects/doctype/project_type/project_type.js
@@ -1,6 +1,4 @@
 // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Project Type', {
-
-});
+frappe.ui.form.on("Project Type", {});
diff --git a/erpnext/projects/doctype/project_update/project_update.js b/erpnext/projects/doctype/project_update/project_update.js
index 990c1af..4e3f0fa 100644
--- a/erpnext/projects/doctype/project_update/project_update.js
+++ b/erpnext/projects/doctype/project_update/project_update.js
@@ -1,10 +1,8 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Project Update', {
-	refresh: function() {
-
-	},
+frappe.ui.form.on("Project Update", {
+	refresh: function () {},
 
 	onload: function (frm) {
 		frm.set_value("naming_series", "UPDATE-.project.-.YY.MM.DD.-.####");
@@ -13,5 +11,5 @@
 	validate: function (frm) {
 		frm.set_value("time", frappe.datetime.now_time());
 		frm.set_value("date", frappe.datetime.nowdate());
-	}
+	},
 });
diff --git a/erpnext/projects/doctype/projects_settings/projects_settings.js b/erpnext/projects/doctype/projects_settings/projects_settings.js
index 9902b83..08f50a6 100644
--- a/erpnext/projects/doctype/projects_settings/projects_settings.js
+++ b/erpnext/projects/doctype/projects_settings/projects_settings.js
@@ -1,8 +1,6 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Projects Settings', {
-	refresh: function(frm) {
-
-	}
+frappe.ui.form.on("Projects Settings", {
+	refresh: function (frm) {},
 });
diff --git a/erpnext/projects/doctype/task/task.js b/erpnext/projects/doctype/task/task.js
index 3cd92ee..c56c998 100644
--- a/erpnext/projects/doctype/task/task.js
+++ b/erpnext/projects/doctype/task/task.js
@@ -6,33 +6,34 @@
 frappe.ui.form.on("Task", {
 	setup: function (frm) {
 		frm.make_methods = {
-			'Timesheet': () => frappe.model.open_mapped_doc({
-				method: 'erpnext.projects.doctype.task.task.make_timesheet',
-				frm: frm
-			})
-		}
+			Timesheet: () =>
+				frappe.model.open_mapped_doc({
+					method: "erpnext.projects.doctype.task.task.make_timesheet",
+					frm: frm,
+				}),
+		};
 	},
 
 	onload: function (frm) {
 		frm.set_query("task", "depends_on", function () {
 			let filters = {
-				name: ["!=", frm.doc.name]
+				name: ["!=", frm.doc.name],
 			};
 			if (frm.doc.project) filters["project"] = frm.doc.project;
 			return {
-				filters: filters
+				filters: filters,
 			};
-		})
+		});
 
 		frm.set_query("parent_task", function () {
 			let filters = {
-				"is_group": 1,
-				"name": ["!=", frm.doc.name]
+				is_group: 1,
+				name: ["!=", frm.doc.name],
 			};
 			if (frm.doc.project) filters["project"] = frm.doc.project;
 			return {
-				filters: filters
-			}
+				filters: filters,
+			};
 		});
 	},
 
@@ -40,22 +41,22 @@
 		frappe.call({
 			method: "erpnext.projects.doctype.task.task.check_if_child_exists",
 			args: {
-				name: frm.doc.name
+				name: frm.doc.name,
 			},
 			callback: function (r) {
 				if (r.message.length > 0) {
-					let message = __('Cannot convert Task to non-group because the following child Tasks exist: {0}.',
+					let message = __(
+						"Cannot convert Task to non-group because the following child Tasks exist: {0}.",
 						[r.message.join(", ")]
 					);
 					frappe.msgprint(message);
 					frm.reload_doc();
 				}
-			}
-		})
+			},
+		});
 	},
 
 	validate: function (frm) {
-		frm.doc.project && frappe.model.remove_from_locals("Project",
-			frm.doc.project);
-	}
+		frm.doc.project && frappe.model.remove_from_locals("Project", frm.doc.project);
+	},
 });
diff --git a/erpnext/projects/doctype/task/task_calendar.js b/erpnext/projects/doctype/task/task_calendar.js
index 49dbb76..768eb15 100644
--- a/erpnext/projects/doctype/task/task_calendar.js
+++ b/erpnext/projects/doctype/task/task_calendar.js
@@ -3,21 +3,21 @@
 
 frappe.views.calendar["Task"] = {
 	field_map: {
-		"start": "exp_start_date",
-		"end": "exp_end_date",
-		"id": "name",
-		"title": "subject",
-		"allDay": "allDay",
-		"progress": "progress"
+		start: "exp_start_date",
+		end: "exp_end_date",
+		id: "name",
+		title: "subject",
+		allDay: "allDay",
+		progress: "progress",
 	},
 	gantt: true,
 	filters: [
 		{
-			"fieldtype": "Link",
-			"fieldname": "project",
-			"options": "Project",
-			"label": __("Project")
-		}
+			fieldtype: "Link",
+			fieldname: "project",
+			options: "Project",
+			label: __("Project"),
+		},
 	],
-	get_events_method: "frappe.desk.calendar.get_events"
-}
+	get_events_method: "frappe.desk.calendar.get_events",
+};
diff --git a/erpnext/projects/doctype/task/task_list.js b/erpnext/projects/doctype/task/task_list.js
index 5ab8bae..17b0ed2 100644
--- a/erpnext/projects/doctype/task/task_list.js
+++ b/erpnext/projects/doctype/task/task_list.js
@@ -1,28 +1,36 @@
-frappe.listview_settings['Task'] = {
-	add_fields: ["project", "status", "priority", "exp_start_date",
-		"exp_end_date", "subject", "progress", "depends_on_tasks"],
+frappe.listview_settings["Task"] = {
+	add_fields: [
+		"project",
+		"status",
+		"priority",
+		"exp_start_date",
+		"exp_end_date",
+		"subject",
+		"progress",
+		"depends_on_tasks",
+	],
 	filters: [["status", "=", "Open"]],
-	onload: function(listview) {
+	onload: function (listview) {
 		var method = "erpnext.projects.doctype.task.task.set_multiple_status";
 
-		listview.page.add_menu_item(__("Set as Open"), function() {
-			listview.call_for_selected_items(method, {"status": "Open"});
+		listview.page.add_menu_item(__("Set as Open"), function () {
+			listview.call_for_selected_items(method, { status: "Open" });
 		});
 
-		listview.page.add_menu_item(__("Set as Completed"), function() {
-			listview.call_for_selected_items(method, {"status": "Completed"});
+		listview.page.add_menu_item(__("Set as Completed"), function () {
+			listview.call_for_selected_items(method, { status: "Completed" });
 		});
 	},
-	get_indicator: function(doc) {
+	get_indicator: function (doc) {
 		var colors = {
-			"Open": "orange",
-			"Overdue": "red",
+			Open: "orange",
+			Overdue: "red",
 			"Pending Review": "orange",
-			"Working": "orange",
-			"Completed": "green",
-			"Cancelled": "dark grey",
-			"Template": "blue"
-		}
+			Working: "orange",
+			Completed: "green",
+			Cancelled: "dark grey",
+			Template: "blue",
+		};
 		return [__(doc.status), colors[doc.status], "status,=," + doc.status];
 	},
 	gantt_custom_popup_html: function (ganttobj, task) {
diff --git a/erpnext/projects/doctype/task/task_tree.js b/erpnext/projects/doctype/task/task_tree.js
index 9ebfcdd..fba1b30 100644
--- a/erpnext/projects/doctype/task/task_tree.js
+++ b/erpnext/projects/doctype/task/task_tree.js
@@ -1,84 +1,88 @@
 frappe.provide("frappe.treeview_settings");
 
-frappe.treeview_settings['Task'] = {
+frappe.treeview_settings["Task"] = {
 	get_tree_nodes: "erpnext.projects.doctype.task.task.get_children",
 	add_tree_node: "erpnext.projects.doctype.task.task.add_node",
 	filters: [
 		{
 			fieldname: "project",
-			fieldtype:"Link",
+			fieldtype: "Link",
 			options: "Project",
 			label: __("Project"),
 		},
 		{
 			fieldname: "task",
-			fieldtype:"Link",
+			fieldtype: "Link",
 			options: "Task",
 			label: __("Task"),
-			get_query: function() {
-				var me = frappe.treeview_settings['Task'];
+			get_query: function () {
+				var me = frappe.treeview_settings["Task"];
 				var project = me.page.fields_dict.project.get_value();
-				var args = [["Task", 'is_group', '=', 1]];
-				if(project){
-					args.push(["Task", 'project', "=", project]);
+				var args = [["Task", "is_group", "=", 1]];
+				if (project) {
+					args.push(["Task", "project", "=", project]);
 				}
 				return {
-					filters: args
+					filters: args,
 				};
-			}
-		}
+			},
+		},
 	],
 	breadcrumb: "Projects",
 	get_tree_root: false,
 	root_label: "All Tasks",
 	ignore_fields: ["parent_task"],
-	onload: function(me) {
-		frappe.treeview_settings['Task'].page = {};
-		$.extend(frappe.treeview_settings['Task'].page, me.page);
+	onload: function (me) {
+		frappe.treeview_settings["Task"].page = {};
+		$.extend(frappe.treeview_settings["Task"].page, me.page);
 		me.make_tree();
 	},
 	toolbar: [
 		{
-			label:__("Add Multiple"),
-			condition: function(node) {
+			label: __("Add Multiple"),
+			condition: function (node) {
 				return node.expandable;
 			},
-			click: function(node) {
+			click: function (node) {
 				this.data = [];
 				const dialog = new frappe.ui.Dialog({
 					title: __("Add Multiple Tasks"),
 					fields: [
 						{
-							fieldname: "multiple_tasks", fieldtype: "Table",
-							in_place_edit: true, data: this.data,
+							fieldname: "multiple_tasks",
+							fieldtype: "Table",
+							in_place_edit: true,
+							data: this.data,
 							get_data: () => {
 								return this.data;
 							},
-							fields: [{
-								fieldtype:'Data',
-								fieldname:"subject",
-								in_list_view: 1,
-								reqd: 1,
-								label: __("Subject")
-							}]
+							fields: [
+								{
+									fieldtype: "Data",
+									fieldname: "subject",
+									in_list_view: 1,
+									reqd: 1,
+									label: __("Subject"),
+								},
+							],
 						},
 					],
-					primary_action: function() {
+					primary_action: function () {
 						dialog.hide();
 						return frappe.call({
 							method: "erpnext.projects.doctype.task.task.add_multiple_tasks",
 							args: {
 								data: dialog.get_values()["multiple_tasks"],
-								parent: node.data.value
+								parent: node.data.value,
 							},
-							callback: function() { }
+							callback: function () {},
 						});
 					},
-					primary_action_label: __('Create')
+					primary_action_label: __("Create"),
 				});
 				dialog.show();
-			}
-		}
+			},
+		},
 	],
-	extend_toolbar: true
+	extend_toolbar: true,
 };
diff --git a/erpnext/projects/doctype/task_type/task_type.js b/erpnext/projects/doctype/task_type/task_type.js
index c1be5da..9c6176d 100644
--- a/erpnext/projects/doctype/task_type/task_type.js
+++ b/erpnext/projects/doctype/task_type/task_type.js
@@ -1,8 +1,7 @@
 // Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Task Type', {
+frappe.ui.form.on("Task Type", {
 	// refresh: function(frm) {
-
 	// }
 });
diff --git a/erpnext/projects/doctype/timesheet/timesheet.js b/erpnext/projects/doctype/timesheet/timesheet.js
index eb7a97e..9aba75b 100644
--- a/erpnext/projects/doctype/timesheet/timesheet.js
+++ b/erpnext/projects/doctype/timesheet/timesheet.js
@@ -2,39 +2,39 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.ui.form.on("Timesheet", {
-	setup: function(frm) {
+	setup: function (frm) {
 		frappe.require("/assets/erpnext/js/projects/timer.js");
 
-		frm.ignore_doctypes_on_cancel_all = ['Sales Invoice'];
+		frm.ignore_doctypes_on_cancel_all = ["Sales Invoice"];
 
-		frm.fields_dict.employee.get_query = function() {
+		frm.fields_dict.employee.get_query = function () {
 			return {
-				filters:{
-					'status': 'Active'
-				}
+				filters: {
+					status: "Active",
+				},
 			};
 		};
 
-		frm.fields_dict['time_logs'].grid.get_field('task').get_query = function(frm, cdt, cdn) {
+		frm.fields_dict["time_logs"].grid.get_field("task").get_query = function (frm, cdt, cdn) {
 			var child = locals[cdt][cdn];
-			return{
+			return {
 				filters: {
-					'project': child.project,
-					'status': ["!=", "Cancelled"]
-				}
+					project: child.project,
+					status: ["!=", "Cancelled"],
+				},
 			};
 		};
 
-		frm.fields_dict['time_logs'].grid.get_field('project').get_query = function() {
-			return{
+		frm.fields_dict["time_logs"].grid.get_field("project").get_query = function () {
+			return {
 				filters: {
-					'company': frm.doc.company
-				}
+					company: frm.doc.company,
+				},
 			};
 		};
 	},
 
-	onload: function(frm) {
+	onload: function (frm) {
 		if (frm.doc.__islocal && frm.doc.time_logs) {
 			calculate_time_and_amount(frm);
 		}
@@ -44,33 +44,32 @@
 		}
 	},
 
-	refresh: function(frm) {
+	refresh: function (frm) {
 		if (frm.doc.docstatus == 1) {
 			if (
-				(frm.doc.per_billed < 100)
-				&& (frm.doc.total_billable_hours)
-				&& (frm.doc.total_billable_hours > frm.doc.total_billed_hours)
+				frm.doc.per_billed < 100 &&
+				frm.doc.total_billable_hours &&
+				frm.doc.total_billable_hours > frm.doc.total_billed_hours
 			) {
-				frm.add_custom_button(__("Create Sales Invoice"), function() {
+				frm.add_custom_button(__("Create Sales Invoice"), function () {
 					frm.trigger("make_invoice");
 				});
 			}
 		}
 
 		if (frm.doc.docstatus < 1) {
-
-			let button = 'Start Timer';
-			$.each(frm.doc.time_logs || [], function(i, row) {
-				if ((row.from_time <= frappe.datetime.now_datetime()) && !row.completed) {
-					button = 'Resume Timer';
+			let button = "Start Timer";
+			$.each(frm.doc.time_logs || [], function (i, row) {
+				if (row.from_time <= frappe.datetime.now_datetime() && !row.completed) {
+					button = "Resume Timer";
 				}
 			});
 
-			frm.add_custom_button(__(button), function() {
+			frm.add_custom_button(__(button), function () {
 				var flag = true;
-				$.each(frm.doc.time_logs || [], function(i, row) {
+				$.each(frm.doc.time_logs || [], function (i, row) {
 					// Fetch the row for which from_time is not present
-					if (flag && row.activity_type && !row.from_time){
+					if (flag && row.activity_type && !row.from_time) {
 						erpnext.timesheet.timer(frm, row);
 						row.from_time = frappe.datetime.now_datetime();
 						frm.refresh_fields("time_logs");
@@ -79,7 +78,10 @@
 					}
 					// Fetch the row for timer where activity is not completed and from_time is before now_time
 					if (flag && row.from_time <= frappe.datetime.now_datetime() && !row.completed) {
-						let timestamp = moment(frappe.datetime.now_datetime()).diff(moment(row.from_time),"seconds");
+						let timestamp = moment(frappe.datetime.now_datetime()).diff(
+							moment(row.from_time),
+							"seconds"
+						);
 						erpnext.timesheet.timer(frm, row, timestamp);
 						flag = false;
 					}
@@ -90,152 +92,177 @@
 				}
 			}).addClass("btn-primary");
 		}
-		if(frm.doc.per_billed > 0) {
+		if (frm.doc.per_billed > 0) {
 			frm.fields_dict["time_logs"].grid.toggle_enable("billing_hours", false);
 			frm.fields_dict["time_logs"].grid.toggle_enable("is_billable", false);
 		}
 
 		let filters = {
-			"status": "Open"
+			status: "Open",
 		};
 
 		if (frm.doc.customer) {
 			filters["customer"] = frm.doc.customer;
 		}
 
-		frm.set_query('parent_project', function(doc) {
+		frm.set_query("parent_project", function (doc) {
 			return {
-				filters: filters
+				filters: filters,
 			};
 		});
 
-		frm.trigger('setup_filters');
-		frm.trigger('set_dynamic_field_label');
-		frm.trigger('set_route_options_for_new_task');
+		frm.trigger("setup_filters");
+		frm.trigger("set_dynamic_field_label");
+		frm.trigger("set_route_options_for_new_task");
 	},
 
-	customer: function(frm) {
-		frm.set_query('project', 'time_logs', function(doc) {
+	customer: function (frm) {
+		frm.set_query("project", "time_logs", function (doc) {
 			return {
 				filters: {
-					"customer": doc.customer
-				}
+					customer: doc.customer,
+				},
 			};
 		});
 		frm.refresh();
 	},
 
-	currency: function(frm) {
-		let base_currency = frappe.defaults.get_global_default('currency');
-		if (frm.doc.currency && (base_currency != frm.doc.currency)) {
+	currency: function (frm) {
+		let base_currency = frappe.defaults.get_global_default("currency");
+		if (frm.doc.currency && base_currency != frm.doc.currency) {
 			frappe.call({
 				method: "erpnext.setup.utils.get_exchange_rate",
 				args: {
 					from_currency: frm.doc.currency,
-					to_currency: base_currency
+					to_currency: base_currency,
 				},
-				callback: function(r) {
+				callback: function (r) {
 					if (r.message) {
-						frm.set_value('exchange_rate', flt(r.message));
-						frm.set_df_property("exchange_rate", "description", "1 " + frm.doc.currency + " = [?] " + base_currency);
+						frm.set_value("exchange_rate", flt(r.message));
+						frm.set_df_property(
+							"exchange_rate",
+							"description",
+							"1 " + frm.doc.currency + " = [?] " + base_currency
+						);
 					}
-				}
+				},
 			});
 		}
-		frm.trigger('set_dynamic_field_label');
+		frm.trigger("set_dynamic_field_label");
 	},
 
-	exchange_rate: function(frm) {
-		$.each(frm.doc.time_logs, function(i, d) {
+	exchange_rate: function (frm) {
+		$.each(frm.doc.time_logs, function (i, d) {
 			calculate_billing_costing_amount(frm, d.doctype, d.name);
 		});
 		calculate_time_and_amount(frm);
 	},
 
-	set_dynamic_field_label: function(frm) {
-		let base_currency = frappe.defaults.get_global_default('currency');
-		frm.set_currency_labels(["base_total_costing_amount", "base_total_billable_amount", "base_total_billed_amount"], base_currency);
-		frm.set_currency_labels(["total_costing_amount", "total_billable_amount", "total_billed_amount"], frm.doc.currency);
+	set_dynamic_field_label: function (frm) {
+		let base_currency = frappe.defaults.get_global_default("currency");
+		frm.set_currency_labels(
+			["base_total_costing_amount", "base_total_billable_amount", "base_total_billed_amount"],
+			base_currency
+		);
+		frm.set_currency_labels(
+			["total_costing_amount", "total_billable_amount", "total_billed_amount"],
+			frm.doc.currency
+		);
 
-		frm.toggle_display(["base_total_costing_amount", "base_total_billable_amount", "base_total_billed_amount"],
-			frm.doc.currency != base_currency);
+		frm.toggle_display(
+			["base_total_costing_amount", "base_total_billable_amount", "base_total_billed_amount"],
+			frm.doc.currency != base_currency
+		);
 
 		if (frm.doc.time_logs.length > 0) {
-			frm.set_currency_labels(["base_billing_rate", "base_billing_amount", "base_costing_rate", "base_costing_amount"], base_currency, "time_logs");
-			frm.set_currency_labels(["billing_rate", "billing_amount", "costing_rate", "costing_amount"], frm.doc.currency, "time_logs");
+			frm.set_currency_labels(
+				["base_billing_rate", "base_billing_amount", "base_costing_rate", "base_costing_amount"],
+				base_currency,
+				"time_logs"
+			);
+			frm.set_currency_labels(
+				["billing_rate", "billing_amount", "costing_rate", "costing_amount"],
+				frm.doc.currency,
+				"time_logs"
+			);
 
 			let time_logs_grid = frm.fields_dict.time_logs.grid;
-			$.each(["base_billing_rate", "base_billing_amount", "base_costing_rate", "base_costing_amount"], function(i, d) {
-				if (frappe.meta.get_docfield(time_logs_grid.doctype, d))
-					time_logs_grid.set_column_disp(d, frm.doc.currency != base_currency);
-			});
+			$.each(
+				["base_billing_rate", "base_billing_amount", "base_costing_rate", "base_costing_amount"],
+				function (i, d) {
+					if (frappe.meta.get_docfield(time_logs_grid.doctype, d))
+						time_logs_grid.set_column_disp(d, frm.doc.currency != base_currency);
+				}
+			);
 		}
 		frm.refresh_fields();
 	},
 
 	set_route_options_for_new_task: (frm) => {
-		let task_field = frm.get_docfield('time_logs', 'task');
+		let task_field = frm.get_docfield("time_logs", "task");
 
 		if (task_field) {
-			task_field.get_route_options_for_new_doc = (row) => ({'project': row.doc.project});
+			task_field.get_route_options_for_new_doc = (row) => ({ project: row.doc.project });
 		}
 	},
 
-	make_invoice: function(frm) {
-		let fields = [{
-			"fieldtype": "Link",
-			"label": __("Item Code"),
-			"fieldname": "item_code",
-			"options": "Item"
-		}];
+	make_invoice: function (frm) {
+		let fields = [
+			{
+				fieldtype: "Link",
+				label: __("Item Code"),
+				fieldname: "item_code",
+				options: "Item",
+			},
+		];
 
 		if (!frm.doc.customer) {
 			fields.push({
-				"fieldtype": "Link",
-				"label": __("Customer"),
-				"fieldname": "customer",
-				"options": "Customer",
-				"default": frm.doc.customer
+				fieldtype: "Link",
+				label: __("Customer"),
+				fieldname: "customer",
+				options: "Customer",
+				default: frm.doc.customer,
 			});
 		}
 
 		let dialog = new frappe.ui.Dialog({
 			title: __("Create Sales Invoice"),
-			fields: fields
+			fields: fields,
 		});
 
-		dialog.set_primary_action(__('Create Sales Invoice'), () => {
+		dialog.set_primary_action(__("Create Sales Invoice"), () => {
 			var args = dialog.get_values();
-			if(!args) return;
+			if (!args) return;
 			dialog.hide();
 			return frappe.call({
 				type: "GET",
 				method: "erpnext.projects.doctype.timesheet.timesheet.make_sales_invoice",
 				args: {
-					"source_name": frm.doc.name,
-					"item_code": args.item_code,
-					"customer": frm.doc.customer || args.customer,
-					"currency": frm.doc.currency
+					source_name: frm.doc.name,
+					item_code: args.item_code,
+					customer: frm.doc.customer || args.customer,
+					currency: frm.doc.currency,
 				},
 				freeze: true,
-				callback: function(r) {
-					if(!r.exc) {
+				callback: function (r) {
+					if (!r.exc) {
 						frappe.model.sync(r.message);
 						frappe.set_route("Form", r.message.doctype, r.message.name);
 					}
-				}
+				},
 			});
 		});
 		dialog.show();
 	},
 
-	parent_project: function(frm) {
+	parent_project: function (frm) {
 		set_project_in_timelog(frm);
-	}
+	},
 });
 
 frappe.ui.form.on("Timesheet Detail", {
-	time_logs_remove: function(frm) {
+	time_logs_remove: function (frm) {
 		calculate_time_and_amount(frm);
 	},
 
@@ -248,47 +275,47 @@
 		}
 	},
 
-	from_time: function(frm, cdt, cdn) {
+	from_time: function (frm, cdt, cdn) {
 		calculate_end_time(frm, cdt, cdn);
 	},
 
-	to_time: function(frm, cdt, cdn) {
+	to_time: function (frm, cdt, cdn) {
 		var child = locals[cdt][cdn];
 
-		if(frm._setting_hours) return;
+		if (frm._setting_hours) return;
 
 		var hours = moment(child.to_time).diff(moment(child.from_time), "seconds") / 3600;
 		frappe.model.set_value(cdt, cdn, "hours", hours);
 	},
 
-	time_logs_add: function(frm, cdt, cdn) {
-		if(frm.doc.parent_project) {
-			frappe.model.set_value(cdt, cdn, 'project', frm.doc.parent_project);
+	time_logs_add: function (frm, cdt, cdn) {
+		if (frm.doc.parent_project) {
+			frappe.model.set_value(cdt, cdn, "project", frm.doc.parent_project);
 		}
 	},
 
-	hours: function(frm, cdt, cdn) {
+	hours: function (frm, cdt, cdn) {
 		calculate_end_time(frm, cdt, cdn);
 		calculate_billing_costing_amount(frm, cdt, cdn);
 		calculate_time_and_amount(frm);
 	},
 
-	billing_hours: function(frm, cdt, cdn) {
+	billing_hours: function (frm, cdt, cdn) {
 		calculate_billing_costing_amount(frm, cdt, cdn);
 		calculate_time_and_amount(frm);
 	},
 
-	billing_rate: function(frm, cdt, cdn) {
+	billing_rate: function (frm, cdt, cdn) {
 		calculate_billing_costing_amount(frm, cdt, cdn);
 		calculate_time_and_amount(frm);
 	},
 
-	costing_rate: function(frm, cdt, cdn) {
+	costing_rate: function (frm, cdt, cdn) {
 		calculate_billing_costing_amount(frm, cdt, cdn);
 		calculate_time_and_amount(frm);
 	},
 
-	is_billable: function(frm, cdt, cdn) {
+	is_billable: function (frm, cdt, cdn) {
 		update_billing_hours(frm, cdt, cdn);
 		update_time_rates(frm, cdt, cdn);
 		calculate_billing_costing_amount(frm, cdt, cdn);
@@ -303,7 +330,7 @@
 			args: {
 				employee: frm.doc.employee,
 				activity_type: frm.selected_doc.activity_type,
-				currency: frm.doc.currency
+				currency: frm.doc.currency,
 			},
 			callback: function (r) {
 				if (r.message) {
@@ -311,72 +338,71 @@
 					frappe.model.set_value(cdt, cdn, "costing_rate", r.message["costing_rate"]);
 					calculate_billing_costing_amount(frm, cdt, cdn);
 				}
-			}
+			},
 		});
-	}
+	},
 });
 
-var calculate_end_time = function(frm, cdt, cdn) {
+var calculate_end_time = function (frm, cdt, cdn) {
 	let child = locals[cdt][cdn];
 
-	if(!child.from_time) {
+	if (!child.from_time) {
 		// if from_time value is not available then set the current datetime
 		frappe.model.set_value(cdt, cdn, "from_time", frappe.datetime.get_datetime_as_string());
 	}
 
 	let d = moment(child.from_time);
-	if(child.hours) {
+	if (child.hours) {
 		d.add(child.hours, "hours");
 		frm._setting_hours = true;
-		frappe.model.set_value(cdt, cdn, "to_time",
-			d.format(frappe.defaultDatetimeFormat)).then(() => {
+		frappe.model.set_value(cdt, cdn, "to_time", d.format(frappe.defaultDatetimeFormat)).then(() => {
 			frm._setting_hours = false;
 		});
 	}
 };
 
-var update_billing_hours = function(frm, cdt, cdn) {
+var update_billing_hours = function (frm, cdt, cdn) {
 	let child = frappe.get_doc(cdt, cdn);
 	if (!child.is_billable) {
-		frappe.model.set_value(cdt, cdn, 'billing_hours', 0.0);
+		frappe.model.set_value(cdt, cdn, "billing_hours", 0.0);
 	} else {
 		// bill all hours by default
 		frappe.model.set_value(cdt, cdn, "billing_hours", child.hours);
 	}
 };
 
-var update_time_rates = function(frm, cdt, cdn) {
+var update_time_rates = function (frm, cdt, cdn) {
 	let child = frappe.get_doc(cdt, cdn);
 	if (!child.is_billable) {
-		frappe.model.set_value(cdt, cdn, 'billing_rate', 0.0);
+		frappe.model.set_value(cdt, cdn, "billing_rate", 0.0);
 	}
 };
 
-var calculate_billing_costing_amount = function(frm, cdt, cdn) {
+var calculate_billing_costing_amount = function (frm, cdt, cdn) {
 	let row = frappe.get_doc(cdt, cdn);
 	let billing_amount = 0.0;
 	let base_billing_amount = 0.0;
 	let exchange_rate = flt(frm.doc.exchange_rate);
-	frappe.model.set_value(cdt, cdn, 'base_billing_rate', flt(row.billing_rate) * exchange_rate);
-	frappe.model.set_value(cdt, cdn, 'base_costing_rate', flt(row.costing_rate) * exchange_rate);
+	frappe.model.set_value(cdt, cdn, "base_billing_rate", flt(row.billing_rate) * exchange_rate);
+	frappe.model.set_value(cdt, cdn, "base_costing_rate", flt(row.costing_rate) * exchange_rate);
 	if (row.billing_hours && row.is_billable) {
 		base_billing_amount = flt(row.billing_hours) * flt(row.base_billing_rate);
 		billing_amount = flt(row.billing_hours) * flt(row.billing_rate);
 	}
 
-	frappe.model.set_value(cdt, cdn, 'base_billing_amount', base_billing_amount);
-	frappe.model.set_value(cdt, cdn, 'base_costing_amount', flt(row.base_costing_rate) * flt(row.hours));
-	frappe.model.set_value(cdt, cdn, 'billing_amount', billing_amount);
-	frappe.model.set_value(cdt, cdn, 'costing_amount', flt(row.costing_rate) * flt(row.hours));
+	frappe.model.set_value(cdt, cdn, "base_billing_amount", base_billing_amount);
+	frappe.model.set_value(cdt, cdn, "base_costing_amount", flt(row.base_costing_rate) * flt(row.hours));
+	frappe.model.set_value(cdt, cdn, "billing_amount", billing_amount);
+	frappe.model.set_value(cdt, cdn, "costing_amount", flt(row.costing_rate) * flt(row.hours));
 };
 
-var calculate_time_and_amount = function(frm) {
+var calculate_time_and_amount = function (frm) {
 	let tl = frm.doc.time_logs || [];
 	let total_working_hr = 0;
 	let total_billing_hr = 0;
 	let total_billable_amount = 0;
 	let total_costing_amount = 0;
-	for(var i=0; i<tl.length; i++) {
+	for (var i = 0; i < tl.length; i++) {
 		if (tl[i].hours) {
 			total_working_hr += tl[i].hours;
 			total_billable_amount += tl[i].billing_amount;
@@ -395,10 +421,10 @@
 };
 
 // set employee (and company) to the one that's currently logged in
-const set_employee_and_company = function(frm) {
+const set_employee_and_company = function (frm) {
 	const options = { user_id: frappe.session.user };
-	const fields = ['name', 'company'];
-	frappe.db.get_value('Employee', options, fields).then(({ message }) => {
+	const fields = ["name", "company"];
+	frappe.db.get_value("Employee", options, fields).then(({ message }) => {
 		if (message) {
 			// there is an employee with the currently logged in user_id
 			frm.set_value("employee", message.name);
@@ -408,8 +434,8 @@
 };
 
 function set_project_in_timelog(frm) {
-	if(frm.doc.parent_project) {
-		$.each(frm.doc.time_logs || [], function(i, item) {
+	if (frm.doc.parent_project) {
+		$.each(frm.doc.time_logs || [], function (i, item) {
 			frappe.model.set_value(item.doctype, item.name, "project", frm.doc.parent_project);
 		});
 	}
diff --git a/erpnext/projects/doctype/timesheet/timesheet_calendar.js b/erpnext/projects/doctype/timesheet/timesheet_calendar.js
index 80967ed..27992a1 100644
--- a/erpnext/projects/doctype/timesheet/timesheet_calendar.js
+++ b/erpnext/projects/doctype/timesheet/timesheet_calendar.js
@@ -1,32 +1,32 @@
 frappe.views.calendar["Timesheet"] = {
 	field_map: {
-		"start": "start_date",
-		"end": "end_date",
-		"name": "parent",
-		"id": "name",
-		"allDay": "allDay",
-		"child_name": "name",
-		"title": "title"
+		start: "start_date",
+		end: "end_date",
+		name: "parent",
+		id: "name",
+		allDay: "allDay",
+		child_name: "name",
+		title: "title",
 	},
 	style_map: {
-		"0": "info",
-		"1": "standard",
-		"2": "danger"
+		0: "info",
+		1: "standard",
+		2: "danger",
 	},
 	gantt: true,
 	filters: [
 		{
-			"fieldtype": "Link",
-			"fieldname": "project",
-			"options": "Project",
-			"label": __("Project")
+			fieldtype: "Link",
+			fieldname: "project",
+			options: "Project",
+			label: __("Project"),
 		},
 		{
-			"fieldtype": "Link",
-			"fieldname": "employee",
-			"options": "Employee",
-			"label": __("Employee")
-		}
+			fieldtype: "Link",
+			fieldname: "employee",
+			options: "Employee",
+			label: __("Employee"),
+		},
 	],
-	get_events_method: "erpnext.projects.doctype.timesheet.timesheet.get_events"
-}
+	get_events_method: "erpnext.projects.doctype.timesheet.timesheet.get_events",
+};
diff --git a/erpnext/projects/doctype/timesheet/timesheet_list.js b/erpnext/projects/doctype/timesheet/timesheet_list.js
index b59fdc9..0de568c 100644
--- a/erpnext/projects/doctype/timesheet/timesheet_list.js
+++ b/erpnext/projects/doctype/timesheet/timesheet_list.js
@@ -1,16 +1,16 @@
-frappe.listview_settings['Timesheet'] = {
+frappe.listview_settings["Timesheet"] = {
 	add_fields: ["status", "total_hours", "start_date", "end_date"],
-	get_indicator: function(doc) {
-		if (doc.status== "Billed") {
-			return [__("Billed"), "green", "status,=," + "Billed"]
+	get_indicator: function (doc) {
+		if (doc.status == "Billed") {
+			return [__("Billed"), "green", "status,=," + "Billed"];
 		}
 
-		if (doc.status== "Payslip") {
-			return [__("Payslip"), "green", "status,=," + "Payslip"]
+		if (doc.status == "Payslip") {
+			return [__("Payslip"), "green", "status,=," + "Payslip"];
 		}
 
-		if (doc.status== "Completed") {
-			return [__("Completed"), "green", "status,=," + "Completed"]
+		if (doc.status == "Completed") {
+			return [__("Completed"), "green", "status,=," + "Completed"];
 		}
-	}
+	},
 };
diff --git a/erpnext/projects/report/daily_timesheet_summary/daily_timesheet_summary.js b/erpnext/projects/report/daily_timesheet_summary/daily_timesheet_summary.js
index 93cb940..60525a1 100644
--- a/erpnext/projects/report/daily_timesheet_summary/daily_timesheet_summary.js
+++ b/erpnext/projects/report/daily_timesheet_summary/daily_timesheet_summary.js
@@ -2,18 +2,18 @@
 // For license information, please see license.txt
 
 frappe.query_reports["Daily Timesheet Summary"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today()
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.get_today(),
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today()
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.get_today(),
 		},
-	]
-}
+	],
+};
diff --git a/erpnext/projects/report/delayed_tasks_summary/delayed_tasks_summary.js b/erpnext/projects/report/delayed_tasks_summary/delayed_tasks_summary.js
index fa70b93..ad90d04 100644
--- a/erpnext/projects/report/delayed_tasks_summary/delayed_tasks_summary.js
+++ b/erpnext/projects/report/delayed_tasks_summary/delayed_tasks_summary.js
@@ -1,33 +1,32 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Delayed Tasks Summary"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname": "from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date"
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
 		},
 		{
-			"fieldname": "to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date"
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
 		},
 		{
-			"fieldname": "priority",
-			"label": __("Priority"),
-			"fieldtype": "Select",
-			"options": ["", "Low", "Medium", "High", "Urgent"]
+			fieldname: "priority",
+			label: __("Priority"),
+			fieldtype: "Select",
+			options: ["", "Low", "Medium", "High", "Urgent"],
 		},
 		{
-			"fieldname": "status",
-			"label": __("Status"),
-			"fieldtype": "Select",
-			"options": ["", "Open", "Working","Pending Review","Overdue","Completed"]
+			fieldname: "status",
+			label: __("Status"),
+			fieldtype: "Select",
+			options: ["", "Open", "Working", "Pending Review", "Overdue", "Completed"],
 		},
 	],
-	"formatter": function(value, row, column, data, default_formatter) {
+	formatter: function (value, row, column, data, default_formatter) {
 		value = default_formatter(value, row, column, data);
 		if (column.id == "delay") {
 			if (data["delay"] > 0) {
@@ -36,6 +35,6 @@
 				value = `<p style="color: green; font-weight: bold">${value}</p>`;
 			}
 		}
-		return value
-	}
+		return value;
+	},
 };
diff --git a/erpnext/projects/report/project_summary/project_summary.js b/erpnext/projects/report/project_summary/project_summary.js
index 21dbfda..072098d 100644
--- a/erpnext/projects/report/project_summary/project_summary.js
+++ b/erpnext/projects/report/project_summary/project_summary.js
@@ -1,42 +1,41 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Project Summary"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname": "company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company"),
-			"reqd": 1
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
+			reqd: 1,
 		},
 		{
-			"fieldname": "is_active",
-			"label": __("Is Active"),
-			"fieldtype": "Select",
-			"options": "\nYes\nNo",
-			"default": "Yes",
+			fieldname: "is_active",
+			label: __("Is Active"),
+			fieldtype: "Select",
+			options: "\nYes\nNo",
+			default: "Yes",
 		},
 		{
-			"fieldname": "status",
-			"label": __("Status"),
-			"fieldtype": "Select",
-			"options": "\nOpen\nCompleted\nCancelled",
-			"default": "Open"
+			fieldname: "status",
+			label: __("Status"),
+			fieldtype: "Select",
+			options: "\nOpen\nCompleted\nCancelled",
+			default: "Open",
 		},
 		{
-			"fieldname": "project_type",
-			"label": __("Project Type"),
-			"fieldtype": "Link",
-			"options": "Project Type"
+			fieldname: "project_type",
+			label: __("Project Type"),
+			fieldtype: "Link",
+			options: "Project Type",
 		},
 		{
-			"fieldname": "priority",
-			"label": __("Priority"),
-			"fieldtype": "Select",
-			"options": "\nLow\nMedium\nHigh"
-		}
-	]
+			fieldname: "priority",
+			label: __("Priority"),
+			fieldtype: "Select",
+			options: "\nLow\nMedium\nHigh",
+		},
+	],
 };
diff --git a/erpnext/projects/report/project_wise_stock_tracking/project_wise_stock_tracking.js b/erpnext/projects/report/project_wise_stock_tracking/project_wise_stock_tracking.js
index ccca264..dcadcc0 100644
--- a/erpnext/projects/report/project_wise_stock_tracking/project_wise_stock_tracking.js
+++ b/erpnext/projects/report/project_wise_stock_tracking/project_wise_stock_tracking.js
@@ -2,7 +2,5 @@
 // For license information, please see license.txt
 
 frappe.query_reports["Project wise Stock Tracking"] = {
-	"filters": [
-
-	]
-}
+	filters: [],
+};
diff --git a/erpnext/projects/report/timesheet_billing_summary/timesheet_billing_summary.js b/erpnext/projects/report/timesheet_billing_summary/timesheet_billing_summary.js
index 1efd0c6..2cd1cd9 100644
--- a/erpnext/projects/report/timesheet_billing_summary/timesheet_billing_summary.js
+++ b/erpnext/projects/report/timesheet_billing_summary/timesheet_billing_summary.js
@@ -27,21 +27,16 @@
 			fieldname: "from_date",
 			label: __("From Date"),
 			fieldtype: "Date",
-			default: frappe.datetime.add_months(
-				frappe.datetime.month_start(),
-				-1
-			),
+			default: frappe.datetime.add_months(frappe.datetime.month_start(), -1),
 		},
 		{
 			fieldname: "to_date",
 			label: __("To Date"),
 			fieldtype: "Date",
-			default: frappe.datetime.add_days(
-				frappe.datetime.month_start(),
-				-1
-			),
+			default: frappe.datetime.add_days(frappe.datetime.month_start(), -1),
 		},
-		{  // NOTE: `update_group_by_options` expects this filter to be the fifth in the list
+		{
+			// NOTE: `update_group_by_options` expects this filter to be the fifth in the list
 			fieldname: "group_by",
 			label: __("Group By"),
 			fieldtype: "Select",
diff --git a/erpnext/projects/web_form/tasks/tasks.js b/erpnext/projects/web_form/tasks/tasks.js
index ffc5e98..8f56ebb 100644
--- a/erpnext/projects/web_form/tasks/tasks.js
+++ b/erpnext/projects/web_form/tasks/tasks.js
@@ -1,3 +1,3 @@
-frappe.ready(function() {
+frappe.ready(function () {
 	// bind events here
-})
+});
diff --git a/erpnext/public/js/address.js b/erpnext/public/js/address.js
index 57f7163..606e0b1 100644
--- a/erpnext/public/js/address.js
+++ b/erpnext/public/js/address.js
@@ -2,24 +2,23 @@
 // For license information, please see license.txt
 
 frappe.ui.form.on("Address", {
-	is_your_company_address: function(frm) {
-		frm.clear_table('links');
-		if(frm.doc.is_your_company_address) {
-			frm.add_child('links', {
-				link_doctype: 'Company',
-				link_name: frappe.defaults.get_user_default('Company')
+	is_your_company_address: function (frm) {
+		frm.clear_table("links");
+		if (frm.doc.is_your_company_address) {
+			frm.add_child("links", {
+				link_doctype: "Company",
+				link_name: frappe.defaults.get_user_default("Company"),
 			});
-			frm.set_query('link_doctype', 'links', () => {
+			frm.set_query("link_doctype", "links", () => {
 				return {
 					filters: {
-						name: 'Company'
-					}
+						name: "Company",
+					},
 				};
 			});
-			frm.refresh_field('links');
+			frm.refresh_field("links");
+		} else {
+			frm.trigger("refresh");
 		}
-		else {
-			frm.trigger('refresh');
-		}
-	}
+	},
 });
diff --git a/erpnext/public/js/bank_reconciliation_tool/data_table_manager.js b/erpnext/public/js/bank_reconciliation_tool/data_table_manager.js
index 5e5742a..4aa087e 100644
--- a/erpnext/public/js/bank_reconciliation_tool/data_table_manager.js
+++ b/erpnext/public/js/bank_reconciliation_tool/data_table_manager.js
@@ -18,12 +18,11 @@
 	make_dt() {
 		var me = this;
 		frappe.call({
-			method:
-				"erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.get_bank_transactions",
+			method: "erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.get_bank_transactions",
 			args: {
 				bank_account: this.bank_account,
 				from_date: this.bank_statement_from_date,
-				to_date: this.bank_statement_to_date
+				to_date: this.bank_statement_to_date,
 			},
 			callback: function (response) {
 				me.format_data(response.message);
@@ -62,18 +61,14 @@
 				editable: false,
 				width: 100,
 				format: (value) =>
-					"<span style='color:green;'>" +
-					format_currency(value, this.currency) +
-					"</span>",
+					"<span style='color:green;'>" + format_currency(value, this.currency) + "</span>",
 			},
 			{
 				name: __("Withdrawal"),
 				editable: false,
 				width: 100,
 				format: (value) =>
-					"<span style='color:red;'>" +
-					format_currency(value, this.currency) +
-					"</span>",
+					"<span style='color:red;'>" + format_currency(value, this.currency) + "</span>",
 			},
 			{
 				name: __("Unallocated Amount"),
@@ -117,13 +112,15 @@
 		return [
 			row["date"],
 			row["party_type"],
-			frappe.form.formatters.Link(row["party"], {options: row["party_type"]}),
+			frappe.form.formatters.Link(row["party"], { options: row["party_type"] }),
 			row["description"],
 			row["deposit"],
 			row["withdrawal"],
 			row["unallocated_amount"],
 			row["reference_number"],
-			`<button class="btn btn-primary btn-xs center" data-name="${row["name"]}">${__("Actions")}</button>`
+			`<button class="btn btn-primary btn-xs center" data-name="${row["name"]}">${__(
+				"Actions"
+			)}</button>`,
 		];
 	}
 
@@ -135,14 +132,8 @@
 			checkboxColumn: false,
 			inlineFilters: true,
 		};
-		this.datatable = new frappe.DataTable(
-			this.$reconciliation_tool_dt.get(0),
-			datatable_options
-		);
-		$(`.${this.datatable.style.scopeClass} .dt-scrollable`).css(
-			"max-height",
-			"calc(100vh - 400px)"
-		);
+		this.datatable = new frappe.DataTable(this.$reconciliation_tool_dt.get(0), datatable_options);
+		$(`.${this.datatable.style.scopeClass} .dt-scrollable`).css("max-height", "calc(100vh - 400px)");
 
 		if (this.transactions.length > 0) {
 			this.$reconciliation_tool_dt.show();
@@ -155,27 +146,18 @@
 
 	set_listeners() {
 		var me = this;
-		$(`.${this.datatable.style.scopeClass} .dt-scrollable`).on(
-			"click",
-			`.btn`,
-			function () {
-				me.dialog_manager.show_dialog(
-					$(this).attr("data-name"),
-					(bank_transaction) => me.update_dt_cards(bank_transaction)
-				);
-				return true;
-			}
-		);
+		$(`.${this.datatable.style.scopeClass} .dt-scrollable`).on("click", `.btn`, function () {
+			me.dialog_manager.show_dialog($(this).attr("data-name"), (bank_transaction) =>
+				me.update_dt_cards(bank_transaction)
+			);
+			return true;
+		});
 	}
 
 	update_dt_cards(bank_transaction) {
-		const transaction_index = this.transaction_dt_map[
-			bank_transaction.name
-		];
+		const transaction_index = this.transaction_dt_map[bank_transaction.name];
 		if (bank_transaction.unallocated_amount > 0) {
-			this.transactions[transaction_index] = this.format_row(
-				bank_transaction
-			);
+			this.transactions[transaction_index] = this.format_row(bank_transaction);
 		} else {
 			this.transactions.splice(transaction_index, 1);
 			for (const [k, v] of Object.entries(this.transaction_dt_map)) {
@@ -191,14 +173,9 @@
 
 		// this.make_dt();
 		this.get_cleared_balance().then(() => {
-			this.cards_manager.$cards[1].set_value(
-				format_currency(this.cleared_balance),
-				this.currency
-			);
+			this.cards_manager.$cards[1].set_value(format_currency(this.cleared_balance), this.currency);
 			this.cards_manager.$cards[2].set_value(
-				format_currency(
-					this.bank_statement_closing_balance - this.cleared_balance
-				),
+				format_currency(this.bank_statement_closing_balance - this.cleared_balance),
 				this.currency
 			);
 			this.cards_manager.$cards[2].set_value_color(
@@ -212,14 +189,12 @@
 	get_cleared_balance() {
 		if (this.bank_account && this.bank_statement_to_date) {
 			return frappe.call({
-				method:
-					"erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.get_account_balance",
+				method: "erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.get_account_balance",
 				args: {
 					bank_account: this.bank_account,
 					till_date: this.bank_statement_to_date,
 				},
-				callback: (response) =>
-					(this.cleared_balance = response.message),
+				callback: (response) => (this.cleared_balance = response.message),
 			});
 		}
 	}
diff --git a/erpnext/public/js/bank_reconciliation_tool/dialog_manager.js b/erpnext/public/js/bank_reconciliation_tool/dialog_manager.js
index 1f47347..6ff38f9 100644
--- a/erpnext/public/js/bank_reconciliation_tool/dialog_manager.js
+++ b/erpnext/public/js/bank_reconciliation_tool/dialog_manager.js
@@ -1,7 +1,15 @@
 frappe.provide("erpnext.accounts.bank_reconciliation");
 
 erpnext.accounts.bank_reconciliation.DialogManager = class DialogManager {
-	constructor(company, bank_account, bank_statement_from_date, bank_statement_to_date, filter_by_reference_date, from_reference_date, to_reference_date) {
+	constructor(
+		company,
+		bank_account,
+		bank_statement_from_date,
+		bank_statement_to_date,
+		filter_by_reference_date,
+		from_reference_date,
+		to_reference_date
+	) {
 		this.bank_account = bank_account;
 		this.company = company;
 		this.make_dialog();
@@ -61,16 +69,15 @@
 
 	get_linked_vouchers(document_types) {
 		frappe.call({
-			method:
-				"erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.get_linked_payments",
+			method: "erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.get_linked_payments",
 			args: {
 				bank_transaction_name: this.bank_transaction_name,
 				document_types: document_types,
 				from_date: this.bank_statement_from_date,
 				to_date: this.bank_statement_to_date,
 				filter_by_reference_date: this.filter_by_reference_date,
-				from_reference_date:this.from_reference_date,
-				to_reference_date:this.to_reference_date
+				from_reference_date: this.from_reference_date,
+				to_reference_date: this.to_reference_date,
 			},
 
 			callback: (result) => {
@@ -105,7 +112,7 @@
 				editable: false,
 				width: 1,
 				format: (value, row) => {
-					return frappe.form.formatters.Link(value, {options: row[2].content});
+					return frappe.form.formatters.Link(value, { options: row[2].content });
 				},
 			},
 			{
@@ -152,10 +159,7 @@
 				checkboxColumn: true,
 				inlineFilters: true,
 			};
-			this.datatable = new frappe.DataTable(
-				proposals_wrapper.get(0),
-				datatable_options
-			);
+			this.datatable = new frappe.DataTable(proposals_wrapper.get(0), datatable_options);
 		} else {
 			this.datatable.refresh(this.data, this.columns);
 			this.datatable.rowmanager.checkMap = [];
@@ -217,10 +221,9 @@
 					title: __("Reconcile the Bank Transaction"),
 					fields: fields,
 					size: "large",
-					primary_action: (values) =>
-						this.reconciliation_dialog_primary_action(values),
+					primary_action: (values) => this.reconciliation_dialog_primary_action(values),
 				});
-			}
+			},
 		});
 	}
 
@@ -255,7 +258,9 @@
 			{
 				fieldtype: "HTML",
 				fieldname: "no_matching_vouchers",
-				options: __("<div class=\"text-muted text-center\">{0}</div>", [__("No Matching Vouchers Found")])
+				options: __('<div class="text-muted text-center">{0}</div>', [
+					__("No Matching Vouchers Found"),
+				]),
 			},
 			{
 				fieldtype: "Section Break",
@@ -299,8 +304,7 @@
 				click: () => {
 					this.edit_in_full_page();
 				},
-				depends_on:
-					"eval:doc.action=='Create Voucher'",
+				depends_on: "eval:doc.action=='Create Voucher'",
 			},
 			{
 				fieldname: "column_break_7",
@@ -313,8 +317,7 @@
 				label: "Journal Entry Type",
 				options:
 					"Journal Entry\nInter Company Journal Entry\nBank Entry\nCash Entry\nCredit Card Entry\nDebit Note\nCredit Note\nContra Entry\nExcise Entry\nWrite Off Entry\nOpening Entry\nDepreciation Entry\nExchange Rate Revaluation\nDeferred Revenue\nDeferred Expense",
-				depends_on:
-					"eval:doc.action=='Create Voucher' &&  doc.document_type=='Journal Entry'",
+				depends_on: "eval:doc.action=='Create Voucher' &&  doc.document_type=='Journal Entry'",
 				mandatory_depends_on:
 					"eval:doc.action=='Create Voucher' &&  doc.document_type=='Journal Entry'",
 			},
@@ -323,8 +326,7 @@
 				fieldtype: "Link",
 				label: "Account",
 				options: "Account",
-				depends_on:
-					"eval:doc.action=='Create Voucher' &&  doc.document_type=='Journal Entry'",
+				depends_on: "eval:doc.action=='Create Voucher' &&  doc.document_type=='Journal Entry'",
 				mandatory_depends_on:
 					"eval:doc.action=='Create Voucher' &&  doc.document_type=='Journal Entry'",
 				get_query: () => {
@@ -342,14 +344,11 @@
 				label: "Party Type",
 				options: "DocType",
 				mandatory_depends_on:
-				"eval:doc.action=='Create Voucher' &&  doc.document_type=='Payment Entry'",
+					"eval:doc.action=='Create Voucher' &&  doc.document_type=='Payment Entry'",
 				get_query: function () {
 					return {
 						filters: {
-							name: [
-								"in",
-								Object.keys(frappe.boot.party_account_types),
-							],
+							name: ["in", Object.keys(frappe.boot.party_account_types)],
 						},
 					};
 				},
@@ -367,16 +366,14 @@
 				fieldtype: "Link",
 				label: "Project",
 				options: "Project",
-				depends_on:
-					"eval:doc.action=='Create Voucher' && doc.document_type=='Payment Entry'",
+				depends_on: "eval:doc.action=='Create Voucher' && doc.document_type=='Payment Entry'",
 			},
 			{
 				fieldname: "cost_center",
 				fieldtype: "Link",
 				label: "Cost Center",
 				options: "Cost Center",
-				depends_on:
-					"eval:doc.action=='Create Voucher' && doc.document_type=='Payment Entry'",
+				depends_on: "eval:doc.action=='Create Voucher' && doc.document_type=='Payment Entry'",
 			},
 			{
 				fieldtype: "Section Break",
@@ -435,7 +432,7 @@
 				options: "Currency",
 				read_only: 1,
 				hidden: 1,
-			}
+			},
 		];
 	}
 
@@ -457,18 +454,11 @@
 
 	reconciliation_dialog_primary_action(values) {
 		if (values.action == "Match Against Voucher") this.match(values);
-		if (
-			values.action == "Create Voucher" &&
-			values.document_type == "Payment Entry"
-		)
+		if (values.action == "Create Voucher" && values.document_type == "Payment Entry")
 			this.add_payment_entry(values);
-		if (
-			values.action == "Create Voucher" &&
-			values.document_type == "Journal Entry"
-		)
+		if (values.action == "Create Voucher" && values.document_type == "Journal Entry")
 			this.add_journal_entry(values);
-		else if (values.action == "Update Bank Transaction")
-			this.update_transaction(values);
+		else if (values.action == "Update Bank Transaction") this.update_transaction(values);
 	}
 
 	match() {
@@ -486,8 +476,7 @@
 			});
 		});
 		frappe.call({
-			method:
-				"erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.reconcile_vouchers",
+			method: "erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.reconcile_vouchers",
 			args: {
 				bank_transaction_name: this.bank_transaction.name,
 				vouchers: vouchers,
@@ -503,8 +492,7 @@
 
 	add_payment_entry(values) {
 		frappe.call({
-			method:
-				"erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.create_payment_entry_bts",
+			method: "erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.create_payment_entry_bts",
 			args: {
 				bank_transaction_name: this.bank_transaction.name,
 				reference_number: values.reference_number,
@@ -517,7 +505,9 @@
 				cost_center: values.cost_center,
 			},
 			callback: (response) => {
-				const alert_string = __("Bank Transaction {0} added as Payment Entry", [this.bank_transaction.name]);
+				const alert_string = __("Bank Transaction {0} added as Payment Entry", [
+					this.bank_transaction.name,
+				]);
 				frappe.show_alert(alert_string);
 				this.update_dt_cards(response.message);
 				this.dialog.hide();
@@ -527,8 +517,7 @@
 
 	add_journal_entry(values) {
 		frappe.call({
-			method:
-				"erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.create_journal_entry_bts",
+			method: "erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.create_journal_entry_bts",
 			args: {
 				bank_transaction_name: this.bank_transaction.name,
 				reference_number: values.reference_number,
@@ -541,7 +530,9 @@
 				second_account: values.second_account,
 			},
 			callback: (response) => {
-				const alert_string = __("Bank Transaction {0} added as Journal Entry", [this.bank_transaction.name]);
+				const alert_string = __("Bank Transaction {0} added as Journal Entry", [
+					this.bank_transaction.name,
+				]);
 				frappe.show_alert(alert_string);
 				this.update_dt_cards(response.message);
 				this.dialog.hide();
@@ -551,8 +542,7 @@
 
 	update_transaction(values) {
 		frappe.call({
-			method:
-				"erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.update_bank_transaction",
+			method: "erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.update_bank_transaction",
 			args: {
 				bank_transaction_name: this.bank_transaction.name,
 				reference_number: values.reference_number,
@@ -572,8 +562,7 @@
 		const values = this.dialog.get_values(true);
 		if (values.document_type == "Payment Entry") {
 			frappe.call({
-				method:
-					"erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.create_payment_entry_bts",
+				method: "erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.create_payment_entry_bts",
 				args: {
 					bank_transaction_name: this.bank_transaction.name,
 					reference_number: values.reference_number,
@@ -584,7 +573,7 @@
 					mode_of_payment: values.mode_of_payment,
 					project: values.project,
 					cost_center: values.cost_center,
-					allow_edit: true
+					allow_edit: true,
 				},
 				callback: (r) => {
 					const doc = frappe.model.sync(r.message);
@@ -593,8 +582,7 @@
 			});
 		} else {
 			frappe.call({
-				method:
-					"erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.create_journal_entry_bts",
+				method: "erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.create_journal_entry_bts",
 				args: {
 					bank_transaction_name: this.bank_transaction.name,
 					reference_number: values.reference_number,
@@ -605,7 +593,7 @@
 					mode_of_payment: values.mode_of_payment,
 					entry_type: values.journal_entry_type,
 					second_account: values.second_account,
-					allow_edit: true
+					allow_edit: true,
 				},
 				callback: (r) => {
 					var doc = frappe.model.sync(r.message);
@@ -614,5 +602,4 @@
 			});
 		}
 	}
-
 };
diff --git a/erpnext/public/js/bank_reconciliation_tool/number_card.js b/erpnext/public/js/bank_reconciliation_tool/number_card.js
index 7e1b269..d39884c 100644
--- a/erpnext/public/js/bank_reconciliation_tool/number_card.js
+++ b/erpnext/public/js/bank_reconciliation_tool/number_card.js
@@ -26,8 +26,7 @@
 				currency: this.currency,
 			},
 			{
-				value:
-					this.bank_statement_closing_balance - this.cleared_balance,
+				value: this.bank_statement_closing_balance - this.cleared_balance,
 				label: __("Difference"),
 				datatype: "Currency",
 				currency: this.currency,
@@ -41,11 +40,9 @@
 			number_card.$card.appendTo(this.$summary);
 		});
 		this.$cards[2].set_value_color(
-			this.bank_statement_closing_balance - this.cleared_balance == 0
-				? "text-success"
-				: "text-danger"
+			this.bank_statement_closing_balance - this.cleared_balance == 0 ? "text-success" : "text-danger"
 		);
-		this.$summary.css({"border-bottom": "0px", "margin-left": "0px", "margin-right": "0px"});
+		this.$summary.css({ "border-bottom": "0px", "margin-left": "0px", "margin-right": "0px" });
 		this.$summary.show();
 	}
 };
@@ -60,16 +57,10 @@
 	}
 
 	set_value_color(color) {
-		this.$card
-			.find("div")
-			.removeClass("text-danger text-success")
-			.addClass(`${color}`);
+		this.$card.find("div").removeClass("text-danger text-success").addClass(`${color}`);
 	}
 
 	set_indicator(color) {
-		this.$card
-			.find("span")
-			.removeClass("indicator red green")
-			.addClass(`indicator ${color}`);
+		this.$card.find("span").removeClass("indicator red green").addClass(`indicator ${color}`);
 	}
 };
diff --git a/erpnext/public/js/bom_configurator/bom_configurator.bundle.js b/erpnext/public/js/bom_configurator/bom_configurator.bundle.js
index 582b487..454a2a4 100644
--- a/erpnext/public/js/bom_configurator/bom_configurator.bundle.js
+++ b/erpnext/public/js/bom_configurator/bom_configurator.bundle.js
@@ -39,14 +39,14 @@
 			edit_qty: this.edit_qty,
 			load_tree: this.load_tree,
 			set_default_qty: this.set_default_qty,
-		}
+		};
 	}
 
 	tree_options() {
 		return {
 			parent: this.$wrapper.get(0),
 			body: this.$wrapper.get(0),
-			doctype: 'BOM Configurator',
+			doctype: "BOM Configurator",
 			page: this.page,
 			expandable: true,
 			title: __("Configure Product Assembly"),
@@ -59,7 +59,7 @@
 			extend_toolbar: false,
 			do_not_make_page: true,
 			do_not_setup_menu: true,
-		}
+		};
 	}
 
 	tree_methods() {
@@ -67,7 +67,7 @@
 		let view = frappe.views.trees["BOM Configurator"];
 
 		return {
-			onload: function(me) {
+			onload: function (me) {
 				me.args["parent_id"] = frm_obj.frm.doc.name;
 				me.args["parent"] = frm_obj.frm.doc.item_code;
 				me.parent = frm_obj.$wrapper.get(0);
@@ -103,126 +103,133 @@
 
 				`).insertBefore(node.$ul);
 			},
-			toolbar: this.frm?.doc.docstatus === 0 ? [
-				{
-					label:__(frappe.utils.icon('edit', 'sm') + " Qty"),
-					click: function(node) {
-						let view = frappe.views.trees["BOM Configurator"];
-						view.events.edit_qty(node, view);
-					},
-					btnClass: "hidden-xs"
-				},
-				{
-					label:__(frappe.utils.icon('add', 'sm') + " Raw Material"),
-					click: function(node) {
-						let view = frappe.views.trees["BOM Configurator"];
-						view.events.add_item(node, view);
-					},
-					condition: function(node) {
-						return node.expandable;
-					},
-					btnClass: "hidden-xs"
-				},
-				{
-					label:__(frappe.utils.icon('add', 'sm') + " Sub Assembly"),
-					click: function(node) {
-						let view = frappe.views.trees["BOM Configurator"];
-						view.events.add_sub_assembly(node, view);
-					},
-					condition: function(node) {
-						return node.expandable;
-					},
-					btnClass: "hidden-xs"
-				},
-				{
-					label:__("Expand All"),
-					click: function(node) {
-						let view = frappe.views.trees["BOM Configurator"];
+			toolbar:
+				this.frm?.doc.docstatus === 0
+					? [
+							{
+								label: __(frappe.utils.icon("edit", "sm") + " Qty"),
+								click: function (node) {
+									let view = frappe.views.trees["BOM Configurator"];
+									view.events.edit_qty(node, view);
+								},
+								btnClass: "hidden-xs",
+							},
+							{
+								label: __(frappe.utils.icon("add", "sm") + " Raw Material"),
+								click: function (node) {
+									let view = frappe.views.trees["BOM Configurator"];
+									view.events.add_item(node, view);
+								},
+								condition: function (node) {
+									return node.expandable;
+								},
+								btnClass: "hidden-xs",
+							},
+							{
+								label: __(frappe.utils.icon("add", "sm") + " Sub Assembly"),
+								click: function (node) {
+									let view = frappe.views.trees["BOM Configurator"];
+									view.events.add_sub_assembly(node, view);
+								},
+								condition: function (node) {
+									return node.expandable;
+								},
+								btnClass: "hidden-xs",
+							},
+							{
+								label: __("Expand All"),
+								click: function (node) {
+									let view = frappe.views.trees["BOM Configurator"];
 
-						if (!node.expanded) {
-							view.tree.load_children(node, true);
-							$(node.parent[0]).find(".tree-children").show();
-							node.$toolbar.find(".expand-all-btn").html("Collapse All");
-						} else {
-							node.$tree_link.trigger("click");
-							node.$toolbar.find(".expand-all-btn").html("Expand All");
-						}
-					},
-					condition: function(node) {
-						return node.expandable && node.is_root;
-					},
-					btnClass: "hidden-xs expand-all-btn"
-				},
-				{
-					label:__(frappe.utils.icon('move', 'sm') + " Sub Assembly"),
-					click: function(node) {
-						let view = frappe.views.trees["BOM Configurator"];
-						view.events.convert_to_sub_assembly(node, view);
-					},
-					condition: function(node) {
-						return !node.expandable;
-					},
-					btnClass: "hidden-xs"
-				},
-				{
-					label:__(frappe.utils.icon('delete', 'sm') + __(" Item")),
-					click: function(node) {
-						let view = frappe.views.trees["BOM Configurator"];
-						view.events.delete_node(node, view);
-					},
-					condition: function(node) {
-						return !node.is_root;
-					},
-					btnClass: "hidden-xs"
-				},
-			] : [{
-				label:__("Expand All"),
-				click: function(node) {
-					let view = frappe.views.trees["BOM Configurator"];
+									if (!node.expanded) {
+										view.tree.load_children(node, true);
+										$(node.parent[0]).find(".tree-children").show();
+										node.$toolbar.find(".expand-all-btn").html("Collapse All");
+									} else {
+										node.$tree_link.trigger("click");
+										node.$toolbar.find(".expand-all-btn").html("Expand All");
+									}
+								},
+								condition: function (node) {
+									return node.expandable && node.is_root;
+								},
+								btnClass: "hidden-xs expand-all-btn",
+							},
+							{
+								label: __(frappe.utils.icon("move", "sm") + " Sub Assembly"),
+								click: function (node) {
+									let view = frappe.views.trees["BOM Configurator"];
+									view.events.convert_to_sub_assembly(node, view);
+								},
+								condition: function (node) {
+									return !node.expandable;
+								},
+								btnClass: "hidden-xs",
+							},
+							{
+								label: __(frappe.utils.icon("delete", "sm") + __(" Item")),
+								click: function (node) {
+									let view = frappe.views.trees["BOM Configurator"];
+									view.events.delete_node(node, view);
+								},
+								condition: function (node) {
+									return !node.is_root;
+								},
+								btnClass: "hidden-xs",
+							},
+					  ]
+					: [
+							{
+								label: __("Expand All"),
+								click: function (node) {
+									let view = frappe.views.trees["BOM Configurator"];
 
-					if (!node.expanded) {
-						view.tree.load_children(node, true);
-						$(node.parent[0]).find(".tree-children").show();
-						node.$toolbar.find(".expand-all-btn").html("Collapse All");
-					} else {
-						node.$tree_link.trigger("click");
-						node.$toolbar.find(".expand-all-btn").html("Expand All");
-					}
-				},
-				condition: function(node) {
-					return node.expandable && node.is_root;
-				},
-				btnClass: "hidden-xs expand-all-btn"
-			}],
-		}
+									if (!node.expanded) {
+										view.tree.load_children(node, true);
+										$(node.parent[0]).find(".tree-children").show();
+										node.$toolbar.find(".expand-all-btn").html("Collapse All");
+									} else {
+										node.$tree_link.trigger("click");
+										node.$toolbar.find(".expand-all-btn").html("Expand All");
+									}
+								},
+								condition: function (node) {
+									return node.expandable && node.is_root;
+								},
+								btnClass: "hidden-xs expand-all-btn",
+							},
+					  ],
+		};
 	}
 
 	add_item(node, view) {
-		frappe.prompt([
-			{ label: __("Item"), fieldname: "item_code", fieldtype: "Link", options: "Item", reqd: 1 },
-			{ label: __("Qty"), fieldname: "qty", default: 1.0, fieldtype: "Float", reqd: 1 },
-		],
-		(data) => {
-			if (!node.data.parent_id) {
-				node.data.parent_id = this.frm.doc.name;
-			}
-
-			frappe.call({
-				method: "erpnext.manufacturing.doctype.bom_creator.bom_creator.add_item",
-				args: {
-					parent: node.data.parent_id,
-					fg_item: node.data.value,
-					item_code: data.item_code,
-					fg_reference_id: node.data.name || this.frm.doc.name,
-					qty: data.qty,
-				},
-				callback: (r) => {
-					view.events.load_tree(r, node);
+		frappe.prompt(
+			[
+				{ label: __("Item"), fieldname: "item_code", fieldtype: "Link", options: "Item", reqd: 1 },
+				{ label: __("Qty"), fieldname: "qty", default: 1.0, fieldtype: "Float", reqd: 1 },
+			],
+			(data) => {
+				if (!node.data.parent_id) {
+					node.data.parent_id = this.frm.doc.name;
 				}
-			});
-		},
-		__("Add Item"),
-		__("Add"));
+
+				frappe.call({
+					method: "erpnext.manufacturing.doctype.bom_creator.bom_creator.add_item",
+					args: {
+						parent: node.data.parent_id,
+						fg_item: node.data.value,
+						item_code: data.item_code,
+						fg_reference_id: node.data.name || this.frm.doc.name,
+						qty: data.qty,
+					},
+					callback: (r) => {
+						view.events.load_tree(r, node);
+					},
+				});
+			},
+			__("Add Item"),
+			__("Add")
+		);
 	}
 
 	add_sub_assembly(node, view) {
@@ -251,27 +258,58 @@
 				},
 				callback: (r) => {
 					view.events.load_tree(r, node);
-				}
+				},
 			});
 
 			dialog.hide();
 		});
-
 	}
 
-	get_sub_assembly_modal_fields(read_only=false) {
+	get_sub_assembly_modal_fields(read_only = false) {
 		return [
-			{ label: __("Sub Assembly Item"), fieldname: "item_code", fieldtype: "Link", options: "Item", reqd: 1, read_only: read_only },
-			{ fieldtype: "Column Break" },
-			{ label: __("Qty"), fieldname: "qty", default: 1.0, fieldtype: "Float", reqd: 1, read_only: read_only },
-			{ fieldtype: "Section Break" },
-			{ label: __("Raw Materials"), fieldname: "items", fieldtype: "Table", reqd: 1,
-				fields: [
-					{ label: __("Item"), fieldname: "item_code", fieldtype: "Link", options: "Item", reqd: 1, in_list_view: 1 },
-					{ label: __("Qty"), fieldname: "qty", default: 1.0, fieldtype: "Float", reqd: 1, in_list_view: 1 },
-				]
+			{
+				label: __("Sub Assembly Item"),
+				fieldname: "item_code",
+				fieldtype: "Link",
+				options: "Item",
+				reqd: 1,
+				read_only: read_only,
 			},
-		]
+			{ fieldtype: "Column Break" },
+			{
+				label: __("Qty"),
+				fieldname: "qty",
+				default: 1.0,
+				fieldtype: "Float",
+				reqd: 1,
+				read_only: read_only,
+			},
+			{ fieldtype: "Section Break" },
+			{
+				label: __("Raw Materials"),
+				fieldname: "items",
+				fieldtype: "Table",
+				reqd: 1,
+				fields: [
+					{
+						label: __("Item"),
+						fieldname: "item_code",
+						fieldtype: "Link",
+						options: "Item",
+						reqd: 1,
+						in_list_view: 1,
+					},
+					{
+						label: __("Qty"),
+						fieldname: "qty",
+						default: 1.0,
+						fieldtype: "Float",
+						reqd: 1,
+						in_list_view: 1,
+					},
+				],
+			},
+		];
 	}
 
 	convert_to_sub_assembly(node, view) {
@@ -303,7 +341,7 @@
 				callback: (r) => {
 					node.expandable = true;
 					view.events.load_tree(r, node);
-				}
+				},
 			});
 
 			dialog.hide();
@@ -313,12 +351,12 @@
 	set_default_qty(dialog) {
 		dialog.fields_dict.items.grid.fields_map.item_code.onchange = function (event) {
 			if (event) {
-				let name = $(event.currentTarget).closest('.grid-row').attr("data-name")
+				let name = $(event.currentTarget).closest(".grid-row").attr("data-name");
 				let item_row = dialog.fields_dict.items.grid.grid_rows_by_docname[name].doc;
 				item_row.qty = 1;
-				dialog.fields_dict.items.grid.refresh()
+				dialog.fields_dict.items.grid.refresh();
 			}
-		}
+		};
 	}
 
 	delete_node(node, view) {
@@ -333,38 +371,40 @@
 				},
 				callback: (r) => {
 					view.events.load_tree(r, node.parent_node);
-				}
+				},
 			});
 		});
 	}
 
 	edit_qty(node, view) {
 		let qty = node.data.qty || this.frm.doc.qty;
-		frappe.prompt([
-			{ label: __("Qty"), fieldname: "qty", default: qty, fieldtype: "Float", reqd: 1 },
-		],
-		(data) => {
-			let doctype = node.data.doctype || this.frm.doc.doctype;
-			let docname = node.data.name || this.frm.doc.name;
+		frappe.prompt(
+			[{ label: __("Qty"), fieldname: "qty", default: qty, fieldtype: "Float", reqd: 1 }],
+			(data) => {
+				let doctype = node.data.doctype || this.frm.doc.doctype;
+				let docname = node.data.name || this.frm.doc.name;
 
-			frappe.call({
-				method: "erpnext.manufacturing.doctype.bom_creator.bom_creator.edit_qty",
-				args: {
-					doctype: doctype,
-					docname: docname,
-					qty: data.qty,
-					parent: node.data.parent_id,
-				},
-				callback: (r) => {
-					node.data.qty = data.qty;
-					let uom = node.data.uom || this.frm.doc.uom;
-					$(node.parent.get(0)).find(`[data-bom-qty-docname='${docname}']`).html(data.qty + " " + uom);
-					view.events.load_tree(r, node);
-				}
-			});
-		},
-		__("Edit Qty"),
-		__("Update"));
+				frappe.call({
+					method: "erpnext.manufacturing.doctype.bom_creator.bom_creator.edit_qty",
+					args: {
+						doctype: doctype,
+						docname: docname,
+						qty: data.qty,
+						parent: node.data.parent_id,
+					},
+					callback: (r) => {
+						node.data.qty = data.qty;
+						let uom = node.data.uom || this.frm.doc.uom;
+						$(node.parent.get(0))
+							.find(`[data-bom-qty-docname='${docname}']`)
+							.html(data.qty + " " + uom);
+						view.events.load_tree(r, node);
+					},
+				});
+			},
+			__("Edit Qty"),
+			__("Update")
+		);
 	}
 
 	prepare_layout() {
@@ -378,35 +418,31 @@
 
 	load_tree(response, node) {
 		let item_row = "";
-		let parent_dom = ""
+		let parent_dom = "";
 		let total_amount = response.message.raw_material_cost;
 
 		frappe.views.trees["BOM Configurator"].tree.load_children(node);
 
 		while (node) {
-			item_row = response.message.items.filter(item => item.name === node.data.name);
+			item_row = response.message.items.filter((item) => item.name === node.data.name);
 
 			if (item_row?.length) {
 				node.data.amount = item_row[0].amount;
-				total_amount = node.data.amount
+				total_amount = node.data.amount;
 			} else {
 				total_amount = response.message.raw_material_cost;
 			}
 
 			parent_dom = $(node.parent.get(0));
-			total_amount = frappe.format(
-				total_amount, {
-					fieldtype: "Currency",
-					currency: this.frm.doc.currency
-				}
-			);
+			total_amount = frappe.format(total_amount, {
+				fieldtype: "Currency",
+				currency: this.frm.doc.currency,
+			});
 
 			$($(parent_dom).find(".fg-item-amt")[0]).html(total_amount);
 			node = node.parent_node;
-
 		}
-
 	}
 }
 
-frappe.ui.BOMConfigurator = BOMConfigurator;
\ No newline at end of file
+frappe.ui.BOMConfigurator = BOMConfigurator;
diff --git a/erpnext/public/js/bulk_transaction_processing.js b/erpnext/public/js/bulk_transaction_processing.js
index 3ae5a5d..e1906c4 100644
--- a/erpnext/public/js/bulk_transaction_processing.js
+++ b/erpnext/public/js/bulk_transaction_processing.js
@@ -1,30 +1,38 @@
 frappe.provide("erpnext.bulk_transaction_processing");
 
 $.extend(erpnext.bulk_transaction_processing, {
-	create: function(listview, from_doctype, to_doctype, args) {
+	create: function (listview, from_doctype, to_doctype, args) {
 		let checked_items = listview.get_checked_items();
 		const doc_name = [];
-		checked_items.forEach((Item)=> {
+		checked_items.forEach((Item) => {
 			if (Item.docstatus == 0) {
 				doc_name.push(Item.name);
 			}
 		});
 
 		let count_of_rows = checked_items.length;
-		frappe.confirm(__("Create {0} {1} ?", [count_of_rows, __(to_doctype)]), ()=>{
+		frappe.confirm(__("Create {0} {1} ?", [count_of_rows, __(to_doctype)]), () => {
 			if (doc_name.length == 0) {
-				frappe.call({
-					method: "erpnext.utilities.bulk_transaction.transaction_processing",
-					args: {data: checked_items, from_doctype: from_doctype, to_doctype: to_doctype, args: args}
-				}).then(()=> {
-
-				});
+				frappe
+					.call({
+						method: "erpnext.utilities.bulk_transaction.transaction_processing",
+						args: {
+							data: checked_items,
+							from_doctype: from_doctype,
+							to_doctype: to_doctype,
+							args: args,
+						},
+					})
+					.then(() => {});
 				if (count_of_rows > 10) {
-					frappe.show_alert("Starting a background job to create {0} {1}", [count_of_rows, __(to_doctype)]);
+					frappe.show_alert("Starting a background job to create {0} {1}", [
+						count_of_rows,
+						__(to_doctype),
+					]);
 				}
 			} else {
 				frappe.msgprint(__("Selected document must be in submitted state"));
 			}
 		});
-	}
+	},
 });
diff --git a/erpnext/public/js/call_popup/call_popup.js b/erpnext/public/js/call_popup/call_popup.js
index 2dbe999..7155c79 100644
--- a/erpnext/public/js/call_popup/call_popup.js
+++ b/erpnext/public/js/call_popup/call_popup.js
@@ -7,17 +7,17 @@
 	}
 
 	make() {
-		frappe.utils.play_sound('incoming-call');
+		frappe.utils.play_sound("incoming-call");
 		this.dialog = new frappe.ui.Dialog({
-			'static': true,
-			'minimizable': true
+			static: true,
+			minimizable: true,
 		});
 		this.dialog.get_close_btn().show();
 		this.setup_dialog();
 		this.set_call_status();
 		frappe.utils.bind_actions_with_object(this.dialog.$body, this);
-		this.dialog.$wrapper.addClass('call-popup');
-		this.dialog.get_close_btn().unbind('click').click(this.close_modal.bind(this));
+		this.dialog.$wrapper.addClass("call-popup");
+		this.dialog.get_close_btn().unbind("click").click(this.close_modal.bind(this));
 		this.dialog.show();
 	}
 
@@ -26,28 +26,28 @@
 		this.dialog.$body.empty().append(this.caller_info);
 	}
 
-	set_indicator(color, blink=false) {
-		let classes = `indicator ${color} ${blink ? 'blink': ''}`;
-		this.dialog.header.find('.indicator').attr('class', classes);
+	set_indicator(color, blink = false) {
+		let classes = `indicator ${color} ${blink ? "blink" : ""}`;
+		this.dialog.header.find(".indicator").attr("class", classes);
 	}
 
 	set_call_status(call_status) {
-		let title = '';
+		let title = "";
 		call_status = call_status || this.call_log.status;
-		if (['Ringing'].includes(call_status) || !call_status) {
-			title = __('Incoming call from {0}', [this.get_caller_name() || this.caller_number]);
-			this.set_indicator('blue', true);
-		} else if (call_status === 'In Progress') {
-			title = __('Call Connected');
-			this.set_indicator('green');
-		} else if (['No Answer', 'Missed'].includes(call_status)) {
-			this.set_indicator('yellow');
-			title = __('Call Missed');
-		} else if (['Completed', 'Busy', 'Failed'].includes(call_status)) {
-			this.set_indicator('red');
-			title = __('Call Ended');
+		if (["Ringing"].includes(call_status) || !call_status) {
+			title = __("Incoming call from {0}", [this.get_caller_name() || this.caller_number]);
+			this.set_indicator("blue", true);
+		} else if (call_status === "In Progress") {
+			title = __("Call Connected");
+			this.set_indicator("green");
+		} else if (["No Answer", "Missed"].includes(call_status)) {
+			this.set_indicator("yellow");
+			title = __("Call Missed");
+		} else if (["Completed", "Busy", "Failed"].includes(call_status)) {
+			this.set_indicator("red");
+			title = __("Call Ended");
 		} else {
-			this.set_indicator('blue');
+			this.set_indicator("blue");
 			title = call_status;
 		}
 		this.dialog.set_title(title);
@@ -55,7 +55,7 @@
 
 	update_call_log(call_log, missed) {
 		this.call_log = call_log;
-		this.set_call_status(missed ? 'Missed': null);
+		this.set_call_status(missed ? "Missed" : null);
 	}
 
 	close_modal() {
@@ -64,10 +64,10 @@
 	}
 
 	call_ended(call_log, missed) {
-		frappe.utils.play_sound('call-disconnect');
+		frappe.utils.play_sound("call-disconnect");
 		this.update_call_log(call_log, missed);
 		setTimeout(() => {
-			if (!this.dialog.get_value('call_summary')) {
+			if (!this.dialog.get_value("call_summary")) {
 				this.close_modal();
 			}
 		}, 60000);
@@ -81,16 +81,16 @@
 
 	get_contact_link() {
 		let log = this.call_log;
-		let contact_link = log.links.find(d => d.link_doctype === 'Contact');
+		let contact_link = log.links.find((d) => d.link_doctype === "Contact");
 		return contact_link || {};
 	}
 
 	setup_listener() {
-		frappe.realtime.on(`call_${this.call_log.id}_ended`, call_log => {
+		frappe.realtime.on(`call_${this.call_log.id}_ended`, (call_log) => {
 			this.call_ended(call_log);
 		});
 
-		frappe.realtime.on(`call_${this.call_log.id}_missed`, call_log => {
+		frappe.realtime.on(`call_${this.call_log.id}_missed`, (call_log) => {
 			this.call_ended(call_log, true);
 		});
 	}
@@ -103,84 +103,102 @@
 	setup_call_details() {
 		this.caller_info = $(`<div></div>`);
 		this.call_details = new frappe.ui.FieldGroup({
-			fields: [{
-				'fieldname': 'name',
-				'label': 'Name',
-				'default': this.get_caller_name() || __('Unknown Caller'),
-				'fieldtype': 'Data',
-				'read_only': 1
-			}, {
-				'fieldtype': 'Button',
-				'label': __('Open Contact'),
-				'click': () => frappe.set_route('Form', 'Contact', this.get_contact_link().link_name),
-				'depends_on': () => this.get_caller_name()
-			}, {
-				'fieldtype': 'Button',
-				'label': __('Create New Contact'),
-				'click': this.create_new_contact.bind(this),
-				'depends_on': () => !this.get_caller_name()
-			}, {
-				'fieldtype': 'Button',
-				'label': __('Create New Customer'),
-				'click': this.create_new_customer.bind(this),
-				'depends_on': () => !this.get_caller_name()
-			}, {
-				'fieldtype': 'Button',
-				'label': __('Create New Lead'),
-				'click': () => frappe.new_doc('Lead', { 'mobile_no': this.caller_number }),
-				'depends_on': () => !this.get_caller_name()
-			}, {
-				'fieldtype': 'Column Break',
-			}, {
-				'fieldname': 'number',
-				'label': 'Phone Number',
-				'fieldtype': 'Data',
-				'default': this.caller_number,
-				'read_only': 1
-			}, {
-				'fieldtype': 'Section Break',
-				'hide_border': 1,
-			}, {
-				'fieldname': 'call_type',
-				'label': 'Call Type',
-				'fieldtype': 'Link',
-				'options': 'Telephony Call Type',
-			}, {
-				'fieldtype': 'Section Break',
-				'hide_border': 1,
-			}, {
-				'fieldtype': 'Small Text',
-				'label': __('Call Summary'),
-				'fieldname': 'call_summary',
-			}, {
-				'fieldtype': 'Button',
-				'label': __('Save'),
-				'click': () => {
-					const call_summary = this.call_details.get_value('call_summary');
-					const call_type = this.call_details.get_value('call_type');
-					if (!call_summary) return;
-					frappe.xcall('erpnext.telephony.doctype.call_log.call_log.add_call_summary_and_call_type', {
-						'call_log': this.call_log.name,
-						'summary': call_summary,
-						'call_type': call_type,
-					}).then(() => {
-						this.close_modal();
-						frappe.show_alert({
-							message: `
-								${__('Call Summary Saved')}
+			fields: [
+				{
+					fieldname: "name",
+					label: "Name",
+					default: this.get_caller_name() || __("Unknown Caller"),
+					fieldtype: "Data",
+					read_only: 1,
+				},
+				{
+					fieldtype: "Button",
+					label: __("Open Contact"),
+					click: () => frappe.set_route("Form", "Contact", this.get_contact_link().link_name),
+					depends_on: () => this.get_caller_name(),
+				},
+				{
+					fieldtype: "Button",
+					label: __("Create New Contact"),
+					click: this.create_new_contact.bind(this),
+					depends_on: () => !this.get_caller_name(),
+				},
+				{
+					fieldtype: "Button",
+					label: __("Create New Customer"),
+					click: this.create_new_customer.bind(this),
+					depends_on: () => !this.get_caller_name(),
+				},
+				{
+					fieldtype: "Button",
+					label: __("Create New Lead"),
+					click: () => frappe.new_doc("Lead", { mobile_no: this.caller_number }),
+					depends_on: () => !this.get_caller_name(),
+				},
+				{
+					fieldtype: "Column Break",
+				},
+				{
+					fieldname: "number",
+					label: "Phone Number",
+					fieldtype: "Data",
+					default: this.caller_number,
+					read_only: 1,
+				},
+				{
+					fieldtype: "Section Break",
+					hide_border: 1,
+				},
+				{
+					fieldname: "call_type",
+					label: "Call Type",
+					fieldtype: "Link",
+					options: "Telephony Call Type",
+				},
+				{
+					fieldtype: "Section Break",
+					hide_border: 1,
+				},
+				{
+					fieldtype: "Small Text",
+					label: __("Call Summary"),
+					fieldname: "call_summary",
+				},
+				{
+					fieldtype: "Button",
+					label: __("Save"),
+					click: () => {
+						const call_summary = this.call_details.get_value("call_summary");
+						const call_type = this.call_details.get_value("call_type");
+						if (!call_summary) return;
+						frappe
+							.xcall(
+								"erpnext.telephony.doctype.call_log.call_log.add_call_summary_and_call_type",
+								{
+									call_log: this.call_log.name,
+									summary: call_summary,
+									call_type: call_type,
+								}
+							)
+							.then(() => {
+								this.close_modal();
+								frappe.show_alert({
+									message: `
+								${__("Call Summary Saved")}
 								<br>
 								<a
 									class="text-small text-muted"
 									href="/app/call-log/${this.call_log.name}">
-									${__('View call log')}
+									${__("View call log")}
 								</a>
 							`,
-							indicator: 'green'
-						});
-					});
-				}
-			}],
-			body: this.caller_info
+									indicator: "green",
+								});
+							});
+					},
+				},
+			],
+			body: this.caller_info,
 		});
 		this.call_details.make();
 	}
@@ -191,23 +209,23 @@
 
 	create_new_customer() {
 		// to avoid quick entry form
-		const new_customer = frappe.model.get_new_doc('Customer');
+		const new_customer = frappe.model.get_new_doc("Customer");
 		new_customer.mobile_no = this.caller_number;
-		frappe.set_route('Form', new_customer.doctype, new_customer.name);
+		frappe.set_route("Form", new_customer.doctype, new_customer.name);
 	}
 
 	create_new_contact() {
 		// TODO: fix new_doc, it should accept child table values
-		const new_contact = frappe.model.get_new_doc('Contact');
-		const phone_no = frappe.model.add_child(new_contact, 'Contact Phone', 'phone_nos');
+		const new_contact = frappe.model.get_new_doc("Contact");
+		const phone_no = frappe.model.add_child(new_contact, "Contact Phone", "phone_nos");
 		phone_no.phone = this.caller_number;
 		phone_no.is_primary_mobile_no = 1;
-		frappe.set_route('Form', new_contact.doctype, new_contact.name);
+		frappe.set_route("Form", new_contact.doctype, new_contact.name);
 	}
 }
 
-$(document).on('app_ready', function () {
-	frappe.realtime.on('show_call_popup', call_log => {
+$(document).on("app_ready", function () {
+	frappe.realtime.on("show_call_popup", (call_log) => {
 		let call_popup = erpnext.call_popup;
 		if (call_popup && call_log.name === call_popup.call_log.name) {
 			call_popup.update_call_log(call_log);
diff --git a/erpnext/public/js/communication.js b/erpnext/public/js/communication.js
index f205d88..d9187f8b 100644
--- a/erpnext/public/js/communication.js
+++ b/erpnext/public/js/communication.js
@@ -1,33 +1,45 @@
 frappe.ui.form.on("Communication", {
 	refresh: (frm) => {
 		// setup custom Make button only if Communication is Email
-		if(frm.doc.communication_medium == "Email" && frm.doc.sent_or_received == "Received") {
+		if (frm.doc.communication_medium == "Email" && frm.doc.sent_or_received == "Received") {
 			frm.events.setup_custom_buttons(frm);
 		}
 	},
 
 	setup_custom_buttons: (frm) => {
 		let confirm_msg = "Are you sure you want to create {0} from this email?";
-		if(frm.doc.reference_doctype !== "Issue") {
-			frm.add_custom_button(__("Issue"), () => {
-				frappe.confirm(__(confirm_msg, [__("Issue")]), () => {
-					frm.trigger('make_issue_from_communication');
-				})
-			}, __("Create"));
+		if (frm.doc.reference_doctype !== "Issue") {
+			frm.add_custom_button(
+				__("Issue"),
+				() => {
+					frappe.confirm(__(confirm_msg, [__("Issue")]), () => {
+						frm.trigger("make_issue_from_communication");
+					});
+				},
+				__("Create")
+			);
 		}
 
-		if(!in_list(["Lead", "Opportunity"], frm.doc.reference_doctype)) {
-			frm.add_custom_button(__("Lead"), () => {
-				frappe.confirm(__(confirm_msg, [__("Lead")]), () => {
-					frm.trigger('make_lead_from_communication');
-				})
-			}, __('Create'));
+		if (!in_list(["Lead", "Opportunity"], frm.doc.reference_doctype)) {
+			frm.add_custom_button(
+				__("Lead"),
+				() => {
+					frappe.confirm(__(confirm_msg, [__("Lead")]), () => {
+						frm.trigger("make_lead_from_communication");
+					});
+				},
+				__("Create")
+			);
 
-			frm.add_custom_button(__("Opportunity"), () => {
-				frappe.confirm(__(confirm_msg, [__("Opportunity")]), () => {
-					frm.trigger('make_opportunity_from_communication');
-				})
-			}, __('Create'));
+			frm.add_custom_button(
+				__("Opportunity"),
+				() => {
+					frappe.confirm(__(confirm_msg, [__("Opportunity")]), () => {
+						frm.trigger("make_opportunity_from_communication");
+					});
+				},
+				__("Create")
+			);
 		}
 	},
 
@@ -35,63 +47,69 @@
 		return frappe.call({
 			method: "erpnext.crm.doctype.lead.lead.make_lead_from_communication",
 			args: {
-				communication: frm.doc.name
+				communication: frm.doc.name,
 			},
 			freeze: true,
 			callback: (r) => {
-				if(r.message) {
-					frm.reload_doc()
+				if (r.message) {
+					frm.reload_doc();
 				}
-			}
-		})
+			},
+		});
 	},
 
 	make_issue_from_communication: (frm) => {
 		return frappe.call({
 			method: "erpnext.support.doctype.issue.issue.make_issue_from_communication",
 			args: {
-				communication: frm.doc.name
+				communication: frm.doc.name,
 			},
 			freeze: true,
 			callback: (r) => {
-				if(r.message) {
-					frm.reload_doc()
+				if (r.message) {
+					frm.reload_doc();
 				}
-			}
-		})
+			},
+		});
 	},
 
 	make_opportunity_from_communication: (frm) => {
-		const fields = [{
-			fieldtype: 'Link',
-			label: __('Select a Company'),
-			fieldname: 'company',
-			options: 'Company',
-			reqd: 1,
-			default: frappe.defaults.get_user_default("Company")
-		}];
+		const fields = [
+			{
+				fieldtype: "Link",
+				label: __("Select a Company"),
+				fieldname: "company",
+				options: "Company",
+				reqd: 1,
+				default: frappe.defaults.get_user_default("Company"),
+			},
+		];
 
-		frappe.prompt(fields, data => {
-			frappe.call({
-				method: "erpnext.crm.doctype.opportunity.opportunity.make_opportunity_from_communication",
-				args: {
-					communication: frm.doc.name,
-					company: data.company
-				},
-				freeze: true,
-				callback: (r) => {
-					if(r.message) {
-						frm.reload_doc();
-						frappe.show_alert({
-							message: __("Opportunity {0} created",
-								['<a href="/app/opportunity/'+r.message+'">' + r.message + '</a>']),
-							indicator: 'green'
-						});
-					}
-				}
-			});
-		},
-		'Create an Opportunity',
-		'Create');
-	}
+		frappe.prompt(
+			fields,
+			(data) => {
+				frappe.call({
+					method: "erpnext.crm.doctype.opportunity.opportunity.make_opportunity_from_communication",
+					args: {
+						communication: frm.doc.name,
+						company: data.company,
+					},
+					freeze: true,
+					callback: (r) => {
+						if (r.message) {
+							frm.reload_doc();
+							frappe.show_alert({
+								message: __("Opportunity {0} created", [
+									'<a href="/app/opportunity/' + r.message + '">' + r.message + "</a>",
+								]),
+								indicator: "green",
+							});
+						}
+					},
+				});
+			},
+			"Create an Opportunity",
+			"Create"
+		);
+	},
 });
diff --git a/erpnext/public/js/conf.js b/erpnext/public/js/conf.js
index a0f56a2..2e6e9ba 100644
--- a/erpnext/public/js/conf.js
+++ b/erpnext/public/js/conf.js
@@ -1,26 +1,26 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.provide('erpnext');
+frappe.provide("erpnext");
 
 // preferred modules for breadcrumbs
 $.extend(frappe.breadcrumbs.preferred, {
 	"Item Group": "Stock",
 	"Customer Group": "Selling",
 	"Supplier Group": "Buying",
-	"Territory": "Selling",
+	Territory: "Selling",
 	"Sales Person": "Selling",
 	"Sales Partner": "Selling",
-	"Brand": "Stock",
+	Brand: "Stock",
 	"Maintenance Schedule": "Support",
-	"Maintenance Visit": "Support"
+	"Maintenance Visit": "Support",
 });
 
 $.extend(frappe.breadcrumbs.module_map, {
-	'ERPNext Integrations': 'Integrations',
-	'Geo': 'Settings',
-	'Portal': 'Website',
-	'Utilities': 'Settings',
-	'E-commerce': 'Website',
-	'Contacts': 'CRM'
+	"ERPNext Integrations": "Integrations",
+	Geo: "Settings",
+	Portal: "Website",
+	Utilities: "Settings",
+	"E-commerce": "Website",
+	Contacts: "CRM",
 });
diff --git a/erpnext/public/js/contact.js b/erpnext/public/js/contact.js
index 41a0e8a..ecfc4ee 100644
--- a/erpnext/public/js/contact.js
+++ b/erpnext/public/js/contact.js
@@ -1,16 +1,14 @@
-
-
 frappe.ui.form.on("Contact", {
 	refresh(frm) {
-		frm.set_query('link_doctype', "links", function() {
+		frm.set_query("link_doctype", "links", function () {
 			return {
 				query: "frappe.contacts.address_and_contact.filter_dynamic_link_doctypes",
 				filters: {
 					fieldtype: ["in", ["HTML", "Text Editor"]],
 					fieldname: ["in", ["contact_html", "company_description"]],
-				}
+				},
 			};
 		});
 		frm.refresh_field("links");
-	}
+	},
 });
diff --git a/erpnext/public/js/erpnext.bundle.js b/erpnext/public/js/erpnext.bundle.js
index b847e57..b75a21b 100644
--- a/erpnext/public/js/erpnext.bundle.js
+++ b/erpnext/public/js/erpnext.bundle.js
@@ -27,7 +27,7 @@
 import "./utils/crm_activities";
 import "./templates/crm_activities.html";
 import "./templates/crm_notes.html";
-import "./controllers/accounts.js"
+import "./controllers/accounts.js";
 import "./utils/landed_taxes_and_charges_common.js";
 import "./utils/sales_common.js";
 import "./controllers/buying.js";
diff --git a/erpnext/public/js/event.js b/erpnext/public/js/event.js
index 665c8fb..a673391 100644
--- a/erpnext/public/js/event.js
+++ b/erpnext/public/js/event.js
@@ -3,33 +3,53 @@
 frappe.provide("frappe.desk");
 
 frappe.ui.form.on("Event", {
-	refresh: function(frm) {
-		frm.set_query('reference_doctype', "event_participants", function() {
+	refresh: function (frm) {
+		frm.set_query("reference_doctype", "event_participants", function () {
 			return {
-				"filters": {
-					"name": ["in", ["Contact", "Lead", "Customer", "Supplier", "Employee", "Sales Partner"]]
-				}
+				filters: {
+					name: ["in", ["Contact", "Lead", "Customer", "Supplier", "Employee", "Sales Partner"]],
+				},
 			};
 		});
 
-		frm.add_custom_button(__('Add Leads'), function() {
-			new frappe.desk.eventParticipants(frm, "Lead");
-		}, __("Add Participants"));
+		frm.add_custom_button(
+			__("Add Leads"),
+			function () {
+				new frappe.desk.eventParticipants(frm, "Lead");
+			},
+			__("Add Participants")
+		);
 
-		frm.add_custom_button(__('Add Customers'), function() {
-			new frappe.desk.eventParticipants(frm, "Customer");
-		}, __("Add Participants"));
+		frm.add_custom_button(
+			__("Add Customers"),
+			function () {
+				new frappe.desk.eventParticipants(frm, "Customer");
+			},
+			__("Add Participants")
+		);
 
-		frm.add_custom_button(__('Add Suppliers'), function() {
-			new frappe.desk.eventParticipants(frm, "Supplier");
-		}, __("Add Participants"));
+		frm.add_custom_button(
+			__("Add Suppliers"),
+			function () {
+				new frappe.desk.eventParticipants(frm, "Supplier");
+			},
+			__("Add Participants")
+		);
 
-		frm.add_custom_button(__('Add Employees'), function() {
-			new frappe.desk.eventParticipants(frm, "Employee");
-		}, __("Add Participants"));
+		frm.add_custom_button(
+			__("Add Employees"),
+			function () {
+				new frappe.desk.eventParticipants(frm, "Employee");
+			},
+			__("Add Participants")
+		);
 
-		frm.add_custom_button(__('Add Sales Partners'), function() {
-			new frappe.desk.eventParticipants(frm, "Sales Partners");
-		}, __("Add Participants"));
-	}
+		frm.add_custom_button(
+			__("Add Sales Partners"),
+			function () {
+				new frappe.desk.eventParticipants(frm, "Sales Partners");
+			},
+			__("Add Participants")
+		);
+	},
 });
diff --git a/erpnext/public/js/financial_statements.js b/erpnext/public/js/financial_statements.js
index 43e58c2..bd8b70a 100644
--- a/erpnext/public/js/financial_statements.js
+++ b/erpnext/public/js/financial_statements.js
@@ -1,60 +1,58 @@
 frappe.provide("erpnext.financial_statements");
 
 erpnext.financial_statements = {
-	"filters": get_filters(),
-	"baseData": null,
-	"formatter": function(value, row, column, data, default_formatter, filter) {
-		if(frappe.query_report.get_filter_value("selected_view") == "Growth" && data && column.colIndex >= 3){
+	filters: get_filters(),
+	baseData: null,
+	formatter: function (value, row, column, data, default_formatter, filter) {
+		if (
+			frappe.query_report.get_filter_value("selected_view") == "Growth" &&
+			data &&
+			column.colIndex >= 3
+		) {
 			//Assuming that the first three columns are s.no, account name and the very first year of the accounting values, to calculate the relative percentage values of the successive columns.
 			const lastAnnualValue = row[column.colIndex - 1].content;
 			const currentAnnualvalue = data[column.fieldname];
-			if(currentAnnualvalue == undefined) return 'NA'; //making this not applicable for undefined/null values
+			if (currentAnnualvalue == undefined) return "NA"; //making this not applicable for undefined/null values
 			let annualGrowth = 0;
-			if(lastAnnualValue == 0 && currentAnnualvalue > 0){
+			if (lastAnnualValue == 0 && currentAnnualvalue > 0) {
 				//If the previous year value is 0 and the current value is greater than 0
 				annualGrowth = 1;
-			}
-			else if(lastAnnualValue > 0){
-				annualGrowth  = (currentAnnualvalue - lastAnnualValue) / lastAnnualValue;
+			} else if (lastAnnualValue > 0) {
+				annualGrowth = (currentAnnualvalue - lastAnnualValue) / lastAnnualValue;
 			}
 
-			const growthPercent = (Math.round(annualGrowth*10000)/100); //calculating the rounded off percentage
+			const growthPercent = Math.round(annualGrowth * 10000) / 100; //calculating the rounded off percentage
 
-			value = $(`<span>${((growthPercent >=0)? '+':'' )+growthPercent+'%'}</span>`);
-			if(growthPercent < 0){
+			value = $(`<span>${(growthPercent >= 0 ? "+" : "") + growthPercent + "%"}</span>`);
+			if (growthPercent < 0) {
 				value = $(value).addClass("text-danger");
-			}
-			else{
+			} else {
 				value = $(value).addClass("text-success");
 			}
 			value = $(value).wrap("<p></p>").parent().html();
 
 			return value;
-		}
-		else if(frappe.query_report.get_filter_value("selected_view") == "Margin" && data){
-			if(column.fieldname =="account" && data.account_name == __("Income")){
+		} else if (frappe.query_report.get_filter_value("selected_view") == "Margin" && data) {
+			if (column.fieldname == "account" && data.account_name == __("Income")) {
 				//Taking the total income from each column (for all the financial years) as the base (100%)
 				this.baseData = row;
 			}
-			if(column.colIndex >= 2){
+			if (column.colIndex >= 2) {
 				//Assuming that the first two columns are s.no and account name, to calculate the relative percentage values of the successive columns.
 				const currentAnnualvalue = data[column.fieldname];
 				const baseValue = this.baseData[column.colIndex].content;
-				if(currentAnnualvalue == undefined || baseValue <= 0) return 'NA';
-				const marginPercent = Math.round((currentAnnualvalue/baseValue)*10000)/100;
+				if (currentAnnualvalue == undefined || baseValue <= 0) return "NA";
+				const marginPercent = Math.round((currentAnnualvalue / baseValue) * 10000) / 100;
 
-				value = $(`<span>${marginPercent+'%'}</span>`);
-				if(marginPercent < 0)
-					value = $(value).addClass("text-danger");
-				else
-					value = $(value).addClass("text-success");
+				value = $(`<span>${marginPercent + "%"}</span>`);
+				if (marginPercent < 0) value = $(value).addClass("text-danger");
+				else value = $(value).addClass("text-success");
 				value = $(value).wrap("<p></p>").parent().html();
 				return value;
 			}
-
 		}
 
-		if (data && column.fieldname=="account") {
+		if (data && column.fieldname == "account") {
 			value = data.account_name || value;
 
 			if (filter && filter?.text && filter?.type == "contains") {
@@ -85,16 +83,18 @@
 
 		return value;
 	},
-	"open_general_ledger": function(data) {
+	open_general_ledger: function (data) {
 		if (!data.account) return;
-		let project = $.grep(frappe.query_report.filters, function(e){ return e.df.fieldname == 'project'; });
+		let project = $.grep(frappe.query_report.filters, function (e) {
+			return e.df.fieldname == "project";
+		});
 
 		frappe.route_options = {
-			"account": data.account,
-			"company": frappe.query_report.get_filter_value('company'),
-			"from_date": data.from_date || data.year_start_date,
-			"to_date": data.to_date || data.year_end_date,
-			"project": (project && project.length > 0) ? project[0].$input.val() : ""
+			account: data.account,
+			company: frappe.query_report.get_filter_value("company"),
+			from_date: data.from_date || data.year_start_date,
+			to_date: data.to_date || data.year_end_date,
+			project: project && project.length > 0 ? project[0].$input.val() : "",
 		};
 
 		let report = "General Ledger";
@@ -107,159 +107,172 @@
 
 		frappe.set_route("query-report", report);
 	},
-	"tree": true,
-	"name_field": "account",
-	"parent_field": "parent_account",
-	"initial_depth": 3,
-	onload: function(report) {
+	tree: true,
+	name_field: "account",
+	parent_field: "parent_account",
+	initial_depth: 3,
+	onload: function (report) {
 		// dropdown for links to other financial statements
-		erpnext.financial_statements.filters = get_filters()
+		erpnext.financial_statements.filters = get_filters();
 
 		let fiscal_year = erpnext.utils.get_fiscal_year(frappe.datetime.get_today());
 
-		frappe.model.with_doc("Fiscal Year", fiscal_year, function(r) {
+		frappe.model.with_doc("Fiscal Year", fiscal_year, function (r) {
 			var fy = frappe.model.get_doc("Fiscal Year", fiscal_year);
 			frappe.query_report.set_filter_value({
 				period_start_date: fy.year_start_date,
-				period_end_date: fy.year_end_date
+				period_end_date: fy.year_end_date,
 			});
 		});
 
-		if (report.page){
-			const views_menu = report.page.add_custom_button_group(__('Financial Statements'));
+		if (report.page) {
+			const views_menu = report.page.add_custom_button_group(__("Financial Statements"));
 
-			report.page.add_custom_menu_item(views_menu, __("Balance Sheet"), function() {
+			report.page.add_custom_menu_item(views_menu, __("Balance Sheet"), function () {
 				var filters = report.get_values();
-				frappe.set_route('query-report', 'Balance Sheet', {company: filters.company});
+				frappe.set_route("query-report", "Balance Sheet", { company: filters.company });
 			});
 
-			report.page.add_custom_menu_item(views_menu, __("Profit and Loss"), function() {
+			report.page.add_custom_menu_item(views_menu, __("Profit and Loss"), function () {
 				var filters = report.get_values();
-				frappe.set_route('query-report', 'Profit and Loss Statement', {company: filters.company});
+				frappe.set_route("query-report", "Profit and Loss Statement", { company: filters.company });
 			});
 
-			report.page.add_custom_menu_item(views_menu, __("Cash Flow Statement"), function() {
+			report.page.add_custom_menu_item(views_menu, __("Cash Flow Statement"), function () {
 				var filters = report.get_values();
-				frappe.set_route('query-report', 'Cash Flow', {company: filters.company});
+				frappe.set_route("query-report", "Cash Flow", { company: filters.company });
 			});
 		}
-	}
+	},
 };
 
 function get_filters() {
 	let filters = [
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company"),
-			"reqd": 1
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
+			reqd: 1,
 		},
 		{
-			"fieldname":"finance_book",
-			"label": __("Finance Book"),
-			"fieldtype": "Link",
-			"options": "Finance Book"
+			fieldname: "finance_book",
+			label: __("Finance Book"),
+			fieldtype: "Link",
+			options: "Finance Book",
 		},
 		{
-			"fieldname":"filter_based_on",
-			"label": __("Filter Based On"),
-			"fieldtype": "Select",
-			"options": ["Fiscal Year", "Date Range"],
-			"default": ["Fiscal Year"],
-			"reqd": 1,
-			on_change: function() {
-				let filter_based_on = frappe.query_report.get_filter_value('filter_based_on');
-				frappe.query_report.toggle_filter_display('from_fiscal_year', filter_based_on === 'Date Range');
-				frappe.query_report.toggle_filter_display('to_fiscal_year', filter_based_on === 'Date Range');
-				frappe.query_report.toggle_filter_display('period_start_date', filter_based_on === 'Fiscal Year');
-				frappe.query_report.toggle_filter_display('period_end_date', filter_based_on === 'Fiscal Year');
+			fieldname: "filter_based_on",
+			label: __("Filter Based On"),
+			fieldtype: "Select",
+			options: ["Fiscal Year", "Date Range"],
+			default: ["Fiscal Year"],
+			reqd: 1,
+			on_change: function () {
+				let filter_based_on = frappe.query_report.get_filter_value("filter_based_on");
+				frappe.query_report.toggle_filter_display(
+					"from_fiscal_year",
+					filter_based_on === "Date Range"
+				);
+				frappe.query_report.toggle_filter_display("to_fiscal_year", filter_based_on === "Date Range");
+				frappe.query_report.toggle_filter_display(
+					"period_start_date",
+					filter_based_on === "Fiscal Year"
+				);
+				frappe.query_report.toggle_filter_display(
+					"period_end_date",
+					filter_based_on === "Fiscal Year"
+				);
 
 				frappe.query_report.refresh();
-			}
+			},
 		},
 		{
-			"fieldname":"period_start_date",
-			"label": __("Start Date"),
-			"fieldtype": "Date",
-			"reqd": 1,
-			"depends_on": "eval:doc.filter_based_on == 'Date Range'"
+			fieldname: "period_start_date",
+			label: __("Start Date"),
+			fieldtype: "Date",
+			reqd: 1,
+			depends_on: "eval:doc.filter_based_on == 'Date Range'",
 		},
 		{
-			"fieldname":"period_end_date",
-			"label": __("End Date"),
-			"fieldtype": "Date",
-			"reqd": 1,
-			"depends_on": "eval:doc.filter_based_on == 'Date Range'"
+			fieldname: "period_end_date",
+			label: __("End Date"),
+			fieldtype: "Date",
+			reqd: 1,
+			depends_on: "eval:doc.filter_based_on == 'Date Range'",
 		},
 		{
-			"fieldname":"from_fiscal_year",
-			"label": __("Start Year"),
-			"fieldtype": "Link",
-			"options": "Fiscal Year",
-			"reqd": 1,
-			"depends_on": "eval:doc.filter_based_on == 'Fiscal Year'"
+			fieldname: "from_fiscal_year",
+			label: __("Start Year"),
+			fieldtype: "Link",
+			options: "Fiscal Year",
+			reqd: 1,
+			depends_on: "eval:doc.filter_based_on == 'Fiscal Year'",
 		},
 		{
-			"fieldname":"to_fiscal_year",
-			"label": __("End Year"),
-			"fieldtype": "Link",
-			"options": "Fiscal Year",
-			"reqd": 1,
-			"depends_on": "eval:doc.filter_based_on == 'Fiscal Year'"
+			fieldname: "to_fiscal_year",
+			label: __("End Year"),
+			fieldtype: "Link",
+			options: "Fiscal Year",
+			reqd: 1,
+			depends_on: "eval:doc.filter_based_on == 'Fiscal Year'",
 		},
 		{
-			"fieldname": "periodicity",
-			"label": __("Periodicity"),
-			"fieldtype": "Select",
-			"options": [
-				{ "value": "Monthly", "label": __("Monthly") },
-				{ "value": "Quarterly", "label": __("Quarterly") },
-				{ "value": "Half-Yearly", "label": __("Half-Yearly") },
-				{ "value": "Yearly", "label": __("Yearly") }
+			fieldname: "periodicity",
+			label: __("Periodicity"),
+			fieldtype: "Select",
+			options: [
+				{ value: "Monthly", label: __("Monthly") },
+				{ value: "Quarterly", label: __("Quarterly") },
+				{ value: "Half-Yearly", label: __("Half-Yearly") },
+				{ value: "Yearly", label: __("Yearly") },
 			],
-			"default": "Yearly",
-			"reqd": 1
+			default: "Yearly",
+			reqd: 1,
 		},
 		// Note:
 		// If you are modifying this array such that the presentation_currency object
 		// is no longer the last object, please make adjustments in cash_flow.js
 		// accordingly.
 		{
-			"fieldname": "presentation_currency",
-			"label": __("Currency"),
-			"fieldtype": "Select",
-			"options": erpnext.get_presentation_currency_list()
+			fieldname: "presentation_currency",
+			label: __("Currency"),
+			fieldtype: "Select",
+			options: erpnext.get_presentation_currency_list(),
 		},
 		{
-			"fieldname": "cost_center",
-			"label": __("Cost Center"),
-			"fieldtype": "MultiSelectList",
-			get_data: function(txt) {
-				return frappe.db.get_link_options('Cost Center', txt, {
-					company: frappe.query_report.get_filter_value("company")
-				});
-			}
-		},
-		{
-			"fieldname": "project",
-			"label": __("Project"),
-			"fieldtype": "MultiSelectList",
-			get_data: function(txt) {
-				return frappe.db.get_link_options('Project', txt, {
-					company: frappe.query_report.get_filter_value("company")
+			fieldname: "cost_center",
+			label: __("Cost Center"),
+			fieldtype: "MultiSelectList",
+			get_data: function (txt) {
+				return frappe.db.get_link_options("Cost Center", txt, {
+					company: frappe.query_report.get_filter_value("company"),
 				});
 			},
-		}
-	]
+		},
+		{
+			fieldname: "project",
+			label: __("Project"),
+			fieldtype: "MultiSelectList",
+			get_data: function (txt) {
+				return frappe.db.get_link_options("Project", txt, {
+					company: frappe.query_report.get_filter_value("company"),
+				});
+			},
+		},
+	];
 
 	// Dynamically set 'default' values for fiscal year filters
-	let fy_filters = filters.filter(x=>{return ["from_fiscal_year", "to_fiscal_year"].includes(x.fieldname);})
+	let fy_filters = filters.filter((x) => {
+		return ["from_fiscal_year", "to_fiscal_year"].includes(x.fieldname);
+	});
 	let fiscal_year = erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), false, true);
 	if (fiscal_year) {
 		let fy = erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), false, false);
-		fy_filters.forEach(x=>{x.default = fy;})
+		fy_filters.forEach((x) => {
+			x.default = fy;
+		});
 	}
 
 	return filters;
diff --git a/erpnext/public/js/help_links.js b/erpnext/public/js/help_links.js
index 6742761..f9dbea9 100644
--- a/erpnext/public/js/help_links.js
+++ b/erpnext/public/js/help_links.js
@@ -332,13 +332,9 @@
 
 //Buying
 
-frappe.help.help_links["List/Supplier"] = [
-	{ label: "Supplier", url: docsUrl + "user/manual/en/supplier" },
-];
+frappe.help.help_links["List/Supplier"] = [{ label: "Supplier", url: docsUrl + "user/manual/en/supplier" }];
 
-frappe.help.help_links["Form/Supplier"] = [
-	{ label: "Supplier", url: docsUrl + "user/manual/en/supplier" },
-];
+frappe.help.help_links["Form/Supplier"] = [{ label: "Supplier", url: docsUrl + "user/manual/en/supplier" }];
 
 frappe.help.help_links["Form/Request for Quotation"] = [
 	{
@@ -441,9 +437,7 @@
 	},
 ];
 
-frappe.help.help_links["List/Workflow"] = [
-	{ label: "Workflow", url: docsUrl + "user/manual/en/workflows" },
-];
+frappe.help.help_links["List/Workflow"] = [{ label: "Workflow", url: docsUrl + "user/manual/en/workflows" }];
 
 frappe.help.help_links["List/Company"] = [
 	{
@@ -620,9 +614,7 @@
 	},
 	{
 		label: "Item Valuation",
-		url:
-			docsUrl +
-			"user/manual/en/calculation-of-valuation-rate-in-fifo-and-moving-average",
+		url: docsUrl + "user/manual/en/calculation-of-valuation-rate-in-fifo-and-moving-average",
 	},
 ];
 
@@ -706,9 +698,7 @@
 	},
 ];
 
-frappe.help.help_links["List/Budget"] = [
-	{ label: "Budgeting", url: docsUrl + "user/manual/en/budgeting" },
-];
+frappe.help.help_links["List/Budget"] = [{ label: "Budgeting", url: docsUrl + "user/manual/en/budgeting" }];
 
 frappe.help.help_links["List/Material Request"] = [
 	{
@@ -768,13 +758,9 @@
 	{ label: "Serial No", url: docsUrl + "user/manual/en/serial-no" },
 ];
 
-frappe.help.help_links["List/Batch"] = [
-	{ label: "Batch", url: docsUrl + "user/manual/en/batch" },
-];
+frappe.help.help_links["List/Batch"] = [{ label: "Batch", url: docsUrl + "user/manual/en/batch" }];
 
-frappe.help.help_links["Form/Batch"] = [
-	{ label: "Batch", url: docsUrl + "user/manual/en/batch" },
-];
+frappe.help.help_links["Form/Batch"] = [{ label: "Batch", url: docsUrl + "user/manual/en/batch" }];
 
 frappe.help.help_links["Form/Packing Slip"] = [
 	{
@@ -827,29 +813,21 @@
 
 //CRM
 
-frappe.help.help_links["Form/Lead"] = [
-	{ label: "Lead", url: docsUrl + "user/manual/en/lead" },
-];
+frappe.help.help_links["Form/Lead"] = [{ label: "Lead", url: docsUrl + "user/manual/en/lead" }];
 
 frappe.help.help_links["Form/Opportunity"] = [
 	{ label: "Opportunity", url: docsUrl + "user/manual/en/opportunity" },
 ];
 
-frappe.help.help_links["Form/Address"] = [
-	{ label: "Address", url: docsUrl + "user/manual/en/address" },
-];
+frappe.help.help_links["Form/Address"] = [{ label: "Address", url: docsUrl + "user/manual/en/address" }];
 
-frappe.help.help_links["Form/Contact"] = [
-	{ label: "Contact", url: docsUrl + "user/manual/en/contact" },
-];
+frappe.help.help_links["Form/Contact"] = [{ label: "Contact", url: docsUrl + "user/manual/en/contact" }];
 
 frappe.help.help_links["Form/Newsletter"] = [
 	{ label: "Newsletter", url: docsUrl + "user/manual/en/newsletter" },
 ];
 
-frappe.help.help_links["Form/Campaign"] = [
-	{ label: "Campaign", url: docsUrl + "user/manual/en/campaign" },
-];
+frappe.help.help_links["Form/Campaign"] = [{ label: "Campaign", url: docsUrl + "user/manual/en/campaign" }];
 
 frappe.help.help_links["Tree/Sales Person"] = [
 	{
diff --git a/erpnext/public/js/newsletter.js b/erpnext/public/js/newsletter.js
index 3a4dbf8..96c65de 100644
--- a/erpnext/public/js/newsletter.js
+++ b/erpnext/public/js/newsletter.js
@@ -1,8 +1,8 @@
 // Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.ui.form.on('Newsletter', {
+frappe.ui.form.on("Newsletter", {
 	refresh() {
 		erpnext.toggle_naming_series();
-	}
+	},
 });
diff --git a/erpnext/public/js/payment/payments.js b/erpnext/public/js/payment/payments.js
index 4c23669..0e58420 100644
--- a/erpnext/public/js/payment/payments.js
+++ b/erpnext/public/js/payment/payments.js
@@ -6,7 +6,7 @@
 		var me = this;
 
 		this.dialog = new frappe.ui.Dialog({
-			title: 'Payment'
+			title: "Payment",
 		});
 
 		this.dialog.show();
@@ -17,15 +17,17 @@
 	}
 
 	select_text() {
-		$(this.$body).find('.form-control').click(function() {
-			$(this).select();
-		});
+		$(this.$body)
+			.find(".form-control")
+			.click(function () {
+				$(this).select();
+			});
 	}
 
 	set_payment_primary_action() {
 		var me = this;
 
-		this.dialog.set_primary_action(__("Submit"), function() {
+		this.dialog.set_primary_action(__("Submit"), function () {
 			// Allow no ZERO payment
 			$.each(me.frm.doc.payments, function (index, data) {
 				if (data.amount != 0) {
@@ -34,131 +36,147 @@
 					return;
 				}
 			});
-		})
+		});
 	}
 
-	make_keyboard(){
+	make_keyboard() {
 		var me = this;
 		$(this.$body).empty();
-		$(this.$body).html(frappe.render_template('pos_payment', this.frm.doc))
+		$(this.$body).html(frappe.render_template("pos_payment", this.frm.doc));
 		this.show_payment_details();
-		this.bind_keyboard_event()
-		this.clear_amount()
+		this.bind_keyboard_event();
+		this.clear_amount();
 	}
 
-	make_multimode_payment(){
+	make_multimode_payment() {
 		var me = this;
 
 		if (this.frm.doc.change_amount > 0) {
 			me.payment_val = me.doc.outstanding_amount;
 		}
 
-		this.payments = frappe.model.add_child(this.frm.doc, 'Multi Mode Payment', "payments");
+		this.payments = frappe.model.add_child(this.frm.doc, "Multi Mode Payment", "payments");
 		this.payments.mode_of_payment = this.dialog.fields_dict.mode_of_payment.get_value();
 		this.payments.amount = flt(this.payment_val);
 	}
 
-	show_payment_details(){
+	show_payment_details() {
 		var me = this;
-		var multimode_payments = $(this.$body).find('.multimode-payments').empty();
+		var multimode_payments = $(this.$body).find(".multimode-payments").empty();
 		if (this.frm.doc.payments.length) {
-			$.each(this.frm.doc.payments, function(index, data) {
-				$(frappe.render_template('payment_details', {
-					mode_of_payment: data.mode_of_payment,
-					amount: data.amount,
-					idx: data.idx,
-					currency: me.frm.doc.currency,
-					type: data.type
-				})).appendTo(multimode_payments)
+			$.each(this.frm.doc.payments, function (index, data) {
+				$(
+					frappe.render_template("payment_details", {
+						mode_of_payment: data.mode_of_payment,
+						amount: data.amount,
+						idx: data.idx,
+						currency: me.frm.doc.currency,
+						type: data.type,
+					})
+				).appendTo(multimode_payments);
 
-				if (data.type == 'Cash' && data.amount == me.frm.doc.paid_amount) {
+				if (data.type == "Cash" && data.amount == me.frm.doc.paid_amount) {
 					me.idx = data.idx;
-					me.selected_mode = $(me.$body).find(repl("input[idx='%(idx)s']",{'idx': me.idx}));
+					me.selected_mode = $(me.$body).find(repl("input[idx='%(idx)s']", { idx: me.idx }));
 					me.highlight_selected_row();
 					me.bind_amount_change_event();
 				}
-			})
-		}else{
-			$("<p>No payment mode selected in pos profile</p>").appendTo(multimode_payments)
+			});
+		} else {
+			$("<p>No payment mode selected in pos profile</p>").appendTo(multimode_payments);
 		}
 	}
 
-	set_outstanding_amount(){
-		this.selected_mode = $(this.$body).find(repl("input[idx='%(idx)s']",{'idx': this.idx}));
+	set_outstanding_amount() {
+		this.selected_mode = $(this.$body).find(repl("input[idx='%(idx)s']", { idx: this.idx }));
 		this.highlight_selected_row();
 		this.payment_val = 0.0;
 		if (this.frm.doc.outstanding_amount > 0 && flt(this.selected_mode.val()) == 0.0) {
 			//When user first time click on row
-			this.payment_val = flt(this.frm.doc.outstanding_amount / this.frm.doc.conversion_rate, precision("outstanding_amount"))
+			this.payment_val = flt(
+				this.frm.doc.outstanding_amount / this.frm.doc.conversion_rate,
+				precision("outstanding_amount")
+			);
 			this.selected_mode.val(format_currency(this.payment_val, this.frm.doc.currency));
 			this.update_payment_amount();
 		} else if (flt(this.selected_mode.val()) > 0) {
 			//If user click on existing row which has value
 			this.payment_val = flt(this.selected_mode.val());
 		}
-		this.selected_mode.select()
+		this.selected_mode.select();
 		this.bind_amount_change_event();
 	}
 
-	bind_keyboard_event(){
+	bind_keyboard_event() {
 		var me = this;
-		this.payment_val = '';
+		this.payment_val = "";
 		this.bind_form_control_event();
 		this.bind_numeric_keys_event();
 	}
 
 	bind_form_control_event() {
 		var me = this;
-		$(this.$body).find('.pos-payment-row').click(function() {
-			me.idx = $(this).attr("idx");
-			me.set_outstanding_amount();
-		});
+		$(this.$body)
+			.find(".pos-payment-row")
+			.click(function () {
+				me.idx = $(this).attr("idx");
+				me.set_outstanding_amount();
+			});
 
-		$(this.$body).find('.form-control').click(function() {
-			me.idx = $(this).attr("idx");
-			me.set_outstanding_amount();
-			me.update_paid_amount(true);
-		});
+		$(this.$body)
+			.find(".form-control")
+			.click(function () {
+				me.idx = $(this).attr("idx");
+				me.set_outstanding_amount();
+				me.update_paid_amount(true);
+			});
 
-		$(this.$body).find('.write_off_amount').change(function() {
-			me.write_off_amount(flt($(this).val()), precision("write_off_amount"));
-		});
+		$(this.$body)
+			.find(".write_off_amount")
+			.change(function () {
+				me.write_off_amount(flt($(this).val()), precision("write_off_amount"));
+			});
 
-		$(this.$body).find('.change_amount').change(function() {
-			me.change_amount(flt($(this).val()), precision("change_amount"));
-		});
+		$(this.$body)
+			.find(".change_amount")
+			.change(function () {
+				me.change_amount(flt($(this).val()), precision("change_amount"));
+			});
 	}
 
 	highlight_selected_row() {
-		var selected_row = $(this.$body).find(repl(".pos-payment-row[idx='%(idx)s']", {'idx': this.idx}));
-		$(this.$body).find('.pos-payment-row').removeClass('selected-payment-mode');
-		selected_row.addClass('selected-payment-mode');
-		$(this.$body).find('.amount').attr('disabled', true);
-		this.selected_mode.attr('disabled', false);
+		var selected_row = $(this.$body).find(repl(".pos-payment-row[idx='%(idx)s']", { idx: this.idx }));
+		$(this.$body).find(".pos-payment-row").removeClass("selected-payment-mode");
+		selected_row.addClass("selected-payment-mode");
+		$(this.$body).find(".amount").attr("disabled", true);
+		this.selected_mode.attr("disabled", false);
 	}
 
 	bind_numeric_keys_event() {
 		var me = this;
-		$(this.$body).find('.pos-keyboard-key').click(function(){
-			me.payment_val += $(this).text();
-			me.selected_mode.val(format_currency(me.payment_val, me.frm.doc.currency));
-			me.idx = me.selected_mode.attr("idx");
-			me.update_paid_amount();
-		});
+		$(this.$body)
+			.find(".pos-keyboard-key")
+			.click(function () {
+				me.payment_val += $(this).text();
+				me.selected_mode.val(format_currency(me.payment_val, me.frm.doc.currency));
+				me.idx = me.selected_mode.attr("idx");
+				me.update_paid_amount();
+			});
 
-		$(this.$body).find('.delete-btn').click(function() {
-			me.payment_val =  cstr(flt(me.selected_mode.val())).slice(0, -1);
-			me.selected_mode.val(format_currency(me.payment_val, me.frm.doc.currency));
-			me.idx = me.selected_mode.attr("idx");
-			me.update_paid_amount();
-		})
-
+		$(this.$body)
+			.find(".delete-btn")
+			.click(function () {
+				me.payment_val = cstr(flt(me.selected_mode.val())).slice(0, -1);
+				me.selected_mode.val(format_currency(me.payment_val, me.frm.doc.currency));
+				me.idx = me.selected_mode.attr("idx");
+				me.update_paid_amount();
+			});
 	}
 
 	bind_amount_change_event() {
 		var me = this;
-		this.selected_mode.change(function() {
-			me.payment_val =  flt($(this).val()) || 0.0;
+		this.selected_mode.change(function () {
+			me.payment_val = flt($(this).val()) || 0.0;
 			me.selected_mode.val(format_currency(me.payment_val, me.frm.doc.currency));
 			me.idx = me.selected_mode.attr("idx");
 			me.update_payment_amount();
@@ -167,21 +185,25 @@
 
 	clear_amount() {
 		var me = this;
-		$(this.$body).find('.clr').click(function(e) {
-			e.stopPropagation();
-			me.idx = $(this).attr("idx");
-			me.selected_mode = $(me.$body).find(repl("input[idx='%(idx)s']",{'idx': me.idx}));
-			me.payment_val = 0.0;
-			me.selected_mode.val(0.0);
-			me.highlight_selected_row();
-			me.update_payment_amount();
-		});
+		$(this.$body)
+			.find(".clr")
+			.click(function (e) {
+				e.stopPropagation();
+				me.idx = $(this).attr("idx");
+				me.selected_mode = $(me.$body).find(repl("input[idx='%(idx)s']", { idx: me.idx }));
+				me.payment_val = 0.0;
+				me.selected_mode.val(0.0);
+				me.highlight_selected_row();
+				me.update_payment_amount();
+			});
 	}
 
 	write_off_amount(write_off_amount) {
 		this.frm.doc.write_off_amount = flt(write_off_amount, precision("write_off_amount"));
-		this.frm.doc.base_write_off_amount = flt(this.frm.doc.write_off_amount * this.frm.doc.conversion_rate,
-			precision("base_write_off_amount"));
+		this.frm.doc.base_write_off_amount = flt(
+			this.frm.doc.write_off_amount * this.frm.doc.conversion_rate,
+			precision("base_write_off_amount")
+		);
 		this.calculate_outstanding_amount(false);
 		this.show_amounts();
 	}
@@ -196,13 +218,16 @@
 
 	update_paid_amount(update_write_off) {
 		var me = this;
-		if (in_list(['change_amount', 'write_off_amount'], this.idx)) {
+		if (in_list(["change_amount", "write_off_amount"], this.idx)) {
 			var value = me.selected_mode.val();
-			if (me.idx == 'change_amount') {
+			if (me.idx == "change_amount") {
 				me.change_amount(value);
 			} else {
-				if(flt(value) == 0 && update_write_off && me.frm.doc.outstanding_amount > 0) {
-					value = flt(me.frm.doc.outstanding_amount / me.frm.doc.conversion_rate, precision(me.idx));
+				if (flt(value) == 0 && update_write_off && me.frm.doc.outstanding_amount > 0) {
+					value = flt(
+						me.frm.doc.outstanding_amount / me.frm.doc.conversion_rate,
+						precision(me.idx)
+					);
 				}
 				me.write_off_amount(value);
 			}
@@ -211,25 +236,38 @@
 		}
 	}
 
-	update_payment_amount(){
+	update_payment_amount() {
 		var me = this;
 
-		$.each(this.frm.doc.payments, function(index, data) {
+		$.each(this.frm.doc.payments, function (index, data) {
 			if (cint(me.idx) == cint(data.idx)) {
 				data.amount = flt(me.selected_mode.val(), 2);
 			}
-		})
+		});
 
 		this.calculate_outstanding_amount(false);
 		this.show_amounts();
 	}
 
-	show_amounts(){
+	show_amounts() {
 		var me = this;
-		$(this.$body).find(".write_off_amount").val(format_currency(this.frm.doc.write_off_amount, this.frm.doc.currency));
-		$(this.$body).find('.paid_amount').text(format_currency(this.frm.doc.paid_amount, this.frm.doc.currency));
-		$(this.$body).find('.change_amount').val(format_currency(this.frm.doc.change_amount, this.frm.doc.currency));
-		$(this.$body).find('.outstanding_amount').text(format_currency(this.frm.doc.outstanding_amount, frappe.get_doc(":Company", this.frm.doc.company).default_currency));
+		$(this.$body)
+			.find(".write_off_amount")
+			.val(format_currency(this.frm.doc.write_off_amount, this.frm.doc.currency));
+		$(this.$body)
+			.find(".paid_amount")
+			.text(format_currency(this.frm.doc.paid_amount, this.frm.doc.currency));
+		$(this.$body)
+			.find(".change_amount")
+			.val(format_currency(this.frm.doc.change_amount, this.frm.doc.currency));
+		$(this.$body)
+			.find(".outstanding_amount")
+			.text(
+				format_currency(
+					this.frm.doc.outstanding_amount,
+					frappe.get_doc(":Company", this.frm.doc.company).default_currency
+				)
+			);
 		this.update_invoice();
 	}
-}
+};
diff --git a/erpnext/public/js/plant_floor_visual/visual_plant.js b/erpnext/public/js/plant_floor_visual/visual_plant.js
index 8cd73ad..7e6ee65 100644
--- a/erpnext/public/js/plant_floor_visual/visual_plant.js
+++ b/erpnext/public/js/plant_floor_visual/visual_plant.js
@@ -1,5 +1,5 @@
 class VisualPlantFloor {
-	constructor({wrapper, skip_filters=false, plant_floor=null}, page=null) {
+	constructor({ wrapper, skip_filters = false, plant_floor = null }, page = null) {
 		this.wrapper = wrapper;
 		this.plant_floor = plant_floor;
 		this.skip_filters = skip_filters;
@@ -23,67 +23,67 @@
 		`);
 
 		if (!this.skip_filters) {
-			this.filter_wrapper = this.wrapper.find('.plant-floor-filter');
-			this.visualization_wrapper = this.wrapper.find('.plant-floor-visualization');
-		} else if(this.plant_floor) {
-			this.wrapper.find('.plant-floor').css('border', 'none');
+			this.filter_wrapper = this.wrapper.find(".plant-floor-filter");
+			this.visualization_wrapper = this.wrapper.find(".plant-floor-visualization");
+		} else if (this.plant_floor) {
+			this.wrapper.find(".plant-floor").css("border", "none");
 			this.prepare_data();
 		}
 	}
 
 	prepare_data() {
 		frappe.call({
-			method: 'erpnext.manufacturing.doctype.workstation.workstation.get_workstations',
+			method: "erpnext.manufacturing.doctype.workstation.workstation.get_workstations",
 			args: {
 				plant_floor: this.plant_floor,
 			},
 			callback: (r) => {
 				this.workstations = r.message;
 				this.render_workstations();
-			}
+			},
 		});
 	}
 
 	add_filter() {
 		this.plant_floor = frappe.ui.form.make_control({
 			df: {
-				fieldtype: 'Link',
-				options: 'Plant Floor',
-				fieldname: 'plant_floor',
-				label: __('Plant Floor'),
+				fieldtype: "Link",
+				options: "Plant Floor",
+				fieldname: "plant_floor",
+				label: __("Plant Floor"),
 				reqd: 1,
 				onchange: () => {
 					this.render_plant_visualization();
-				}
+				},
 			},
 			parent: this.filter_wrapper,
 			render_input: true,
 		});
 
-		this.plant_floor.$wrapper.addClass('form-column col-sm-2');
+		this.plant_floor.$wrapper.addClass("form-column col-sm-2");
 
 		this.workstation_type = frappe.ui.form.make_control({
 			df: {
-				fieldtype: 'Link',
-				options: 'Workstation Type',
-				fieldname: 'workstation_type',
-				label: __('Machine Type'),
+				fieldtype: "Link",
+				options: "Workstation Type",
+				fieldname: "workstation_type",
+				label: __("Machine Type"),
 				onchange: () => {
 					this.render_plant_visualization();
-				}
+				},
 			},
 			parent: this.filter_wrapper,
 			render_input: true,
 		});
 
-		this.workstation_type.$wrapper.addClass('form-column col-sm-2');
+		this.workstation_type.$wrapper.addClass("form-column col-sm-2");
 
 		this.workstation = frappe.ui.form.make_control({
 			df: {
-				fieldtype: 'Link',
-				options: 'Workstation',
-				fieldname: 'workstation',
-				label: __('Machine'),
+				fieldtype: "Link",
+				options: "Workstation",
+				fieldname: "workstation",
+				label: __("Machine"),
 				onchange: () => {
 					this.render_plant_visualization();
 				},
@@ -91,24 +91,24 @@
 					if (this.workstation_type.get_value()) {
 						return {
 							filters: {
-								'workstation_type': this.workstation_type.get_value() || ''
-							}
-						}
+								workstation_type: this.workstation_type.get_value() || "",
+							},
+						};
 					}
-				}
+				},
 			},
 			parent: this.filter_wrapper,
 			render_input: true,
 		});
 
-		this.workstation.$wrapper.addClass('form-column col-sm-2');
+		this.workstation.$wrapper.addClass("form-column col-sm-2");
 
 		this.workstation_status = frappe.ui.form.make_control({
 			df: {
-				fieldtype: 'Select',
-				options: '\nProduction\nOff\nIdle\nProblem\nMaintenance\nSetup',
-				fieldname: 'workstation_status',
-				label: __('Status'),
+				fieldtype: "Select",
+				options: "\nProduction\nOff\nIdle\nProblem\nMaintenance\nSetup",
+				fieldname: "workstation_status",
+				label: __("Status"),
 				onchange: () => {
 					this.render_plant_visualization();
 				},
@@ -123,35 +123,35 @@
 
 		if (plant_floor) {
 			frappe.call({
-				method: 'erpnext.manufacturing.doctype.workstation.workstation.get_workstations',
+				method: "erpnext.manufacturing.doctype.workstation.workstation.get_workstations",
 				args: {
 					plant_floor: plant_floor,
 					workstation_type: this.workstation_type.get_value(),
 					workstation: this.workstation.get_value(),
-					workstation_status: this.workstation_status.get_value()
+					workstation_status: this.workstation_status.get_value(),
 				},
 				callback: (r) => {
 					this.workstations = r.message;
 					this.render_workstations();
-				}
+				},
 			});
 		}
 	}
 
 	render_workstations() {
-		this.wrapper.find('.plant-floor-container').empty();
-		let template  = frappe.render_template("visual_plant_floor_template", {
-			workstations: this.workstations
+		this.wrapper.find(".plant-floor-container").empty();
+		let template = frappe.render_template("visual_plant_floor_template", {
+			workstations: this.workstations,
 		});
 
-		$(template).appendTo(this.wrapper.find('.plant-floor-container'));
+		$(template).appendTo(this.wrapper.find(".plant-floor-container"));
 	}
 
 	prepare_menu() {
-		this.page.add_menu_item(__('Refresh'), () => {
+		this.page.add_menu_item(__("Refresh"), () => {
 			this.render_plant_visualization();
 		});
 	}
 }
 
-frappe.ui.VisualPlantFloor = VisualPlantFloor;
\ No newline at end of file
+frappe.ui.VisualPlantFloor = VisualPlantFloor;
diff --git a/erpnext/public/js/projects/timer.js b/erpnext/public/js/projects/timer.js
index 0209f4c..8370cc6 100644
--- a/erpnext/public/js/projects/timer.js
+++ b/erpnext/public/js/projects/timer.js
@@ -1,26 +1,30 @@
 frappe.provide("erpnext.timesheet");
 
-erpnext.timesheet.timer = function(frm, row, timestamp=0) {
+erpnext.timesheet.timer = function (frm, row, timestamp = 0) {
 	let dialog = new frappe.ui.Dialog({
 		title: __("Timer"),
-		fields:
-		[
-			{"fieldtype": "Link", "label": __("Activity Type"), "fieldname": "activity_type",
-				"reqd": 1, "options": "Activity Type"},
-			{"fieldtype": "Link", "label": __("Project"), "fieldname": "project", "options": "Project"},
-			{"fieldtype": "Link", "label": __("Task"), "fieldname": "task", "options": "Task"},
-			{"fieldtype": "Float", "label": __("Expected Hrs"), "fieldname": "expected_hours"},
-			{"fieldtype": "Section Break"},
-			{"fieldtype": "HTML", "fieldname": "timer_html"}
-		]
+		fields: [
+			{
+				fieldtype: "Link",
+				label: __("Activity Type"),
+				fieldname: "activity_type",
+				reqd: 1,
+				options: "Activity Type",
+			},
+			{ fieldtype: "Link", label: __("Project"), fieldname: "project", options: "Project" },
+			{ fieldtype: "Link", label: __("Task"), fieldname: "task", options: "Task" },
+			{ fieldtype: "Float", label: __("Expected Hrs"), fieldname: "expected_hours" },
+			{ fieldtype: "Section Break" },
+			{ fieldtype: "HTML", fieldname: "timer_html" },
+		],
 	});
 
 	if (row) {
 		dialog.set_values({
-			'activity_type': row.activity_type,
-			'project': row.project,
-			'task': row.task,
-			'expected_hours': row.expected_hours
+			activity_type: row.activity_type,
+			project: row.project,
+			task: row.task,
+			expected_hours: row.expected_hours,
 		});
 	}
 	dialog.get_field("timer_html").$wrapper.append(get_timer_html());
@@ -34,8 +38,8 @@
 				<span class="seconds">00</span>
 			</div>
 			<div class="playpause text-center">
-				<button class= "btn btn-primary btn-start"> ${ __("Start") } </button>
-				<button class= "btn btn-primary btn-complete"> ${ __("Complete") } </button>
+				<button class= "btn btn-primary btn-start"> ${__("Start")} </button>
+				<button class= "btn btn-primary btn-complete"> ${__("Complete")} </button>
 			</div>
 		`;
 	}
@@ -43,7 +47,7 @@
 	dialog.show();
 };
 
-erpnext.timesheet.control_timer = function(frm, dialog, row, timestamp=0) {
+erpnext.timesheet.control_timer = function (frm, dialog, row, timestamp = 0) {
 	var $btn_start = dialog.$wrapper.find(".playpause .btn-start");
 	var $btn_complete = dialog.$wrapper.find(".playpause .btn-complete");
 	var interval = null;
@@ -63,12 +67,16 @@
 		$btn_complete.hide();
 	}
 
-	$btn_start.click(function(e) {
+	$btn_start.click(function (e) {
 		if (!initialized) {
 			// New activity if no activities found
 			var args = dialog.get_values();
-			if(!args) return;
-			if (frm.doc.time_logs.length == 1 && !frm.doc.time_logs[0].activity_type && !frm.doc.time_logs[0].from_time) {
+			if (!args) return;
+			if (
+				frm.doc.time_logs.length == 1 &&
+				!frm.doc.time_logs[0].activity_type &&
+				!frm.doc.time_logs[0].from_time
+			) {
 				frm.doc.time_logs = [];
 			}
 			row = frappe.model.add_child(frm.doc, "Timesheet Detail", "time_logs");
@@ -79,7 +87,7 @@
 			row.expected_hours = args.expected_hours;
 			row.completed = 0;
 			let d = moment(row.from_time);
-			if(row.expected_hours) {
+			if (row.expected_hours) {
 				d.add(row.expected_hours, "hours");
 				row.to_time = d.format(frappe.defaultDatetimeFormat);
 			}
@@ -101,8 +109,8 @@
 	});
 
 	// Stop the timer and update the time logged by the timer on click of 'Complete' button
-	$btn_complete.click(function() {
-		var grid_row = cur_frm.fields_dict['time_logs'].grid.get_row(row.idx - 1);
+	$btn_complete.click(function () {
+		var grid_row = cur_frm.fields_dict["time_logs"].grid.get_row(row.idx - 1);
 		var args = dialog.get_values();
 		grid_row.doc.completed = 1;
 		grid_row.doc.activity_type = args.activity_type;
@@ -119,7 +127,7 @@
 	});
 
 	function initializeTimer() {
-		interval = setInterval(function() {
+		interval = setInterval(function () {
 			var current = setCurrentIncrement();
 			updateStopwatch(current);
 		}, 1000);
@@ -127,25 +135,24 @@
 
 	function updateStopwatch(increment) {
 		var hours = Math.floor(increment / 3600);
-		var minutes = Math.floor((increment - (hours * 3600)) / 60);
-		var seconds = increment - (hours * 3600) - (minutes * 60);
+		var minutes = Math.floor((increment - hours * 3600) / 60);
+		var seconds = increment - hours * 3600 - minutes * 60;
 
 		// If modal is closed by clicking anywhere outside, reset the timer
-		if (!$('.modal-dialog').is(':visible')) {
+		if (!$(".modal-dialog").is(":visible")) {
 			reset();
 		}
-		if(hours > 99999)
-			reset();
-		if(cur_dialog && cur_dialog.get_value('expected_hours') > 0) {
-			if(flag && (currentIncrement >= (cur_dialog.get_value('expected_hours') * 3600))) {
+		if (hours > 99999) reset();
+		if (cur_dialog && cur_dialog.get_value("expected_hours") > 0) {
+			if (flag && currentIncrement >= cur_dialog.get_value("expected_hours") * 3600) {
 				frappe.utils.play_sound("alert");
 				frappe.msgprint(__("Timer exceeded the given hours."));
 				flag = false;
 			}
 		}
-		$(".hours").text(hours < 10 ? ("0" + hours.toString()) : hours.toString());
-		$(".minutes").text(minutes < 10 ? ("0" + minutes.toString()) : minutes.toString());
-		$(".seconds").text(seconds < 10 ? ("0" + seconds.toString()) : seconds.toString());
+		$(".hours").text(hours < 10 ? "0" + hours.toString() : hours.toString());
+		$(".minutes").text(minutes < 10 ? "0" + minutes.toString() : minutes.toString());
+		$(".seconds").text(seconds < 10 ? "0" + seconds.toString() : seconds.toString());
 	}
 
 	function setCurrentIncrement() {
diff --git a/erpnext/public/js/purchase_trends_filters.js b/erpnext/public/js/purchase_trends_filters.js
index 77f1d2b..14ffaf8 100644
--- a/erpnext/public/js/purchase_trends_filters.js
+++ b/erpnext/public/js/purchase_trends_filters.js
@@ -1,71 +1,67 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-erpnext.get_purchase_trends_filters = function() {
+erpnext.get_purchase_trends_filters = function () {
 	return [
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"reqd": 1,
-			"default": frappe.defaults.get_user_default("Company")
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			reqd: 1,
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
-			"fieldname":"period",
-			"label": __("Period"),
-			"fieldtype": "Select",
-			"options": [
-				{ "value": "Monthly", "label": __("Monthly") },
-				{ "value": "Quarterly", "label": __("Quarterly") },
-				{ "value": "Half-Yearly", "label": __("Half-Yearly") },
-				{ "value": "Yearly", "label": __("Yearly") }
+			fieldname: "period",
+			label: __("Period"),
+			fieldtype: "Select",
+			options: [
+				{ value: "Monthly", label: __("Monthly") },
+				{ value: "Quarterly", label: __("Quarterly") },
+				{ value: "Half-Yearly", label: __("Half-Yearly") },
+				{ value: "Yearly", label: __("Yearly") },
 			],
-			"default": "Monthly"
+			default: "Monthly",
 		},
 		{
-			"fieldname":"fiscal_year",
-			"label": __("Fiscal Year"),
-			"fieldtype": "Link",
-			"options":'Fiscal Year',
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today())
+			fieldname: "fiscal_year",
+			label: __("Fiscal Year"),
+			fieldtype: "Link",
+			options: "Fiscal Year",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
 		},
 		{
-			"fieldname":"period_based_on",
-			"label": __("Period based On"),
-			"fieldtype": "Select",
-			"options": [
-				{ "value": "posting_date", "label": __("Posting Date") },
-				{ "value": "bill_date", "label": __("Billing Date") },
+			fieldname: "period_based_on",
+			label: __("Period based On"),
+			fieldtype: "Select",
+			options: [
+				{ value: "posting_date", label: __("Posting Date") },
+				{ value: "bill_date", label: __("Billing Date") },
 			],
-			"default": "posting_date"
+			default: "posting_date",
 		},
 		{
-			"fieldname":"based_on",
-			"label": __("Based On"),
-			"fieldtype": "Select",
-			"options": [
-				{ "value": "Item", "label": __("Item") },
-				{ "value": "Item Group", "label": __("Item Group") },
-				{ "value": "Supplier", "label": __("Supplier") },
-				{ "value": "Supplier Group", "label": __("Supplier Group") },
-				{ "value": "Project", "label": __("Project") }
+			fieldname: "based_on",
+			label: __("Based On"),
+			fieldtype: "Select",
+			options: [
+				{ value: "Item", label: __("Item") },
+				{ value: "Item Group", label: __("Item Group") },
+				{ value: "Supplier", label: __("Supplier") },
+				{ value: "Supplier Group", label: __("Supplier Group") },
+				{ value: "Project", label: __("Project") },
 			],
-			"default": "Item",
-			"dashboard_config": {
-				"read_only": 1
-			}
+			default: "Item",
+			dashboard_config: {
+				read_only: 1,
+			},
 		},
 		{
-			"fieldname":"group_by",
-			"label": __("Group By"),
-			"fieldtype": "Select",
-			"options": [
-				"",
-				{ "value": "Item", "label": __("Item") },
-				{ "value": "Supplier", "label": __("Supplier") }
-			],
-			"default": ""
+			fieldname: "group_by",
+			label: __("Group By"),
+			fieldtype: "Select",
+			options: ["", { value: "Item", label: __("Item") }, { value: "Supplier", label: __("Supplier") }],
+			default: "",
 		},
 	];
-}
+};
diff --git a/erpnext/public/js/queries.js b/erpnext/public/js/queries.js
index b7d880a..b7e685c 100644
--- a/erpnext/public/js/queries.js
+++ b/erpnext/public/js/queries.js
@@ -4,129 +4,139 @@
 // searches for enabled users
 frappe.provide("erpnext.queries");
 $.extend(erpnext.queries, {
-	user: function() {
+	user: function () {
 		return { query: "frappe.core.doctype.user.user.user_query" };
 	},
 
-	lead: function() {
+	lead: function () {
 		return { query: "erpnext.controllers.queries.lead_query" };
 	},
 
-	customer: function() {
+	customer: function () {
 		return { query: "erpnext.controllers.queries.customer_query" };
 	},
 
-	supplier: function() {
+	supplier: function () {
 		return { query: "erpnext.controllers.queries.supplier_query" };
 	},
 
-	item: function(filters) {
+	item: function (filters) {
 		var args = { query: "erpnext.controllers.queries.item_query" };
-		if(filters) args["filters"] = filters;
+		if (filters) args["filters"] = filters;
 		return args;
 	},
 
-	bom: function() {
+	bom: function () {
 		return { query: "erpnext.controllers.queries.bom" };
 	},
 
-	task: function() {
+	task: function () {
 		return { query: "erpnext.projects.utils.query_task" };
 	},
 
-	customer_filter: function(doc) {
-		if(!doc.customer) {
-			frappe.throw(__("Please set {0}", [__(frappe.meta.get_label(doc.doctype, "customer", doc.name))]));
+	customer_filter: function (doc) {
+		if (!doc.customer) {
+			frappe.throw(
+				__("Please set {0}", [__(frappe.meta.get_label(doc.doctype, "customer", doc.name))])
+			);
 		}
 
 		return { filters: { customer: doc.customer } };
 	},
 
-	contact_query: function(doc) {
-		if(frappe.dynamic_link) {
-			if(!doc[frappe.dynamic_link.fieldname]) {
-				frappe.throw(__("Please set {0}",
-					[__(frappe.meta.get_label(doc.doctype, frappe.dynamic_link.fieldname, doc.name))]));
+	contact_query: function (doc) {
+		if (frappe.dynamic_link) {
+			if (!doc[frappe.dynamic_link.fieldname]) {
+				frappe.throw(
+					__("Please set {0}", [
+						__(frappe.meta.get_label(doc.doctype, frappe.dynamic_link.fieldname, doc.name)),
+					])
+				);
 			}
 
 			return {
-				query: 'frappe.contacts.doctype.contact.contact.contact_query',
+				query: "frappe.contacts.doctype.contact.contact.contact_query",
 				filters: {
 					link_doctype: frappe.dynamic_link.doctype,
-					link_name: doc[frappe.dynamic_link.fieldname]
-				}
+					link_name: doc[frappe.dynamic_link.fieldname],
+				},
 			};
 		}
 	},
 
-	address_query: function(doc) {
-		if(frappe.dynamic_link) {
-			if(!doc[frappe.dynamic_link.fieldname]) {
-				frappe.throw(__("Please set {0}",
-					[__(frappe.meta.get_label(doc.doctype, frappe.dynamic_link.fieldname, doc.name))]));
+	address_query: function (doc) {
+		if (frappe.dynamic_link) {
+			if (!doc[frappe.dynamic_link.fieldname]) {
+				frappe.throw(
+					__("Please set {0}", [
+						__(frappe.meta.get_label(doc.doctype, frappe.dynamic_link.fieldname, doc.name)),
+					])
+				);
 			}
 
 			return {
-				query: 'frappe.contacts.doctype.address.address.address_query',
+				query: "frappe.contacts.doctype.address.address.address_query",
 				filters: {
 					link_doctype: frappe.dynamic_link.doctype,
-					link_name: doc[frappe.dynamic_link.fieldname]
-				}
+					link_name: doc[frappe.dynamic_link.fieldname],
+				},
 			};
 		}
 	},
 
-	company_address_query: function(doc) {
+	company_address_query: function (doc) {
 		return {
-			query: 'frappe.contacts.doctype.address.address.address_query',
-			filters: { is_your_company_address: 1, link_doctype: 'Company', link_name: doc.company || '' }
+			query: "frappe.contacts.doctype.address.address.address_query",
+			filters: { is_your_company_address: 1, link_doctype: "Company", link_name: doc.company || "" },
 		};
 	},
 
-	dispatch_address_query: function(doc) {
+	dispatch_address_query: function (doc) {
 		return {
-			query: 'frappe.contacts.doctype.address.address.address_query',
-			filters: { link_doctype: 'Company', link_name: doc.company || '' }
+			query: "frappe.contacts.doctype.address.address.address_query",
+			filters: { link_doctype: "Company", link_name: doc.company || "" },
 		};
 	},
 
-	supplier_filter: function(doc) {
-		if(!doc.supplier) {
-			frappe.throw(__("Please set {0}", [__(frappe.meta.get_label(doc.doctype, "supplier", doc.name))]));
+	supplier_filter: function (doc) {
+		if (!doc.supplier) {
+			frappe.throw(
+				__("Please set {0}", [__(frappe.meta.get_label(doc.doctype, "supplier", doc.name))])
+			);
 		}
 
 		return { filters: { supplier: doc.supplier } };
 	},
 
-	lead_filter: function(doc) {
-		if(!doc.lead) {
-			frappe.throw(__("Please specify a {0}",
-				[__(frappe.meta.get_label(doc.doctype, "lead", doc.name))]));
+	lead_filter: function (doc) {
+		if (!doc.lead) {
+			frappe.throw(
+				__("Please specify a {0}", [__(frappe.meta.get_label(doc.doctype, "lead", doc.name))])
+			);
 		}
 
 		return { filters: { lead: doc.lead } };
 	},
 
-	not_a_group_filter: function() {
+	not_a_group_filter: function () {
 		return { filters: { is_group: 0 } };
 	},
 
-	employee: function() {
-		return { query: "erpnext.controllers.queries.employee_query" }
+	employee: function () {
+		return { query: "erpnext.controllers.queries.employee_query" };
 	},
 
-	warehouse: function(doc) {
+	warehouse: function (doc) {
 		return {
 			filters: [
 				["Warehouse", "company", "in", ["", cstr(doc.company)]],
-				["Warehouse", "is_group", "=",0]
-
-			]
+				["Warehouse", "is_group", "=", 0],
+			],
 		};
 	},
 
-	get_filtered_dimensions: function(doc, child_fields, dimension, company) {
-		let account = '';
+	get_filtered_dimensions: function (doc, child_fields, dimension, company) {
+		let account = "";
 
 		child_fields.forEach((field) => {
 			if (!account) {
@@ -137,21 +147,23 @@
 		return {
 			query: "erpnext.controllers.queries.get_filtered_dimensions",
 			filters: {
-				'dimension': dimension,
-				'account': account,
-				'company': company
-			}
+				dimension: dimension,
+				account: account,
+				company: company,
+			},
 		};
-	}
+	},
 });
 
-erpnext.queries.setup_queries = function(frm, options, query_fn) {
+erpnext.queries.setup_queries = function (frm, options, query_fn) {
 	var me = this;
-	var set_query = function(doctype, parentfield) {
-		var link_fields = frappe.meta.get_docfields(doctype, frm.doc.name,
-			{"fieldtype": "Link", "options": options});
-		$.each(link_fields, function(i, df) {
-			if(parentfield) {
+	var set_query = function (doctype, parentfield) {
+		var link_fields = frappe.meta.get_docfields(doctype, frm.doc.name, {
+			fieldtype: "Link",
+			options: options,
+		});
+		$.each(link_fields, function (i, df) {
+			if (parentfield) {
 				frm.set_query(df.fieldname, parentfield, query_fn);
 			} else {
 				frm.set_query(df.fieldname, query_fn);
@@ -162,24 +174,26 @@
 	set_query(frm.doc.doctype);
 
 	// warehouse field in tables
-	$.each(frappe.meta.get_docfields(frm.doc.doctype, frm.doc.name, {"fieldtype": "Table"}),
-		function(i, df) {
+	$.each(
+		frappe.meta.get_docfields(frm.doc.doctype, frm.doc.name, { fieldtype: "Table" }),
+		function (i, df) {
 			set_query(df.options, df.fieldname);
-		});
-}
+		}
+	);
+};
 
 /* 	if item code is selected in child table
 	then list down warehouses with its quantity
 	else apply default filters.
 */
-erpnext.queries.setup_warehouse_query = function(frm){
-	frm.set_query('warehouse', 'items', function(doc, cdt, cdn) {
-		var row  = locals[cdt][cdn];
+erpnext.queries.setup_warehouse_query = function (frm) {
+	frm.set_query("warehouse", "items", function (doc, cdt, cdn) {
+		var row = locals[cdt][cdn];
 		var filters = erpnext.queries.warehouse(frm.doc);
-		if(row.item_code){
-			$.extend(filters, {"query":"erpnext.controllers.queries.warehouse_query"});
+		if (row.item_code) {
+			$.extend(filters, { query: "erpnext.controllers.queries.warehouse_query" });
 			filters["filters"].push(["Bin", "item_code", "=", row.item_code]);
 		}
-		return filters
+		return filters;
 	});
-}
+};
diff --git a/erpnext/public/js/sales_trends_filters.js b/erpnext/public/js/sales_trends_filters.js
index b73747a..85daa01 100644
--- a/erpnext/public/js/sales_trends_filters.js
+++ b/erpnext/public/js/sales_trends_filters.js
@@ -1,61 +1,57 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-erpnext.get_sales_trends_filters = function() {
-	return[
+erpnext.get_sales_trends_filters = function () {
+	return [
 		{
-			"fieldname":"period",
-			"label": __("Period"),
-			"fieldtype": "Select",
-			"options": [
-				{ "value": "Monthly", "label": __("Monthly") },
-				{ "value": "Quarterly", "label": __("Quarterly") },
-				{ "value": "Half-Yearly", "label": __("Half-Yearly") },
-				{ "value": "Yearly", "label": __("Yearly") }
+			fieldname: "period",
+			label: __("Period"),
+			fieldtype: "Select",
+			options: [
+				{ value: "Monthly", label: __("Monthly") },
+				{ value: "Quarterly", label: __("Quarterly") },
+				{ value: "Half-Yearly", label: __("Half-Yearly") },
+				{ value: "Yearly", label: __("Yearly") },
 			],
-			"default": "Monthly"
+			default: "Monthly",
 		},
 		{
-			"fieldname":"based_on",
-			"label": __("Based On"),
-			"fieldtype": "Select",
-			"options": [
-				{ "value": "Item", "label": __("Item") },
-				{ "value": "Item Group", "label": __("Item Group") },
-				{ "value": "Customer", "label": __("Customer") },
-				{ "value": "Customer Group", "label": __("Customer Group") },
-				{ "value": "Territory", "label": __("Territory") },
-				{ "value": "Project", "label": __("Project") }
+			fieldname: "based_on",
+			label: __("Based On"),
+			fieldtype: "Select",
+			options: [
+				{ value: "Item", label: __("Item") },
+				{ value: "Item Group", label: __("Item Group") },
+				{ value: "Customer", label: __("Customer") },
+				{ value: "Customer Group", label: __("Customer Group") },
+				{ value: "Territory", label: __("Territory") },
+				{ value: "Project", label: __("Project") },
 			],
-			"default": "Item",
-			"dashboard_config": {
-				"read_only": 1,
-			}
+			default: "Item",
+			dashboard_config: {
+				read_only: 1,
+			},
 		},
 		{
-			"fieldname":"group_by",
-			"label": __("Group By"),
-			"fieldtype": "Select",
-			"options": [
-				"",
-				{ "value": "Item", "label": __("Item") },
-				{ "value": "Customer", "label": __("Customer") }
-			],
-			"default": ""
+			fieldname: "group_by",
+			label: __("Group By"),
+			fieldtype: "Select",
+			options: ["", { value: "Item", label: __("Item") }, { value: "Customer", label: __("Customer") }],
+			default: "",
 		},
 		{
-			"fieldname":"fiscal_year",
-			"label": __("Fiscal Year"),
-			"fieldtype": "Link",
-			"options":'Fiscal Year',
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
+			fieldname: "fiscal_year",
+			label: __("Fiscal Year"),
+			fieldtype: "Link",
+			options: "Fiscal Year",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
 		},
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company")
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
 		},
 	];
-}
+};
diff --git a/erpnext/public/js/setup_wizard.js b/erpnext/public/js/setup_wizard.js
index 3cbec3e..3879b38 100644
--- a/erpnext/public/js/setup_wizard.js
+++ b/erpnext/public/js/setup_wizard.js
@@ -1,7 +1,7 @@
 frappe.provide("erpnext.setup");
 
-frappe.pages['setup-wizard'].on_page_load = function(wrapper) {
-	if(frappe.sys_defaults.company) {
+frappe.pages["setup-wizard"].on_page_load = function (wrapper) {
+	if (frappe.sys_defaults.company) {
 		frappe.set_route("desk");
 		return;
 	}
@@ -14,38 +14,42 @@
 erpnext.setup.slides_settings = [
 	{
 		// Organization
-		name: 'organization',
+		name: "organization",
 		title: __("Setup your organization"),
 		icon: "fa fa-building",
 		fields: [
 			{
-				fieldname: 'company_name',
-				label: __('Company Name'),
-				fieldtype: 'Data',
-				reqd: 1
+				fieldname: "company_name",
+				label: __("Company Name"),
+				fieldtype: "Data",
+				reqd: 1,
 			},
 			{ fieldtype: "Column Break" },
 			{
-				fieldname: 'company_abbr',
-				label: __('Company Abbreviation'),
-				fieldtype: 'Data',
-				reqd: 1
+				fieldname: "company_abbr",
+				label: __("Company Abbreviation"),
+				fieldtype: "Data",
+				reqd: 1,
 			},
 			{ fieldtype: "Section Break" },
 			{
-				fieldname: 'chart_of_accounts', label: __('Chart of Accounts'),
-				options: "", fieldtype: 'Select'
+				fieldname: "chart_of_accounts",
+				label: __("Chart of Accounts"),
+				options: "",
+				fieldtype: "Select",
 			},
-			{ fieldname: 'view_coa', label: __('View Chart of Accounts'), fieldtype: 'Button' },
-			{ fieldname: 'fy_start_date', label: __('Financial Year Begins On'), fieldtype: 'Date', reqd: 1 },
+			{ fieldname: "view_coa", label: __("View Chart of Accounts"), fieldtype: "Button" },
+			{ fieldname: "fy_start_date", label: __("Financial Year Begins On"), fieldtype: "Date", reqd: 1 },
 			// end date should be hidden (auto calculated)
-			{ fieldname: 'fy_end_date', label: __('End Date'), fieldtype: 'Date', reqd: 1, hidden: 1 },
+			{ fieldname: "fy_end_date", label: __("End Date"), fieldtype: "Date", reqd: 1, hidden: 1 },
 			{ fieldtype: "Section Break" },
 			{
-				fieldname: 'setup_demo',
-				label: __('Generate Demo Data for Exploration'),
-				fieldtype: 'Check',
-				description: __('If checked, we will create demo data for you to explore the system. This demo data can be erased later.')
+				fieldname: "setup_demo",
+				label: __("Generate Demo Data for Exploration"),
+				fieldtype: "Check",
+				description: __(
+					"If checked, we will create demo data for you to explore the system. This demo data can be erased later."
+				),
 			},
 		],
 
@@ -73,10 +77,10 @@
 			return true;
 		},
 
-		validate_fy_dates: function() {
+		validate_fy_dates: function () {
 			// validate fiscal year start and end dates
-			const invalid = this.values.fy_start_date == 'Invalid date' ||
-				this.values.fy_end_date == 'Invalid date';
+			const invalid =
+				this.values.fy_start_date == "Invalid date" || this.values.fy_end_date == "Invalid date";
 			const start_greater_than_end = this.values.fy_start_date > this.values.fy_end_date;
 
 			if (invalid || start_greater_than_end) {
@@ -104,26 +108,24 @@
 					next_year = current_year;
 					current_year -= 1;
 				}
-				slide.get_field("fy_start_date").set_value(current_year + '-' + fy[0]);
-				slide.get_field("fy_end_date").set_value(next_year + '-' + fy[1]);
+				slide.get_field("fy_start_date").set_value(current_year + "-" + fy[0]);
+				slide.get_field("fy_end_date").set_value(next_year + "-" + fy[1]);
 			}
 		},
 
-
 		load_chart_of_accounts: function (slide) {
 			let country = frappe.wizard.values.country;
 
 			if (country) {
 				frappe.call({
 					method: "erpnext.accounts.doctype.account.chart_of_accounts.chart_of_accounts.get_charts_for_country",
-					args: { "country": country, with_standard: true },
+					args: { country: country, with_standard: true },
 					callback: function (r) {
 						if (r.message) {
-							slide.get_input("chart_of_accounts").empty()
-								.add_options(r.message);
+							slide.get_input("chart_of_accounts").empty().add_options(r.message);
 						}
-					}
-				})
+					},
+				});
 			}
 		},
 
@@ -131,56 +133,74 @@
 			let me = this;
 			slide.get_input("fy_start_date").on("change", function () {
 				var start_date = slide.form.fields_dict.fy_start_date.get_value();
-				var year_end_date =
-					frappe.datetime.add_days(frappe.datetime.add_months(start_date, 12), -1);
+				var year_end_date = frappe.datetime.add_days(frappe.datetime.add_months(start_date, 12), -1);
 				slide.form.fields_dict.fy_end_date.set_value(year_end_date);
 			});
 
-			slide.get_input("view_coa").on("click", function() {
+			slide.get_input("view_coa").on("click", function () {
 				let chart_template = slide.form.fields_dict.chart_of_accounts.get_value();
-				if(!chart_template) return;
+				if (!chart_template) return;
 
 				me.charts_modal(slide, chart_template);
 			});
 
-			slide.get_input("company_name").on("input", function () {
-				let parts = slide.get_input("company_name").val().split(" ");
-				let abbr = $.map(parts, function (p) { return p ? p.substr(0, 1) : null }).join("");
-				slide.get_field("company_abbr").set_value(abbr.slice(0, 10).toUpperCase());
-			}).val(frappe.boot.sysdefaults.company_name || "").trigger("change");
+			slide
+				.get_input("company_name")
+				.on("input", function () {
+					let parts = slide.get_input("company_name").val().split(" ");
+					let abbr = $.map(parts, function (p) {
+						return p ? p.substr(0, 1) : null;
+					}).join("");
+					slide.get_field("company_abbr").set_value(abbr.slice(0, 10).toUpperCase());
+				})
+				.val(frappe.boot.sysdefaults.company_name || "")
+				.trigger("change");
 
-			slide.get_input("company_abbr").on("change", function () {
-				let abbr = slide.get_input("company_abbr").val();
-				if (abbr.length > 10) {
-					frappe.msgprint(__("Company Abbreviation cannot have more than 5 characters"));
-					abbr = abbr.slice(0, 10);
-				}
-				slide.get_field("company_abbr").set_value(abbr);
-			}).val(frappe.boot.sysdefaults.company_abbr || "").trigger("change");
+			slide
+				.get_input("company_abbr")
+				.on("change", function () {
+					let abbr = slide.get_input("company_abbr").val();
+					if (abbr.length > 10) {
+						frappe.msgprint(__("Company Abbreviation cannot have more than 5 characters"));
+						abbr = abbr.slice(0, 10);
+					}
+					slide.get_field("company_abbr").set_value(abbr);
+				})
+				.val(frappe.boot.sysdefaults.company_abbr || "")
+				.trigger("change");
 		},
 
-		charts_modal: function(slide, chart_template) {
-			let parent = __('All Accounts');
+		charts_modal: function (slide, chart_template) {
+			let parent = __("All Accounts");
 
 			let dialog = new frappe.ui.Dialog({
 				title: chart_template,
 				fields: [
-					{'fieldname': 'expand_all', 'label': __('Expand All'), 'fieldtype': 'Button',
-						click: function() {
+					{
+						fieldname: "expand_all",
+						label: __("Expand All"),
+						fieldtype: "Button",
+						click: function () {
 							// expand all nodes on button click
 							coa_tree.load_children(coa_tree.root_node, true);
-						}
+						},
 					},
-					{'fieldname': 'collapse_all', 'label': __('Collapse All'), 'fieldtype': 'Button',
-						click: function() {
+					{
+						fieldname: "collapse_all",
+						label: __("Collapse All"),
+						fieldtype: "Button",
+						click: function () {
 							// collapse all nodes
-							coa_tree.get_all_nodes(coa_tree.root_node.data.value, coa_tree.root_node.is_root)
-								.then(data_list => {
-									data_list.map(d => { coa_tree.toggle_node(coa_tree.nodes[d.parent]); });
+							coa_tree
+								.get_all_nodes(coa_tree.root_node.data.value, coa_tree.root_node.is_root)
+								.then((data_list) => {
+									data_list.map((d) => {
+										coa_tree.toggle_node(coa_tree.nodes[d.parent]);
+									});
 								});
-						}
-					}
-				]
+						},
+					},
+				],
 			});
 
 			// render tree structure in the dialog modal
@@ -188,49 +208,49 @@
 				parent: $(dialog.body),
 				label: parent,
 				expandable: true,
-				method: 'erpnext.accounts.utils.get_coa',
+				method: "erpnext.accounts.utils.get_coa",
 				args: {
 					chart: chart_template,
 					parent: parent,
-					doctype: 'Account'
+					doctype: "Account",
 				},
-				onclick: function(node) {
+				onclick: function (node) {
 					parent = node.value;
-				}
+				},
 			});
 
 			// add class to show buttons side by side
-			const form_container = $(dialog.body).find('form');
-			const buttons = $(form_container).find('.frappe-control');
-			form_container.addClass('flex');
+			const form_container = $(dialog.body).find("form");
+			const buttons = $(form_container).find(".frappe-control");
+			form_container.addClass("flex");
 			buttons.map((index, button) => {
-				$(button).css({"margin-right": "1em"});
-			})
+				$(button).css({ "margin-right": "1em" });
+			});
 
 			dialog.show();
 			coa_tree.load_children(coa_tree.root_node, true); // expand all node trigger
-		}
-	}
+		},
+	},
 ];
 
 // Source: https://en.wikipedia.org/wiki/Fiscal_year
 // default 1st Jan - 31st Dec
 
 erpnext.setup.fiscal_years = {
-	"Afghanistan": ["12-21", "12-20"],
-	"Australia": ["07-01", "06-30"],
-	"Bangladesh": ["07-01", "06-30"],
-	"Canada": ["04-01", "03-31"],
+	Afghanistan: ["12-21", "12-20"],
+	Australia: ["07-01", "06-30"],
+	Bangladesh: ["07-01", "06-30"],
+	Canada: ["04-01", "03-31"],
 	"Costa Rica": ["10-01", "09-30"],
-	"Egypt": ["07-01", "06-30"],
+	Egypt: ["07-01", "06-30"],
 	"Hong Kong": ["04-01", "03-31"],
-	"India": ["04-01", "03-31"],
-	"Iran": ["06-23", "06-22"],
-	"Myanmar": ["04-01", "03-31"],
+	India: ["04-01", "03-31"],
+	Iran: ["06-23", "06-22"],
+	Myanmar: ["04-01", "03-31"],
 	"New Zealand": ["04-01", "03-31"],
-	"Pakistan": ["07-01", "06-30"],
-	"Singapore": ["04-01", "03-31"],
+	Pakistan: ["07-01", "06-30"],
+	Singapore: ["04-01", "03-31"],
 	"South Africa": ["03-01", "02-28"],
-	"Thailand": ["10-01", "09-30"],
+	Thailand: ["10-01", "09-30"],
 	"United Kingdom": ["04-01", "03-31"],
 };
diff --git a/erpnext/public/js/sms_manager.js b/erpnext/public/js/sms_manager.js
index a058da2..d3147bb 100644
--- a/erpnext/public/js/sms_manager.js
+++ b/erpnext/public/js/sms_manager.js
@@ -3,104 +3,114 @@
 
 erpnext.SMSManager = function SMSManager(doc) {
 	var me = this;
-	this.setup = function() {
+	this.setup = function () {
 		var default_msg = {
-			'Lead'				: '',
-			'Opportunity'			: 'Your enquiry has been logged into the system. Ref No: ' + doc.name,
-			'Quotation'			: 'Quotation ' + doc.name + ' has been sent via email. Thanks!',
-			'Sales Order'		: 'Sales Order ' + doc.name + ' has been created against '
-						+ (doc.quotation_no ? ('Quote No:' + doc.quotation_no) : '')
-						+ (doc.po_no ? (' for your PO: ' + doc.po_no) : ''),
-			'Delivery Note'		: 'Items has been delivered against delivery note: ' + doc.name
-						+ (doc.po_no ? (' for your PO: ' + doc.po_no) : ''),
-			'Sales Invoice': 'Invoice ' + doc.name + ' has been sent via email '
-						+ (doc.po_no ? (' for your PO: ' + doc.po_no) : ''),
-			'Material Request'			: 'Material Request ' + doc.name + ' has been raised in the system',
-			'Purchase Order'	: 'Purchase Order ' + doc.name + ' has been sent via email',
-			'Purchase Receipt'	: 'Items has been received against purchase receipt: ' + doc.name
-		}
+			Lead: "",
+			Opportunity: "Your enquiry has been logged into the system. Ref No: " + doc.name,
+			Quotation: "Quotation " + doc.name + " has been sent via email. Thanks!",
+			"Sales Order":
+				"Sales Order " +
+				doc.name +
+				" has been created against " +
+				(doc.quotation_no ? "Quote No:" + doc.quotation_no : "") +
+				(doc.po_no ? " for your PO: " + doc.po_no : ""),
+			"Delivery Note":
+				"Items has been delivered against delivery note: " +
+				doc.name +
+				(doc.po_no ? " for your PO: " + doc.po_no : ""),
+			"Sales Invoice":
+				"Invoice " +
+				doc.name +
+				" has been sent via email " +
+				(doc.po_no ? " for your PO: " + doc.po_no : ""),
+			"Material Request": "Material Request " + doc.name + " has been raised in the system",
+			"Purchase Order": "Purchase Order " + doc.name + " has been sent via email",
+			"Purchase Receipt": "Items has been received against purchase receipt: " + doc.name,
+		};
 
-		if (in_list(['Sales Order', 'Delivery Note', 'Sales Invoice'], doc.doctype))
-			this.show(doc.contact_person, 'Customer', doc.customer, '', default_msg[doc.doctype]);
-		else if (doc.doctype === 'Quotation')
-			this.show(doc.contact_person, 'Customer', doc.party_name, '', default_msg[doc.doctype]);
-		else if (in_list(['Purchase Order', 'Purchase Receipt'], doc.doctype))
-			this.show(doc.contact_person, 'Supplier', doc.supplier, '', default_msg[doc.doctype]);
-		else if (doc.doctype == 'Lead')
-			this.show('', '', '', doc.mobile_no, default_msg[doc.doctype]);
-		else if (doc.doctype == 'Opportunity')
-			this.show('', '', '', doc.contact_no, default_msg[doc.doctype]);
-		else if (doc.doctype == 'Material Request')
-			this.show('', '', '', '', default_msg[doc.doctype]);
-
+		if (in_list(["Sales Order", "Delivery Note", "Sales Invoice"], doc.doctype))
+			this.show(doc.contact_person, "Customer", doc.customer, "", default_msg[doc.doctype]);
+		else if (doc.doctype === "Quotation")
+			this.show(doc.contact_person, "Customer", doc.party_name, "", default_msg[doc.doctype]);
+		else if (in_list(["Purchase Order", "Purchase Receipt"], doc.doctype))
+			this.show(doc.contact_person, "Supplier", doc.supplier, "", default_msg[doc.doctype]);
+		else if (doc.doctype == "Lead") this.show("", "", "", doc.mobile_no, default_msg[doc.doctype]);
+		else if (doc.doctype == "Opportunity")
+			this.show("", "", "", doc.contact_no, default_msg[doc.doctype]);
+		else if (doc.doctype == "Material Request") this.show("", "", "", "", default_msg[doc.doctype]);
 	};
 
-	this.get_contact_number = function(contact, ref_doctype, ref_name) {
+	this.get_contact_number = function (contact, ref_doctype, ref_name) {
 		frappe.call({
 			method: "frappe.core.doctype.sms_settings.sms_settings.get_contact_number",
 			args: {
 				contact_name: contact,
 				ref_doctype: ref_doctype,
-				ref_name: ref_name
+				ref_name: ref_name,
 			},
-			callback: function(r) {
-				if(r.exc) { frappe.msgprint(r.exc); return; }
+			callback: function (r) {
+				if (r.exc) {
+					frappe.msgprint(r.exc);
+					return;
+				}
 				me.number = r.message;
 				me.show_dialog();
-			}
+			},
 		});
 	};
 
-	this.show = function(contact, ref_doctype, ref_name, mobile_nos, message) {
+	this.show = function (contact, ref_doctype, ref_name, mobile_nos, message) {
 		this.message = message;
 		if (mobile_nos) {
 			me.number = mobile_nos;
 			me.show_dialog();
-		} else if (contact){
-			this.get_contact_number(contact, ref_doctype, ref_name)
+		} else if (contact) {
+			this.get_contact_number(contact, ref_doctype, ref_name);
 		} else {
 			me.show_dialog();
 		}
-	}
-	this.show_dialog = function() {
-		if(!me.dialog)
-			me.make_dialog();
+	};
+	this.show_dialog = function () {
+		if (!me.dialog) me.make_dialog();
 		me.dialog.set_values({
-			'message': me.message,
-			'number': me.number
-		})
+			message: me.message,
+			number: me.number,
+		});
 		me.dialog.show();
-	}
-	this.make_dialog = function() {
+	};
+	this.make_dialog = function () {
 		var d = new frappe.ui.Dialog({
-			title: 'Send SMS',
+			title: "Send SMS",
 			width: 400,
 			fields: [
-				{fieldname:'number', fieldtype:'Data', label:'Mobile Number', reqd:1},
-				{fieldname:'message', fieldtype:'Text', label:'Message', reqd:1},
-				{fieldname:'send', fieldtype:'Button', label:'Send'}
-			]
-		})
-		d.fields_dict.send.input.onclick = function() {
+				{ fieldname: "number", fieldtype: "Data", label: "Mobile Number", reqd: 1 },
+				{ fieldname: "message", fieldtype: "Text", label: "Message", reqd: 1 },
+				{ fieldname: "send", fieldtype: "Button", label: "Send" },
+			],
+		});
+		d.fields_dict.send.input.onclick = function () {
 			var btn = d.fields_dict.send.input;
 			var v = me.dialog.get_values();
-			if(v) {
+			if (v) {
 				$(btn).set_working();
 				frappe.call({
 					method: "frappe.core.doctype.sms_settings.sms_settings.send_sms",
 					args: {
 						receiver_list: [v.number],
-						msg: v.message
+						msg: v.message,
 					},
-					callback: function(r) {
+					callback: function (r) {
 						$(btn).done_working();
-						if(r.exc) {frappe.msgprint(r.exc); return; }
+						if (r.exc) {
+							frappe.msgprint(r.exc);
+							return;
+						}
 						me.dialog.hide();
-					}
+					},
 				});
 			}
-		}
+		};
 		this.dialog = d;
-	}
+	};
 	this.setup();
-}
+};
diff --git a/erpnext/public/js/stock_analytics.js b/erpnext/public/js/stock_analytics.js
index 98e7f78..37f6379 100644
--- a/erpnext/public/js/stock_analytics.js
+++ b/erpnext/public/js/stock_analytics.js
@@ -1,68 +1,104 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-
 erpnext.StockAnalytics = class StockAnalytics extends erpnext.StockGridReport {
 	constructor(wrapper, opts) {
 		var args = {
 			title: __("Stock Analytics"),
-			parent: $(wrapper).find('.layout-main'),
+			parent: $(wrapper).find(".layout-main"),
 			page: wrapper.page,
-			doctypes: ["Item", "Item Group", "Warehouse", "Stock Ledger Entry", "Brand",
-				"Fiscal Year", "Serial No"],
+			doctypes: [
+				"Item",
+				"Item Group",
+				"Warehouse",
+				"Stock Ledger Entry",
+				"Brand",
+				"Fiscal Year",
+				"Serial No",
+			],
 			tree_grid: {
 				show: true,
 				parent_field: "parent_item_group",
-				formatter: function(item) {
-					if(!item.is_group) {
-						return repl("<a \
+				formatter: function (item) {
+					if (!item.is_group) {
+						return repl(
+							"<a \
 							onclick='frappe.cur_grid_report.show_stock_ledger(\"%(value)s\")'>\
-							%(value)s</a>", {
+							%(value)s</a>",
+							{
 								value: item.name,
-							});
+							}
+						);
 					} else {
 						return item.name;
 					}
-
-				}
+				},
 			},
-		}
+		};
 
-		if(opts) $.extend(args, opts);
+		if (opts) $.extend(args, opts);
 
 		super(args);
 
 		this.filters = [
-			{fieldtype:"Select", label: __("Value or Qty"), fieldname: "value_or_qty",
-				options:[{label:__("Value"), value:"Value"}, {label:__("Quantity"), value:"Quantity"}],
-				filter: function(val, item, opts, me) {
+			{
+				fieldtype: "Select",
+				label: __("Value or Qty"),
+				fieldname: "value_or_qty",
+				options: [
+					{ label: __("Value"), value: "Value" },
+					{ label: __("Quantity"), value: "Quantity" },
+				],
+				filter: function (val, item, opts, me) {
 					return me.apply_zero_filter(val, item, opts, me);
-				}},
-			{fieldtype:"Select", label: __("Brand"), link:"Brand", fieldname: "brand",
-				default_value: __("Select Brand..."), filter: function(val, item, opts) {
+				},
+			},
+			{
+				fieldtype: "Select",
+				label: __("Brand"),
+				link: "Brand",
+				fieldname: "brand",
+				default_value: __("Select Brand..."),
+				filter: function (val, item, opts) {
 					return val == opts.default_value || item.brand == val || item._show;
-				}, link_formatter: {filter_input: "brand"}},
-			{fieldtype:"Select", label: __("Warehouse"), link:"Warehouse", fieldname: "warehouse",
-				default_value: __("Select Warehouse...")},
-			{fieldtype:"Date", label: __("From Date"), fieldname: "from_date"},
-			{fieldtype:"Date", label: __("To Date"), fieldname: "to_date"},
-			{fieldtype:"Select", label: __("Range"), fieldname: "range",
-				options:[
-					{label:__("Daily"), value:"Daily"},
-					{label:__("Weekly"), value:"Weekly"},
-					{label:__("Monthly"), value:"Monthly"},
-					{label:__("Quarterly"), value:"Quarterly"},
-					{label:__("Yearly"), value:"Yearly"},
-				]}
+				},
+				link_formatter: { filter_input: "brand" },
+			},
+			{
+				fieldtype: "Select",
+				label: __("Warehouse"),
+				link: "Warehouse",
+				fieldname: "warehouse",
+				default_value: __("Select Warehouse..."),
+			},
+			{ fieldtype: "Date", label: __("From Date"), fieldname: "from_date" },
+			{ fieldtype: "Date", label: __("To Date"), fieldname: "to_date" },
+			{
+				fieldtype: "Select",
+				label: __("Range"),
+				fieldname: "range",
+				options: [
+					{ label: __("Daily"), value: "Daily" },
+					{ label: __("Weekly"), value: "Weekly" },
+					{ label: __("Monthly"), value: "Monthly" },
+					{ label: __("Quarterly"), value: "Quarterly" },
+					{ label: __("Yearly"), value: "Yearly" },
+				],
+			},
 		];
 	}
 	setup_columns() {
 		var std_columns = [
-			{id: "name", name: __("Item"), field: "name", width: 300},
-			{id: "brand", name: __("Brand"), field: "brand", width: 100},
-			{id: "stock_uom", name: __("UOM"), field: "stock_uom", width: 100},
-			{id: "opening", name: __("Opening"), field: "opening", hidden: true,
-				formatter: this.currency_formatter}
+			{ id: "name", name: __("Item"), field: "name", width: 300 },
+			{ id: "brand", name: __("Brand"), field: "brand", width: 100 },
+			{ id: "stock_uom", name: __("UOM"), field: "stock_uom", width: 100 },
+			{
+				id: "opening",
+				name: __("Opening"),
+				field: "opening",
+				hidden: true,
+				formatter: this.currency_formatter,
+			},
 		];
 
 		this.make_date_range_columns();
@@ -79,24 +115,24 @@
 	}
 	init_filter_values() {
 		super.init_filter_values();
-		this.filter_inputs.range && this.filter_inputs.range.val('Monthly');
+		this.filter_inputs.range && this.filter_inputs.range.val("Monthly");
 	}
 	prepare_data() {
 		var me = this;
 
-		if(!this.data) {
+		if (!this.data) {
 			var items = this.prepare_tree("Item", "Item Group");
 
 			me.parent_map = {};
 			me.item_by_name = {};
 			me.data = [];
 
-			$.each(items, function(i, v) {
+			$.each(items, function (i, v) {
 				var d = copy_dict(v);
 
 				me.data.push(d);
 				me.item_by_name[d.name] = d;
-				if(d.parent_item_group) {
+				if (d.parent_item_group) {
 					me.parent_map[d.name] = d.parent_item_group;
 				}
 				me.reset_item_values(d);
@@ -105,7 +141,7 @@
 			this.data[0].checked = true;
 		} else {
 			// otherwise, only reset values
-			$.each(this.data, function(i, d) {
+			$.each(this.data, function (i, d) {
 				me.reset_item_values(d);
 				d["closing_qty_value"] = 0;
 			});
@@ -113,7 +149,6 @@
 
 		this.prepare_balances();
 		this.update_groups();
-
 	}
 	prepare_balances() {
 		var me = this;
@@ -124,24 +159,25 @@
 		this.item_warehouse = {};
 		this.serialized_buying_rates = this.get_serialized_buying_rates();
 
-		for(var i=0, j=data.length; i<j; i++) {
+		for (var i = 0, j = data.length; i < j; i++) {
 			let diff = 0;
 			var sl = data[i];
 			sl.posting_datetime = sl.posting_date + " " + sl.posting_time;
 			var posting_datetime = frappe.datetime.str_to_obj(sl.posting_datetime);
 
-			if(me.is_default("warehouse") ? true : me.warehouse == sl.warehouse) {
+			if (me.is_default("warehouse") ? true : me.warehouse == sl.warehouse) {
 				var item = me.item_by_name[sl.item_code];
-				if(item.closing_qty_value==undefined) item.closing_qty_value = 0;
+				if (item.closing_qty_value == undefined) item.closing_qty_value = 0;
 
-				if(me.value_or_qty!="Quantity") {
+				if (me.value_or_qty != "Quantity") {
 					var wh = me.get_item_warehouse(sl.warehouse, sl.item_code);
-					var valuation_method = item.valuation_method ?
-						item.valuation_method : frappe.sys_defaults.valuation_method;
+					var valuation_method = item.valuation_method
+						? item.valuation_method
+						: frappe.sys_defaults.valuation_method;
 					var is_fifo = valuation_method == "FIFO";
 
-					if(sl.voucher_type=="Stock Reconciliation") {
-						diff = (sl.qty_after_transaction * sl.valuation_rate) - item.closing_qty_value;
+					if (sl.voucher_type == "Stock Reconciliation") {
+						diff = sl.qty_after_transaction * sl.valuation_rate - item.closing_qty_value;
 						wh.fifo_stack = [[sl.qty_after_transaction, sl.valuation_rate, sl.posting_date]];
 						wh.balance_qty = sl.qty_after_transaction;
 						wh.balance_value = sl.valuation_rate * sl.qty_after_transaction;
@@ -149,16 +185,16 @@
 						diff = me.get_value_diff(wh, sl, is_fifo);
 					}
 				} else {
-					if(sl.voucher_type=="Stock Reconciliation") {
+					if (sl.voucher_type == "Stock Reconciliation") {
 						diff = sl.qty_after_transaction - item.closing_qty_value;
 					} else {
 						diff = sl.qty;
 					}
 				}
 
-				if(posting_datetime < from_date) {
+				if (posting_datetime < from_date) {
 					item.opening += diff;
-				} else if(posting_datetime <= to_date) {
+				} else if (posting_datetime <= to_date) {
 					item[me.column_map[sl.posting_date].field] += diff;
 				} else {
 					break;
@@ -170,25 +206,23 @@
 	}
 	update_groups() {
 		var me = this;
-		$.each(this.data, function(i, item) {
+		$.each(this.data, function (i, item) {
 			// update groups
-			if(!item.is_group && me.apply_filter(item, "brand")) {
+			if (!item.is_group && me.apply_filter(item, "brand")) {
 				var balance = item.opening;
-				$.each(me.columns, function(i, col) {
-					if(col.formatter==me.currency_formatter && !col.hidden) {
+				$.each(me.columns, function (i, col) {
+					if (col.formatter == me.currency_formatter && !col.hidden) {
 						item[col.field] = balance + item[col.field];
 						balance = item[col.field];
 					}
 				});
 
 				var parent = me.parent_map[item.name];
-				while(parent) {
+				while (parent) {
 					var parent_group = me.item_by_name[parent];
-					$.each(me.columns, function(c, col) {
+					$.each(me.columns, function (c, col) {
 						if (col.formatter == me.currency_formatter) {
-							parent_group[col.field] =
-								flt(parent_group[col.field])
-								+ flt(item[col.field]);
+							parent_group[col.field] = flt(parent_group[col.field]) + flt(item[col.field]);
 						}
 					});
 					parent = me.parent_map[parent];
@@ -200,7 +234,7 @@
 		frappe.route_options = {
 			item_code: item_code,
 			from_date: this.from_date,
-			to_date: this.to_date
+			to_date: this.to_date,
 		};
 		frappe.set_route("query-report", "Stock Ledger");
 	}
diff --git a/erpnext/public/js/stock_grid_report.js b/erpnext/public/js/stock_grid_report.js
index c7867d0..e45f6dd 100644
--- a/erpnext/public/js/stock_grid_report.js
+++ b/erpnext/public/js/stock_grid_report.js
@@ -3,10 +3,13 @@
 
 erpnext.StockGridReport = class StockGridReport extends frappe.views.TreeGridReport {
 	get_item_warehouse(warehouse, item) {
-		if(!this.item_warehouse[item]) this.item_warehouse[item] = {};
-		if(!this.item_warehouse[item][warehouse]) this.item_warehouse[item][warehouse] = {
-			balance_qty: 0.0, balance_value: 0.0, fifo_stack: []
-		};
+		if (!this.item_warehouse[item]) this.item_warehouse[item] = {};
+		if (!this.item_warehouse[item][warehouse])
+			this.item_warehouse[item][warehouse] = {
+				balance_qty: 0.0,
+				balance_value: 0.0,
+				fifo_stack: [],
+			};
 		return this.item_warehouse[item][warehouse];
 	}
 
@@ -14,47 +17,43 @@
 		// value
 		let value_diff = 0;
 
-		if(sl.qty > 0) {
+		if (sl.qty > 0) {
 			// incoming - rate is given
 			let rate = sl.incoming_rate;
 			let add_qty = sl.qty;
-			if(wh.balance_qty < 0) {
+			if (wh.balance_qty < 0) {
 				// negative valuation
 				// only add value of quantity if
 				// the balance goes above 0
 				add_qty = wh.balance_qty + sl.qty;
-				if(add_qty < 0) {
+				if (add_qty < 0) {
 					add_qty = 0;
 				}
 			}
 
-			if(sl.serial_no) {
+			if (sl.serial_no) {
 				value_diff = this.get_serialized_value_diff(sl);
 			} else {
-				value_diff = (rate * add_qty);
+				value_diff = rate * add_qty;
 			}
 
-			if(add_qty)
-				wh.fifo_stack.push([add_qty, sl.incoming_rate, sl.posting_date]);
+			if (add_qty) wh.fifo_stack.push([add_qty, sl.incoming_rate, sl.posting_date]);
 		} else {
 			// called everytime for maintaining fifo stack
 			var fifo_value_diff = this.get_fifo_value_diff(wh, sl);
 
 			// outgoing
-			if(sl.serial_no) {
+			if (sl.serial_no) {
 				value_diff = -1 * this.get_serialized_value_diff(sl);
-			} else if(is_fifo) {
+			} else if (is_fifo) {
 				value_diff = fifo_value_diff;
 			} else {
 				// average rate for weighted average
-				let rate = (wh.balance_qty.toFixed(2) == 0.00 ? 0 :
-					flt(wh.balance_value) / flt(wh.balance_qty));
+				let rate = wh.balance_qty.toFixed(2) == 0.0 ? 0 : flt(wh.balance_value) / flt(wh.balance_qty);
 
 				// no change in value if negative qty
-				if((wh.balance_qty + sl.qty).toFixed(2) >= 0.00)
-					value_diff = (rate * sl.qty);
-				else
-					value_diff = -wh.balance_value;
+				if ((wh.balance_qty + sl.qty).toFixed(2) >= 0.0) value_diff = rate * sl.qty;
+				else value_diff = -wh.balance_value;
 			}
 		}
 
@@ -69,14 +68,14 @@
 		var fifo_value_diff = 0.0;
 		var qty = -sl.qty;
 
-		for(var i=0, j=fifo_stack.length; i<j; i++) {
+		for (var i = 0, j = fifo_stack.length; i < j; i++) {
 			var batch = fifo_stack.pop();
-			if(batch[0] >= qty) {
+			if (batch[0] >= qty) {
 				batch[0] = batch[0] - qty;
-				fifo_value_diff += (qty * batch[1]);
+				fifo_value_diff += qty * batch[1];
 
 				qty = 0.0;
-				if(batch[0]) {
+				if (batch[0]) {
 					// batch still has qty put it back
 					fifo_stack.push(batch);
 				}
@@ -85,7 +84,7 @@
 				break;
 			} else {
 				// consume this batch fully
-				fifo_value_diff += (batch[0] * batch[1]);
+				fifo_value_diff += batch[0] * batch[1];
 				qty = qty - batch[0];
 			}
 		}
@@ -99,8 +98,8 @@
 
 		var value_diff = 0.0;
 
-		$.each(sl.serial_no.trim().split("\n"), function(i, sr) {
-			if(sr) {
+		$.each(sl.serial_no.trim().split("\n"), function (i, sr) {
+			if (sr) {
 				value_diff += flt(me.serialized_buying_rates[sr.trim().toLowerCase()]);
 			}
 		});
@@ -112,7 +111,7 @@
 		var serialized_buying_rates = {};
 
 		if (frappe.report_dump.data["Serial No"]) {
-			$.each(frappe.report_dump.data["Serial No"], function(i, sn) {
+			$.each(frappe.report_dump.data["Serial No"], function (i, sn) {
 				serialized_buying_rates[sn.name.toLowerCase()] = flt(sn.incoming_rate);
 			});
 		}
diff --git a/erpnext/public/js/telephony.js b/erpnext/public/js/telephony.js
index f4b0b18..39d9c0f 100644
--- a/erpnext/public/js/telephony.js
+++ b/erpnext/public/js/telephony.js
@@ -1,13 +1,17 @@
-frappe.ui.form.ControlData = class ControlData extends frappe.ui.form.ControlData  {
+frappe.ui.form.ControlData = class ControlData extends frappe.ui.form.ControlData {
 	make_input() {
 		super.make_input();
-		if (this.df.options == 'Phone') {
+		if (this.df.options == "Phone") {
 			this.setup_phone();
 		}
 		if (this.frm && this.frm.fields_dict) {
-			Object.values(this.frm.fields_dict).forEach(function(field) {
-				if (field.df.read_only === 1 && field.df.options === 'Phone'
-					&& field.disp_area.style[0] != 'display' && !field.has_icon) {
+			Object.values(this.frm.fields_dict).forEach(function (field) {
+				if (
+					field.df.read_only === 1 &&
+					field.df.options === "Phone" &&
+					field.disp_area.style[0] != "display" &&
+					!field.has_icon
+				) {
 					field.setup_phone && field.setup_phone();
 					field.has_icon = true;
 				}
@@ -16,15 +20,18 @@
 	}
 	setup_phone() {
 		if (frappe.phone_call.handler) {
-			let control = this.df.read_only ? '.control-value' : '.control-input';
-			this.$wrapper.find(control)
-				.append(`
+			let control = this.df.read_only ? ".control-value" : ".control-input";
+			this.$wrapper
+				.find(control)
+				.append(
+					`
 					<span class="phone-btn">
-						<a class="btn-open no-decoration" title="${__('Make a call')}">
-							${frappe.utils.icon('call')}
+						<a class="btn-open no-decoration" title="${__("Make a call")}">
+							${frappe.utils.icon("call")}
 					</span>
-				`)
-				.find('.phone-btn')
+				`
+				)
+				.find(".phone-btn")
 				.click(() => {
 					frappe.phone_call.handler(this.get_value(), this.frm);
 				});
diff --git a/erpnext/public/js/utils.js b/erpnext/public/js/utils.js
index 61b8f35..f17f60a 100755
--- a/erpnext/public/js/utils.js
+++ b/erpnext/public/js/utils.js
@@ -4,44 +4,42 @@
 frappe.provide("erpnext.utils");
 
 $.extend(erpnext, {
-	get_currency: function(company) {
-		if(!company && cur_frm)
-			company = cur_frm.doc.company;
-		if(company)
+	get_currency: function (company) {
+		if (!company && cur_frm) company = cur_frm.doc.company;
+		if (company)
 			return frappe.get_doc(":Company", company)?.default_currency || frappe.boot.sysdefaults.currency;
-		else
-			return frappe.boot.sysdefaults.currency;
+		else return frappe.boot.sysdefaults.currency;
 	},
 
 	get_presentation_currency_list: () => {
 		const docs = frappe.boot.docs;
-		let currency_list = docs.filter(d => d.doctype === ":Currency").map(d => d.name);
+		let currency_list = docs.filter((d) => d.doctype === ":Currency").map((d) => d.name);
 		currency_list.unshift("");
 		return currency_list;
 	},
 
-	toggle_naming_series: function() {
-		if(cur_frm && cur_frm.fields_dict.naming_series) {
-			cur_frm.toggle_display("naming_series", cur_frm.doc.__islocal?true:false);
+	toggle_naming_series: function () {
+		if (cur_frm && cur_frm.fields_dict.naming_series) {
+			cur_frm.toggle_display("naming_series", cur_frm.doc.__islocal ? true : false);
 		}
 	},
 
-	hide_company: function(frm) {
-		if(frm?.fields_dict.company) {
+	hide_company: function (frm) {
+		if (frm?.fields_dict.company) {
 			var companies = Object.keys(locals[":Company"] || {});
-			if(companies.length === 1) {
-				if(!frm.doc.company) frm.set_value("company", companies[0]);
+			if (companies.length === 1) {
+				if (!frm.doc.company) frm.set_value("company", companies[0]);
 				frm.toggle_display("company", false);
-			} else if(erpnext.last_selected_company) {
-				if(!frm.doc.company) frm.set_value("company", erpnext.last_selected_company);
+			} else if (erpnext.last_selected_company) {
+				if (!frm.doc.company) frm.set_value("company", erpnext.last_selected_company);
 			}
 		}
 	},
 
-	is_perpetual_inventory_enabled: function(company) {
-		if(company) {
+	is_perpetual_inventory_enabled: function (company) {
+		if (company) {
 			let company_local = locals[":Company"] && locals[":Company"][company];
-			if(company_local) {
+			if (company_local) {
 				return cint(company_local.enable_perpetual_inventory);
 			}
 		}
@@ -51,301 +49,346 @@
 		return cint(frappe.boot.sysdefaults.allow_stale);
 	},
 
-	setup_serial_or_batch_no: function() {
+	setup_serial_or_batch_no: function () {
 		let grid_row = cur_frm.open_grid_row();
-		if (!grid_row || !grid_row.grid_form.fields_dict.serial_no ||
-			grid_row.grid_form.fields_dict.serial_no.get_status() !== "Write") return;
+		if (
+			!grid_row ||
+			!grid_row.grid_form.fields_dict.serial_no ||
+			grid_row.grid_form.fields_dict.serial_no.get_status() !== "Write"
+		)
+			return;
 
-		frappe.model.get_value('Item', {'name': grid_row.doc.item_code},
-			['has_serial_no', 'has_batch_no'], ({has_serial_no, has_batch_no}) => {
-				Object.assign(grid_row.doc, {has_serial_no, has_batch_no});
+		frappe.model.get_value(
+			"Item",
+			{ name: grid_row.doc.item_code },
+			["has_serial_no", "has_batch_no"],
+			({ has_serial_no, has_batch_no }) => {
+				Object.assign(grid_row.doc, { has_serial_no, has_batch_no });
 
 				if (has_serial_no) {
-					attach_selector_button(__("Add Serial No"),
-						grid_row.grid_form.fields_dict.serial_no.$wrapper, this, grid_row);
+					attach_selector_button(
+						__("Add Serial No"),
+						grid_row.grid_form.fields_dict.serial_no.$wrapper,
+						this,
+						grid_row
+					);
 				} else if (has_batch_no) {
-					attach_selector_button(__("Pick Batch No"),
-						grid_row.grid_form.fields_dict.batch_no.$wrapper, this, grid_row);
+					attach_selector_button(
+						__("Pick Batch No"),
+						grid_row.grid_form.fields_dict.batch_no.$wrapper,
+						this,
+						grid_row
+					);
 				}
 			}
 		);
 	},
 
 	route_to_adjustment_jv: (args) => {
-		frappe.model.with_doctype('Journal Entry', () => {
+		frappe.model.with_doctype("Journal Entry", () => {
 			// route to adjustment Journal Entry to handle Account Balance and Stock Value mismatch
-			let journal_entry = frappe.model.get_new_doc('Journal Entry');
+			let journal_entry = frappe.model.get_new_doc("Journal Entry");
 
 			args.accounts.forEach((je_account) => {
 				let child_row = frappe.model.add_child(journal_entry, "accounts");
 				child_row.account = je_account.account;
 				child_row.debit_in_account_currency = je_account.debit_in_account_currency;
 				child_row.credit_in_account_currency = je_account.credit_in_account_currency;
-				child_row.party_type = "" ;
+				child_row.party_type = "";
 			});
-			frappe.set_route('Form','Journal Entry', journal_entry.name);
+			frappe.set_route("Form", "Journal Entry", journal_entry.name);
 		});
 	},
 
 	route_to_pending_reposts: (args) => {
-		frappe.set_route('List', 'Repost Item Valuation', args);
+		frappe.set_route("List", "Repost Item Valuation", args);
 	},
 });
 
-
 $.extend(erpnext.utils, {
-	set_party_dashboard_indicators: function(frm) {
-		if(frm.doc.__onload && frm.doc.__onload.dashboard_info) {
+	set_party_dashboard_indicators: function (frm) {
+		if (frm.doc.__onload && frm.doc.__onload.dashboard_info) {
 			var company_wise_info = frm.doc.__onload.dashboard_info;
-			if(company_wise_info.length > 1) {
-				company_wise_info.forEach(function(info) {
+			if (company_wise_info.length > 1) {
+				company_wise_info.forEach(function (info) {
 					erpnext.utils.add_indicator_for_multicompany(frm, info);
 				});
 			} else if (company_wise_info.length === 1) {
-				frm.dashboard.add_indicator(__('Annual Billing: {0}',
-					[format_currency(company_wise_info[0].billing_this_year, company_wise_info[0].currency)]), 'blue');
-				frm.dashboard.add_indicator(__('Total Unpaid: {0}',
-					[format_currency(company_wise_info[0].total_unpaid, company_wise_info[0].currency)]),
-				company_wise_info[0].total_unpaid ? 'orange' : 'green');
+				frm.dashboard.add_indicator(
+					__("Annual Billing: {0}", [
+						format_currency(
+							company_wise_info[0].billing_this_year,
+							company_wise_info[0].currency
+						),
+					]),
+					"blue"
+				);
+				frm.dashboard.add_indicator(
+					__("Total Unpaid: {0}", [
+						format_currency(company_wise_info[0].total_unpaid, company_wise_info[0].currency),
+					]),
+					company_wise_info[0].total_unpaid ? "orange" : "green"
+				);
 
-				if(company_wise_info[0].loyalty_points) {
-					frm.dashboard.add_indicator(__('Loyalty Points: {0}',
-						[company_wise_info[0].loyalty_points]), 'blue');
+				if (company_wise_info[0].loyalty_points) {
+					frm.dashboard.add_indicator(
+						__("Loyalty Points: {0}", [company_wise_info[0].loyalty_points]),
+						"blue"
+					);
 				}
 			}
 		}
 	},
 
-	view_serial_batch_nos: function(frm) {
+	view_serial_batch_nos: function (frm) {
 		if (!frm.doc?.items) {
 			return;
 		}
 
-		let bundle_ids = frm.doc.items.filter(d => d.serial_and_batch_bundle);
+		let bundle_ids = frm.doc.items.filter((d) => d.serial_and_batch_bundle);
 
 		if (bundle_ids?.length) {
-			frm.add_custom_button(__('Serial / Batch Nos'), () => {
-				frappe.route_options = {
-					"voucher_no": frm.doc.name,
-					"voucher_type": frm.doc.doctype,
-					"from_date": frm.doc.posting_date || frm.doc.transaction_date,
-					"to_date": frm.doc.posting_date || frm.doc.transaction_date,
-					"company": frm.doc.company,
-				};
-				frappe.set_route("query-report", "Serial and Batch Summary");
-			}, __('View'));
+			frm.add_custom_button(
+				__("Serial / Batch Nos"),
+				() => {
+					frappe.route_options = {
+						voucher_no: frm.doc.name,
+						voucher_type: frm.doc.doctype,
+						from_date: frm.doc.posting_date || frm.doc.transaction_date,
+						to_date: frm.doc.posting_date || frm.doc.transaction_date,
+						company: frm.doc.company,
+					};
+					frappe.set_route("query-report", "Serial and Batch Summary");
+				},
+				__("View")
+			);
 		}
 	},
 
-	add_indicator_for_multicompany: function(frm, info) {
+	add_indicator_for_multicompany: function (frm, info) {
 		frm.dashboard.stats_area.show();
-		frm.dashboard.stats_area_row.addClass('flex');
-		frm.dashboard.stats_area_row.css('flex-wrap', 'wrap');
+		frm.dashboard.stats_area_row.addClass("flex");
+		frm.dashboard.stats_area_row.css("flex-wrap", "wrap");
 
-		var color = info.total_unpaid ? 'orange' : 'green';
+		var color = info.total_unpaid ? "orange" : "green";
 
-		var indicator = $('<div class="flex-column col-xs-6">'+
-			'<div style="margin-top:10px"><h6>'+info.company+'</h6></div>'+
+		var indicator = $(
+			'<div class="flex-column col-xs-6">' +
+				'<div style="margin-top:10px"><h6>' +
+				info.company +
+				"</h6></div>" +
+				'<div class="badge-link small" style="margin-bottom:10px"><span class="indicator blue">' +
+				"Annual Billing: " +
+				format_currency(info.billing_this_year, info.currency) +
+				"</span></div>" +
+				'<div class="badge-link small" style="margin-bottom:10px">' +
+				'<span class="indicator ' +
+				color +
+				'">Total Unpaid: ' +
+				format_currency(info.total_unpaid, info.currency) +
+				"</span></div>" +
+				"</div>"
+		).appendTo(frm.dashboard.stats_area_row);
 
-			'<div class="badge-link small" style="margin-bottom:10px"><span class="indicator blue">'+
-			'Annual Billing: '+format_currency(info.billing_this_year, info.currency)+'</span></div>'+
-
-			'<div class="badge-link small" style="margin-bottom:10px">'+
-			'<span class="indicator '+color+'">Total Unpaid: '
-			+format_currency(info.total_unpaid, info.currency)+'</span></div>'+
-
-
-			'</div>').appendTo(frm.dashboard.stats_area_row);
-
-		if(info.loyalty_points){
-			$('<div class="badge-link small" style="margin-bottom:10px"><span class="indicator blue">'+
-			'Loyalty Points: '+info.loyalty_points+'</span></div>').appendTo(indicator);
+		if (info.loyalty_points) {
+			$(
+				'<div class="badge-link small" style="margin-bottom:10px"><span class="indicator blue">' +
+					"Loyalty Points: " +
+					info.loyalty_points +
+					"</span></div>"
+			).appendTo(indicator);
 		}
 
 		return indicator;
 	},
 
-	get_party_name: function(party_type) {
-		var dict = {'Customer': 'customer_name', 'Supplier': 'supplier_name', 'Employee': 'employee_name',
-			'Member': 'member_name'};
+	get_party_name: function (party_type) {
+		var dict = {
+			Customer: "customer_name",
+			Supplier: "supplier_name",
+			Employee: "employee_name",
+			Member: "member_name",
+		};
 		return dict[party_type];
 	},
 
-	copy_value_in_all_rows: function(doc, dt, dn, table_fieldname, fieldname) {
+	copy_value_in_all_rows: function (doc, dt, dn, table_fieldname, fieldname) {
 		var d = locals[dt][dn];
-		if(d[fieldname]){
+		if (d[fieldname]) {
 			var cl = doc[table_fieldname] || [];
-			for(var i = 0; i < cl.length; i++) {
-				if(!cl[i][fieldname]) cl[i][fieldname] = d[fieldname];
+			for (var i = 0; i < cl.length; i++) {
+				if (!cl[i][fieldname]) cl[i][fieldname] = d[fieldname];
 			}
 		}
 		refresh_field(table_fieldname);
 	},
 
-	get_terms: function(tc_name, doc, callback) {
-		if(tc_name) {
+	get_terms: function (tc_name, doc, callback) {
+		if (tc_name) {
 			return frappe.call({
-				method: 'erpnext.setup.doctype.terms_and_conditions.terms_and_conditions.get_terms_and_conditions',
+				method: "erpnext.setup.doctype.terms_and_conditions.terms_and_conditions.get_terms_and_conditions",
 				args: {
 					template_name: tc_name,
-					doc: doc
+					doc: doc,
 				},
-				callback: function(r) {
-					callback(r)
-				}
+				callback: function (r) {
+					callback(r);
+				},
 			});
 		}
 	},
 
-	make_bank_account: function(doctype, docname) {
+	make_bank_account: function (doctype, docname) {
 		frappe.call({
 			method: "erpnext.accounts.doctype.bank_account.bank_account.make_bank_account",
 			args: {
 				doctype: doctype,
-				docname: docname
+				docname: docname,
 			},
 			freeze: true,
-			callback: function(r) {
+			callback: function (r) {
 				var doclist = frappe.model.sync(r.message);
 				frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
-			}
-		})
+			},
+		});
 	},
 
-	add_dimensions: function(report_name, index) {
+	add_dimensions: function (report_name, index) {
 		let filters = frappe.query_reports[report_name].filters;
 
 		frappe.call({
 			method: "erpnext.accounts.doctype.accounting_dimension.accounting_dimension.get_dimensions",
-			callback: function(r) {
+			callback: function (r) {
 				let accounting_dimensions = r.message[0];
 				accounting_dimensions.forEach((dimension) => {
-					let found = filters.some(el => el.fieldname === dimension['fieldname']);
+					let found = filters.some((el) => el.fieldname === dimension["fieldname"]);
 
 					if (!found) {
 						filters.splice(index, 0, {
-							"fieldname": dimension["fieldname"],
-							"label": __(dimension["label"]),
-							"fieldtype": "MultiSelectList",
-							get_data: function(txt) {
+							fieldname: dimension["fieldname"],
+							label: __(dimension["label"]),
+							fieldtype: "MultiSelectList",
+							get_data: function (txt) {
 								return frappe.db.get_link_options(dimension["document_type"], txt);
 							},
 						});
 					}
 				});
-			}
+			},
 		});
 	},
 
-	add_inventory_dimensions: function(report_name, index) {
+	add_inventory_dimensions: function (report_name, index) {
 		let filters = frappe.query_reports[report_name].filters;
 
 		frappe.call({
 			method: "erpnext.stock.doctype.inventory_dimension.inventory_dimension.get_inventory_dimensions",
-			callback: function(r) {
+			callback: function (r) {
 				if (r.message && r.message.length) {
 					r.message.forEach((dimension) => {
-						let existing_filter = filters.filter(el => el.fieldname === dimension['fieldname']);
+						let existing_filter = filters.filter((el) => el.fieldname === dimension["fieldname"]);
 
 						if (!existing_filter.length) {
 							filters.splice(index, 0, {
-								"fieldname": dimension["fieldname"],
-								"label": __(dimension["doctype"]),
-								"fieldtype": "MultiSelectList",
-								get_data: function(txt) {
+								fieldname: dimension["fieldname"],
+								label: __(dimension["doctype"]),
+								fieldtype: "MultiSelectList",
+								get_data: function (txt) {
 									return frappe.db.get_link_options(dimension["doctype"], txt);
 								},
 							});
 						} else {
-							existing_filter[0]['fieldtype'] = "MultiSelectList";
-							existing_filter[0]['get_data'] = function(txt) {
+							existing_filter[0]["fieldtype"] = "MultiSelectList";
+							existing_filter[0]["get_data"] = function (txt) {
 								return frappe.db.get_link_options(dimension["doctype"], txt);
-							}
+							};
 						}
 					});
 				}
-			}
+			},
 		});
 	},
 
-	make_subscription: function(doctype, docname) {
+	make_subscription: function (doctype, docname) {
 		frappe.call({
 			method: "frappe.automation.doctype.auto_repeat.auto_repeat.make_auto_repeat",
 			args: {
 				doctype: doctype,
-				docname: docname
+				docname: docname,
 			},
-			callback: function(r) {
+			callback: function (r) {
 				var doclist = frappe.model.sync(r.message);
 				frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
-			}
-		})
+			},
+		});
 	},
 
-	make_pricing_rule: function(doctype, docname) {
+	make_pricing_rule: function (doctype, docname) {
 		frappe.call({
 			method: "erpnext.accounts.doctype.pricing_rule.pricing_rule.make_pricing_rule",
 			args: {
 				doctype: doctype,
-				docname: docname
+				docname: docname,
 			},
-			callback: function(r) {
+			callback: function (r) {
 				var doclist = frappe.model.sync(r.message);
 				frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
-			}
-		})
+			},
+		});
 	},
 
 	/**
-	* Checks if the first row of a given child table is empty
-	* @param child_table - Child table Doctype
-	* @return {Boolean}
-	**/
-	first_row_is_empty: function(child_table){
-		if($.isArray(child_table) && child_table.length > 0) {
+	 * Checks if the first row of a given child table is empty
+	 * @param child_table - Child table Doctype
+	 * @return {Boolean}
+	 **/
+	first_row_is_empty: function (child_table) {
+		if ($.isArray(child_table) && child_table.length > 0) {
 			return !child_table[0].item_code;
 		}
 		return false;
 	},
 
 	/**
-	* Removes the first row of a child table if it is empty
-	* @param {_Frm} frm - The current form
-	* @param {String} child_table_name - The child table field name
-	* @return {Boolean}
-	**/
-	remove_empty_first_row: function(frm, child_table_name){
-		const rows = frm['doc'][child_table_name];
-		if (this.first_row_is_empty(rows)){
-			frm['doc'][child_table_name] = rows.splice(1);
+	 * Removes the first row of a child table if it is empty
+	 * @param {_Frm} frm - The current form
+	 * @param {String} child_table_name - The child table field name
+	 * @return {Boolean}
+	 **/
+	remove_empty_first_row: function (frm, child_table_name) {
+		const rows = frm["doc"][child_table_name];
+		if (this.first_row_is_empty(rows)) {
+			frm["doc"][child_table_name] = rows.splice(1);
 		}
 		return rows;
 	},
-	get_tree_options: function(option) {
+	get_tree_options: function (option) {
 		// get valid options for tree based on user permission & locals dict
 		let unscrub_option = frappe.model.unscrub(option);
 		let user_permission = frappe.defaults.get_user_permissions();
 		let options;
 
-		if(user_permission && user_permission[unscrub_option]) {
-			options = user_permission[unscrub_option].map(perm => perm.doc);
+		if (user_permission && user_permission[unscrub_option]) {
+			options = user_permission[unscrub_option].map((perm) => perm.doc);
 		} else {
-			options = $.map(locals[`:${unscrub_option}`], function(c) { return c.name; }).sort();
+			options = $.map(locals[`:${unscrub_option}`], function (c) {
+				return c.name;
+			}).sort();
 		}
 
 		// filter unique values, as there may be multiple user permissions for any value
 		return options.filter((value, index, self) => self.indexOf(value) === index);
 	},
-	get_tree_default: function(option) {
+	get_tree_default: function (option) {
 		// set default for a field based on user permission
 		let options = this.get_tree_options(option);
-		if(options.includes(frappe.defaults.get_default(option))) {
+		if (options.includes(frappe.defaults.get_default(option))) {
 			return frappe.defaults.get_default(option);
 		} else {
 			return options[0];
 		}
 	},
-	overrides_parent_value_in_all_rows: function(doc, dt, dn, table_fieldname, fieldname, parent_fieldname) {
+	overrides_parent_value_in_all_rows: function (doc, dt, dn, table_fieldname, fieldname, parent_fieldname) {
 		if (doc[parent_fieldname]) {
 			let cl = doc[table_fieldname] || [];
 			for (let i = 0; i < cl.length; i++) {
@@ -355,7 +398,7 @@
 		}
 	},
 	create_new_doc: function (doctype, update_fields) {
-		frappe.model.with_doctype(doctype, function() {
+		frappe.model.with_doctype(doctype, function () {
 			var new_doc = frappe.model.get_new_doc(doctype);
 			for (let [key, value] of Object.entries(update_fields)) {
 				new_doc[key] = value;
@@ -367,183 +410,194 @@
 	// check if payments app is installed on site, if not warn user.
 	check_payments_app: () => {
 		if (frappe.boot.versions && !frappe.boot.versions.payments) {
-			const marketplace_link = '<a href="https://frappecloud.com/marketplace/apps/payments">Marketplace</a>'
-			const github_link = '<a href="https://github.com/frappe/payments/">GitHub</a>'
-			const msg = __("payments app is not installed. Please install it from {0} or {1}", [marketplace_link, github_link])
+			const marketplace_link =
+				'<a href="https://frappecloud.com/marketplace/apps/payments">Marketplace</a>';
+			const github_link = '<a href="https://github.com/frappe/payments/">GitHub</a>';
+			const msg = __("payments app is not installed. Please install it from {0} or {1}", [
+				marketplace_link,
+				github_link,
+			]);
 			frappe.msgprint(msg);
 		}
-
 	},
 
 	pick_serial_and_batch_bundle(frm, cdt, cdn, type_of_transaction, warehouse_field) {
 		let item_row = frappe.get_doc(cdt, cdn);
 		item_row.type_of_transaction = type_of_transaction;
 
-		frappe.db.get_value("Item", item_row.item_code, ["has_batch_no", "has_serial_no"])
-			.then((r) => {
-				item_row.has_batch_no = r.message.has_batch_no;
-				item_row.has_serial_no = r.message.has_serial_no;
+		frappe.db.get_value("Item", item_row.item_code, ["has_batch_no", "has_serial_no"]).then((r) => {
+			item_row.has_batch_no = r.message.has_batch_no;
+			item_row.has_serial_no = r.message.has_serial_no;
 
-				frappe.require("assets/erpnext/js/utils/serial_no_batch_selector.js", function() {
-					new erpnext.SerialBatchPackageSelector(frm, item_row, (r) => {
-						if (r) {
-							let update_values = {
-								"serial_and_batch_bundle": r.name,
-								"qty": Math.abs(r.total_qty)
-							}
+			frappe.require("assets/erpnext/js/utils/serial_no_batch_selector.js", function () {
+				new erpnext.SerialBatchPackageSelector(frm, item_row, (r) => {
+					if (r) {
+						let update_values = {
+							serial_and_batch_bundle: r.name,
+							qty: Math.abs(r.total_qty),
+						};
 
-							if (!warehouse_field) {
-								warehouse_field = "warehouse";
-							}
-
-							if (r.warehouse) {
-								update_values[warehouse_field] = r.warehouse;
-							}
-
-							frappe.model.set_value(item_row.doctype, item_row.name, update_values);
+						if (!warehouse_field) {
+							warehouse_field = "warehouse";
 						}
-					});
+
+						if (r.warehouse) {
+							update_values[warehouse_field] = r.warehouse;
+						}
+
+						frappe.model.set_value(item_row.doctype, item_row.name, update_values);
+					}
 				});
+			});
 		});
 	},
 
-	get_fiscal_year: function(date, with_dates=false, boolean=false) {
-		if(!date) {
+	get_fiscal_year: function (date, with_dates = false, boolean = false) {
+		if (!date) {
 			date = frappe.datetime.get_today();
 		}
 
-		let fiscal_year = '';
+		let fiscal_year = "";
 		frappe.call({
 			method: "erpnext.accounts.utils.get_fiscal_year",
 			args: {
 				date: date,
-				boolean: boolean
+				boolean: boolean,
 			},
 			async: false,
-			callback: function(r) {
+			callback: function (r) {
 				if (r.message) {
-					if (with_dates)
-						fiscal_year = r.message;
-					else
-						fiscal_year = r.message[0];
+					if (with_dates) fiscal_year = r.message;
+					else fiscal_year = r.message[0];
 				}
-			}
+			},
 		});
 		return fiscal_year;
-	}
+	},
 });
 
-erpnext.utils.select_alternate_items = function(opts) {
+erpnext.utils.select_alternate_items = function (opts) {
 	const frm = opts.frm;
-	const warehouse_field = opts.warehouse_field || 'warehouse';
-	const item_field = opts.item_field || 'item_code';
+	const warehouse_field = opts.warehouse_field || "warehouse";
+	const item_field = opts.item_field || "item_code";
 
 	this.data = [];
 	const dialog = new frappe.ui.Dialog({
 		title: __("Select Alternate Item"),
 		fields: [
-			{fieldtype:'Section Break', label: __('Items')},
+			{ fieldtype: "Section Break", label: __("Items") },
 			{
-				fieldname: "alternative_items", fieldtype: "Table", cannot_add_rows: true,
-				in_place_edit: true, data: this.data,
+				fieldname: "alternative_items",
+				fieldtype: "Table",
+				cannot_add_rows: true,
+				in_place_edit: true,
+				data: this.data,
 				get_data: () => {
 					return this.data;
 				},
-				fields: [{
-					fieldtype:'Data',
-					fieldname:"docname",
-					hidden: 1
-				}, {
-					fieldtype:'Link',
-					fieldname:"item_code",
-					options: 'Item',
-					in_list_view: 1,
-					read_only: 1,
-					label: __('Item Code')
-				}, {
-					fieldtype:'Link',
-					fieldname:"alternate_item",
-					options: 'Item',
-					default: "",
-					in_list_view: 1,
-					label: __('Alternate Item'),
-					onchange: function() {
-						const item_code = this.get_value();
-						const warehouse = this.grid_row.on_grid_fields_dict.warehouse.get_value();
-						if (item_code && warehouse) {
-							frappe.call({
-								method: "erpnext.stock.utils.get_latest_stock_qty",
-								args: {
-									item_code: item_code,
-									warehouse: warehouse
-								},
-								callback: (r) => {
-									this.grid_row.on_grid_fields_dict
-										.actual_qty.set_value(r.message || 0);
-								}
-							})
-						}
+				fields: [
+					{
+						fieldtype: "Data",
+						fieldname: "docname",
+						hidden: 1,
 					},
-					get_query: (e) => {
-						return {
-							query: "erpnext.stock.doctype.item_alternative.item_alternative.get_alternative_items",
-							filters: {
-								item_code: e.item_code
+					{
+						fieldtype: "Link",
+						fieldname: "item_code",
+						options: "Item",
+						in_list_view: 1,
+						read_only: 1,
+						label: __("Item Code"),
+					},
+					{
+						fieldtype: "Link",
+						fieldname: "alternate_item",
+						options: "Item",
+						default: "",
+						in_list_view: 1,
+						label: __("Alternate Item"),
+						onchange: function () {
+							const item_code = this.get_value();
+							const warehouse = this.grid_row.on_grid_fields_dict.warehouse.get_value();
+							if (item_code && warehouse) {
+								frappe.call({
+									method: "erpnext.stock.utils.get_latest_stock_qty",
+									args: {
+										item_code: item_code,
+										warehouse: warehouse,
+									},
+									callback: (r) => {
+										this.grid_row.on_grid_fields_dict.actual_qty.set_value(
+											r.message || 0
+										);
+									},
+								});
 							}
-						};
-					}
-				}, {
-					fieldtype:'Link',
-					fieldname:"warehouse",
-					options: 'Warehouse',
-					default: "",
-					in_list_view: 1,
-					label: __('Warehouse'),
-					onchange: function() {
-						const warehouse = this.get_value();
-						const item_code = this.grid_row.on_grid_fields_dict.item_code.get_value();
-						if (item_code && warehouse) {
-							frappe.call({
-								method: "erpnext.stock.utils.get_latest_stock_qty",
-								args: {
-									item_code: item_code,
-									warehouse: warehouse
+						},
+						get_query: (e) => {
+							return {
+								query: "erpnext.stock.doctype.item_alternative.item_alternative.get_alternative_items",
+								filters: {
+									item_code: e.item_code,
 								},
-								callback: (r) => {
-									this.grid_row.on_grid_fields_dict
-										.actual_qty.set_value(r.message || 0);
-								}
-							})
-						}
+							};
+						},
 					},
-				}, {
-					fieldtype:'Float',
-					fieldname:"actual_qty",
-					default: 0,
-					read_only: 1,
-					in_list_view: 1,
-					label: __('Available Qty')
-				}]
+					{
+						fieldtype: "Link",
+						fieldname: "warehouse",
+						options: "Warehouse",
+						default: "",
+						in_list_view: 1,
+						label: __("Warehouse"),
+						onchange: function () {
+							const warehouse = this.get_value();
+							const item_code = this.grid_row.on_grid_fields_dict.item_code.get_value();
+							if (item_code && warehouse) {
+								frappe.call({
+									method: "erpnext.stock.utils.get_latest_stock_qty",
+									args: {
+										item_code: item_code,
+										warehouse: warehouse,
+									},
+									callback: (r) => {
+										this.grid_row.on_grid_fields_dict.actual_qty.set_value(
+											r.message || 0
+										);
+									},
+								});
+							}
+						},
+					},
+					{
+						fieldtype: "Float",
+						fieldname: "actual_qty",
+						default: 0,
+						read_only: 1,
+						in_list_view: 1,
+						label: __("Available Qty"),
+					},
+				],
 			},
 		],
-		primary_action: function() {
+		primary_action: function () {
 			const args = this.get_values()["alternative_items"];
-			const alternative_items = args.filter(d => {
+			const alternative_items = args.filter((d) => {
 				if (d.alternate_item && d.item_code != d.alternate_item) {
 					return true;
 				}
 			});
 
-			alternative_items.forEach(d => {
+			alternative_items.forEach((d) => {
 				let row = frappe.get_doc(opts.child_doctype, d.docname);
 				let qty = null;
-				if (row.doctype === 'Work Order Item') {
+				if (row.doctype === "Work Order Item") {
 					qty = row.required_qty;
 				} else {
 					qty = row.qty;
 				}
 				row[item_field] = d.alternate_item;
-				frappe.model.set_value(row.doctype, row.name, 'qty', qty);
+				frappe.model.set_value(row.doctype, row.name, "qty", qty);
 				frappe.model.set_value(row.doctype, row.name, opts.original_item_field, d.item_code);
 				frm.trigger(item_field, row.doctype, row.name);
 			});
@@ -551,174 +605,187 @@
 			refresh_field(opts.child_docname);
 			this.hide();
 		},
-		primary_action_label: __('Update')
+		primary_action_label: __("Update"),
 	});
 
-	frm.doc[opts.child_docname].forEach(d => {
+	frm.doc[opts.child_docname].forEach((d) => {
 		if (!opts.condition || opts.condition(d)) {
 			dialog.fields_dict.alternative_items.df.data.push({
-				"docname": d.name,
-				"item_code": d[item_field],
-				"warehouse": d[warehouse_field],
-				"actual_qty": d.actual_qty
+				docname: d.name,
+				item_code: d[item_field],
+				warehouse: d[warehouse_field],
+				actual_qty: d.actual_qty,
 			});
 		}
-	})
+	});
 
 	this.data = dialog.fields_dict.alternative_items.df.data;
 	dialog.fields_dict.alternative_items.grid.refresh();
 	dialog.show();
-}
+};
 
-erpnext.utils.update_child_items = function(opts) {
+erpnext.utils.update_child_items = function (opts) {
 	const frm = opts.frm;
-	const cannot_add_row = (typeof opts.cannot_add_row === 'undefined') ? true : opts.cannot_add_row;
-	const child_docname = (typeof opts.cannot_add_row === 'undefined') ? "items" : opts.child_docname;
+	const cannot_add_row = typeof opts.cannot_add_row === "undefined" ? true : opts.cannot_add_row;
+	const child_docname = typeof opts.cannot_add_row === "undefined" ? "items" : opts.child_docname;
 	const child_meta = frappe.get_meta(`${frm.doc.doctype} Item`);
 	const has_reserved_stock = opts.has_reserved_stock ? true : false;
-	const get_precision = (fieldname) => child_meta.fields.find(f => f.fieldname == fieldname).precision;
+	const get_precision = (fieldname) => child_meta.fields.find((f) => f.fieldname == fieldname).precision;
 
 	this.data = frm.doc[opts.child_docname].map((d) => {
 		return {
-			"docname": d.name,
-			"name": d.name,
-			"item_code": d.item_code,
-			"delivery_date": d.delivery_date,
-			"schedule_date": d.schedule_date,
-			"conversion_factor": d.conversion_factor,
-			"qty": d.qty,
-			"rate": d.rate,
-			"uom": d.uom,
-			"fg_item": d.fg_item,
-			"fg_item_qty": d.fg_item_qty,
-		}
+			docname: d.name,
+			name: d.name,
+			item_code: d.item_code,
+			delivery_date: d.delivery_date,
+			schedule_date: d.schedule_date,
+			conversion_factor: d.conversion_factor,
+			qty: d.qty,
+			rate: d.rate,
+			uom: d.uom,
+			fg_item: d.fg_item,
+			fg_item_qty: d.fg_item_qty,
+		};
 	});
 
-	const fields = [{
-		fieldtype:'Data',
-		fieldname:"docname",
-		read_only: 1,
-		hidden: 1,
-	}, {
-		fieldtype:'Link',
-		fieldname:"item_code",
-		options: 'Item',
-		in_list_view: 1,
-		read_only: 0,
-		disabled: 0,
-		label: __('Item Code'),
-		get_query: function() {
-			let filters;
-			if (frm.doc.doctype == 'Sales Order') {
-				filters = {"is_sales_item": 1};
-			} else if (frm.doc.doctype == 'Purchase Order') {
-				if (frm.doc.is_subcontracted) {
-					if (frm.doc.is_old_subcontracting_flow) {
-						filters = {"is_sub_contracted_item": 1};
-					} else {
-						filters = {"is_stock_item": 0};
-					}
-				} else {
-					filters = {"is_purchase_item": 1};
-				}
-			}
-			return {
-				query: "erpnext.controllers.queries.item_query",
-				filters: filters
-			};
-		}
-	}, {
-		fieldtype:'Link',
-		fieldname:'uom',
-		options: 'UOM',
-		read_only: 0,
-		label: __('UOM'),
-		reqd: 1,
-		onchange: function () {
-			frappe.call({
-				method: "erpnext.stock.get_item_details.get_conversion_factor",
-				args: { item_code: this.doc.item_code, uom: this.value },
-				callback: r => {
-					if(!r.exc) {
-						if (this.doc.conversion_factor == r.message.conversion_factor) return;
-
-						const docname = this.doc.docname;
-						dialog.fields_dict.trans_items.df.data.some(doc => {
-							if (doc.docname == docname) {
-								doc.conversion_factor = r.message.conversion_factor;
-								dialog.fields_dict.trans_items.grid.refresh();
-								return true;
-							}
-						})
-					}
-				}
-			});
-		}
-	}, {
-		fieldtype:'Float',
-		fieldname:"qty",
-		default: 0,
-		read_only: 0,
-		in_list_view: 1,
-		label: __('Qty'),
-		precision: get_precision("qty")
-	}, {
-		fieldtype:'Currency',
-		fieldname:"rate",
-		options: "currency",
-		default: 0,
-		read_only: 0,
-		in_list_view: 1,
-		label: __('Rate'),
-		precision: get_precision("rate")
-	}];
-
-	if (frm.doc.doctype == 'Sales Order' || frm.doc.doctype == 'Purchase Order' ) {
-		fields.splice(2, 0, {
-			fieldtype: 'Date',
-			fieldname: frm.doc.doctype == 'Sales Order' ? "delivery_date" : "schedule_date",
+	const fields = [
+		{
+			fieldtype: "Data",
+			fieldname: "docname",
+			read_only: 1,
+			hidden: 1,
+		},
+		{
+			fieldtype: "Link",
+			fieldname: "item_code",
+			options: "Item",
 			in_list_view: 1,
-			label: frm.doc.doctype == 'Sales Order' ? __("Delivery Date") : __("Reqd by date"),
-			default: frm.doc.doctype == 'Sales Order' ? frm.doc.delivery_date : frm.doc.schedule_date,
-			reqd: 1
-		})
-		fields.splice(3, 0, {
-			fieldtype: 'Float',
-			fieldname: "conversion_factor",
-			label: __("Conversion Factor"),
-			precision: get_precision('conversion_factor')
-		})
-	}
-
-	if (frm.doc.doctype == 'Purchase Order' && frm.doc.is_subcontracted && !frm.doc.is_old_subcontracting_flow) {
-		fields.push({
-			fieldtype:'Link',
-			fieldname:'fg_item',
-			options: 'Item',
-			reqd: 1,
-			in_list_view: 0,
 			read_only: 0,
 			disabled: 0,
-			label: __('Finished Good Item'),
-			get_query: () => {
-				return {
-					filters: {
-						'is_stock_item': 1,
-						'is_sub_contracted_item': 1,
-						'default_bom': ['!=', '']
+			label: __("Item Code"),
+			get_query: function () {
+				let filters;
+				if (frm.doc.doctype == "Sales Order") {
+					filters = { is_sales_item: 1 };
+				} else if (frm.doc.doctype == "Purchase Order") {
+					if (frm.doc.is_subcontracted) {
+						if (frm.doc.is_old_subcontracting_flow) {
+							filters = { is_sub_contracted_item: 1 };
+						} else {
+							filters = { is_stock_item: 0 };
+						}
+					} else {
+						filters = { is_purchase_item: 1 };
 					}
 				}
+				return {
+					query: "erpnext.controllers.queries.item_query",
+					filters: filters,
+				};
 			},
-		}, {
-			fieldtype:'Float',
-			fieldname:'fg_item_qty',
+		},
+		{
+			fieldtype: "Link",
+			fieldname: "uom",
+			options: "UOM",
+			read_only: 0,
+			label: __("UOM"),
 			reqd: 1,
+			onchange: function () {
+				frappe.call({
+					method: "erpnext.stock.get_item_details.get_conversion_factor",
+					args: { item_code: this.doc.item_code, uom: this.value },
+					callback: (r) => {
+						if (!r.exc) {
+							if (this.doc.conversion_factor == r.message.conversion_factor) return;
+
+							const docname = this.doc.docname;
+							dialog.fields_dict.trans_items.df.data.some((doc) => {
+								if (doc.docname == docname) {
+									doc.conversion_factor = r.message.conversion_factor;
+									dialog.fields_dict.trans_items.grid.refresh();
+									return true;
+								}
+							});
+						}
+					},
+				});
+			},
+		},
+		{
+			fieldtype: "Float",
+			fieldname: "qty",
 			default: 0,
 			read_only: 0,
-			in_list_view: 0,
-			label: __('Finished Good Item Qty'),
-			precision: get_precision('fg_item_qty')
-		})
+			in_list_view: 1,
+			label: __("Qty"),
+			precision: get_precision("qty"),
+		},
+		{
+			fieldtype: "Currency",
+			fieldname: "rate",
+			options: "currency",
+			default: 0,
+			read_only: 0,
+			in_list_view: 1,
+			label: __("Rate"),
+			precision: get_precision("rate"),
+		},
+	];
+
+	if (frm.doc.doctype == "Sales Order" || frm.doc.doctype == "Purchase Order") {
+		fields.splice(2, 0, {
+			fieldtype: "Date",
+			fieldname: frm.doc.doctype == "Sales Order" ? "delivery_date" : "schedule_date",
+			in_list_view: 1,
+			label: frm.doc.doctype == "Sales Order" ? __("Delivery Date") : __("Reqd by date"),
+			default: frm.doc.doctype == "Sales Order" ? frm.doc.delivery_date : frm.doc.schedule_date,
+			reqd: 1,
+		});
+		fields.splice(3, 0, {
+			fieldtype: "Float",
+			fieldname: "conversion_factor",
+			label: __("Conversion Factor"),
+			precision: get_precision("conversion_factor"),
+		});
+	}
+
+	if (
+		frm.doc.doctype == "Purchase Order" &&
+		frm.doc.is_subcontracted &&
+		!frm.doc.is_old_subcontracting_flow
+	) {
+		fields.push(
+			{
+				fieldtype: "Link",
+				fieldname: "fg_item",
+				options: "Item",
+				reqd: 1,
+				in_list_view: 0,
+				read_only: 0,
+				disabled: 0,
+				label: __("Finished Good Item"),
+				get_query: () => {
+					return {
+						filters: {
+							is_stock_item: 1,
+							is_sub_contracted_item: 1,
+							default_bom: ["!=", ""],
+						},
+					};
+				},
+			},
+			{
+				fieldtype: "Float",
+				fieldname: "fg_item_qty",
+				reqd: 1,
+				default: 0,
+				read_only: 0,
+				in_list_view: 0,
+				label: __("Finished Good Item Qty"),
+				precision: get_precision("fg_item_qty"),
+			}
+		);
 	}
 
 	let dialog = new frappe.ui.Dialog({
@@ -736,99 +803,97 @@
 				get_data: () => {
 					return this.data;
 				},
-				fields: fields
+				fields: fields,
 			},
 		],
-		primary_action: function() {
+		primary_action: function () {
 			if (frm.doctype == "Sales Order" && has_reserved_stock) {
 				this.hide();
 				frappe.confirm(
-					__('The reserved stock will be released when you update items. Are you certain you wish to proceed?'),
-					() => this.update_items(),
-				)
+					__(
+						"The reserved stock will be released when you update items. Are you certain you wish to proceed?"
+					),
+					() => this.update_items()
+				);
 			} else {
 				this.update_items();
 			}
 		},
-		update_items: function() {
+		update_items: function () {
 			const trans_items = this.get_values()["trans_items"].filter((item) => !!item.item_code);
 			frappe.call({
-				method: 'erpnext.controllers.accounts_controller.update_child_qty_rate',
+				method: "erpnext.controllers.accounts_controller.update_child_qty_rate",
 				freeze: true,
 				args: {
-					'parent_doctype': frm.doc.doctype,
-					'trans_items': trans_items,
-					'parent_doctype_name': frm.doc.name,
-					'child_docname': child_docname
+					parent_doctype: frm.doc.doctype,
+					trans_items: trans_items,
+					parent_doctype_name: frm.doc.name,
+					child_docname: child_docname,
 				},
-				callback: function() {
+				callback: function () {
 					frm.reload_doc();
-				}
+				},
 			});
 			this.hide();
 			refresh_field("items");
 		},
-		primary_action_label: __('Update')
-	})
+		primary_action_label: __("Update"),
+	});
 
 	dialog.show();
-}
+};
 
-
-
-
-erpnext.utils.map_current_doc = function(opts) {
+erpnext.utils.map_current_doc = function (opts) {
 	function _map() {
-		if($.isArray(cur_frm.doc.items) && cur_frm.doc.items.length > 0) {
+		if ($.isArray(cur_frm.doc.items) && cur_frm.doc.items.length > 0) {
 			// remove first item row if empty
-			if(!cur_frm.doc.items[0].item_code) {
+			if (!cur_frm.doc.items[0].item_code) {
 				cur_frm.doc.items = cur_frm.doc.items.splice(1);
 			}
 
 			// find the doctype of the items table
-			var items_doctype = frappe.meta.get_docfield(cur_frm.doctype, 'items').options;
+			var items_doctype = frappe.meta.get_docfield(cur_frm.doctype, "items").options;
 
 			// find the link fieldname from items table for the given
 			// source_doctype
 			var link_fieldname = null;
-			frappe.get_meta(items_doctype).fields.forEach(function(d) {
-				if(d.options===opts.source_doctype) link_fieldname = d.fieldname; });
+			frappe.get_meta(items_doctype).fields.forEach(function (d) {
+				if (d.options === opts.source_doctype) link_fieldname = d.fieldname;
+			});
 
 			// search in existing items if the source_name is already set and full qty fetched
 			var already_set = false;
 			var item_qty_map = {};
 
-			$.each(cur_frm.doc.items, function(i, d) {
-				opts.source_name.forEach(function(src) {
-					if(d[link_fieldname]==src) {
+			$.each(cur_frm.doc.items, function (i, d) {
+				opts.source_name.forEach(function (src) {
+					if (d[link_fieldname] == src) {
 						already_set = true;
-						if (item_qty_map[d.item_code])
-							item_qty_map[d.item_code] += flt(d.qty);
-						else
-							item_qty_map[d.item_code] = flt(d.qty);
+						if (item_qty_map[d.item_code]) item_qty_map[d.item_code] += flt(d.qty);
+						else item_qty_map[d.item_code] = flt(d.qty);
 					}
 				});
 			});
 
-			if(already_set) {
-				opts.source_name.forEach(function(src) {
-					frappe.model.with_doc(opts.source_doctype, src, function(r) {
+			if (already_set) {
+				opts.source_name.forEach(function (src) {
+					frappe.model.with_doc(opts.source_doctype, src, function (r) {
 						var source_doc = frappe.model.get_doc(opts.source_doctype, src);
-						$.each(source_doc.items || [], function(i, row) {
-							if(row.qty > flt(item_qty_map[row.item_code])) {
+						$.each(source_doc.items || [], function (i, row) {
+							if (row.qty > flt(item_qty_map[row.item_code])) {
 								already_set = false;
 								return false;
 							}
-						})
-					})
+						});
+					});
 
-					if(already_set) {
-						frappe.msgprint(__("You have already selected items from {0} {1}",
-							[opts.source_doctype, src]));
+					if (already_set) {
+						frappe.msgprint(
+							__("You have already selected items from {0} {1}", [opts.source_doctype, src])
+						);
 						return;
 					}
-
-				})
+				});
 			}
 		}
 
@@ -836,22 +901,22 @@
 			// Sometimes we hit the limit for URL length of a GET request
 			// as we send the full target_doc. Hence this is a POST request.
 			type: "POST",
-			method: 'frappe.model.mapper.map_docs',
+			method: "frappe.model.mapper.map_docs",
 			args: {
-				"method": opts.method,
-				"source_names": opts.source_name,
-				"target_doc": cur_frm.doc,
-				"args": opts.args
+				method: opts.method,
+				source_names: opts.source_name,
+				target_doc: cur_frm.doc,
+				args: opts.args,
 			},
 			freeze: true,
 			freeze_message: __("Mapping {0} ...", [opts.source_doctype]),
-			callback: function(r) {
-				if(!r.exc) {
+			callback: function (r) {
+				if (!r.exc) {
 					frappe.model.sync(r.message);
 					cur_frm.dirty();
 					cur_frm.refresh();
 				}
-			}
+			},
 		});
 	}
 
@@ -870,11 +935,11 @@
 
 	if (opts.source_doctype) {
 		let data_fields = [];
-		if(opts.source_doctype == "Purchase Receipt") {
+		if (opts.source_doctype == "Purchase Receipt") {
 			data_fields.push({
-				fieldname: 'merge_taxes',
-				fieldtype: 'Check',
-				label: __('Merge taxes from multiple documents'),
+				fieldname: "merge_taxes",
+				fieldtype: "Check",
+				label: __("Merge taxes from multiple documents"),
 			});
 		}
 		const d = new frappe.ui.form.MultiSelectDialog({
@@ -889,10 +954,10 @@
 			child_fieldname: opts.child_fieldname,
 			child_columns: opts.child_columns,
 			size: opts.size,
-			action: function(selections, args) {
+			action: function (selections, args) {
 				let values = selections;
 				if (values.length === 0) {
-					frappe.msgprint(__("Please select {0}", [opts.source_doctype]))
+					frappe.msgprint(__("Please select {0}", [opts.source_doctype]));
 					return;
 				}
 				opts.source_name = values;
@@ -912,11 +977,11 @@
 		opts.source_name = [opts.source_name];
 		_map();
 	}
-}
+};
 
-frappe.form.link_formatters['Item'] = function(value, doc) {
+frappe.form.link_formatters["Item"] = function (value, doc) {
 	if (doc && value && doc.item_name && doc.item_name !== value && doc.item_code === value) {
-		return value + ': ' + doc.item_name;
+		return value + ": " + doc.item_name;
 	} else if (!value && doc.doctype && doc.item_name) {
 		// format blank value in child table
 		return doc.item_name;
@@ -924,11 +989,11 @@
 		// if value is blank in report view or item code and name are the same, return as is
 		return value;
 	}
-}
+};
 
-frappe.form.link_formatters['Employee'] = function(value, doc) {
+frappe.form.link_formatters["Employee"] = function (value, doc) {
 	if (doc && value && doc.employee_name && doc.employee_name !== value && doc.employee === value) {
-		return value + ': ' + doc.employee_name;
+		return value + ": " + doc.employee_name;
 	} else if (!value && doc.doctype && doc.employee_name) {
 		// format blank value in child table
 		return doc.employee;
@@ -936,11 +1001,11 @@
 		// if value is blank in report view or project name and name are the same, return as is
 		return value;
 	}
-}
+};
 
-frappe.form.link_formatters['Project'] = function(value, doc) {
+frappe.form.link_formatters["Project"] = function (value, doc) {
 	if (doc && value && doc.project_name && doc.project_name !== value && doc.project === value) {
-		return value + ': ' + doc.project_name;
+		return value + ": " + doc.project_name;
 	} else if (!value && doc.doctype && doc.project_name) {
 		// format blank value in child table
 		return doc.project;
@@ -951,64 +1016,74 @@
 };
 
 // add description on posting time
-$(document).on('app_ready', function() {
-	if(!frappe.datetime.is_timezone_same()) {
-		$.each(["Stock Reconciliation", "Stock Entry", "Stock Ledger Entry",
-			"Delivery Note", "Purchase Receipt", "Sales Invoice"], function(i, d) {
-			frappe.ui.form.on(d, "onload", function(frm) {
-				cur_frm.set_df_property("posting_time", "description",
-					frappe.sys_defaults.time_zone);
-			});
-		});
+$(document).on("app_ready", function () {
+	if (!frappe.datetime.is_timezone_same()) {
+		$.each(
+			[
+				"Stock Reconciliation",
+				"Stock Entry",
+				"Stock Ledger Entry",
+				"Delivery Note",
+				"Purchase Receipt",
+				"Sales Invoice",
+			],
+			function (i, d) {
+				frappe.ui.form.on(d, "onload", function (frm) {
+					cur_frm.set_df_property("posting_time", "description", frappe.sys_defaults.time_zone);
+				});
+			}
+		);
 	}
 });
 
 // Show SLA dashboard
-$(document).on('app_ready', function() {
-	$.each(frappe.boot.service_level_agreement_doctypes, function(_i, d) {
+$(document).on("app_ready", function () {
+	$.each(frappe.boot.service_level_agreement_doctypes, function (_i, d) {
 		frappe.ui.form.on(d, {
-			onload: function(frm) {
-				if (!frm.doc.service_level_agreement)
-					return;
+			onload: function (frm) {
+				if (!frm.doc.service_level_agreement) return;
 
 				frappe.call({
-					method: 'erpnext.support.doctype.service_level_agreement.service_level_agreement.get_service_level_agreement_filters',
+					method: "erpnext.support.doctype.service_level_agreement.service_level_agreement.get_service_level_agreement_filters",
 					args: {
 						doctype: frm.doc.doctype,
 						name: frm.doc.service_level_agreement,
-						customer: frm.doc.customer
+						customer: frm.doc.customer,
 					},
 					callback: function (r) {
 						if (r && r.message) {
-							frm.set_query('priority', function() {
+							frm.set_query("priority", function () {
 								return {
 									filters: {
-										'name': ['in', r.message.priority],
-									}
+										name: ["in", r.message.priority],
+									},
 								};
 							});
-							frm.set_query('service_level_agreement', function() {
+							frm.set_query("service_level_agreement", function () {
 								return {
 									filters: {
-										'name': ['in', r.message.service_level_agreements],
-									}
+										name: ["in", r.message.service_level_agreements],
+									},
 								};
 							});
 						}
-					}
+					},
 				});
 			},
 
-			refresh: function(frm) {
-				if (frm.doc.status !== 'Closed' && frm.doc.service_level_agreement
-					&& ['First Response Due', 'Resolution Due'].includes(frm.doc.agreement_status)) {
+			refresh: function (frm) {
+				if (
+					frm.doc.status !== "Closed" &&
+					frm.doc.service_level_agreement &&
+					["First Response Due", "Resolution Due"].includes(frm.doc.agreement_status)
+				) {
 					frappe.call({
-						'method': 'frappe.client.get',
+						method: "frappe.client.get",
 						args: {
-							doctype: 'Service Level Agreement',
-							name: frm.doc.service_level_agreement
+							doctype: "Service Level Agreement",
+							name: frm.doc.service_level_agreement,
 						},
-						callback: function(data) {
+						callback: function (data) {
 							let statuses = data.message.pause_sla_on;
 							const hold_statuses = [];
 							$.each(statuses, (_i, entry) => {
@@ -1016,32 +1091,46 @@
 							});
 							if (hold_statuses.includes(frm.doc.status)) {
 								frm.dashboard.clear_headline();
-								let message = {'indicator': 'orange', 'msg': __('SLA is on hold since {0}', [moment(frm.doc.on_hold_since).fromNow(true)])};
+								let message = {
+									indicator: "orange",
+									msg: __("SLA is on hold since {0}", [
+										moment(frm.doc.on_hold_since).fromNow(true),
+									]),
+								};
 								frm.dashboard.set_headline_alert(
 									'<div class="row">' +
 										'<div class="col-xs-12">' +
-											'<span class="indicator whitespace-nowrap '+ message.indicator +'"><span>'+ message.msg +'</span></span> ' +
-										'</div>' +
-									'</div>'
+										'<span class="indicator whitespace-nowrap ' +
+										message.indicator +
+										'"><span>' +
+										message.msg +
+										"</span></span> " +
+										"</div>" +
+										"</div>"
 								);
 							} else {
 								set_time_to_resolve_and_response(frm, data.message.apply_sla_for_resolution);
 							}
-						}
+						},
 					});
 				} else if (frm.doc.service_level_agreement) {
 					frm.dashboard.clear_headline();
 
-					let agreement_status = (frm.doc.agreement_status == 'Fulfilled') ?
-						{'indicator': 'green', 'msg': 'Service Level Agreement has been fulfilled'} :
-						{'indicator': 'red', 'msg': 'Service Level Agreement Failed'};
+					let agreement_status =
+						frm.doc.agreement_status == "Fulfilled"
+							? { indicator: "green", msg: "Service Level Agreement has been fulfilled" }
+							: { indicator: "red", msg: "Service Level Agreement Failed" };
 
 					frm.dashboard.set_headline_alert(
 						'<div class="row">' +
 							'<div class="col-xs-12">' +
-								'<span class="indicator whitespace-nowrap '+ agreement_status.indicator +'"><span class="hidden-xs">'+ agreement_status.msg +'</span></span> ' +
-							'</div>' +
-						'</div>'
+							'<span class="indicator whitespace-nowrap ' +
+							agreement_status.indicator +
+							'"><span class="hidden-xs">' +
+							agreement_status.msg +
+							"</span></span> " +
+							"</div>" +
+							"</div>"
 					);
 				}
 			},
@@ -1067,7 +1156,6 @@
 				</span>
 			</div>`;
 
-
 	if (apply_sla_for_resolution) {
 		let time_to_resolve;
 		if (!frm.doc.resolution_date) {
@@ -1084,34 +1172,32 @@
 			</div>`;
 	}
 
-	alert += '</div>';
+	alert += "</div>";
 
 	frm.dashboard.set_headline_alert(alert);
 }
 
 function get_time_left(timestamp, agreement_status) {
 	const diff = moment(timestamp).diff(frappe.datetime.system_datetime(true));
-	const diff_display = diff >= 44500 ? moment.duration(diff).humanize() : 'Failed';
-	let indicator = (diff_display == 'Failed' && agreement_status != 'Fulfilled') ? 'red' : 'green';
-	return {'diff_display': diff_display, 'indicator': indicator};
+	const diff_display = diff >= 44500 ? moment.duration(diff).humanize() : "Failed";
+	let indicator = diff_display == "Failed" && agreement_status != "Fulfilled" ? "red" : "green";
+	return { diff_display: diff_display, indicator: indicator };
 }
 
 function get_status(expected, actual) {
 	const time_left = moment(expected).diff(moment(actual));
 	if (time_left >= 0) {
-		return {'diff_display': 'Fulfilled', 'indicator': 'green'};
+		return { diff_display: "Fulfilled", indicator: "green" };
 	} else {
-		return {'diff_display': 'Failed', 'indicator': 'red'};
+		return { diff_display: "Failed", indicator: "red" };
 	}
 }
 
 function attach_selector_button(inner_text, append_loction, context, grid_row) {
-	let $btn_div = $("<div>").css({"margin-bottom": "10px", "margin-top": "10px"})
-		.appendTo(append_loction);
-	let $btn = $(`<button class="btn btn-sm btn-default">${inner_text}</button>`)
-		.appendTo($btn_div);
+	let $btn_div = $("<div>").css({ "margin-bottom": "10px", "margin-top": "10px" }).appendTo(append_loction);
+	let $btn = $(`<button class="btn btn-sm btn-default">${inner_text}</button>`).appendTo($btn_div);
 
-	$btn.on("click", function() {
+	$btn.on("click", function () {
 		context.show_serial_batch_selector(grid_row.frm, grid_row.doc, "", "", true);
 	});
 }
diff --git a/erpnext/public/js/utils/barcode_scanner.js b/erpnext/public/js/utils/barcode_scanner.js
index 4d1c0c1..d6ef794 100644
--- a/erpnext/public/js/utils/barcode_scanner.js
+++ b/erpnext/public/js/utils/barcode_scanner.js
@@ -58,13 +58,15 @@
 					return;
 				}
 
-				me.update_table(data).then(row => {
-					this.play_success_sound();
-					resolve(row);
-				}).catch(() => {
-					this.play_fail_sound();
-					reject();
-				});
+				me.update_table(data)
+					.then((row) => {
+						this.play_success_sound();
+						resolve(row);
+					})
+					.catch(() => {
+						this.play_fail_sound();
+						reject();
+					});
 			});
 		});
 	}
@@ -87,7 +89,7 @@
 			let cur_grid = this.frm.fields_dict[this.items_table_name].grid;
 			frappe.flags.trigger_from_barcode_scanner = true;
 
-			const {item_code, barcode, batch_no, serial_no, uom} = data;
+			const { item_code, barcode, batch_no, serial_no, uom } = data;
 
 			let row = this.get_row_to_modify_on_scan(item_code, batch_no, uom, barcode);
 
@@ -116,16 +118,17 @@
 
 			frappe.run_serially([
 				() => this.set_selector_trigger_flag(data),
-				() => this.set_item(row, item_code, barcode, batch_no, serial_no).then(qty => {
-					this.show_scan_message(row.idx, row.item_code, qty);
-				}),
+				() =>
+					this.set_item(row, item_code, barcode, batch_no, serial_no).then((qty) => {
+						this.show_scan_message(row.idx, row.item_code, qty);
+					}),
 				() => this.set_barcode_uom(row, uom),
 				() => this.set_serial_no(row, serial_no),
 				() => this.set_batch_no(row, batch_no),
 				() => this.set_barcode(row, barcode),
 				() => this.clean_up(),
 				() => this.revert_selector_flag(),
-				() => resolve(row)
+				() => resolve(row),
 			]);
 		});
 	}
@@ -133,7 +136,7 @@
 	// batch and serial selector is reduandant when all info can be added by scan
 	// this flag on item row is used by transaction.js to avoid triggering selector
 	set_selector_trigger_flag(data) {
-		const {batch_no, serial_no, has_batch_no, has_serial_no} = data;
+		const { batch_no, serial_no, has_batch_no, has_serial_no } = data;
 
 		const require_selecting_batch = has_batch_no && !batch_no;
 		const require_selecting_serial = has_serial_no && !serial_no;
@@ -149,17 +152,17 @@
 	}
 
 	set_item(row, item_code, barcode, batch_no, serial_no) {
-		return new Promise(resolve => {
+		return new Promise((resolve) => {
 			const increment = async (value = 1) => {
-				const item_data = {item_code: item_code, use_serial_batch_fields: 1.0};
+				const item_data = { item_code: item_code, use_serial_batch_fields: 1.0 };
 				frappe.flags.trigger_from_barcode_scanner = true;
-				item_data[this.qty_field] = Number((row[this.qty_field] || 0)) + Number(value);
+				item_data[this.qty_field] = Number(row[this.qty_field] || 0) + Number(value);
 				await frappe.model.set_value(row.doctype, row.name, item_data);
 				return value;
 			};
 
 			if (this.prompt_qty) {
-				frappe.prompt(__("Please enter quantity for item {0}", [item_code]), ({value}) => {
+				frappe.prompt(__("Please enter quantity for item {0}", [item_code]), ({ value }) => {
 					increment(value).then((value) => resolve(value));
 				});
 			} else if (this.frm.has_items) {
@@ -175,14 +178,15 @@
 		this.dialog = new frappe.ui.Dialog({
 			title: __("Scan barcode for item {0}", [item_code]),
 			fields: me.get_fields_for_dialog(row, item_code, barcode, batch_no, serial_no),
-		})
+		});
 
 		this.dialog.set_primary_action(__("Update"), () => {
-			const item_data = {item_code: item_code};
+			const item_data = { item_code: item_code };
 			item_data[this.qty_field] = this.dialog.get_value("scanned_qty");
 			item_data["has_item_scanned"] = 1;
 
-			this.remaining_qty = flt(this.dialog.get_value("qty")) - flt(this.dialog.get_value("scanned_qty"));
+			this.remaining_qty =
+				flt(this.dialog.get_value("qty")) - flt(this.dialog.get_value("scanned_qty"));
 			frappe.model.set_value(row.doctype, row.name, item_data);
 
 			frappe.run_serially([
@@ -190,7 +194,7 @@
 				() => this.set_barcode(row, this.dialog.get_value("barcode")),
 				() => this.set_serial_no(row, this.dialog.get_value("serial_no")),
 				() => this.add_child_for_remaining_qty(row),
-				() => this.clean_up()
+				() => this.clean_up(),
 			]);
 
 			this.dialog.hide();
@@ -219,9 +223,9 @@
 							if (r.message) {
 								this.update_dialog_values(item_code, r);
 							}
-						})
+						});
 					}
-				}
+				},
 			},
 			{
 				fieldtype: "Section Break",
@@ -245,8 +249,8 @@
 			},
 			{
 				fieldtype: "Section Break",
-			}
-		]
+			},
+		];
 
 		if (batch_no) {
 			fields.push({
@@ -256,7 +260,7 @@
 				label: __("Batch No"),
 				default: batch_no,
 				read_only: 1,
-				hidden: 1
+				hidden: 1,
 			});
 		}
 
@@ -278,7 +282,7 @@
 				label: __("Barcode"),
 				default: barcode,
 				read_only: 1,
-				hidden: 1
+				hidden: 1,
 			});
 		}
 
@@ -286,18 +290,18 @@
 	}
 
 	update_dialog_values(scanned_item, r) {
-		const {item_code, barcode, batch_no, serial_no} = r.message;
+		const { item_code, barcode, batch_no, serial_no } = r.message;
 
 		this.dialog.set_value("barcode_scanner", "");
-		if (item_code === scanned_item &&
-			(this.dialog.get_value("barcode") === barcode || batch_no || serial_no)) {
-
+		if (
+			item_code === scanned_item &&
+			(this.dialog.get_value("barcode") === barcode || batch_no || serial_no)
+		) {
 			if (batch_no) {
 				this.dialog.set_value("batch_no", batch_no);
 			}
 
 			if (serial_no) {
-
 				this.validate_duplicate_serial_no(serial_no);
 				let serial_nos = this.dialog.get_value("serial_no") + "\n" + serial_no;
 				this.dialog.set_value("serial_no", serial_nos);
@@ -309,8 +313,9 @@
 	}
 
 	validate_duplicate_serial_no(serial_no) {
-		let serial_nos = this.dialog.get_value("serial_no") ?
-			this.dialog.get_value("serial_no").split("\n") : [];
+		let serial_nos = this.dialog.get_value("serial_no")
+			? this.dialog.get_value("serial_no").split("\n")
+			: [];
 
 		if (in_list(serial_nos, serial_no)) {
 			frappe.throw(__("Serial No {0} already scanned", [serial_no]));
@@ -318,12 +323,19 @@
 	}
 
 	add_child_for_remaining_qty(prev_row) {
-		if (this.remaining_qty && this.remaining_qty >0) {
+		if (this.remaining_qty && this.remaining_qty > 0) {
 			let cur_grid = this.frm.fields_dict[this.items_table_name].grid;
 			let row = frappe.model.add_child(this.frm.doc, cur_grid.doctype, this.items_table_name);
 
-			let ignore_fields = ["name", "idx", "batch_no", "barcode",
-				"received_qty", "serial_no", "has_item_scanned"];
+			let ignore_fields = [
+				"name",
+				"idx",
+				"batch_no",
+				"barcode",
+				"received_qty",
+				"serial_no",
+				"has_item_scanned",
+			];
 
 			for (let key in prev_row) {
 				if (in_list(ignore_fields, key)) {
@@ -379,7 +391,7 @@
 		if (exist) {
 			this.show_alert(__("Row #{0}: Qty increased by {1}", [idx, qty]), "green");
 		} else {
-			this.show_alert(__("Row #{0}: Item added", [idx]), "green")
+			this.show_alert(__("Row #{0}: Item added", [idx]), "green");
 		}
 	}
 
@@ -401,17 +413,19 @@
 
 		const matching_row = (row) => {
 			const item_match = row.item_code == item_code;
-			const batch_match = (!row[this.batch_no_field] || row[this.batch_no_field] == batch_no);
+			const batch_match = !row[this.batch_no_field] || row[this.batch_no_field] == batch_no;
 			const uom_match = !uom || row[this.uom_field] == uom;
 			const qty_in_limit = flt(row[this.qty_field]) < flt(row[this.max_qty_field]);
 			const item_scanned = row.has_item_scanned;
 
-			return item_match
-				&& uom_match
-				&& !item_scanned
-				&& (!is_batch_no_scan || batch_match)
-				&& (!check_max_qty || qty_in_limit)
-		}
+			return (
+				item_match &&
+				uom_match &&
+				!item_scanned &&
+				(!is_batch_no_scan || batch_match) &&
+				(!check_max_qty || qty_in_limit)
+			);
+		};
 
 		return this.items_table.find(matching_row) || this.get_existing_blank_row();
 	}
@@ -432,7 +446,7 @@
 		this.scan_barcode_field.set_value("");
 		refresh_field(this.items_table_name);
 	}
-	show_alert(msg, indicator, duration=3) {
-		frappe.show_alert({message: msg, indicator: indicator}, duration);
+	show_alert(msg, indicator, duration = 3) {
+		frappe.show_alert({ message: msg, indicator: indicator }, duration);
 	}
-};
\ No newline at end of file
+};
diff --git a/erpnext/public/js/utils/contact_address_quick_entry.js b/erpnext/public/js/utils/contact_address_quick_entry.js
index adabf08..2f61dee 100644
--- a/erpnext/public/js/utils/contact_address_quick_entry.js
+++ b/erpnext/public/js/utils/contact_address_quick_entry.js
@@ -1,6 +1,8 @@
-frappe.provide('frappe.ui.form');
+frappe.provide("frappe.ui.form");
 
-frappe.ui.form.ContactAddressQuickEntryForm = class ContactAddressQuickEntryForm extends frappe.ui.form.QuickEntryForm {
+frappe.ui.form.ContactAddressQuickEntryForm = class ContactAddressQuickEntryForm extends (
+	frappe.ui.form.QuickEntryForm
+) {
 	constructor(doctype, after_insert, init_callback, doc, force) {
 		super(doctype, after_insert, init_callback, doc, force);
 		this.skip_redirect_on_error = true;
@@ -17,8 +19,8 @@
 		 * Therefor, resulting in the fields being "hidden".
 		 */
 		const map_field_names = {
-			"email_address": "email_id",
-			"mobile_number": "mobile_no",
+			email_address: "email_id",
+			mobile_number: "mobile_no",
 		};
 
 		Object.entries(map_field_names).forEach(([fieldname, new_fieldname]) => {
@@ -30,71 +32,73 @@
 	}
 
 	get_variant_fields() {
-		var variant_fields = [{
-			fieldtype: "Section Break",
-			label: __("Primary Contact Details"),
-			collapsible: 1
-		},
-		{
-			label: __("Email Id"),
-			fieldname: "email_address",
-			fieldtype: "Data",
-			options: "Email",
-		},
-		{
-			fieldtype: "Column Break"
-		},
-		{
-			label: __("Mobile Number"),
-			fieldname: "mobile_number",
-			fieldtype: "Data"
-		},
-		{
-			fieldtype: "Section Break",
-			label: __("Primary Address Details"),
-			collapsible: 1
-		},
-		{
-			label: __("Address Line 1"),
-			fieldname: "address_line1",
-			fieldtype: "Data"
-		},
-		{
-			label: __("Address Line 2"),
-			fieldname: "address_line2",
-			fieldtype: "Data"
-		},
-		{
-			label: __("ZIP Code"),
-			fieldname: "pincode",
-			fieldtype: "Data"
-		},
-		{
-			fieldtype: "Column Break"
-		},
-		{
-			label: __("City"),
-			fieldname: "city",
-			fieldtype: "Data"
-		},
-		{
-			label: __("State"),
-			fieldname: "state",
-			fieldtype: "Data"
-		},
-		{
-			label: __("Country"),
-			fieldname: "country",
-			fieldtype: "Link",
-			options: "Country"
-		},
-		{
-			label: __("Customer POS Id"),
-			fieldname: "customer_pos_id",
-			fieldtype: "Data",
-			hidden: 1
-		}];
+		var variant_fields = [
+			{
+				fieldtype: "Section Break",
+				label: __("Primary Contact Details"),
+				collapsible: 1,
+			},
+			{
+				label: __("Email Id"),
+				fieldname: "email_address",
+				fieldtype: "Data",
+				options: "Email",
+			},
+			{
+				fieldtype: "Column Break",
+			},
+			{
+				label: __("Mobile Number"),
+				fieldname: "mobile_number",
+				fieldtype: "Data",
+			},
+			{
+				fieldtype: "Section Break",
+				label: __("Primary Address Details"),
+				collapsible: 1,
+			},
+			{
+				label: __("Address Line 1"),
+				fieldname: "address_line1",
+				fieldtype: "Data",
+			},
+			{
+				label: __("Address Line 2"),
+				fieldname: "address_line2",
+				fieldtype: "Data",
+			},
+			{
+				label: __("ZIP Code"),
+				fieldname: "pincode",
+				fieldtype: "Data",
+			},
+			{
+				fieldtype: "Column Break",
+			},
+			{
+				label: __("City"),
+				fieldname: "city",
+				fieldtype: "Data",
+			},
+			{
+				label: __("State"),
+				fieldname: "state",
+				fieldtype: "Data",
+			},
+			{
+				label: __("Country"),
+				fieldname: "country",
+				fieldtype: "Link",
+				options: "Country",
+			},
+			{
+				label: __("Customer POS Id"),
+				fieldname: "customer_pos_id",
+				fieldtype: "Data",
+				hidden: 1,
+			},
+		];
 
 		return variant_fields;
 	}
-}
+};
diff --git a/erpnext/public/js/utils/crm_activities.js b/erpnext/public/js/utils/crm_activities.js
index ec79a10..a5a2254 100644
--- a/erpnext/public/js/utils/crm_activities.js
+++ b/erpnext/public/js/utils/crm_activities.js
@@ -6,21 +6,21 @@
 	refresh() {
 		var me = this;
 		$(this.open_activities_wrapper).empty();
-		let cur_form_footer = this.form_wrapper.find('.form-footer');
+		let cur_form_footer = this.form_wrapper.find(".form-footer");
 
 		// all activities
-		if (!$(this.all_activities_wrapper).find('.form-footer').length) {
+		if (!$(this.all_activities_wrapper).find(".form-footer").length) {
 			this.all_activities_wrapper.empty();
 			$(cur_form_footer).appendTo(this.all_activities_wrapper);
 
 			// remove frappe-control class to avoid absolute position for action-btn
-			$(this.all_activities_wrapper).removeClass('frappe-control');
+			$(this.all_activities_wrapper).removeClass("frappe-control");
 			// hide new event button
-			$('.timeline-actions').find('.btn-default').hide();
+			$(".timeline-actions").find(".btn-default").hide();
 			// hide new comment box
 			$(".comment-box").hide();
 			// show only communications by default
-			$($('.timeline-content').find('.nav-link')[0]).tab('show');
+			$($(".timeline-content").find(".nav-link")[0]).tab("show");
 		}
 
 		// open activities
@@ -28,66 +28,70 @@
 			method: "erpnext.crm.utils.get_open_activities",
 			args: {
 				ref_doctype: this.frm.doc.doctype,
-				ref_docname: this.frm.doc.name
+				ref_docname: this.frm.doc.name,
 			},
 			callback: (r) => {
 				if (!r.exc) {
-					var activities_html = frappe.render_template('crm_activities', {
+					var activities_html = frappe.render_template("crm_activities", {
 						tasks: r.message.tasks,
-						events: r.message.events
+						events: r.message.events,
 					});
 
 					$(activities_html).appendTo(me.open_activities_wrapper);
 
-					$(".open-tasks").find(".completion-checkbox").on("click", function() {
-						me.update_status(this, "ToDo");
-					});
+					$(".open-tasks")
+						.find(".completion-checkbox")
+						.on("click", function () {
+							me.update_status(this, "ToDo");
+						});
 
-					$(".open-events").find(".completion-checkbox").on("click", function() {
-						me.update_status(this, "Event");
-					});
+					$(".open-events")
+						.find(".completion-checkbox")
+						.on("click", function () {
+							me.update_status(this, "Event");
+						});
 
 					me.create_task();
 					me.create_event();
 				}
-			}
+			},
 		});
 	}
 
-	create_task () {
+	create_task() {
 		let me = this;
 		let _create_task = () => {
 			const args = {
 				doc: me.frm.doc,
 				frm: me.frm,
-				title: __("New Task")
+				title: __("New Task"),
 			};
 			let composer = new frappe.views.InteractionComposer(args);
-			composer.dialog.get_field('interaction_type').set_value("ToDo");
+			composer.dialog.get_field("interaction_type").set_value("ToDo");
 			// hide column having interaction type field
-			$(composer.dialog.get_field('interaction_type').wrapper).closest('.form-column').hide();
+			$(composer.dialog.get_field("interaction_type").wrapper).closest(".form-column").hide();
 			// hide summary field
-			$(composer.dialog.get_field('summary').wrapper).closest('.form-section').hide();
+			$(composer.dialog.get_field("summary").wrapper).closest(".form-section").hide();
 		};
 		$(".new-task-btn").click(_create_task);
 	}
 
-	create_event () {
+	create_event() {
 		let me = this;
 		let _create_event = () => {
 			const args = {
 				doc: me.frm.doc,
 				frm: me.frm,
-				title: __("New Event")
+				title: __("New Event"),
 			};
 			let composer = new frappe.views.InteractionComposer(args);
-			composer.dialog.get_field('interaction_type').set_value("Event");
-			$(composer.dialog.get_field('interaction_type').wrapper).hide();
+			composer.dialog.get_field("interaction_type").set_value("Event");
+			$(composer.dialog.get_field("interaction_type").wrapper).hide();
 		};
 		$(".new-event-btn").click(_create_event);
 	}
 
-	async update_status (input_field, doctype) {
+	async update_status(input_field, doctype) {
 		let completed = $(input_field).prop("checked") ? 1 : 0;
 		let docname = $(input_field).attr("name");
 		if (completed) {
@@ -104,132 +108,129 @@
 
 	refresh() {
 		var me = this;
-		this.notes_wrapper.find('.notes-section').remove();
+		this.notes_wrapper.find(".notes-section").remove();
 
 		let notes = this.frm.doc.notes || [];
-		notes.sort(
-			function(a, b) {
-				return new Date(b.added_on) - new Date(a.added_on);
-			}
-		);
+		notes.sort(function (a, b) {
+			return new Date(b.added_on) - new Date(a.added_on);
+		});
 
-		let notes_html = frappe.render_template(
-			'crm_notes',
-			{
-				notes: notes
-			}
-		);
+		let notes_html = frappe.render_template("crm_notes", {
+			notes: notes,
+		});
 		$(notes_html).appendTo(this.notes_wrapper);
 
 		this.add_note();
 
-		$(".notes-section").find(".edit-note-btn").on("click", function() {
-			me.edit_note(this);
-		});
+		$(".notes-section")
+			.find(".edit-note-btn")
+			.on("click", function () {
+				me.edit_note(this);
+			});
 
-		$(".notes-section").find(".delete-note-btn").on("click", function() {
-			me.delete_note(this);
-		});
+		$(".notes-section")
+			.find(".delete-note-btn")
+			.on("click", function () {
+				me.delete_note(this);
+			});
 	}
 
-
-	add_note () {
+	add_note() {
 		let me = this;
 		let _add_note = () => {
 			var d = new frappe.ui.Dialog({
-				title: __('Add a Note'),
+				title: __("Add a Note"),
 				fields: [
 					{
-						"label": "Note",
-						"fieldname": "note",
-						"fieldtype": "Text Editor",
-						"reqd": 1,
-						"enable_mentions": true,
-					}
+						label: "Note",
+						fieldname: "note",
+						fieldtype: "Text Editor",
+						reqd: 1,
+						enable_mentions: true,
+					},
 				],
-				primary_action: function() {
+				primary_action: function () {
 					var data = d.get_values();
 					frappe.call({
 						method: "add_note",
 						doc: me.frm.doc,
 						args: {
-							note: data.note
+							note: data.note,
 						},
 						freeze: true,
-						callback: function(r) {
+						callback: function (r) {
 							if (!r.exc) {
 								me.frm.refresh_field("notes");
 								me.refresh();
 							}
 							d.hide();
-						}
+						},
 					});
 				},
-				primary_action_label: __('Add')
+				primary_action_label: __("Add"),
 			});
 			d.show();
 		};
 		$(".new-note-btn").click(_add_note);
 	}
 
-	edit_note (edit_btn) {
+	edit_note(edit_btn) {
 		var me = this;
-		let row = $(edit_btn).closest('.comment-content');
+		let row = $(edit_btn).closest(".comment-content");
 		let row_id = row.attr("name");
 		let row_content = $(row).find(".content").html();
 		if (row_content) {
 			var d = new frappe.ui.Dialog({
-				title: __('Edit Note'),
+				title: __("Edit Note"),
 				fields: [
 					{
-						"label": "Note",
-						"fieldname": "note",
-						"fieldtype": "Text Editor",
-						"default": row_content
-					}
+						label: "Note",
+						fieldname: "note",
+						fieldtype: "Text Editor",
+						default: row_content,
+					},
 				],
-				primary_action: function() {
+				primary_action: function () {
 					var data = d.get_values();
 					frappe.call({
 						method: "edit_note",
 						doc: me.frm.doc,
 						args: {
 							note: data.note,
-							row_id: row_id
+							row_id: row_id,
 						},
 						freeze: true,
-						callback: function(r) {
+						callback: function (r) {
 							if (!r.exc) {
 								me.frm.refresh_field("notes");
 								me.refresh();
 								d.hide();
 							}
-
-						}
+						},
 					});
 				},
-				primary_action_label: __('Done')
+				primary_action_label: __("Done"),
 			});
 			d.show();
 		}
 	}
 
-	delete_note (delete_btn) {
+	delete_note(delete_btn) {
 		var me = this;
-		let row_id = $(delete_btn).closest('.comment-content').attr("name");
+		let row_id = $(delete_btn).closest(".comment-content").attr("name");
 		frappe.call({
 			method: "delete_note",
 			doc: me.frm.doc,
 			args: {
-				row_id: row_id
+				row_id: row_id,
 			},
 			freeze: true,
-			callback: function(r) {
+			callback: function (r) {
 				if (!r.exc) {
 					me.frm.refresh_field("notes");
 					me.refresh();
 				}
-			}
+			},
 		});
 	}
 };
diff --git a/erpnext/public/js/utils/customer_quick_entry.js b/erpnext/public/js/utils/customer_quick_entry.js
index b253208..e9b77a3 100644
--- a/erpnext/public/js/utils/customer_quick_entry.js
+++ b/erpnext/public/js/utils/customer_quick_entry.js
@@ -1,3 +1,3 @@
-frappe.provide('frappe.ui.form');
+frappe.provide("frappe.ui.form");
 
 frappe.ui.form.CustomerQuickEntryForm = frappe.ui.form.ContactAddressQuickEntryForm;
diff --git a/erpnext/public/js/utils/dimension_tree_filter.js b/erpnext/public/js/utils/dimension_tree_filter.js
index 27d00ba..36c0f1b 100644
--- a/erpnext/public/js/utils/dimension_tree_filter.js
+++ b/erpnext/public/js/utils/dimension_tree_filter.js
@@ -1,4 +1,4 @@
-frappe.provide('erpnext.accounts');
+frappe.provide("erpnext.accounts");
 
 erpnext.accounts.dimensions = {
 	setup_dimension_filters(frm, doctype) {
@@ -12,36 +12,38 @@
 		frappe.call({
 			method: "erpnext.accounts.doctype.accounting_dimension.accounting_dimension.get_dimensions",
 			args: {
-				'with_cost_center_and_project': true
+				with_cost_center_and_project: true,
 			},
-			callback: function(r) {
+			callback: function (r) {
 				me.accounting_dimensions = r.message[0];
 				// Ignoring "Project" as it is already handled specifically in Sales Order and Delivery Note
-				me.accounting_dimensions = me.accounting_dimensions.filter(x=>{return x.document_type != "Project"});
+				me.accounting_dimensions = me.accounting_dimensions.filter((x) => {
+					return x.document_type != "Project";
+				});
 				me.default_dimensions = r.message[1];
 				me.setup_filters(frm, doctype);
-			}
+			},
 		});
 	},
 
 	setup_filters(frm, doctype) {
-		if (doctype == 'Payment Entry' && this.accounting_dimensions) {
-			frm.dimension_filters = this.accounting_dimensions
+		if (doctype == "Payment Entry" && this.accounting_dimensions) {
+			frm.dimension_filters = this.accounting_dimensions;
 		}
 
 		if (this.accounting_dimensions) {
 			this.accounting_dimensions.forEach((dimension) => {
-				frappe.model.with_doctype(dimension['document_type'], () => {
+				frappe.model.with_doctype(dimension["document_type"], () => {
 					let parent_fields = [];
 					frappe.meta.get_docfields(doctype).forEach((df) => {
-						if (df.fieldtype === 'Link' && df.options === 'Account') {
+						if (df.fieldtype === "Link" && df.options === "Account") {
 							parent_fields.push(df.fieldname);
-						} else if (df.fieldtype === 'Table') {
-							this.setup_child_filters(frm, df.options, df.fieldname, dimension['fieldname']);
+						} else if (df.fieldtype === "Table") {
+							this.setup_child_filters(frm, df.options, df.fieldname, dimension["fieldname"]);
 						}
 
-						if (frappe.meta.has_field(doctype, dimension['fieldname'])) {
-							this.setup_account_filters(frm, dimension['fieldname'], parent_fields);
+						if (frappe.meta.has_field(doctype, dimension["fieldname"])) {
+							this.setup_account_filters(frm, dimension["fieldname"], parent_fields);
 						}
 					});
 				});
@@ -55,12 +57,12 @@
 		if (frappe.meta.has_field(doctype, dimension)) {
 			frappe.model.with_doctype(doctype, () => {
 				frappe.meta.get_docfields(doctype).forEach((df) => {
-					if (df.fieldtype === 'Link' && df.options === 'Account') {
+					if (df.fieldtype === "Link" && df.options === "Account") {
 						fields.push(df.fieldname);
 					}
 				});
 
-				frm.set_query(dimension, parentfield, function(doc, cdt, cdn) {
+				frm.set_query(dimension, parentfield, function (doc, cdt, cdn) {
 					let row = locals[cdt][cdn];
 					return erpnext.queries.get_filtered_dimensions(row, fields, dimension, doc.company);
 				});
@@ -69,7 +71,7 @@
 	},
 
 	setup_account_filters(frm, dimension, fields) {
-		frm.set_query(dimension, function(doc) {
+		frm.set_query(dimension, function (doc) {
 			return erpnext.queries.get_filtered_dimensions(doc, fields, dimension, doc.company);
 		});
 	},
@@ -78,18 +80,26 @@
 		if (this.accounting_dimensions) {
 			this.accounting_dimensions.forEach((dimension) => {
 				if (frm.is_new()) {
-					if (frm.doc.company && Object.keys(this.default_dimensions || {}).length > 0
-						&& this.default_dimensions[frm.doc.company]) {
-
-						let default_dimension = this.default_dimensions[frm.doc.company][dimension['fieldname']];
+					if (
+						frm.doc.company &&
+						Object.keys(this.default_dimensions || {}).length > 0 &&
+						this.default_dimensions[frm.doc.company]
+					) {
+						let default_dimension =
+							this.default_dimensions[frm.doc.company][dimension["fieldname"]];
 
 						if (default_dimension) {
-							if (frappe.meta.has_field(doctype, dimension['fieldname'])) {
-								frm.set_value(dimension['fieldname'], default_dimension);
+							if (frappe.meta.has_field(doctype, dimension["fieldname"])) {
+								frm.set_value(dimension["fieldname"], default_dimension);
 							}
 
-							$.each(frm.doc.items || frm.doc.accounts || [], function(i, row) {
-								frappe.model.set_value(row.doctype, row.name, dimension['fieldname'], default_dimension);
+							$.each(frm.doc.items || frm.doc.accounts || [], function (i, row) {
+								frappe.model.set_value(
+									row.doctype,
+									row.name,
+									dimension["fieldname"],
+									default_dimension
+								);
 							});
 						}
 					}
@@ -102,8 +112,8 @@
 		if (frappe.meta.has_field(frm.doctype, fieldname) && this.accounting_dimensions) {
 			this.accounting_dimensions.forEach((dimension) => {
 				let row = frappe.get_doc(cdt, cdn);
-				frm.script_manager.copy_from_first_row(fieldname, row, [dimension['fieldname']]);
+				frm.script_manager.copy_from_first_row(fieldname, row, [dimension["fieldname"]]);
 			});
 		}
-	}
+	},
 };
diff --git a/erpnext/public/js/utils/item_selector.js b/erpnext/public/js/utils/item_selector.js
index e74d291..d8a4ef4 100644
--- a/erpnext/public/js/utils/item_selector.js
+++ b/erpnext/public/js/utils/item_selector.js
@@ -3,7 +3,7 @@
 		$.extend(this, opts);
 
 		if (!this.item_field) {
-			this.item_field = 'item_code';
+			this.item_field = "item_code";
 		}
 
 		if (!this.item_query) {
@@ -16,39 +16,43 @@
 
 	setup() {
 		var me = this;
-		if(!this.grid.add_items_button) {
-			this.grid.add_items_button = this.grid.add_custom_button(__('Add Items'), function() {
-				if(!me.dialog) {
+		if (!this.grid.add_items_button) {
+			this.grid.add_items_button = this.grid.add_custom_button(__("Add Items"), function () {
+				if (!me.dialog) {
 					me.make_dialog();
 				}
 				me.dialog.show();
 				me.render_items();
-				setTimeout(function() { me.dialog.input.focus(); }, 1000);
+				setTimeout(function () {
+					me.dialog.input.focus();
+				}, 1000);
 			});
 		}
 	}
 
 	make_dialog() {
 		this.dialog = new frappe.ui.Dialog({
-			title: __('Add Items')
+			title: __("Add Items"),
 		});
 		var body = $(this.dialog.body);
-		body.html('<div><p><input type="text" class="form-control"></p>\
-			<br><div class="results"></div></div>');
+		body.html(
+			'<div><p><input type="text" class="form-control"></p>\
+			<br><div class="results"></div></div>'
+		);
 
-		this.dialog.input = body.find('.form-control');
-		this.dialog.results = body.find('.results');
+		this.dialog.input = body.find(".form-control");
+		this.dialog.results = body.find(".results");
 
 		var me = this;
-		this.dialog.results.on('click', '.image-view-item', function() {
-			me.add_item($(this).attr('data-name'));
+		this.dialog.results.on("click", ".image-view-item", function () {
+			me.add_item($(this).attr("data-name"));
 		});
 
-		this.dialog.input.on('keyup', function() {
-			if(me.timeout_id) {
+		this.dialog.input.on("keyup", function () {
+			if (me.timeout_id) {
 				clearTimeout(me.timeout_id);
 			}
-			me.timeout_id = setTimeout(function() {
+			me.timeout_id = setTimeout(function () {
 				me.render_items();
 				me.timeout_id = undefined;
 			}, 500);
@@ -61,33 +65,34 @@
 
 		// find row with item if exists
 		$.each(this.frm.doc.items || [], (i, d) => {
-			if(d[this.item_field]===item_code) {
-				frappe.model.set_value(d.doctype, d.name, 'qty', d.qty + 1);
-				frappe.show_alert({message: __("Added {0} ({1})", [item_code, d.qty]), indicator: 'green'});
+			if (d[this.item_field] === item_code) {
+				frappe.model.set_value(d.doctype, d.name, "qty", d.qty + 1);
+				frappe.show_alert({ message: __("Added {0} ({1})", [item_code, d.qty]), indicator: "green" });
 				added = true;
 				return false;
 			}
 		});
 
-		if(!added) {
+		if (!added) {
 			var d = null;
 			frappe.run_serially([
-				() => { d = this.grid.add_new_row(); },
+				() => {
+					d = this.grid.add_new_row();
+				},
 				() => frappe.model.set_value(d.doctype, d.name, this.item_field, item_code),
 				() => frappe.timeout(0.1),
 				() => {
-					frappe.model.set_value(d.doctype, d.name, 'qty', 1);
-					frappe.show_alert({message: __("Added {0} ({1})", [item_code, 1]), indicator: 'green'});
-				}
+					frappe.model.set_value(d.doctype, d.name, "qty", 1);
+					frappe.show_alert({ message: __("Added {0} ({1})", [item_code, 1]), indicator: "green" });
+				},
 			]);
 		}
-
 	}
 
 	render_items() {
 		let args = {
 			query: this.item_query,
-			filters: {}
+			filters: {},
 		};
 		args.txt = this.dialog.input.val();
 		args.as_dict = 1;
@@ -97,14 +102,14 @@
 		}
 
 		var me = this;
-		frappe.link_search("Item", args, function(results) {
-			$.each(results, function(i, d) {
-				if(!d.image) {
+		frappe.link_search("Item", args, function (results) {
+			$.each(results, function (i, d) {
+				if (!d.image) {
 					d.abbr = frappe.get_abbr(d.item_name);
 					d.color = frappe.get_palette(d.item_name);
 				}
 			});
-			me.dialog.results.html(frappe.render_template('item_selector', {'data': results}));
+			me.dialog.results.html(frappe.render_template("item_selector", { data: results }));
 		});
 	}
 };
diff --git a/erpnext/public/js/utils/landed_taxes_and_charges_common.js b/erpnext/public/js/utils/landed_taxes_and_charges_common.js
index c71f77d..2cb3016 100644
--- a/erpnext/public/js/utils/landed_taxes_and_charges_common.js
+++ b/erpnext/public/js/utils/landed_taxes_and_charges_common.js
@@ -1,62 +1,74 @@
-
 erpnext.landed_cost_taxes_and_charges = {
-	setup_triggers: function(doctype) {
+	setup_triggers: function (doctype) {
 		frappe.ui.form.on(doctype, {
-			refresh: function(frm) {
-				let tax_field = frm.doc.doctype == 'Landed Cost Voucher' ? 'taxes' : 'additional_costs';
-				frm.set_query("expense_account", tax_field, function() {
+			refresh: function (frm) {
+				let tax_field = frm.doc.doctype == "Landed Cost Voucher" ? "taxes" : "additional_costs";
+				frm.set_query("expense_account", tax_field, function () {
 					return {
 						filters: {
-							"account_type": ['in', ["Tax", "Chargeable", "Income Account", "Expenses Included In Valuation", "Expenses Included In Asset Valuation"]],
-							"company": frm.doc.company
-						}
+							account_type: [
+								"in",
+								[
+									"Tax",
+									"Chargeable",
+									"Income Account",
+									"Expenses Included In Valuation",
+									"Expenses Included In Asset Valuation",
+								],
+							],
+							company: frm.doc.company,
+						},
 					};
 				});
 			},
 
-			set_account_currency: function(frm, cdt, cdn) {
+			set_account_currency: function (frm, cdt, cdn) {
 				let row = locals[cdt][cdn];
 				if (row.expense_account) {
-					frappe.db.get_value('Account', row.expense_account, 'account_currency', function(value) {
+					frappe.db.get_value("Account", row.expense_account, "account_currency", function (value) {
 						frappe.model.set_value(cdt, cdn, "account_currency", value.account_currency);
 						frm.events.set_exchange_rate(frm, cdt, cdn);
 					});
 				}
 			},
 
-			set_exchange_rate: function(frm, cdt, cdn) {
+			set_exchange_rate: function (frm, cdt, cdn) {
 				let row = locals[cdt][cdn];
 				let company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
 
 				if (row.account_currency == company_currency) {
 					row.exchange_rate = 1;
-					frm.set_df_property('taxes', 'hidden', 1, row.name, 'exchange_rate');
+					frm.set_df_property("taxes", "hidden", 1, row.name, "exchange_rate");
 				} else if (!row.exchange_rate || row.exchange_rate == 1) {
-					frm.set_df_property('taxes', 'hidden', 0, row.name, 'exchange_rate');
+					frm.set_df_property("taxes", "hidden", 0, row.name, "exchange_rate");
 					frappe.call({
 						method: "erpnext.accounts.doctype.journal_entry.journal_entry.get_exchange_rate",
 						args: {
 							posting_date: frm.doc.posting_date,
 							account: row.expense_account,
 							account_currency: row.account_currency,
-							company: frm.doc.company
+							company: frm.doc.company,
 						},
-						callback: function(r) {
+						callback: function (r) {
 							if (r.message) {
 								frappe.model.set_value(cdt, cdn, "exchange_rate", r.message);
 							}
-						}
+						},
 					});
 				}
 
-				frm.refresh_field('taxes');
+				frm.refresh_field("taxes");
 			},
 
-			set_base_amount: function(frm, cdt, cdn) {
+			set_base_amount: function (frm, cdt, cdn) {
 				let row = locals[cdt][cdn];
-				frappe.model.set_value(cdt, cdn, "base_amount",
-					flt(flt(row.amount)*row.exchange_rate, precision("base_amount", row)));
-			}
+				frappe.model.set_value(
+					cdt,
+					cdn,
+					"base_amount",
+					flt(flt(row.amount) * row.exchange_rate, precision("base_amount", row))
+				);
+			},
 		});
-	}
-}
+	},
+};
diff --git a/erpnext/public/js/utils/ledger_preview.js b/erpnext/public/js/utils/ledger_preview.js
index 85d4a7d..6a610dd 100644
--- a/erpnext/public/js/utils/ledger_preview.js
+++ b/erpnext/public/js/utils/ledger_preview.js
@@ -1,60 +1,78 @@
-frappe.provide('erpnext.accounts');
+frappe.provide("erpnext.accounts");
 
 erpnext.accounts.ledger_preview = {
 	show_accounting_ledger_preview(frm) {
 		let me = this;
-		if(!frm.is_new() && frm.doc.docstatus == 0) {
-			frm.add_custom_button(__('Accounting Ledger'), function() {
-				frappe.call({
-					"type": "GET",
-					"method": "erpnext.controllers.stock_controller.show_accounting_ledger_preview",
-					"args": {
-						"company": frm.doc.company,
-						"doctype": frm.doc.doctype,
-						"docname": frm.doc.name
-					},
-					"callback": function(response) {
-						me.make_dialog("Accounting Ledger Preview", "accounting_ledger_preview_html", response.message.gl_columns, response.message.gl_data);
-					}
-				})
-			}, __("Preview"));
+		if (!frm.is_new() && frm.doc.docstatus == 0) {
+			frm.add_custom_button(
+				__("Accounting Ledger"),
+				function () {
+					frappe.call({
+						type: "GET",
+						method: "erpnext.controllers.stock_controller.show_accounting_ledger_preview",
+						args: {
+							company: frm.doc.company,
+							doctype: frm.doc.doctype,
+							docname: frm.doc.name,
+						},
+						callback: function (response) {
+							me.make_dialog(
+								"Accounting Ledger Preview",
+								"accounting_ledger_preview_html",
+								response.message.gl_columns,
+								response.message.gl_data
+							);
+						},
+					});
+				},
+				__("Preview")
+			);
 		}
 	},
 
 	show_stock_ledger_preview(frm) {
-		let me = this
-		if(!frm.is_new() && frm.doc.docstatus == 0) {
-			frm.add_custom_button(__('Stock Ledger'), function() {
-				frappe.call({
-					"type": "GET",
-					"method": "erpnext.controllers.stock_controller.show_stock_ledger_preview",
-					"args": {
-						"company": frm.doc.company,
-						"doctype": frm.doc.doctype,
-						"docname": frm.doc.name
-					},
-					"callback": function(response) {
-						me.make_dialog("Stock Ledger Preview", "stock_ledger_preview_html", response.message.sl_columns, response.message.sl_data);
-					}
-				})
-			}, __("Preview"));
+		let me = this;
+		if (!frm.is_new() && frm.doc.docstatus == 0) {
+			frm.add_custom_button(
+				__("Stock Ledger"),
+				function () {
+					frappe.call({
+						type: "GET",
+						method: "erpnext.controllers.stock_controller.show_stock_ledger_preview",
+						args: {
+							company: frm.doc.company,
+							doctype: frm.doc.doctype,
+							docname: frm.doc.name,
+						},
+						callback: function (response) {
+							me.make_dialog(
+								"Stock Ledger Preview",
+								"stock_ledger_preview_html",
+								response.message.sl_columns,
+								response.message.sl_data
+							);
+						},
+					});
+				},
+				__("Preview")
+			);
 		}
 	},
 
 	make_dialog(label, fieldname, columns, data) {
 		let me = this;
 		let dialog = new frappe.ui.Dialog({
-			"size": "extra-large",
-			"title": __(label),
-			"fields": [
+			size: "extra-large",
+			title: __(label),
+			fields: [
 				{
-					"fieldtype": "HTML",
-					"fieldname": fieldname,
+					fieldtype: "HTML",
+					fieldname: fieldname,
 				},
-			]
+			],
 		});
 
-		setTimeout(function() {
+		setTimeout(function () {
 			me.get_datatable(columns, data, dialog.get_field(fieldname).wrapper);
 		}, 200);
 
@@ -70,9 +88,6 @@
 			inlineFilters: true,
 		};
 
-		new frappe.DataTable(
-			wrapper,
-			datatable_options
-		);
-	}
-}
\ No newline at end of file
+		new frappe.DataTable(wrapper, datatable_options);
+	},
+};
diff --git a/erpnext/public/js/utils/party.js b/erpnext/public/js/utils/party.js
index cba615c..801376b 100644
--- a/erpnext/public/js/utils/party.js
+++ b/erpnext/public/js/utils/party.js
@@ -3,18 +3,19 @@
 
 frappe.provide("erpnext.utils");
 
-const SALES_DOCTYPES = ['Quotation', 'Sales Order', 'Delivery Note', 'Sales Invoice'];
-const PURCHASE_DOCTYPES = ['Supplier Quotation','Purchase Order', 'Purchase Receipt', 'Purchase Invoice'];
+const SALES_DOCTYPES = ["Quotation", "Sales Order", "Delivery Note", "Sales Invoice"];
+const PURCHASE_DOCTYPES = ["Supplier Quotation", "Purchase Order", "Purchase Receipt", "Purchase Invoice"];
 
-erpnext.utils.get_party_details = function(frm, method, args, callback) {
+erpnext.utils.get_party_details = function (frm, method, args, callback) {
 	if (!method) {
 		method = "erpnext.accounts.party.get_party_details";
 	}
 
 	if (!args) {
-		if ((frm.doctype != "Purchase Order" && frm.doc.customer)
-			|| (frm.doc.party_name && in_list(['Quotation', 'Opportunity'], frm.doc.doctype))) {
-
+		if (
+			(frm.doctype != "Purchase Order" && frm.doc.customer) ||
+			(frm.doc.party_name && in_list(["Quotation", "Opportunity"], frm.doc.doctype))
+		) {
 			let party_type = "Customer";
 			if (frm.doc.quotation_to && in_list(["Lead", "Prospect"], frm.doc.quotation_to)) {
 				party_type = frm.doc.quotation_to;
@@ -23,14 +24,14 @@
 			args = {
 				party: frm.doc.customer || frm.doc.party_name,
 				party_type: party_type,
-				price_list: frm.doc.selling_price_list
+				price_list: frm.doc.selling_price_list,
 			};
 		} else if (frm.doc.supplier) {
 			args = {
 				party: frm.doc.supplier,
 				party_type: "Supplier",
 				bill_date: frm.doc.bill_date,
-				price_list: frm.doc.buying_price_list
+				price_list: frm.doc.buying_price_list,
 			};
 		}
 
@@ -38,14 +39,14 @@
 			if (in_list(SALES_DOCTYPES, frm.doc.doctype)) {
 				args = {
 					party: frm.doc.customer || frm.doc.party_name,
-					party_type: 'Customer'
+					party_type: "Customer",
 				};
 			}
 
 			if (in_list(PURCHASE_DOCTYPES, frm.doc.doctype)) {
 				args = {
 					party: frm.doc.supplier,
-					party_type: 'Supplier'
+					party_type: "Supplier",
 				};
 			}
 		}
@@ -72,13 +73,26 @@
 		}
 	}
 
-
 	if (frappe.meta.get_docfield(frm.doc.doctype, "taxes")) {
-		if (!erpnext.utils.validate_mandatory(frm, "Posting / Transaction Date",
-			args.posting_date, args.party_type=="Customer" ? "customer": "supplier")) return;
+		if (
+			!erpnext.utils.validate_mandatory(
+				frm,
+				"Posting / Transaction Date",
+				args.posting_date,
+				args.party_type == "Customer" ? "customer" : "supplier"
+			)
+		)
+			return;
 	}
 
-	if (!erpnext.utils.validate_mandatory(frm, "Company", frm.doc.company, args.party_type=="Customer" ? "customer": "supplier")) {
+	if (
+		!erpnext.utils.validate_mandatory(
+			frm,
+			"Company",
+			frm.doc.company,
+			args.party_type == "Customer" ? "customer" : "supplier"
+		)
+	) {
 		return;
 	}
 
@@ -88,7 +102,7 @@
 	frappe.call({
 		method: method,
 		args: args,
-		callback: function(r) {
+		callback: function (r) {
 			if (r.message) {
 				frm.supplier_tds = r.message.supplier_tds;
 				frm.updating_party_details = true;
@@ -99,28 +113,28 @@
 						if (callback) callback();
 						frm.refresh();
 						erpnext.utils.add_item(frm);
-					}
+					},
 				]);
 			}
-		}
+		},
 	});
-}
+};
 
-erpnext.utils.add_item = function(frm) {
+erpnext.utils.add_item = function (frm) {
 	if (frm.is_new()) {
 		var prev_route = frappe.get_prev_route();
-		if (prev_route[1]==='Item' && !(frm.doc.items && frm.doc.items.length)) {
+		if (prev_route[1] === "Item" && !(frm.doc.items && frm.doc.items.length)) {
 			// add row
-			var item = frm.add_child('items');
-			frm.refresh_field('items');
+			var item = frm.add_child("items");
+			frm.refresh_field("items");
 
 			// set item
-			frappe.model.set_value(item.doctype, item.name, 'item_code', prev_route[2]);
+			frappe.model.set_value(item.doctype, item.name, "item_code", prev_route[2]);
 		}
 	}
-}
+};
 
-erpnext.utils.get_address_display = function(frm, address_field, display_field, is_your_company_address) {
+erpnext.utils.get_address_display = function (frm, address_field, display_field, is_your_company_address) {
 	if (frm.updating_party_details) return;
 
 	if (!address_field) {
@@ -135,29 +149,46 @@
 	if (frm.doc[address_field]) {
 		frappe.call({
 			method: "frappe.contacts.doctype.address.address.get_address_display",
-			args: {"address_dict": frm.doc[address_field] },
-			callback: function(r) {
+			args: { address_dict: frm.doc[address_field] },
+			callback: function (r) {
 				if (r.message) {
-					frm.set_value(display_field, r.message)
+					frm.set_value(display_field, r.message);
 				}
-			}
-		})
+			},
+		});
 	} else {
-		frm.set_value(display_field, '');
+		frm.set_value(display_field, "");
 	}
 };
 
-erpnext.utils.set_taxes_from_address = function(frm, triggered_from_field, billing_address_field, shipping_address_field) {
+erpnext.utils.set_taxes_from_address = function (
+	frm,
+	triggered_from_field,
+	billing_address_field,
+	shipping_address_field
+) {
 	if (frm.updating_party_details) return;
 
 	if (frappe.meta.get_docfield(frm.doc.doctype, "taxes")) {
-		if (!erpnext.utils.validate_mandatory(frm, "Lead / Customer / Supplier",
-			frm.doc.customer || frm.doc.supplier || frm.doc.lead || frm.doc.party_name, triggered_from_field)) {
+		if (
+			!erpnext.utils.validate_mandatory(
+				frm,
+				"Lead / Customer / Supplier",
+				frm.doc.customer || frm.doc.supplier || frm.doc.lead || frm.doc.party_name,
+				triggered_from_field
+			)
+		) {
 			return;
 		}
 
-		if (!erpnext.utils.validate_mandatory(frm, "Posting / Transaction Date",
-			frm.doc.posting_date || frm.doc.transaction_date, triggered_from_field)) {
+		if (
+			!erpnext.utils.validate_mandatory(
+				frm,
+				"Posting / Transaction Date",
+				frm.doc.posting_date || frm.doc.transaction_date,
+				triggered_from_field
+			)
+		) {
 			return;
 		}
 	} else {
@@ -167,35 +198,47 @@
 	frappe.call({
 		method: "erpnext.accounts.party.get_address_tax_category",
 		args: {
-			"tax_category": frm.doc.tax_category,
-			"billing_address": frm.doc[billing_address_field],
-			"shipping_address": frm.doc[shipping_address_field]
+			tax_category: frm.doc.tax_category,
+			billing_address: frm.doc[billing_address_field],
+			shipping_address: frm.doc[shipping_address_field],
 		},
-		callback: function(r) {
-			if (!r.exc){
+		callback: function (r) {
+			if (!r.exc) {
 				if (frm.doc.tax_category != r.message) {
 					frm.set_value("tax_category", r.message);
 				} else {
 					erpnext.utils.set_taxes(frm, triggered_from_field);
 				}
 			}
-		}
+		},
 	});
 };
 
-erpnext.utils.set_taxes = function(frm, triggered_from_field) {
+erpnext.utils.set_taxes = function (frm, triggered_from_field) {
 	if (frappe.meta.get_docfield(frm.doc.doctype, "taxes")) {
 		if (!erpnext.utils.validate_mandatory(frm, "Company", frm.doc.company, triggered_from_field)) {
 			return;
 		}
 
-		if (!erpnext.utils.validate_mandatory(frm, "Lead / Customer / Supplier",
-			frm.doc.customer || frm.doc.supplier || frm.doc.lead || frm.doc.party_name, triggered_from_field)) {
+		if (
+			!erpnext.utils.validate_mandatory(
+				frm,
+				"Lead / Customer / Supplier",
+				frm.doc.customer || frm.doc.supplier || frm.doc.lead || frm.doc.party_name,
+				triggered_from_field
+			)
+		) {
 			return;
 		}
 
-		if (!erpnext.utils.validate_mandatory(frm, "Posting / Transaction Date",
-			frm.doc.posting_date || frm.doc.transaction_date, triggered_from_field)) {
+		if (
+			!erpnext.utils.validate_mandatory(
+				frm,
+				"Posting / Transaction Date",
+				frm.doc.posting_date || frm.doc.transaction_date,
+				triggered_from_field
+			)
+		) {
 			return;
 		}
 	} else {
@@ -204,15 +247,15 @@
 
 	var party_type, party;
 	if (frm.doc.lead) {
-		party_type = 'Lead';
+		party_type = "Lead";
 		party = frm.doc.lead;
 	} else if (frm.doc.customer) {
-		party_type = 'Customer';
+		party_type = "Customer";
 		party = frm.doc.customer;
 	} else if (frm.doc.supplier) {
-		party_type = 'Supplier';
+		party_type = "Supplier";
 		party = frm.doc.supplier;
-	} else if (frm.doc.quotation_to){
+	} else if (frm.doc.quotation_to) {
 		party_type = frm.doc.quotation_to;
 		party = frm.doc.party_name;
 	}
@@ -224,21 +267,22 @@
 	frappe.call({
 		method: "erpnext.accounts.party.set_taxes",
 		args: {
-			"party": party,
-			"party_type": party_type,
-			"posting_date": frm.doc.posting_date || frm.doc.transaction_date,
-			"company": frm.doc.company,
-			"customer_group": frm.doc.customer_group,
-			"supplier_group": frm.doc.supplier_group,
-			"tax_category": frm.doc.tax_category,
-			"billing_address": ((frm.doc.customer || frm.doc.lead) ? (frm.doc.customer_address) : (frm.doc.supplier_address)),
-			"shipping_address": frm.doc.shipping_address_name
+			party: party,
+			party_type: party_type,
+			posting_date: frm.doc.posting_date || frm.doc.transaction_date,
+			company: frm.doc.company,
+			customer_group: frm.doc.customer_group,
+			supplier_group: frm.doc.supplier_group,
+			tax_category: frm.doc.tax_category,
+			billing_address:
+				frm.doc.customer || frm.doc.lead ? frm.doc.customer_address : frm.doc.supplier_address,
+			shipping_address: frm.doc.shipping_address_name,
 		},
-		callback: function(r) {
-			if (r.message){
-				frm.set_value("taxes_and_charges", r.message)
+		callback: function (r) {
+			if (r.message) {
+				frm.set_value("taxes_and_charges", r.message);
 			}
-		}
+		},
 	});
 };
 
@@ -266,20 +310,23 @@
 	}
 };
 
-erpnext.utils.validate_mandatory = function(frm, label, value, trigger_on) {
+erpnext.utils.validate_mandatory = function (frm, label, value, trigger_on) {
 	if (!value) {
 		frm.doc[trigger_on] = "";
 		refresh_field(trigger_on);
-		frappe.throw({message:__("Please enter {0} first", [label]), title:__("Mandatory")});
+		frappe.throw({ message: __("Please enter {0} first", [label]), title: __("Mandatory") });
 		return false;
 	}
 	return true;
-}
+};
 
-erpnext.utils.get_shipping_address = function(frm, callback) {
+erpnext.utils.get_shipping_address = function (frm, callback) {
 	if (frm.doc.company) {
-		if ((frm.doc.inter_company_order_reference || frm.doc.internal_invoice_reference ||
-			frm.doc.internal_order_reference)) {
+		if (
+			frm.doc.inter_company_order_reference ||
+			frm.doc.internal_invoice_reference ||
+			frm.doc.internal_order_reference
+		) {
 			if (callback) {
 				return callback();
 			}
@@ -288,20 +335,20 @@
 			method: "erpnext.accounts.custom.address.get_shipping_address",
 			args: {
 				company: frm.doc.company,
-				address: frm.doc.shipping_address
+				address: frm.doc.shipping_address,
 			},
-			callback: function(r) {
+			callback: function (r) {
 				if (r.message) {
-					frm.set_value("shipping_address", r.message[0]) //Address title or name
-					frm.set_value("shipping_address_display", r.message[1]) //Address to be displayed on the page
+					frm.set_value("shipping_address", r.message[0]); //Address title or name
+					frm.set_value("shipping_address_display", r.message[1]); //Address to be displayed on the page
 				}
 
-				if (callback){
+				if (callback) {
 					return callback();
 				}
-			}
+			},
 		});
 	} else {
 		frappe.msgprint(__("Select company first"));
 	}
-}
+};
diff --git a/erpnext/public/js/utils/sales_common.js b/erpnext/public/js/utils/sales_common.js
index a957530..f2b7331 100644
--- a/erpnext/public/js/utils/sales_common.js
+++ b/erpnext/public/js/utils/sales_common.js
@@ -4,7 +4,7 @@
 frappe.provide("erpnext.selling");
 
 erpnext.sales_common = {
-	setup_selling_controller:function() {
+	setup_selling_controller: function () {
 		erpnext.selling.SellingController = class SellingController extends erpnext.TransactionController {
 			setup() {
 				super.setup();
@@ -15,107 +15,123 @@
 			onload() {
 				super.onload();
 				this.setup_queries();
-				this.frm.set_query('shipping_rule', function() {
+				this.frm.set_query("shipping_rule", function () {
 					return {
 						filters: {
-							"shipping_rule_type": "Selling"
-						}
+							shipping_rule_type: "Selling",
+						},
 					};
 				});
 
-				this.frm.set_query('project', function(doc) {
+				this.frm.set_query("project", function (doc) {
 					return {
 						query: "erpnext.controllers.queries.get_project_name",
 						filters: {
-							'customer': doc.customer
-						}
-					}
+							customer: doc.customer,
+						},
+					};
 				});
 			}
 
 			setup_queries() {
 				var me = this;
 
-				$.each([["customer", "customer"],
-					["lead", "lead"]],
-					function(i, opts) {
-						if(me.frm.fields_dict[opts[0]])
-							me.frm.set_query(opts[0], erpnext.queries[opts[1]]);
-					});
+				$.each(
+					[
+						["customer", "customer"],
+						["lead", "lead"],
+					],
+					function (i, opts) {
+						if (me.frm.fields_dict[opts[0]]) me.frm.set_query(opts[0], erpnext.queries[opts[1]]);
+					}
+				);
 
-				me.frm.set_query('contact_person', erpnext.queries.contact_query);
-				me.frm.set_query('customer_address', erpnext.queries.address_query);
-				me.frm.set_query('shipping_address_name', erpnext.queries.address_query);
-				me.frm.set_query('dispatch_address_name', erpnext.queries.dispatch_address_query);
+				me.frm.set_query("contact_person", erpnext.queries.contact_query);
+				me.frm.set_query("customer_address", erpnext.queries.address_query);
+				me.frm.set_query("shipping_address_name", erpnext.queries.address_query);
+				me.frm.set_query("dispatch_address_name", erpnext.queries.dispatch_address_query);
 
 				erpnext.accounts.dimensions.setup_dimension_filters(me.frm, me.frm.doctype);
 
-				if(this.frm.fields_dict.selling_price_list) {
-					this.frm.set_query("selling_price_list", function() {
+				if (this.frm.fields_dict.selling_price_list) {
+					this.frm.set_query("selling_price_list", function () {
 						return { filters: { selling: 1 } };
 					});
 				}
 
-				if(this.frm.fields_dict.tc_name) {
-					this.frm.set_query("tc_name", function() {
+				if (this.frm.fields_dict.tc_name) {
+					this.frm.set_query("tc_name", function () {
 						return { filters: { selling: 1 } };
 					});
 				}
 
-				if(!this.frm.fields_dict["items"]) {
+				if (!this.frm.fields_dict["items"]) {
 					return;
 				}
 
-				if(this.frm.fields_dict["items"].grid.get_field('item_code')) {
-					this.frm.set_query("item_code", "items", function() {
+				if (this.frm.fields_dict["items"].grid.get_field("item_code")) {
+					this.frm.set_query("item_code", "items", function () {
 						return {
 							query: "erpnext.controllers.queries.item_query",
-							filters: {'is_sales_item': 1, 'customer': me.frm.doc.customer, 'has_variants': 0}
-						}
+							filters: { is_sales_item: 1, customer: me.frm.doc.customer, has_variants: 0 },
+						};
 					});
 				}
 
-				if(this.frm.fields_dict["packed_items"] &&
-					this.frm.fields_dict["packed_items"].grid.get_field('batch_no')) {
-					this.frm.set_query("batch_no", "packed_items", function(doc, cdt, cdn) {
-						return me.set_query_for_batch(doc, cdt, cdn)
+				if (
+					this.frm.fields_dict["packed_items"] &&
+					this.frm.fields_dict["packed_items"].grid.get_field("batch_no")
+				) {
+					this.frm.set_query("batch_no", "packed_items", function (doc, cdt, cdn) {
+						return me.set_query_for_batch(doc, cdt, cdn);
 					});
 				}
 
-				if(this.frm.fields_dict["items"].grid.get_field('item_code')) {
-					this.frm.set_query("item_tax_template", "items", function(doc, cdt, cdn) {
-						return me.set_query_for_item_tax_template(doc, cdt, cdn)
+				if (this.frm.fields_dict["items"].grid.get_field("item_code")) {
+					this.frm.set_query("item_tax_template", "items", function (doc, cdt, cdn) {
+						return me.set_query_for_item_tax_template(doc, cdt, cdn);
 					});
 				}
-
 			}
 
 			refresh() {
 				super.refresh();
 
-				frappe.dynamic_link = {doc: this.frm.doc, fieldname: 'customer', doctype: 'Customer'}
+				frappe.dynamic_link = { doc: this.frm.doc, fieldname: "customer", doctype: "Customer" };
 
-				this.frm.toggle_display("customer_name",
-					(this.frm.doc.customer_name && this.frm.doc.customer_name!==this.frm.doc.customer));
+				this.frm.toggle_display(
+					"customer_name",
+					this.frm.doc.customer_name && this.frm.doc.customer_name !== this.frm.doc.customer
+				);
 
 				this.toggle_editable_price_list_rate();
 			}
 
 			customer() {
 				var me = this;
-				erpnext.utils.get_party_details(this.frm, null, null, function() {
+				erpnext.utils.get_party_details(this.frm, null, null, function () {
 					me.apply_price_list();
 				});
 			}
 
 			customer_address() {
 				erpnext.utils.get_address_display(this.frm, "customer_address");
-				erpnext.utils.set_taxes_from_address(this.frm, "customer_address", "customer_address", "shipping_address_name");
+				erpnext.utils.set_taxes_from_address(
+					this.frm,
+					"customer_address",
+					"customer_address",
+					"shipping_address_name"
+				);
 			}
 
 			shipping_address_name() {
 				erpnext.utils.get_address_display(this.frm, "shipping_address_name", "shipping_address");
-				erpnext.utils.set_taxes_from_address(this.frm, "shipping_address_name", "customer_address", "shipping_address_name");
+				erpnext.utils.set_taxes_from_address(
+					this.frm,
+					"shipping_address_name",
+					"customer_address",
+					"shipping_address_name"
+				);
 			}
 
 			dispatch_address_name() {
@@ -138,18 +154,17 @@
 			discount_percentage(doc, cdt, cdn) {
 				var item = frappe.get_doc(cdt, cdn);
 				item.discount_amount = 0.0;
-				this.apply_discount_on_item(doc, cdt, cdn, 'discount_percentage');
+				this.apply_discount_on_item(doc, cdt, cdn, "discount_percentage");
 			}
 
 			discount_amount(doc, cdt, cdn) {
-
-				if(doc.name === cdn) {
+				if (doc.name === cdn) {
 					return;
 				}
 
 				var item = frappe.get_doc(cdt, cdn);
 				item.discount_percentage = 0.0;
-				this.apply_discount_on_item(doc, cdt, cdn, 'discount_amount');
+				this.apply_discount_on_item(doc, cdt, cdn, "discount_amount");
 			}
 
 			commission_rate() {
@@ -157,40 +172,48 @@
 			}
 
 			total_commission() {
-				frappe.model.round_floats_in(this.frm.doc, ["amount_eligible_for_commission", "total_commission"]);
+				frappe.model.round_floats_in(this.frm.doc, [
+					"amount_eligible_for_commission",
+					"total_commission",
+				]);
 
 				const { amount_eligible_for_commission } = this.frm.doc;
-				if(!amount_eligible_for_commission) return;
+				if (!amount_eligible_for_commission) return;
 
 				this.frm.set_value(
-					"commission_rate", flt(
-						this.frm.doc.total_commission * 100.0 / amount_eligible_for_commission
-					)
+					"commission_rate",
+					flt((this.frm.doc.total_commission * 100.0) / amount_eligible_for_commission)
 				);
 			}
 
 			allocated_percentage(doc, cdt, cdn) {
 				var sales_person = frappe.get_doc(cdt, cdn);
-				if(sales_person.allocated_percentage) {
+				if (sales_person.allocated_percentage) {
+					sales_person.allocated_percentage = flt(
+						sales_person.allocated_percentage,
+						precision("allocated_percentage", sales_person)
+					);
 
-					sales_person.allocated_percentage = flt(sales_person.allocated_percentage,
-						precision("allocated_percentage", sales_person));
-
-					sales_person.allocated_amount = flt(this.frm.doc.amount_eligible_for_commission *
-						sales_person.allocated_percentage / 100.0,
-						precision("allocated_amount", sales_person));
-						refresh_field(["allocated_amount"], sales_person);
+					sales_person.allocated_amount = flt(
+						(this.frm.doc.amount_eligible_for_commission * sales_person.allocated_percentage) /
+							100.0,
+						precision("allocated_amount", sales_person)
+					);
+					refresh_field(["allocated_amount"], sales_person);
 
 					this.calculate_incentive(sales_person);
-					refresh_field(["allocated_percentage", "allocated_amount", "commission_rate","incentives"], sales_person.name,
-						sales_person.parentfield);
+					refresh_field(
+						["allocated_percentage", "allocated_amount", "commission_rate", "incentives"],
+						sales_person.name,
+						sales_person.parentfield
+					);
 				}
 			}
 
 			sales_person(doc, cdt, cdn) {
 				var row = frappe.get_doc(cdt, cdn);
 				this.calculate_incentive(row);
-				refresh_field("incentives",row.name,row.parentfield);
+				refresh_field("incentives", row.name, row.parentfield);
 			}
 
 			warehouse(doc, cdt, cdn) {
@@ -200,35 +223,47 @@
 			}
 
 			toggle_editable_price_list_rate() {
-				var df = frappe.meta.get_docfield(this.frm.doc.doctype + " Item", "price_list_rate", this.frm.doc.name);
+				var df = frappe.meta.get_docfield(
+					this.frm.doc.doctype + " Item",
+					"price_list_rate",
+					this.frm.doc.name
+				);
 				var editable_price_list_rate = cint(frappe.defaults.get_default("editable_price_list_rate"));
 
-				if(df && editable_price_list_rate) {
-					const parent_field = frappe.meta.get_parentfield(this.frm.doc.doctype, this.frm.doc.doctype + " Item");
+				if (df && editable_price_list_rate) {
+					const parent_field = frappe.meta.get_parentfield(
+						this.frm.doc.doctype,
+						this.frm.doc.doctype + " Item"
+					);
 					if (!this.frm.fields_dict[parent_field]) return;
 
 					this.frm.fields_dict[parent_field].grid.update_docfield_property(
-						'price_list_rate', 'read_only', 0
+						"price_list_rate",
+						"read_only",
+						0
 					);
 				}
 			}
 
 			calculate_commission() {
-				if(!this.frm.fields_dict.commission_rate || this.frm.doc.docstatus === 1) return;
+				if (!this.frm.fields_dict.commission_rate || this.frm.doc.docstatus === 1) return;
 
-				if(this.frm.doc.commission_rate > 100) {
+				if (this.frm.doc.commission_rate > 100) {
 					this.frm.set_value("commission_rate", 100);
-					frappe.throw(`${__(frappe.meta.get_label(
-						this.frm.doc.doctype, "commission_rate", this.frm.doc.name
-					))} ${__("cannot be greater than 100")}`);
+					frappe.throw(
+						`${__(
+							frappe.meta.get_label(this.frm.doc.doctype, "commission_rate", this.frm.doc.name)
+						)} ${__("cannot be greater than 100")}`
+					);
 				}
 
 				this.frm.doc.amount_eligible_for_commission = this.frm.doc.items.reduce(
-					(sum, item) => item.grant_commission ? sum + item.base_net_amount : sum, 0
-				)
+					(sum, item) => (item.grant_commission ? sum + item.base_net_amount : sum),
+					0
+				);
 
 				this.frm.doc.total_commission = flt(
-					this.frm.doc.amount_eligible_for_commission * this.frm.doc.commission_rate / 100.0,
+					(this.frm.doc.amount_eligible_for_commission * this.frm.doc.commission_rate) / 100.0,
 					precision("total_commission")
 				);
 
@@ -237,25 +272,24 @@
 
 			calculate_contribution() {
 				var me = this;
-				$.each(this.frm.doc.doctype.sales_team || [], function(i, sales_person) {
+				$.each(this.frm.doc.doctype.sales_team || [], function (i, sales_person) {
 					frappe.model.round_floats_in(sales_person);
 					if (!sales_person.allocated_percentage) return;
 
 					sales_person.allocated_amount = flt(
-						me.frm.doc.amount_eligible_for_commission
-						* sales_person.allocated_percentage
-						/ 100.0,
+						(me.frm.doc.amount_eligible_for_commission * sales_person.allocated_percentage) /
+							100.0,
 						precision("allocated_amount", sales_person)
 					);
 				});
 			}
 
 			calculate_incentive(row) {
-				if(row.allocated_amount)
-				{
+				if (row.allocated_amount) {
 					row.incentives = flt(
-							row.allocated_amount * row.commission_rate / 100.0,
-							precision("incentives", row));
+						(row.allocated_amount * row.commission_rate) / 100.0,
+						precision("incentives", row)
+					);
 				}
 			}
 
@@ -265,37 +299,41 @@
 			}
 
 			set_product_bundle_help(doc) {
-				if(!this.frm.fields_dict.packing_list) return;
+				if (!this.frm.fields_dict.packing_list) return;
 				if ((doc.packed_items || []).length) {
 					$(this.frm.fields_dict.packing_list.row.wrapper).toggle(true);
 
-					if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
-						var help_msg = "<div class='alert alert-warning'>" +
-							__("For 'Product Bundle' items, Warehouse, Serial No and Batch No will be considered from the 'Packing List' table. If Warehouse and Batch No are same for all packing items for any 'Product Bundle' item, those values can be entered in the main Item table, values will be copied to 'Packing List' table.")+
-						"</div>";
-						frappe.meta.get_docfield(doc.doctype, 'product_bundle_help', doc.name).options = help_msg;
+					if (in_list(["Delivery Note", "Sales Invoice"], doc.doctype)) {
+						var help_msg =
+							"<div class='alert alert-warning'>" +
+							__(
+								"For 'Product Bundle' items, Warehouse, Serial No and Batch No will be considered from the 'Packing List' table. If Warehouse and Batch No are same for all packing items for any 'Product Bundle' item, those values can be entered in the main Item table, values will be copied to 'Packing List' table."
+							) +
+							"</div>";
+						frappe.meta.get_docfield(doc.doctype, "product_bundle_help", doc.name).options =
+							help_msg;
 					}
 				} else {
 					$(this.frm.fields_dict.packing_list.row.wrapper).toggle(false);
-					if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
-						frappe.meta.get_docfield(doc.doctype, 'product_bundle_help', doc.name).options = '';
+					if (in_list(["Delivery Note", "Sales Invoice"], doc.doctype)) {
+						frappe.meta.get_docfield(doc.doctype, "product_bundle_help", doc.name).options = "";
 					}
 				}
-				refresh_field('product_bundle_help');
+				refresh_field("product_bundle_help");
 			}
 
 			company_address() {
 				var me = this;
-				if(this.frm.doc.company_address) {
+				if (this.frm.doc.company_address) {
 					frappe.call({
 						method: "frappe.contacts.doctype.address.address.get_address_display",
-						args: {"address_dict": this.frm.doc.company_address },
-						callback: function(r) {
-							if(r.message) {
-								me.frm.set_value("company_address_display", r.message)
+						args: { address_dict: this.frm.doc.company_address },
+						callback: function (r) {
+							if (r.message) {
+								me.frm.set_value("company_address_display", r.message);
 							}
-						}
-					})
+						},
+					});
 				} else {
 					this.frm.set_value("company_address_display", "");
 				}
@@ -314,79 +352,96 @@
 				let me = this;
 				let path = "assets/erpnext/js/utils/serial_no_batch_selector.js";
 
-				frappe.db.get_value("Item", item.item_code, ["has_batch_no", "has_serial_no"])
-					.then((r) => {
-						if (r.message && (r.message.has_batch_no || r.message.has_serial_no)) {
-							item.has_serial_no = r.message.has_serial_no;
-							item.has_batch_no = r.message.has_batch_no;
-							item.type_of_transaction = item.qty > 0 ? "Outward":"Inward";
+				frappe.db.get_value("Item", item.item_code, ["has_batch_no", "has_serial_no"]).then((r) => {
+					if (r.message && (r.message.has_batch_no || r.message.has_serial_no)) {
+						item.has_serial_no = r.message.has_serial_no;
+						item.has_batch_no = r.message.has_batch_no;
+						item.type_of_transaction = item.qty > 0 ? "Outward" : "Inward";
 
-							item.title = item.has_serial_no ?
-								__("Select Serial No") : __("Select Batch No");
+						item.title = item.has_serial_no ? __("Select Serial No") : __("Select Batch No");
 
-							if (item.has_serial_no && item.has_batch_no) {
-								item.title = __("Select Serial and Batch");
-							}
-
-							frappe.require(path, function() {
-								new erpnext.SerialBatchPackageSelector(
-									me.frm, item, (r) => {
-										if (r) {
-											let qty = Math.abs(r.total_qty);
-											if (doc.is_return) {
-												qty = qty * -1;
-											}
-
-											frappe.model.set_value(item.doctype, item.name, {
-												"serial_and_batch_bundle": r.name,
-												"use_serial_batch_fields": 0,
-												"qty": qty / flt(item.conversion_factor || 1, precision("conversion_factor", item))
-											});
-										}
-									}
-								);
-							});
+						if (item.has_serial_no && item.has_batch_no) {
+							item.title = __("Select Serial and Batch");
 						}
-					});
+
+						frappe.require(path, function () {
+							new erpnext.SerialBatchPackageSelector(me.frm, item, (r) => {
+								if (r) {
+									let qty = Math.abs(r.total_qty);
+									if (doc.is_return) {
+										qty = qty * -1;
+									}
+
+									frappe.model.set_value(item.doctype, item.name, {
+										serial_and_batch_bundle: r.name,
+										use_serial_batch_fields: 0,
+										qty:
+											qty /
+											flt(
+												item.conversion_factor || 1,
+												precision("conversion_factor", item)
+											),
+									});
+								}
+							});
+						});
+					}
+				});
 			}
 
 			update_auto_repeat_reference(doc) {
 				if (doc.auto_repeat) {
 					frappe.call({
-						method:"frappe.automation.doctype.auto_repeat.auto_repeat.update_reference",
-						args:{
+						method: "frappe.automation.doctype.auto_repeat.auto_repeat.update_reference",
+						args: {
 							docname: doc.auto_repeat,
-							reference:doc.name
+							reference: doc.name,
 						},
-						callback: function(r){
-							if (r.message=="success") {
-								frappe.show_alert({message:__("Auto repeat document updated"), indicator:'green'});
+						callback: function (r) {
+							if (r.message == "success") {
+								frappe.show_alert({
+									message: __("Auto repeat document updated"),
+									indicator: "green",
+								});
 							} else {
-								frappe.show_alert({message:__("An error occurred during the update process"), indicator:'red'});
+								frappe.show_alert({
+									message: __("An error occurred during the update process"),
+									indicator: "red",
+								});
 							}
-						}
-					})
+						},
+					});
 				}
 			}
 
 			project() {
 				let me = this;
-				if(in_list(["Delivery Note", "Sales Invoice", "Sales Order"], this.frm.doc.doctype)) {
-					if(this.frm.doc.project) {
+				if (in_list(["Delivery Note", "Sales Invoice", "Sales Order"], this.frm.doc.doctype)) {
+					if (this.frm.doc.project) {
 						frappe.call({
-							method:'erpnext.projects.doctype.project.project.get_cost_center_name' ,
-							args: {project: this.frm.doc.project},
-							callback: function(r, rt) {
-								if(!r.exc) {
-									$.each(me.frm.doc["items"] || [], function(i, row) {
-										if(r.message) {
-											frappe.model.set_value(row.doctype, row.name, "cost_center", r.message);
-											frappe.msgprint(__("Cost Center For Item with Item Code {0} has been Changed to {1}", [row.item_name, r.message]));
+							method: "erpnext.projects.doctype.project.project.get_cost_center_name",
+							args: { project: this.frm.doc.project },
+							callback: function (r, rt) {
+								if (!r.exc) {
+									$.each(me.frm.doc["items"] || [], function (i, row) {
+										if (r.message) {
+											frappe.model.set_value(
+												row.doctype,
+												row.name,
+												"cost_center",
+												r.message
+											);
+											frappe.msgprint(
+												__(
+													"Cost Center For Item with Item Code {0} has been Changed to {1}",
+													[row.item_name, r.message]
+												)
+											);
 										}
-									})
+									});
 								}
-							}
-						})
+							},
+						});
 					}
 				}
 			}
@@ -396,57 +451,60 @@
 				this.frm.set_value("additional_discount_percentage", 0);
 			}
 		};
-	}
-}
+	},
+};
 
 erpnext.pre_sales = {
-	set_as_lost: function(doctype) {
+	set_as_lost: function (doctype) {
 		frappe.ui.form.on(doctype, {
-			set_as_lost_dialog: function(frm) {
+			set_as_lost_dialog: function (frm) {
 				var dialog = new frappe.ui.Dialog({
 					title: __("Set as Lost"),
 					fields: [
 						{
-							"fieldtype": "Table MultiSelect",
-							"label": __("Lost Reasons"),
-							"fieldname": "lost_reason",
-							"options": frm.doctype === 'Opportunity' ? 'Opportunity Lost Reason Detail': 'Quotation Lost Reason Detail',
-							"reqd": 1
+							fieldtype: "Table MultiSelect",
+							label: __("Lost Reasons"),
+							fieldname: "lost_reason",
+							options:
+								frm.doctype === "Opportunity"
+									? "Opportunity Lost Reason Detail"
+									: "Quotation Lost Reason Detail",
+							reqd: 1,
 						},
 						{
-							"fieldtype": "Table MultiSelect",
-							"label": __("Competitors"),
-							"fieldname": "competitors",
-							"options": "Competitor Detail"
+							fieldtype: "Table MultiSelect",
+							label: __("Competitors"),
+							fieldname: "competitors",
+							options: "Competitor Detail",
 						},
 						{
-							"fieldtype": "Small Text",
-							"label": __("Detailed Reason"),
-							"fieldname": "detailed_reason"
+							fieldtype: "Small Text",
+							label: __("Detailed Reason"),
+							fieldname: "detailed_reason",
 						},
 					],
-					primary_action: function() {
+					primary_action: function () {
 						let values = dialog.get_values();
 
 						frm.call({
 							doc: frm.doc,
-							method: 'declare_enquiry_lost',
+							method: "declare_enquiry_lost",
 							args: {
-								'lost_reasons_list': values.lost_reason,
-								'competitors': values.competitors ? values.competitors : [],
-								'detailed_reason': values.detailed_reason
+								lost_reasons_list: values.lost_reason,
+								competitors: values.competitors ? values.competitors : [],
+								detailed_reason: values.detailed_reason,
 							},
-							callback: function(r) {
+							callback: function (r) {
 								dialog.hide();
 								frm.reload_doc();
 							},
 						});
 					},
-					primary_action_label: __('Declare Lost')
+					primary_action_label: __("Declare Lost"),
 				});
 
 				dialog.show();
-			}
+			},
 		});
-	}
-}
+	},
+};
diff --git a/erpnext/public/js/utils/serial_no_batch_selector.js b/erpnext/public/js/utils/serial_no_batch_selector.js
index d0064b3..24133b8 100644
--- a/erpnext/public/js/utils/serial_no_batch_selector.js
+++ b/erpnext/public/js/utils/serial_no_batch_selector.js
@@ -4,30 +4,30 @@
 		this.item = item;
 		this.qty = item.qty;
 		this.callback = callback;
-		this.bundle = this.item?.is_rejected ?
-			this.item.rejected_serial_and_batch_bundle : this.item.serial_and_batch_bundle;
+		this.bundle = this.item?.is_rejected
+			? this.item.rejected_serial_and_batch_bundle
+			: this.item.serial_and_batch_bundle;
 
 		this.make();
 		this.render_data();
 	}
 
 	make() {
-		let label = this.item?.has_serial_no ? __('Serial Nos') : __('Batch Nos');
-		let primary_label = this.bundle
-			? __('Update') : __('Add');
+		let label = this.item?.has_serial_no ? __("Serial Nos") : __("Batch Nos");
+		let primary_label = this.bundle ? __("Update") : __("Add");
 
 		if (this.item?.has_serial_no && this.item?.batch_no) {
-			label = __('Serial Nos / Batch Nos');
+			label = __("Serial Nos / Batch Nos");
 		}
 
-		primary_label += ' ' + label;
+		primary_label += " " + label;
 
 		this.dialog = new frappe.ui.Dialog({
 			title: this.item?.title || primary_label,
 			fields: this.get_dialog_fields(),
 			primary_action_label: primary_label,
 			primary_action: () => this.update_bundle_entries(),
-			secondary_action_label: __('Edit Full Form'),
+			secondary_action_label: __("Edit Full Form"),
 			secondary_action: () => this.edit_full_form(),
 		});
 
@@ -45,21 +45,21 @@
 		if (qty > 0) {
 			this.dialog.set_value("qty", qty).then(() => {
 				if (this.item.serial_no && !this.item.serial_and_batch_bundle) {
-					let serial_nos = this.item.serial_no.split('\n');
+					let serial_nos = this.item.serial_no.split("\n");
 					if (serial_nos.length > 1) {
-						serial_nos.forEach(serial_no => {
+						serial_nos.forEach((serial_no) => {
 							this.dialog.fields_dict.entries.df.data.push({
 								serial_no: serial_no,
-								batch_no: this.item.batch_no
+								batch_no: this.item.batch_no,
 							});
 						});
 					} else {
 						this.dialog.set_value("scan_serial_no", this.item.serial_no);
 					}
-					frappe.model.set_value(this.item.doctype, this.item.name, 'serial_no', '');
+					frappe.model.set_value(this.item.doctype, this.item.name, "serial_no", "");
 				} else if (this.item.batch_no && !this.item.serial_and_batch_bundle) {
 					this.dialog.set_value("scan_batch_no", this.item.batch_no);
-					frappe.model.set_value(this.item.doctype, this.item.name, 'batch_no', '');
+					frappe.model.set_value(this.item.doctype, this.item.name, "batch_no", "");
 				}
 
 				this.dialog.fields_dict.entries.grid.refresh();
@@ -68,20 +68,20 @@
 	}
 
 	get_serial_no_filters() {
-		let warehouse = this.item?.type_of_transaction === "Outward" ?
-			(this.item.warehouse || this.item.s_warehouse) : "";
+		let warehouse =
+			this.item?.type_of_transaction === "Outward" ? this.item.warehouse || this.item.s_warehouse : "";
 
-		if (this.frm.doc.doctype === 'Stock Entry') {
+		if (this.frm.doc.doctype === "Stock Entry") {
 			warehouse = this.item.s_warehouse || this.item.t_warehouse;
 		}
 
-		if (!warehouse && this.frm.doc.doctype === 'Stock Reconciliation') {
+		if (!warehouse && this.frm.doc.doctype === "Stock Reconciliation") {
 			warehouse = this.get_warehouse();
 		}
 
 		return {
-			'item_code': this.item.item_code,
-			'warehouse': ["=", warehouse]
+			item_code: this.item.item_code,
+			warehouse: ["=", warehouse],
 		};
 	}
 
@@ -89,71 +89,70 @@
 		let fields = [];
 
 		fields.push({
-			fieldtype: 'Link',
-			fieldname: 'warehouse',
-			label: __('Warehouse'),
-			options: 'Warehouse',
+			fieldtype: "Link",
+			fieldname: "warehouse",
+			label: __("Warehouse"),
+			options: "Warehouse",
 			default: this.get_warehouse(),
 			onchange: () => {
-				this.item.warehouse = this.dialog.get_value('warehouse');
-				this.get_auto_data()
+				this.item.warehouse = this.dialog.get_value("warehouse");
+				this.get_auto_data();
 			},
 			get_query: () => {
 				return {
 					filters: {
-						'is_group': 0,
-						'company': this.frm.doc.company,
-					}
+						is_group: 0,
+						company: this.frm.doc.company,
+					},
 				};
-			}
+			},
 		});
 
-		if (this.frm.doc.doctype === 'Stock Entry'
-			&& this.frm.doc.purpose === 'Manufacture') {
+		if (this.frm.doc.doctype === "Stock Entry" && this.frm.doc.purpose === "Manufacture") {
 			fields.push({
-				fieldtype: 'Column Break',
+				fieldtype: "Column Break",
 			});
 
 			fields.push({
-				fieldtype: 'Link',
-				fieldname: 'work_order',
-				label: __('For Work Order'),
-				options: 'Work Order',
+				fieldtype: "Link",
+				fieldname: "work_order",
+				label: __("For Work Order"),
+				options: "Work Order",
 				read_only: 1,
 				default: this.frm.doc.work_order,
 			});
 
 			fields.push({
-				fieldtype: 'Section Break',
+				fieldtype: "Section Break",
 			});
 		}
 
 		fields.push({
-			fieldtype: 'Column Break',
+			fieldtype: "Column Break",
 		});
 
 		if (this.item.has_serial_no) {
 			fields.push({
-				fieldtype: 'Data',
-				options: 'Barcode',
-				fieldname: 'scan_serial_no',
-				label: __('Scan Serial No'),
+				fieldtype: "Data",
+				options: "Barcode",
+				fieldname: "scan_serial_no",
+				label: __("Scan Serial No"),
 				get_query: () => {
 					return {
-						filters: this.get_serial_no_filters()
+						filters: this.get_serial_no_filters(),
 					};
 				},
-				onchange: () => this.scan_barcode_data()
+				onchange: () => this.scan_barcode_data(),
 			});
 		}
 
 		if (this.item.has_batch_no && !this.item.has_serial_no) {
 			fields.push({
-				fieldtype: 'Data',
-				options: 'Barcode',
-				fieldname: 'scan_batch_no',
-				label: __('Scan Batch No'),
-				onchange: () => this.scan_barcode_data()
+				fieldtype: "Data",
+				options: "Barcode",
+				fieldname: "scan_batch_no",
+				label: __("Scan Batch No"),
+				onchange: () => this.scan_barcode_data(),
 			});
 		}
 
@@ -164,12 +163,12 @@
 		}
 
 		fields.push({
-			fieldtype: 'Section Break',
+			fieldtype: "Section Break",
 		});
 
 		fields.push({
-			fieldname: 'entries',
-			fieldtype: 'Table',
+			fieldname: "entries",
+			fieldtype: "Table",
 			allow_bulk_edit: true,
 			data: [],
 			fields: this.get_dialog_table_fields(),
@@ -179,94 +178,95 @@
 	}
 
 	get_attach_field() {
-		let label = this.item?.has_serial_no ? __('Serial Nos') : __('Batch Nos');
-		let primary_label = this.bundle
-			? __('Update') : __('Add');
+		let label = this.item?.has_serial_no ? __("Serial Nos") : __("Batch Nos");
+		let primary_label = this.bundle ? __("Update") : __("Add");
 
 		if (this.item?.has_serial_no && this.item?.has_batch_no) {
-			label = __('Serial Nos / Batch Nos');
+			label = __("Serial Nos / Batch Nos");
 		}
 
 		let fields = [
 			{
-				fieldtype: 'Section Break',
-				label: __('{0} {1} via CSV File', [primary_label, label])
-			}
-		]
+				fieldtype: "Section Break",
+				label: __("{0} {1} via CSV File", [primary_label, label]),
+			},
+		];
 
 		if (this.item?.has_serial_no) {
-			fields = [...fields,
+			fields = [
+				...fields,
 				{
-					fieldtype: 'Check',
-					label: __('Import Using CSV file'),
-					fieldname: 'import_using_csv_file',
+					fieldtype: "Check",
+					label: __("Import Using CSV file"),
+					fieldname: "import_using_csv_file",
 					default: 0,
 				},
 				{
-					fieldtype: 'Section Break',
-					label: __('{0} {1} Manually', [primary_label, label]),
-					depends_on: 'eval:doc.import_using_csv_file === 0',
+					fieldtype: "Section Break",
+					label: __("{0} {1} Manually", [primary_label, label]),
+					depends_on: "eval:doc.import_using_csv_file === 0",
 				},
 				{
-					fieldtype: 'Small Text',
-					label: __('Enter Serial Nos'),
-					fieldname: 'upload_serial_nos',
-					depends_on: 'eval:doc.import_using_csv_file === 0',
-					description: __('Enter each serial no in a new line'),
+					fieldtype: "Small Text",
+					label: __("Enter Serial Nos"),
+					fieldname: "upload_serial_nos",
+					depends_on: "eval:doc.import_using_csv_file === 0",
+					description: __("Enter each serial no in a new line"),
 				},
 				{
-					fieldtype: 'Column Break',
-					depends_on: 'eval:doc.import_using_csv_file === 0',
+					fieldtype: "Column Break",
+					depends_on: "eval:doc.import_using_csv_file === 0",
 				},
 				{
-					fieldtype: 'Button',
-					fieldname: 'make_serial_nos',
-					label: __('Create Serial Nos'),
-					depends_on: 'eval:doc.import_using_csv_file === 0',
+					fieldtype: "Button",
+					fieldname: "make_serial_nos",
+					label: __("Create Serial Nos"),
+					depends_on: "eval:doc.import_using_csv_file === 0",
 					click: () => {
 						this.create_serial_nos();
-					}
+					},
 				},
 				{
-					fieldtype: 'Section Break',
-					depends_on: 'eval:doc.import_using_csv_file === 1',
-				}
+					fieldtype: "Section Break",
+					depends_on: "eval:doc.import_using_csv_file === 1",
+				},
 			];
 		}
 
-		fields = [...fields,
+		fields = [
+			...fields,
 			{
-				fieldtype: 'Button',
-				fieldname: 'download_csv',
-				label: __('Download CSV Template'),
-				click: () => this.download_csv_file()
+				fieldtype: "Button",
+				fieldname: "download_csv",
+				label: __("Download CSV Template"),
+				click: () => this.download_csv_file(),
 			},
 			{
-				fieldtype: 'Column Break',
+				fieldtype: "Column Break",
 			},
 			{
-				fieldtype: 'Attach',
-				fieldname: 'attach_serial_batch_csv',
-				label: __('Attach CSV File'),
-				onchange: () => this.upload_csv_file()
-			}
+				fieldtype: "Attach",
+				fieldname: "attach_serial_batch_csv",
+				label: __("Attach CSV File"),
+				onchange: () => this.upload_csv_file(),
+			},
 		];
 
 		return fields;
 	}
 
 	create_serial_nos() {
-		let {upload_serial_nos} = this.dialog.get_values();
+		let { upload_serial_nos } = this.dialog.get_values();
 
 		if (!upload_serial_nos) {
-			frappe.throw(__('Please enter Serial Nos'));
+			frappe.throw(__("Please enter Serial Nos"));
 		}
 
 		frappe.call({
-			method: 'erpnext.stock.doctype.serial_and_batch_bundle.serial_and_batch_bundle.create_serial_nos',
+			method: "erpnext.stock.doctype.serial_and_batch_bundle.serial_and_batch_bundle.create_serial_nos",
 			args: {
 				item_code: this.item.item_code,
-				serial_nos: upload_serial_nos
+				serial_nos: upload_serial_nos,
 			},
 			callback: (r) => {
 				if (r.message) {
@@ -274,20 +274,22 @@
 					this.set_data(r.message);
 					this.update_bundle_entries();
 				}
-			}
+			},
 		});
 	}
 
 	download_csv_file() {
-		let csvFileData = ['Serial No'];
+		let csvFileData = ["Serial No"];
 
 		if (this.item.has_serial_no && this.item.has_batch_no) {
-			csvFileData = ['Serial No', 'Batch No', 'Quantity'];
+			csvFileData = ["Serial No", "Batch No", "Quantity"];
 		} else if (this.item.has_batch_no) {
-			csvFileData = ['Batch No', 'Quantity'];
+			csvFileData = ["Batch No", "Quantity"];
 		}
 
-		const method = `/api/method/erpnext.stock.doctype.serial_and_batch_bundle.serial_and_batch_bundle.download_blank_csv_template?content=${encodeURIComponent(JSON.stringify(csvFileData))}`;
+		const method = `/api/method/erpnext.stock.doctype.serial_and_batch_bundle.serial_and_batch_bundle.download_blank_csv_template?content=${encodeURIComponent(
+			JSON.stringify(csvFileData)
+		)}`;
 		const w = window.open(frappe.urllib.get_full_url(method));
 		if (!w) {
 			frappe.msgprint(__("Please enable pop-ups"));
@@ -295,13 +297,13 @@
 	}
 
 	upload_csv_file() {
-		const file_path = this.dialog.get_value("attach_serial_batch_csv")
+		const file_path = this.dialog.get_value("attach_serial_batch_csv");
 
 		frappe.call({
-			method: 'erpnext.stock.doctype.serial_and_batch_bundle.serial_and_batch_bundle.upload_csv_file',
+			method: "erpnext.stock.doctype.serial_and_batch_bundle.serial_and_batch_bundle.upload_csv_file",
 			args: {
 				item_code: this.item.item_code,
-				file_path: file_path
+				file_path: file_path,
 			},
 			callback: (r) => {
 				if (r.message.serial_nos && r.message.serial_nos.length) {
@@ -309,102 +311,106 @@
 				} else if (r.message.batch_nos && r.message.batch_nos.length) {
 					this.set_data(r.message.batch_nos);
 				}
-			}
+			},
 		});
 	}
 
 	get_filter_fields() {
 		return [
 			{
-				fieldtype: 'Section Break',
-				label: __('Auto Fetch')
+				fieldtype: "Section Break",
+				label: __("Auto Fetch"),
 			},
 			{
-				fieldtype: 'Float',
-				fieldname: 'qty',
-				label: __('Qty to Fetch'),
-				onchange: () => this.get_auto_data()
+				fieldtype: "Float",
+				fieldname: "qty",
+				label: __("Qty to Fetch"),
+				onchange: () => this.get_auto_data(),
 			},
 			{
-				fieldtype: 'Column Break',
+				fieldtype: "Column Break",
 			},
 			{
-				fieldtype: 'Select',
-				options: ['FIFO', 'LIFO', 'Expiry'],
-				default: 'FIFO',
-				fieldname: 'based_on',
-				label: __('Fetch Based On'),
-				onchange: () => this.get_auto_data()
+				fieldtype: "Select",
+				options: ["FIFO", "LIFO", "Expiry"],
+				default: "FIFO",
+				fieldname: "based_on",
+				label: __("Fetch Based On"),
+				onchange: () => this.get_auto_data(),
 			},
 			{
-				fieldtype: 'Section Break',
+				fieldtype: "Section Break",
 			},
-		]
-
+		];
 	}
 
 	get_dialog_table_fields() {
-		let fields = []
+		let fields = [];
 
 		if (this.item.has_serial_no) {
 			fields.push({
-				fieldtype: 'Link',
-				options: 'Serial No',
-				fieldname: 'serial_no',
-				label: __('Serial No'),
+				fieldtype: "Link",
+				options: "Serial No",
+				fieldname: "serial_no",
+				label: __("Serial No"),
 				in_list_view: 1,
 				get_query: () => {
 					return {
-						filters: this.get_serial_no_filters()
-					}
-				}
-			})
+						filters: this.get_serial_no_filters(),
+					};
+				},
+			});
 		}
 
-		let batch_fields = []
+		let batch_fields = [];
 		if (this.item.has_batch_no) {
 			batch_fields = [
 				{
-					fieldtype: 'Link',
-					options: 'Batch',
-					fieldname: 'batch_no',
-					label: __('Batch No'),
+					fieldtype: "Link",
+					options: "Batch",
+					fieldname: "batch_no",
+					label: __("Batch No"),
 					in_list_view: 1,
 					get_query: () => {
 						let is_inward = false;
-						if ((["Purchase Receipt", "Purchase Invoice"].includes(this.frm.doc.doctype) && !this.frm.doc.is_return)
-							|| (this.frm.doc.doctype === 'Stock Entry' && this.frm.doc.purpose === 'Material Receipt')) {
+						if (
+							(["Purchase Receipt", "Purchase Invoice"].includes(this.frm.doc.doctype) &&
+								!this.frm.doc.is_return) ||
+							(this.frm.doc.doctype === "Stock Entry" &&
+								this.frm.doc.purpose === "Material Receipt")
+						) {
 							is_inward = true;
 						}
 
 						return {
-							query : "erpnext.controllers.queries.get_batch_no",
+							query: "erpnext.controllers.queries.get_batch_no",
 							filters: {
-								'item_code': this.item.item_code,
-								'warehouse': this.item.s_warehouse || this.item.t_warehouse || this.item.warehouse,
-								'is_inward': is_inward
-							}
-						}
+								item_code: this.item.item_code,
+								warehouse:
+									this.item.s_warehouse || this.item.t_warehouse || this.item.warehouse,
+								is_inward: is_inward,
+							},
+						};
 					},
-				}
-			]
+				},
+			];
 
 			if (!this.item.has_serial_no) {
 				batch_fields.push({
-					fieldtype: 'Float',
-					fieldname: 'qty',
-					label: __('Quantity'),
+					fieldtype: "Float",
+					fieldname: "qty",
+					label: __("Quantity"),
 					in_list_view: 1,
-				})
+				});
 			}
 		}
 
 		fields = [...fields, ...batch_fields];
 
 		fields.push({
-			fieldtype: 'Data',
-			fieldname: 'name',
-			label: __('Name'),
+			fieldtype: "Data",
+			fieldname: "name",
+			label: __("Name"),
 			hidden: 1,
 		});
 
@@ -425,26 +431,26 @@
 		}
 
 		if (!based_on) {
-			based_on = 'FIFO';
+			based_on = "FIFO";
 		}
 
 		if (qty) {
 			frappe.call({
-				method: 'erpnext.stock.doctype.serial_and_batch_bundle.serial_and_batch_bundle.get_auto_data',
+				method: "erpnext.stock.doctype.serial_and_batch_bundle.serial_and_batch_bundle.get_auto_data",
 				args: {
 					item_code: this.item.item_code,
 					warehouse: this.item.warehouse || this.item.s_warehouse,
 					has_serial_no: this.item.has_serial_no,
 					has_batch_no: this.item.has_batch_no,
 					qty: qty,
-					based_on: based_on
+					based_on: based_on,
 				},
 				callback: (r) => {
 					if (r.message) {
 						this.dialog.fields_dict.entries.df.data = r.message;
 						this.dialog.fields_dict.entries.grid.refresh();
 					}
-				}
+				},
 			});
 		}
 	}
@@ -454,7 +460,7 @@
 
 		if (scan_serial_no || scan_batch_no) {
 			frappe.call({
-				method: 'erpnext.stock.doctype.serial_and_batch_bundle.serial_and_batch_bundle.is_serial_batch_no_exists',
+				method: "erpnext.stock.doctype.serial_and_batch_bundle.serial_and_batch_bundle.is_serial_batch_no_exists",
 				args: {
 					item_code: this.item.item_code,
 					type_of_transaction: this.item.type_of_transaction,
@@ -463,9 +469,8 @@
 				},
 				callback: (r) => {
 					this.update_serial_batch_no();
-				}
-
-			})
+				},
+			});
 		}
 	}
 
@@ -473,25 +478,25 @@
 		const { scan_serial_no, scan_batch_no } = this.dialog.get_values();
 
 		if (scan_serial_no) {
-			let existing_row = this.dialog.fields_dict.entries.df.data.filter(d => {
+			let existing_row = this.dialog.fields_dict.entries.df.data.filter((d) => {
 				if (d.serial_no === scan_serial_no) {
-					return d
+					return d;
 				}
 			});
 
 			if (existing_row?.length) {
-				frappe.throw(__('Serial No {0} already exists', [scan_serial_no]));
+				frappe.throw(__("Serial No {0} already exists", [scan_serial_no]));
 			}
 
 			if (!this.item.has_batch_no) {
 				this.dialog.fields_dict.entries.df.data.push({
-					serial_no: scan_serial_no
+					serial_no: scan_serial_no,
 				});
 
-				this.dialog.fields_dict.scan_serial_no.set_value('');
+				this.dialog.fields_dict.scan_serial_no.set_value("");
 			} else {
 				frappe.call({
-					method: 'erpnext.stock.doctype.serial_and_batch_bundle.serial_and_batch_bundle.get_batch_no_from_serial_no',
+					method: "erpnext.stock.doctype.serial_and_batch_bundle.serial_and_batch_bundle.get_batch_no_from_serial_no",
 					args: {
 						serial_no: scan_serial_no,
 					},
@@ -499,19 +504,18 @@
 						if (r.message) {
 							this.dialog.fields_dict.entries.df.data.push({
 								serial_no: scan_serial_no,
-								batch_no: r.message
+								batch_no: r.message,
 							});
 
-							this.dialog.fields_dict.scan_serial_no.set_value('');
+							this.dialog.fields_dict.scan_serial_no.set_value("");
 						}
-					}
-
-				})
+					},
+				});
 			}
 		} else if (scan_batch_no) {
-			let existing_row = this.dialog.fields_dict.entries.df.data.filter(d => {
+			let existing_row = this.dialog.fields_dict.entries.df.data.filter((d) => {
 				if (d.batch_no === scan_batch_no) {
-					return d
+					return d;
 				}
 			});
 
@@ -520,11 +524,11 @@
 			} else {
 				this.dialog.fields_dict.entries.df.data.push({
 					batch_no: scan_batch_no,
-					qty: 1
+					qty: 1,
 				});
 			}
 
-			this.dialog.fields_dict.scan_batch_no.set_value('');
+			this.dialog.fields_dict.scan_batch_no.set_value("");
 		}
 
 		this.dialog.fields_dict.entries.grid.refresh();
@@ -532,33 +536,33 @@
 
 	update_bundle_entries() {
 		let entries = this.dialog.get_values().entries;
-		let warehouse = this.dialog.get_value('warehouse');
+		let warehouse = this.dialog.get_value("warehouse");
 
-		if (entries && !entries.length || !entries) {
-			frappe.throw(__('Please add atleast one Serial No / Batch No'));
+		if ((entries && !entries.length) || !entries) {
+			frappe.throw(__("Please add atleast one Serial No / Batch No"));
 		}
 
-		frappe.call({
-			method: 'erpnext.stock.doctype.serial_and_batch_bundle.serial_and_batch_bundle.add_serial_batch_ledgers',
-			args: {
-				entries: entries,
-				child_row: this.item,
-				doc: this.frm.doc,
-				warehouse: warehouse,
-			}
-		}).then(r => {
-			this.callback && this.callback(r.message);
-			this.frm.save();
-			this.dialog.hide();
-		})
+		frappe
+			.call({
+				method: "erpnext.stock.doctype.serial_and_batch_bundle.serial_and_batch_bundle.add_serial_batch_ledgers",
+				args: {
+					entries: entries,
+					child_row: this.item,
+					doc: this.frm.doc,
+					warehouse: warehouse,
+				},
+			})
+			.then((r) => {
+				this.callback && this.callback(r.message);
+				this.frm.save();
+				this.dialog.hide();
+			});
 	}
 
 	edit_full_form() {
-		let bundle_id = this.item.serial_and_batch_bundle
+		let bundle_id = this.item.serial_and_batch_bundle;
 		if (!bundle_id) {
-			let _new = frappe.model.get_new_doc(
-				"Serial and Batch Bundle", null, null, true
-			);
+			let _new = frappe.model.get_new_doc("Serial and Batch Bundle", null, null, true);
 
 			_new.item_code = this.item.item_code;
 			_new.warehouse = this.get_warehouse();
@@ -575,34 +579,36 @@
 	}
 
 	get_warehouse() {
-		return (this.item?.type_of_transaction === "Outward" ?
-			(this.item.warehouse || this.item.s_warehouse)
-			: (this.item.warehouse || this.item.t_warehouse));
+		return this.item?.type_of_transaction === "Outward"
+			? this.item.warehouse || this.item.s_warehouse
+			: this.item.warehouse || this.item.t_warehouse;
 	}
 
 	render_data() {
 		if (this.bundle) {
-			frappe.call({
-				method: 'erpnext.stock.doctype.serial_and_batch_bundle.serial_and_batch_bundle.get_serial_batch_ledgers',
-				args: {
-					item_code: this.item.item_code,
-					name: this.bundle,
-					voucher_no: !this.frm.is_new() ? this.item.parent : "",
-				}
-			}).then(r => {
-				if (r.message) {
-					this.set_data(r.message);
-				}
-			})
+			frappe
+				.call({
+					method: "erpnext.stock.doctype.serial_and_batch_bundle.serial_and_batch_bundle.get_serial_batch_ledgers",
+					args: {
+						item_code: this.item.item_code,
+						name: this.bundle,
+						voucher_no: !this.frm.is_new() ? this.item.parent : "",
+					},
+				})
+				.then((r) => {
+					if (r.message) {
+						this.set_data(r.message);
+					}
+				});
 		}
 	}
 
 	set_data(data) {
-		data.forEach(d => {
+		data.forEach((d) => {
 			d.qty = Math.abs(d.qty);
 			this.dialog.fields_dict.entries.df.data.push(d);
 		});
 
 		this.dialog.fields_dict.entries.grid.refresh();
 	}
-}
\ No newline at end of file
+};
diff --git a/erpnext/public/js/utils/supplier_quick_entry.js b/erpnext/public/js/utils/supplier_quick_entry.js
index 687b014..968ef74 100644
--- a/erpnext/public/js/utils/supplier_quick_entry.js
+++ b/erpnext/public/js/utils/supplier_quick_entry.js
@@ -1,3 +1,3 @@
-frappe.provide('frappe.ui.form');
+frappe.provide("frappe.ui.form");
 
 frappe.ui.form.SupplierQuickEntryForm = frappe.ui.form.ContactAddressQuickEntryForm;
diff --git a/erpnext/public/js/utils/unreconcile.js b/erpnext/public/js/utils/unreconcile.js
index 79490a1..6864e28 100644
--- a/erpnext/public/js/utils/unreconcile.js
+++ b/erpnext/public/js/utils/unreconcile.js
@@ -1,27 +1,34 @@
-frappe.provide('erpnext.accounts');
+frappe.provide("erpnext.accounts");
 
 erpnext.accounts.unreconcile_payment = {
 	add_unreconcile_btn(frm) {
 		if (frm.doc.docstatus == 1) {
-			if(((frm.doc.doctype == "Journal Entry") && (frm.doc.voucher_type != "Journal Entry"))
-			   || !["Purchase Invoice", "Sales Invoice", "Journal Entry", "Payment Entry"].includes(frm.doc.doctype)
-			  ) {
+			if (
+				(frm.doc.doctype == "Journal Entry" && frm.doc.voucher_type != "Journal Entry") ||
+				!["Purchase Invoice", "Sales Invoice", "Journal Entry", "Payment Entry"].includes(
+					frm.doc.doctype
+				)
+			) {
 				return;
 			}
 
 			frappe.call({
-				"method": "erpnext.accounts.doctype.unreconcile_payment.unreconcile_payment.doc_has_references",
-				"args": {
-					"doctype": frm.doc.doctype,
-					"docname": frm.doc.name
+				method: "erpnext.accounts.doctype.unreconcile_payment.unreconcile_payment.doc_has_references",
+				args: {
+					doctype: frm.doc.doctype,
+					docname: frm.doc.name,
 				},
-				callback: function(r) {
+				callback: function (r) {
 					if (r.message) {
-						frm.add_custom_button(__("UnReconcile"), function() {
-							erpnext.accounts.unreconcile_payment.build_unreconcile_dialog(frm);
-						}, __('Actions'));
+						frm.add_custom_button(
+							__("UnReconcile"),
+							function () {
+								erpnext.accounts.unreconcile_payment.build_unreconcile_dialog(frm);
+							},
+							__("Actions")
+						);
 					}
-				}
+				},
 			});
 		}
 	},
@@ -30,18 +37,18 @@
 		// assuming each row is an individual voucher
 		// pass this to server side method that creates unreconcile doc for each row
 		let selection_map = [];
-		if (['Sales Invoice', 'Purchase Invoice'].includes(frm.doc.doctype)) {
-			selection_map = selections.map(function(elem) {
+		if (["Sales Invoice", "Purchase Invoice"].includes(frm.doc.doctype)) {
+			selection_map = selections.map(function (elem) {
 				return {
 					company: elem.company,
 					voucher_type: elem.voucher_type,
 					voucher_no: elem.voucher_no,
 					against_voucher_type: frm.doc.doctype,
-					against_voucher_no: frm.doc.name
+					against_voucher_no: frm.doc.name,
 				};
 			});
-		} else if (['Payment Entry', 'Journal Entry'].includes(frm.doc.doctype)) {
-			selection_map = selections.map(function(elem) {
+		} else if (["Payment Entry", "Journal Entry"].includes(frm.doc.doctype)) {
+			selection_map = selections.map(function (elem) {
 				return {
 					company: elem.company,
 					voucher_type: frm.doc.doctype,
@@ -55,18 +62,41 @@
 	},
 
 	build_unreconcile_dialog(frm) {
-		if (['Sales Invoice', 'Purchase Invoice', 'Payment Entry', 'Journal Entry'].includes(frm.doc.doctype)) {
+		if (
+			["Sales Invoice", "Purchase Invoice", "Payment Entry", "Journal Entry"].includes(frm.doc.doctype)
+		) {
 			let child_table_fields = [
-				{ label: __("Voucher Type"), fieldname: "voucher_type", fieldtype: "Dynamic Link", options: "DocType", in_list_view: 1, read_only: 1},
-				{ label: __("Voucher No"), fieldname: "voucher_no", fieldtype: "Link", options: "voucher_type", in_list_view: 1, read_only: 1 },
-				{ label: __("Allocated Amount"), fieldname: "allocated_amount", fieldtype: "Currency", in_list_view: 1, read_only: 1 , options: "account_currency"},
-				{ label: __("Currency"), fieldname: "account_currency", fieldtype: "Currency", read_only: 1},
-			]
+				{
+					label: __("Voucher Type"),
+					fieldname: "voucher_type",
+					fieldtype: "Dynamic Link",
+					options: "DocType",
+					in_list_view: 1,
+					read_only: 1,
+				},
+				{
+					label: __("Voucher No"),
+					fieldname: "voucher_no",
+					fieldtype: "Link",
+					options: "voucher_type",
+					in_list_view: 1,
+					read_only: 1,
+				},
+				{
+					label: __("Allocated Amount"),
+					fieldname: "allocated_amount",
+					fieldtype: "Currency",
+					in_list_view: 1,
+					read_only: 1,
+					options: "account_currency",
+				},
+				{ label: __("Currency"), fieldname: "account_currency", fieldtype: "Currency", read_only: 1 },
+			];
 			let unreconcile_dialog_fields = [
 				{
-					label: __('Allocations'),
-					fieldname: 'allocations',
-					fieldtype: 'Table',
+					label: __("Allocations"),
+					fieldname: "allocations",
+					fieldtype: "Table",
 					read_only: 1,
 					fields: child_table_fields,
 				},
@@ -74,54 +104,57 @@
 
 			// get linked payments
 			frappe.call({
-				"method": "erpnext.accounts.doctype.unreconcile_payment.unreconcile_payment.get_linked_payments_for_doc",
-				"args": {
-					"company": frm.doc.company,
-					"doctype": frm.doc.doctype,
-					"docname": frm.doc.name
+				method: "erpnext.accounts.doctype.unreconcile_payment.unreconcile_payment.get_linked_payments_for_doc",
+				args: {
+					company: frm.doc.company,
+					doctype: frm.doc.doctype,
+					docname: frm.doc.name,
 				},
-				callback: function(r) {
+				callback: function (r) {
 					if (r.message) {
 						// populate child table with allocations
 						unreconcile_dialog_fields[0].data = r.message;
-						unreconcile_dialog_fields[0].get_data = function(){ return r.message};
+						unreconcile_dialog_fields[0].get_data = function () {
+							return r.message;
+						};
 
 						let d = new frappe.ui.Dialog({
-							title: 'UnReconcile Allocations',
+							title: "UnReconcile Allocations",
 							fields: unreconcile_dialog_fields,
-							size: 'large',
+							size: "large",
 							cannot_add_rows: true,
-							primary_action_label: 'UnReconcile',
+							primary_action_label: "UnReconcile",
 							primary_action(values) {
-
-								let selected_allocations = values.allocations.filter(x=>x.__checked);
+								let selected_allocations = values.allocations.filter((x) => x.__checked);
 								if (selected_allocations.length > 0) {
-									let selection_map = erpnext.accounts.unreconcile_payment.build_selection_map(frm, selected_allocations);
-									erpnext.accounts.unreconcile_payment.create_unreconcile_docs(selection_map);
+									let selection_map =
+										erpnext.accounts.unreconcile_payment.build_selection_map(
+											frm,
+											selected_allocations
+										);
+									erpnext.accounts.unreconcile_payment.create_unreconcile_docs(
+										selection_map
+									);
 									d.hide();
-
 								} else {
 									frappe.msgprint("No Selection");
 								}
-							}
+							},
 						});
 
 						d.show();
 					}
-				}
+				},
 			});
 		}
 	},
 
 	create_unreconcile_docs(selection_map) {
 		frappe.call({
-			"method": "erpnext.accounts.doctype.unreconcile_payment.unreconcile_payment.create_unreconcile_doc_for_selection",
-			"args": {
-				"selections": selection_map
+			method: "erpnext.accounts.doctype.unreconcile_payment.unreconcile_payment.create_unreconcile_doc_for_selection",
+			args: {
+				selections: selection_map,
 			},
 		});
-	}
-
-
-
-}
+	},
+};
diff --git a/erpnext/public/js/website_theme.js b/erpnext/public/js/website_theme.js
index 0009cac..9c2b8cd 100644
--- a/erpnext/public/js/website_theme.js
+++ b/erpnext/public/js/website_theme.js
@@ -1,14 +1,15 @@
 // Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
 // MIT License. See license.txt
 
-frappe.ui.form.on('Website Theme', {
+frappe.ui.form.on("Website Theme", {
 	validate(frm) {
 		let theme_scss = frm.doc.theme_scss;
-		if (theme_scss && theme_scss.includes('frappe/public/scss/website')
-			&& !theme_scss.includes('erpnext/public/scss/website')
+		if (
+			theme_scss &&
+			theme_scss.includes("frappe/public/scss/website") &&
+			!theme_scss.includes("erpnext/public/scss/website")
 		) {
-			frm.set_value('theme_scss',
-				`${frm.doc.theme_scss}\n@import "erpnext/public/scss/website";`);
+			frm.set_value("theme_scss", `${frm.doc.theme_scss}\n@import "erpnext/public/scss/website";`);
 		}
-	}
+	},
 });
diff --git a/erpnext/public/js/website_utils.js b/erpnext/public/js/website_utils.js
index 2bb5255..981899f 100644
--- a/erpnext/public/js/website_utils.js
+++ b/erpnext/public/js/website_utils.js
@@ -1,14 +1,14 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-if(!window.erpnext) window.erpnext = {};
+if (!window.erpnext) window.erpnext = {};
 
-erpnext.subscribe_to_newsletter = function(opts, btn) {
+erpnext.subscribe_to_newsletter = function (opts, btn) {
 	return frappe.call({
 		type: "POST",
 		method: "frappe.email.doctype.newsletter.newsletter.subscribe",
 		btn: btn,
-		args: {"email": opts.email},
-		callback: opts.callback
+		args: { email: opts.email },
+		callback: opts.callback,
 	});
-}
+};
diff --git a/erpnext/public/scss/erpnext.scss b/erpnext/public/scss/erpnext.scss
index 1626b7c..e45ae50 100644
--- a/erpnext/public/scss/erpnext.scss
+++ b/erpnext/public/scss/erpnext.scss
@@ -51,7 +51,7 @@
 }
 
 // assessment tool
-.frappe-control[data-fieldname='result_html'] {
+.frappe-control[data-fieldname="result_html"] {
 	overflow: scroll;
 }
 .assessment-result-tool {
@@ -70,7 +70,9 @@
 		text-overflow: ellipsis;
 	}
 
-	.total-score, .grade, .score {
+	.total-score,
+	.grade,
+	.score {
 		text-align: right;
 	}
 }
@@ -78,13 +80,13 @@
 /* pos */
 
 body[data-route="pos"] {
-
 	.pos-bill-toolbar {
 		padding: 10px 0px;
 		height: 51px;
 	}
 
-	.pos-bill-item:hover, .list-customers-table > .pos-list-row:hover {
+	.pos-bill-item:hover,
+	.list-customers-table > .pos-list-row:hover {
 		background-color: #f5f7fa;
 		cursor: pointer;
 	}
@@ -135,50 +137,52 @@
 	}
 
 	.pos-payment-row .col-xs-6 {
-		padding :15px;
+		padding: 15px;
 	}
 
 	.pos-payment-row {
-		border-bottom:1px solid var(--border-color);
+		border-bottom: 1px solid var(--border-color);
 		margin: 2px 0px 5px 0px;
 		height: 60px;
 		margin-top: 0px;
 		margin-bottom: 0px;
 	}
 
-	.pos-payment-row:hover, .pos-keyboard-key:hover{
+	.pos-payment-row:hover,
+	.pos-keyboard-key:hover {
 		background-color: var(--bg-color);
 		cursor: pointer;
 	}
 
-	.pos-keyboard-key, .delete-btn {
+	.pos-keyboard-key,
+	.delete-btn {
 		border: 1px solid var(--border-color);
-		height:85px;
-		width:85px;
-		margin:10px 10px;
-		font-size:24px;
-		font-weight:200;
-		background-color: #FDFDFD;
+		height: 85px;
+		width: 85px;
+		margin: 10px 10px;
+		font-size: 24px;
+		font-weight: 200;
+		background-color: #fdfdfd;
 		border-color: #e8e8e8;
 	}
 
 	.numeric-keypad {
 		border: 1px solid var(--border-color);
-		height:69px;
-		width:69px;
-		font-size:20px;
-		font-weight:200;
-		background-color: #FDFDFD;
+		height: 69px;
+		width: 69px;
+		font-size: 20px;
+		font-weight: 200;
+		background-color: #fdfdfd;
 		border-color: #e8e8e8;
-		margin-left:-4px;
+		margin-left: -4px;
 	}
 
 	.pos-pay {
-		height:69px;
-		width:69px;
-		font-size:17px;
-		font-weight:200;
-		margin-left:-4px;
+		height: 69px;
+		width: 69px;
+		font-size: 17px;
+		font-weight: 200;
+		margin-left: -4px;
 	}
 
 	.numeric-keypad {
@@ -188,7 +192,7 @@
 		font-weight: 200;
 		border-radius: 0;
 		background-color: #fff;
-		margin-left:-4px;
+		margin-left: -4px;
 
 		@media (max-width: var(--xl-width)) {
 			height: 45px;
@@ -253,7 +257,8 @@
 		.amount-row h3 {
 			font-size: 15px;
 		}
-		.pos-keyboard-key, .delete-btn {
+		.pos-keyboard-key,
+		.delete-btn {
 			height: 50px;
 		}
 		.multimode-payments {
@@ -277,7 +282,8 @@
 		padding: 15px 10px;
 	}
 
-	.write_off_amount, .change_amount {
+	.write_off_amount,
+	.change_amount {
 		margin: 15px;
 		width: 130px;
 	}
@@ -301,10 +307,11 @@
 		}
 
 		.subject {
-			width: 40%
+			width: 40%;
 		}
 
-		.list-row-checkbox, .list-select-all {
+		.list-row-checkbox,
+		.list-select-all {
 			margin-right: 7px;
 		}
 	}
@@ -397,7 +404,7 @@
 			padding-top: 0;
 		}
 
-		&> .pos-list-row {
+		& > .pos-list-row {
 			border: none;
 
 			@media (max-width: var(--xl-width)) {
@@ -442,13 +449,12 @@
 	padding: 5px 9px;
 	border-radius: 3px;
 	color: #fff;
-
 }
 
 // Healthcare
 
 .exercise-card {
-	box-shadow: 0 1px 3px rgba(0,0,0,0.30);
+	box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
 	border-radius: 2px;
 	padding: 6px 6px 6px 8px;
 	margin-top: 10px;
@@ -491,7 +497,9 @@
 	padding: 10px;
 }
 
-.plant-floor, .workstation-wrapper, .workstation-card p {
+.plant-floor,
+.workstation-wrapper,
+.workstation-card p {
 	border-radius: var(--border-radius-md);
 	border: 1px solid var(--border-color);
 	box-shadow: none;
@@ -511,13 +519,13 @@
 
 .plant-floor-container {
 	display: grid;
-	grid-template-columns: repeat(6,minmax(0,1fr));
+	grid-template-columns: repeat(6, minmax(0, 1fr));
 	gap: var(--margin-xl);
 }
 
 @media screen and (max-width: 620px) {
 	.plant-floor-container {
-		grid-template-columns: repeat(2,minmax(0,1fr));
+		grid-template-columns: repeat(2, minmax(0, 1fr));
 	}
 }
 
@@ -535,8 +543,8 @@
 .workstation-abbr {
 	display: flex;
 	background-color: var(--control-bg);
-	height:100%;
-	width:100%;
+	height: 100%;
+	width: 100%;
 	align-items: center;
 	justify-content: center;
-}
\ No newline at end of file
+}
diff --git a/erpnext/public/scss/order-page.scss b/erpnext/public/scss/order-page.scss
index 6f5fe5d..2b1dae2 100644
--- a/erpnext/public/scss/order-page.scss
+++ b/erpnext/public/scss/order-page.scss
@@ -1,115 +1,113 @@
 #page-order {
-    .main-column {
-        .page-content-wrapper {
+	.main-column {
+		.page-content-wrapper {
+			.breadcrumb-container {
+				@media screen and (min-width: 567px) {
+					padding-left: var(--padding-sm);
+				}
+			}
 
-            .breadcrumb-container {
-                @media screen and (min-width: 567px) {
-                    padding-left: var(--padding-sm);
-                }
-            }
+			.container.my-4 {
+				background-color: var(--fg-color);
 
-            .container.my-4 {
-                background-color: var(--fg-color);
-
-                @media screen and (min-width: 567px) {
-                    padding: 1.25rem 1.5rem;
-                    border-radius: var(--border-radius-md);
-                    box-shadow: var(--card-shadow);
-                }
-            }
-        }
-    }
+				@media screen and (min-width: 567px) {
+					padding: 1.25rem 1.5rem;
+					border-radius: var(--border-radius-md);
+					box-shadow: var(--card-shadow);
+				}
+			}
+		}
+	}
 }
 
 .indicator-container {
-    @media screen and (max-width: 567px) {
-        padding-bottom: 0.8rem;
-    }
+	@media screen and (max-width: 567px) {
+		padding-bottom: 0.8rem;
+	}
 }
 
 .order-items {
-    padding: 1.5rem 0;
-    border-bottom: 1px solid var(--border-color);
-    color: var(--gray-700);
+	padding: 1.5rem 0;
+	border-bottom: 1px solid var(--border-color);
+	color: var(--gray-700);
 
-    @media screen and (max-width: 567px) {
-        align-items: flex-start !important;
-    }
-    .col-2 {
-        @media screen and (max-width: 567px) {
-            flex: auto;
-            max-width: 28%;
-        }
-    }
+	@media screen and (max-width: 567px) {
+		align-items: flex-start !important;
+	}
+	.col-2 {
+		@media screen and (max-width: 567px) {
+			flex: auto;
+			max-width: 28%;
+		}
+	}
 
-    .order-item-name {
-        font-size: var(--text-base);
-        font-weight: 500;
-    }
+	.order-item-name {
+		font-size: var(--text-base);
+		font-weight: 500;
+	}
 
-    .btn:focus,
-    .btn:hover {
-        background-color: var(--control-bg);
-    }
+	.btn:focus,
+	.btn:hover {
+		background-color: var(--control-bg);
+	}
 
+	.col-6 {
+		@media screen and (max-width: 567px) {
+			max-width: 100%;
+		}
 
-    .col-6 {
-        @media screen and (max-width: 567px) {
-            max-width: 100%;
-        }
-
-        &.order-item-name {
-            font-size: var(--text-base);
-        }
-    }
+		&.order-item-name {
+			font-size: var(--text-base);
+		}
+	}
 }
 
 .item-grand-total {
-    font-size: var(--text-base);
+	font-size: var(--text-base);
 }
 
 .list-item-name,
 .item-total,
 .order-container,
 .order-qty {
-    font-size: var(--text-md);
+	font-size: var(--text-md);
 }
 
 .d-s-n {
-    @media screen and (max-width: 567px) {
-        display: none;
-    }
+	@media screen and (max-width: 567px) {
+		display: none;
+	}
 }
 
 .d-l-n {
-    @media screen and (min-width: 567px) {
-        display: none;
-    }
+	@media screen and (min-width: 567px) {
+		display: none;
+	}
 }
 
 .border-btm {
-    border-bottom: 1px solid var(--border-color);
+	border-bottom: 1px solid var(--border-color);
 }
 
 .order-taxes {
-    display: flex;
+	display: flex;
 
-    @media screen and (min-width: 567px) {
-        justify-content: flex-end;
-    }
+	@media screen and (min-width: 567px) {
+		justify-content: flex-end;
+	}
 
-    .col-4 {
-        padding-right: 0;
+	.col-4 {
+		padding-right: 0;
 
-        .col-8 {
-            padding-left: 0;
-            padding-right: 0;
-        }
+		.col-8 {
+			padding-left: 0;
+			padding-right: 0;
+		}
 
-        @media screen and (max-width: 567px) {
-            padding-left: 0;
-            flex: auto;
-            max-width: 100%;
-        }
-    }
-}
\ No newline at end of file
+		@media screen and (max-width: 567px) {
+			padding-left: 0;
+			flex: auto;
+			max-width: 100%;
+		}
+	}
+}
diff --git a/erpnext/public/scss/point-of-sale.scss b/erpnext/public/scss/point-of-sale.scss
index ba64b59..75bbabd 100644
--- a/erpnext/public/scss/point-of-sale.scss
+++ b/erpnext/public/scss/point-of-sale.scss
@@ -184,7 +184,6 @@
 						font-weight: 700;
 					}
 				}
-
 			}
 		}
 	}
@@ -261,12 +260,12 @@
 						flex-direction: column;
 						margin-right: auto;
 
-						>.customer-name {
+						> .customer-name {
 							font-weight: 700;
 							font-size: var(--text-lg);
 						}
 
-						>.customer-desc {
+						> .customer-desc {
 							font-weight: 500;
 							font-size: var(--text-sm);
 						}
@@ -277,7 +276,6 @@
 						align-items: center;
 						cursor: pointer;
 					}
-
 				}
 
 				> .customer-fields-container {
@@ -407,7 +405,6 @@
 							font-size: var(--text-lg);
 						}
 
-
 						> .item-name-desc {
 							@extend .nowrap;
 							display: flex;
@@ -455,7 +452,6 @@
 								}
 							}
 						}
-
 					}
 				}
 
@@ -854,7 +850,7 @@
 			display: flex;
 			flex: 1;
 			height: 100%;
-    		position: relative;
+			position: relative;
 			justify-content: flex-end;
 
 			> .fields-section {
@@ -1130,7 +1126,6 @@
 					}
 				}
 
-
 				> .summary-btns {
 					display: flex;
 					justify-content: space-between;
@@ -1142,7 +1137,7 @@
 
 					> .new-btn {
 						background-color: var(--blue-500);
-						color:white;
+						color: white;
 						font-weight: 500;
 					}
 				}
@@ -1156,13 +1151,14 @@
 		grid-template-columns: repeat(1, minmax(0, 1fr));
 
 		> .items-selector {
-			grid-column: span 6 / span 1  !important;
+			grid-column: span 6 / span 1 !important;
 			> .items-container {
-			grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
+				grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
 			}
 		}
 
-		> .item-details-container, .customer-cart-container {
+		> .item-details-container,
+		.customer-cart-container {
 			grid-column: span 6 / span 1;
 		}
 
@@ -1179,7 +1175,7 @@
 			}
 		}
 
-		> .past-order-summary{
+		> .past-order-summary {
 			> .invoice-summary-wrapper {
 				width: 100%;
 			}
diff --git a/erpnext/public/scss/website.scss b/erpnext/public/scss/website.scss
index b5e97f1..dd2ae21 100644
--- a/erpnext/public/scss/website.scss
+++ b/erpnext/public/scss/website.scss
@@ -1,4 +1,4 @@
-@import './order-page';
+@import "./order-page";
 
 .filter-options {
 	max-height: 300px;
@@ -52,7 +52,8 @@
 	border-bottom: 1px solid var(--border-color);
 	position: relative;
 
-	&:only-child, &:last-child {
+	&:only-child,
+	&:last-child {
 		border: 0;
 	}
 
@@ -80,7 +81,8 @@
 	}
 }
 
-.list-item-name, .item-total {
+.list-item-name,
+.item-total {
 	font-size: var(--font-size-sm);
 }
 
@@ -88,4 +90,4 @@
 	@media screen and (max-width: 567px) {
 		margin-top: 1rem;
 	}
-}
\ No newline at end of file
+}
diff --git a/erpnext/quality_management/doctype/non_conformance/non_conformance.js b/erpnext/quality_management/doctype/non_conformance/non_conformance.js
index e7f5eee..5524d74 100644
--- a/erpnext/quality_management/doctype/non_conformance/non_conformance.js
+++ b/erpnext/quality_management/doctype/non_conformance/non_conformance.js
@@ -1,8 +1,7 @@
 // Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Non Conformance', {
+frappe.ui.form.on("Non Conformance", {
 	// refresh: function(frm) {
-
 	// }
 });
diff --git a/erpnext/quality_management/doctype/quality_action/quality_action.js b/erpnext/quality_management/doctype/quality_action/quality_action.js
index b44f2a2..8261fab 100644
--- a/erpnext/quality_management/doctype/quality_action/quality_action.js
+++ b/erpnext/quality_management/doctype/quality_action/quality_action.js
@@ -1,6 +1,4 @@
 // Copyright (c) 2018, Frappe and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Quality Action', {
-
-});
+frappe.ui.form.on("Quality Action", {});
diff --git a/erpnext/quality_management/doctype/quality_feedback/quality_feedback.js b/erpnext/quality_management/doctype/quality_feedback/quality_feedback.js
index 6fb3267..8166c25 100644
--- a/erpnext/quality_management/doctype/quality_feedback/quality_feedback.js
+++ b/erpnext/quality_management/doctype/quality_feedback/quality_feedback.js
@@ -1,10 +1,10 @@
 // Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Quality Feedback', {
-	template: function(frm) {
+frappe.ui.form.on("Quality Feedback", {
+	template: function (frm) {
 		if (frm.doc.template) {
-			frm.call('set_parameters');
+			frm.call("set_parameters");
 		}
-	}
+	},
 });
diff --git a/erpnext/quality_management/doctype/quality_feedback_template/quality_feedback_template.js b/erpnext/quality_management/doctype/quality_feedback_template/quality_feedback_template.js
index 490eed9..054572a 100644
--- a/erpnext/quality_management/doctype/quality_feedback_template/quality_feedback_template.js
+++ b/erpnext/quality_management/doctype/quality_feedback_template/quality_feedback_template.js
@@ -1,8 +1,7 @@
 // Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Quality Feedback Template', {
+frappe.ui.form.on("Quality Feedback Template", {
 	// refresh: function(frm) {
-
 	// }
 });
diff --git a/erpnext/quality_management/doctype/quality_goal/quality_goal.js b/erpnext/quality_management/doctype/quality_goal/quality_goal.js
index 40cb4d9..5b7cae5 100644
--- a/erpnext/quality_management/doctype/quality_goal/quality_goal.js
+++ b/erpnext/quality_management/doctype/quality_goal/quality_goal.js
@@ -1,7 +1,7 @@
 // Copyright (c) 2018, Frappe and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Quality Goal', {
+frappe.ui.form.on("Quality Goal", {
 	// refresh: function(frm) {
 	// }
 });
diff --git a/erpnext/quality_management/doctype/quality_meeting/quality_meeting.js b/erpnext/quality_management/doctype/quality_meeting/quality_meeting.js
index eb7a8c3..00ab1e4 100644
--- a/erpnext/quality_management/doctype/quality_meeting/quality_meeting.js
+++ b/erpnext/quality_management/doctype/quality_meeting/quality_meeting.js
@@ -1,6 +1,4 @@
 // Copyright (c) 2018, Frappe and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Quality Meeting', {
-
-});
+frappe.ui.form.on("Quality Meeting", {});
diff --git a/erpnext/quality_management/doctype/quality_meeting/quality_meeting_list.js b/erpnext/quality_management/doctype/quality_meeting/quality_meeting_list.js
index 5fd1b30..ae3112f 100644
--- a/erpnext/quality_management/doctype/quality_meeting/quality_meeting_list.js
+++ b/erpnext/quality_management/doctype/quality_meeting/quality_meeting_list.js
@@ -1,11 +1,10 @@
-frappe.listview_settings['Quality Meeting'] = {
+frappe.listview_settings["Quality Meeting"] = {
 	add_fields: ["status"],
-	get_indicator: function(doc) {
-		if(doc.status == "Open") {
+	get_indicator: function (doc) {
+		if (doc.status == "Open") {
 			return [__("Open"), "red", "status=,Open"];
-		}
-		else if(doc.status == "Close") {
+		} else if (doc.status == "Close") {
 			return [__("Close"), "green", ",status=,Close"];
 		}
-	}
+	},
 };
diff --git a/erpnext/quality_management/doctype/quality_meeting_agenda/quality_meeting_agenda.js b/erpnext/quality_management/doctype/quality_meeting_agenda/quality_meeting_agenda.js
index 09989dc..ad037c2 100644
--- a/erpnext/quality_management/doctype/quality_meeting_agenda/quality_meeting_agenda.js
+++ b/erpnext/quality_management/doctype/quality_meeting_agenda/quality_meeting_agenda.js
@@ -1,8 +1,7 @@
 // Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Quality Meeting Agenda', {
+frappe.ui.form.on("Quality Meeting Agenda", {
 	// refresh: function(frm) {
-
 	// }
 });
diff --git a/erpnext/quality_management/doctype/quality_procedure/quality_procedure.js b/erpnext/quality_management/doctype/quality_procedure/quality_procedure.js
index 79fd2eb..a2c16dd 100644
--- a/erpnext/quality_management/doctype/quality_procedure/quality_procedure.js
+++ b/erpnext/quality_management/doctype/quality_procedure/quality_procedure.js
@@ -1,23 +1,23 @@
 // Copyright (c) 2018, Frappe and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Quality Procedure', {
-	refresh: function(frm) {
-		frm.set_query('procedure', 'processes', (frm) =>{
+frappe.ui.form.on("Quality Procedure", {
+	refresh: function (frm) {
+		frm.set_query("procedure", "processes", (frm) => {
 			return {
 				filters: {
-					name: ['not in', [frm.parent_quality_procedure, frm.name]]
-				}
+					name: ["not in", [frm.parent_quality_procedure, frm.name]],
+				},
 			};
 		});
 
-		frm.set_query('parent_quality_procedure', function(){
+		frm.set_query("parent_quality_procedure", function () {
 			return {
 				filters: {
 					is_group: 1,
-					name: ['!=', frm.doc.name]
-				}
+					name: ["!=", frm.doc.name],
+				},
 			};
 		});
-	}
+	},
 });
diff --git a/erpnext/quality_management/doctype/quality_procedure/quality_procedure_tree.js b/erpnext/quality_management/doctype/quality_procedure/quality_procedure_tree.js
index 2851fcc..25f9a59 100644
--- a/erpnext/quality_management/doctype/quality_procedure/quality_procedure_tree.js
+++ b/erpnext/quality_management/doctype/quality_procedure/quality_procedure_tree.js
@@ -1,18 +1,18 @@
 frappe.treeview_settings["Quality Procedure"] = {
-	ignore_fields:["parent_quality_procedure"],
-	get_tree_nodes: 'erpnext.quality_management.doctype.quality_procedure.quality_procedure.get_children',
-	add_tree_node: 'erpnext.quality_management.doctype.quality_procedure.quality_procedure.add_node',
+	ignore_fields: ["parent_quality_procedure"],
+	get_tree_nodes: "erpnext.quality_management.doctype.quality_procedure.quality_procedure.get_children",
+	add_tree_node: "erpnext.quality_management.doctype.quality_procedure.quality_procedure.add_node",
 	filters: [
 		{
 			fieldname: "parent_quality_procedure",
 			fieldtype: "Link",
 			options: "Quality Procedure",
 			label: __("Quality Procedure"),
-			get_query: function() {
+			get_query: function () {
 				return {
-					filters: [["Quality Procedure", 'is_group', '=', 1]]
+					filters: [["Quality Procedure", "is_group", "=", 1]],
 				};
-			}
+			},
 		},
 	],
 	breadcrumb: "Quality Management",
@@ -22,13 +22,13 @@
 	menu_items: [
 		{
 			label: __("New Quality Procedure"),
-			action: function() {
+			action: function () {
 				frappe.new_doc("Quality Procedure", true);
 			},
-			condition: 'frappe.boot.user.can_create.indexOf("Quality Procedure") !== -1'
-		}
+			condition: 'frappe.boot.user.can_create.indexOf("Quality Procedure") !== -1',
+		},
 	],
-	onload: function(treeview) {
+	onload: function (treeview) {
 		treeview.make_tree();
 	},
 };
diff --git a/erpnext/quality_management/doctype/quality_review/quality_review.js b/erpnext/quality_management/doctype/quality_review/quality_review.js
index 0e6b703..504f8fc 100644
--- a/erpnext/quality_management/doctype/quality_review/quality_review.js
+++ b/erpnext/quality_management/doctype/quality_review/quality_review.js
@@ -1,15 +1,15 @@
 // Copyright (c) 2018, Frappe and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Quality Review', {
-	goal: function(frm) {
+frappe.ui.form.on("Quality Review", {
+	goal: function (frm) {
 		frappe.call({
-			"method": "frappe.client.get",
+			method: "frappe.client.get",
 			args: {
 				doctype: "Quality Goal",
-				name: frm.doc.goal
+				name: frm.doc.goal,
 			},
-			callback: function(data){
+			callback: function (data) {
 				frm.fields_dict.reviews.grid.remove_all();
 				let objectives = data.message.objectives;
 				for (var i in objectives) {
@@ -19,7 +19,7 @@
 					frm.fields_dict.reviews.get_value()[i].uom = objectives[i].uom;
 				}
 				frm.refresh();
-			}
+			},
 		});
 	},
 });
diff --git a/erpnext/quality_management/doctype/quality_review/quality_review_list.js b/erpnext/quality_management/doctype/quality_review/quality_review_list.js
index b0be783..3be6c10 100644
--- a/erpnext/quality_management/doctype/quality_review/quality_review_list.js
+++ b/erpnext/quality_management/doctype/quality_review/quality_review_list.js
@@ -1,12 +1,10 @@
-frappe.listview_settings['Quality Review'] = {
+frappe.listview_settings["Quality Review"] = {
 	add_fields: ["action"],
-	get_indicator: function(doc)
-	{
-		if(doc.action == "No Action") {
+	get_indicator: function (doc) {
+		if (doc.action == "No Action") {
 			return [__("No Action"), "green", "action,=,No Action"];
-		}
-		else if(doc.action == "Action Initialised") {
+		} else if (doc.action == "Action Initialised") {
 			return [__("Action Initialised"), "red", "action,=,Action Initialised"];
 		}
-	}
+	},
 };
diff --git a/erpnext/regional/doctype/import_supplier_invoice/import_supplier_invoice.js b/erpnext/regional/doctype/import_supplier_invoice/import_supplier_invoice.js
index 5918ec8..5fbb5cb 100644
--- a/erpnext/regional/doctype/import_supplier_invoice/import_supplier_invoice.js
+++ b/erpnext/regional/doctype/import_supplier_invoice/import_supplier_invoice.js
@@ -1,39 +1,39 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.ui.form.on('Import Supplier Invoice', {
-	onload: function(frm) {
+frappe.ui.form.on("Import Supplier Invoice", {
+	onload: function (frm) {
 		frappe.realtime.on("import_invoice_update", function (data) {
 			frm.dashboard.show_progress(data.title, (data.count / data.total) * 100, data.message);
 			if (data.count == data.total) {
-				window.setTimeout(title => frm.dashboard.hide_progress(title), 1500, data.title);
+				window.setTimeout((title) => frm.dashboard.hide_progress(title), 1500, data.title);
 			}
 		});
 	},
-	setup: function(frm) {
-		frm.set_query("tax_account", function(doc) {
+	setup: function (frm) {
+		frm.set_query("tax_account", function (doc) {
 			return {
 				filters: {
-					account_type: 'Tax',
-					company: doc.company
-				}
+					account_type: "Tax",
+					company: doc.company,
+				},
 			};
 		});
 
-		frm.set_query("default_buying_price_list", function(doc) {
+		frm.set_query("default_buying_price_list", function (doc) {
 			return {
 				filters: {
-					currency: frappe.get_doc(":Company", doc.company).default_currency
-				}
+					currency: frappe.get_doc(":Company", doc.company).default_currency,
+				},
 			};
 		});
 	},
 
-	refresh: function(frm) {
+	refresh: function (frm) {
 		frm.trigger("toggle_read_only_fields");
 	},
 
-	toggle_read_only_fields: function(frm) {
+	toggle_read_only_fields: function (frm) {
 		if (in_list(["File Import Completed", "Processing File Data"], frm.doc.status)) {
 			cur_frm.set_read_only();
 			cur_frm.refresh_fields();
@@ -41,6 +41,5 @@
 		} else {
 			frm.set_df_property("import_invoices", "hidden", 0);
 		}
-	}
-
+	},
 });
diff --git a/erpnext/regional/doctype/lower_deduction_certificate/lower_deduction_certificate.js b/erpnext/regional/doctype/lower_deduction_certificate/lower_deduction_certificate.js
index 8257bf8..02eaff5 100644
--- a/erpnext/regional/doctype/lower_deduction_certificate/lower_deduction_certificate.js
+++ b/erpnext/regional/doctype/lower_deduction_certificate/lower_deduction_certificate.js
@@ -1,8 +1,7 @@
 // Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Lower Deduction Certificate', {
+frappe.ui.form.on("Lower Deduction Certificate", {
 	// refresh: function(frm) {
-
 	// }
 });
diff --git a/erpnext/regional/doctype/south_africa_vat_settings/south_africa_vat_settings.js b/erpnext/regional/doctype/south_africa_vat_settings/south_africa_vat_settings.js
index e37a61a..86384e4 100644
--- a/erpnext/regional/doctype/south_africa_vat_settings/south_africa_vat_settings.js
+++ b/erpnext/regional/doctype/south_africa_vat_settings/south_africa_vat_settings.js
@@ -1,23 +1,23 @@
 // Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('South Africa VAT Settings', {
-	refresh: function(frm) {
-		frm.set_query("company", function() {
+frappe.ui.form.on("South Africa VAT Settings", {
+	refresh: function (frm) {
+		frm.set_query("company", function () {
 			return {
 				filters: {
 					country: "South Africa",
-				}
+				},
 			};
 		});
-		frm.set_query("account", "vat_accounts", function() {
+		frm.set_query("account", "vat_accounts", function () {
 			return {
 				filters: {
 					company: frm.doc.company,
 					account_type: "Tax",
-					is_group: 0
-				}
+					is_group: 0,
+				},
 			};
 		});
-	}
+	},
 });
diff --git a/erpnext/regional/doctype/uae_vat_settings/uae_vat_settings.js b/erpnext/regional/doctype/uae_vat_settings/uae_vat_settings.js
index 6653141..c7d0f05 100644
--- a/erpnext/regional/doctype/uae_vat_settings/uae_vat_settings.js
+++ b/erpnext/regional/doctype/uae_vat_settings/uae_vat_settings.js
@@ -1,14 +1,14 @@
 // Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('UAE VAT Settings', {
-	onload: function(frm) {
-		frm.set_query('account', 'uae_vat_accounts', function() {
+frappe.ui.form.on("UAE VAT Settings", {
+	onload: function (frm) {
+		frm.set_query("account", "uae_vat_accounts", function () {
 			return {
 				filters: {
-					'company': frm.doc.company
-				}
+					company: frm.doc.company,
+				},
 			};
 		});
-	}
+	},
 });
diff --git a/erpnext/regional/report/electronic_invoice_register/electronic_invoice_register.js b/erpnext/regional/report/electronic_invoice_register/electronic_invoice_register.js
index 4fc1be1..c883489 100644
--- a/erpnext/regional/report/electronic_invoice_register/electronic_invoice_register.js
+++ b/erpnext/regional/report/electronic_invoice_register/electronic_invoice_register.js
@@ -1,53 +1,54 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Electronic Invoice Register"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
-			"width": "80"
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+			width: "80",
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today()
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.get_today(),
 		},
 		{
-			"fieldname":"customer",
-			"label": __("Customer"),
-			"fieldtype": "Link",
-			"options": "Customer"
+			fieldname: "customer",
+			label: __("Customer"),
+			fieldtype: "Link",
+			options: "Customer",
 		},
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company")
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
 		},
 	],
-	"onload": function(reportview) {
-		reportview.page.add_inner_button(__("Export E-Invoices"), function() {
+	onload: function (reportview) {
+		reportview.page.add_inner_button(__("Export E-Invoices"), function () {
 			//TODO: refactor condition to disallow export if report has no data.
 			if (!reportview.data.length) {
 				frappe.msgprint(__("No data to export"));
-				return
+				return;
 			}
 
 			var w = window.open(
 				frappe.urllib.get_full_url(
-					"/api/method/erpnext.regional.italy.utils.export_invoices?"
-					+ "filters=" + JSON.stringify(reportview.get_filter_values())
+					"/api/method/erpnext.regional.italy.utils.export_invoices?" +
+						"filters=" +
+						JSON.stringify(reportview.get_filter_values())
 				)
 			);
 			if (!w) {
-				frappe.msgprint(__("Please enable pop-ups")); return;
+				frappe.msgprint(__("Please enable pop-ups"));
+				return;
 			}
-		})
-	}
-}
+		});
+	},
+};
diff --git a/erpnext/regional/report/irs_1099/irs_1099.js b/erpnext/regional/report/irs_1099/irs_1099.js
index b3508e4..385468b 100644
--- a/erpnext/regional/report/irs_1099/irs_1099.js
+++ b/erpnext/regional/report/irs_1099/irs_1099.js
@@ -2,33 +2,33 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.query_reports["IRS 1099"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname": "company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company"),
-			"reqd": 1,
-			"width": 80,
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
+			reqd: 1,
+			width: 80,
 		},
 		{
-			"fieldname": "fiscal_year",
-			"label": __("Fiscal Year"),
-			"fieldtype": "Link",
-			"options": "Fiscal Year",
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
-			"reqd": 1,
-			"width": 80,
+			fieldname: "fiscal_year",
+			label: __("Fiscal Year"),
+			fieldtype: "Link",
+			options: "Fiscal Year",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
+			reqd: 1,
+			width: 80,
 		},
 		{
-			"fieldname": "supplier_group",
-			"label": __("Supplier Group"),
-			"fieldtype": "Link",
-			"options": "Supplier Group",
-			"default": "",
-			"reqd": 0,
-			"width": 80
+			fieldname: "supplier_group",
+			label: __("Supplier Group"),
+			fieldtype: "Link",
+			options: "Supplier Group",
+			default: "",
+			reqd: 0,
+			width: 80,
 		},
 	],
 
@@ -36,12 +36,15 @@
 		query_report.page.add_inner_button(__("Print IRS 1099 Forms"), () => {
 			build_1099_print(query_report);
 		});
-	}
+	},
 };
 
 function build_1099_print(query_report) {
 	let filters = JSON.stringify(query_report.get_values());
-	let w = window.open('/api/method/erpnext.regional.report.irs_1099.irs_1099.irs_1099_print?' +
-		'&filters=' + encodeURIComponent(filters));
+	let w = window.open(
+		"/api/method/erpnext.regional.report.irs_1099.irs_1099.irs_1099_print?" +
+			"&filters=" +
+			encodeURIComponent(filters)
+	);
 	// w.print();
 }
diff --git a/erpnext/regional/report/uae_vat_201/uae_vat_201.js b/erpnext/regional/report/uae_vat_201/uae_vat_201.js
index eaefc04..49060fd 100644
--- a/erpnext/regional/report/uae_vat_201/uae_vat_201.js
+++ b/erpnext/regional/report/uae_vat_201/uae_vat_201.js
@@ -1,36 +1,38 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["UAE VAT 201"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname": "company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"reqd": 1,
-			"default": frappe.defaults.get_user_default("Company")
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			reqd: 1,
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
-			"fieldname": "from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"reqd": 1,
-			"default": frappe.datetime.add_months(frappe.datetime.get_today(), -3),
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			reqd: 1,
+			default: frappe.datetime.add_months(frappe.datetime.get_today(), -3),
 		},
 		{
-			"fieldname": "to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"reqd": 1,
-			"default": frappe.datetime.get_today()
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			reqd: 1,
+			default: frappe.datetime.get_today(),
 		},
 	],
-	"formatter": function(value, row, column, data, default_formatter) {
-		if (data
-			&& (data.legend=='VAT on Sales and All Other Outputs' || data.legend=='VAT on Expenses and All Other Inputs')
-			&& data.legend==value) {
+	formatter: function (value, row, column, data, default_formatter) {
+		if (
+			data &&
+			(data.legend == "VAT on Sales and All Other Outputs" ||
+				data.legend == "VAT on Expenses and All Other Inputs") &&
+			data.legend == value
+		) {
 			value = $(`<span>${value}</span>`);
 			var $value = $(value).css("font-weight", "bold");
 			value = $value.wrap("<p></p>").parent().html();
diff --git a/erpnext/regional/report/vat_audit_report/vat_audit_report.js b/erpnext/regional/report/vat_audit_report/vat_audit_report.js
index 41318f3..de4fde5 100644
--- a/erpnext/regional/report/vat_audit_report/vat_audit_report.js
+++ b/erpnext/regional/report/vat_audit_report/vat_audit_report.js
@@ -1,31 +1,30 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["VAT Audit Report"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname": "company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"reqd": 1,
-			"default": frappe.defaults.get_user_default("Company")
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			reqd: 1,
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
-			"fieldname": "from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"reqd": 1,
-			"default": frappe.datetime.add_months(frappe.datetime.get_today(), -2),
-			"width": "80"
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			reqd: 1,
+			default: frappe.datetime.add_months(frappe.datetime.get_today(), -2),
+			width: "80",
 		},
 		{
-			"fieldname": "to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"reqd": 1,
-			"default": frappe.datetime.get_today()
-		}
-	]
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			reqd: 1,
+			default: frappe.datetime.get_today(),
+		},
+	],
 };
diff --git a/erpnext/selling/doctype/customer/customer.js b/erpnext/selling/doctype/customer/customer.js
index ddc7e2a..50248a9 100644
--- a/erpnext/selling/doctype/customer/customer.js
+++ b/erpnext/selling/doctype/customer/customer.js
@@ -2,15 +2,15 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.ui.form.on("Customer", {
-	setup: function(frm) {
+	setup: function (frm) {
 		frm.custom_make_buttons = {
-			"Opportunity": "Opportunity",
-			"Quotation": "Quotation",
+			Opportunity: "Opportunity",
+			Quotation: "Quotation",
 			"Sales Order": "Sales Order",
 			"Pricing Rule": "Pricing Rule",
 		};
 		frm.make_methods = {
-			"Quotation": () =>
+			Quotation: () =>
 				frappe.model.open_mapped_doc({
 					method: "erpnext.selling.doctype.customer.customer.make_quotation",
 					frm: frm,
@@ -21,163 +21,181 @@
 					so.customer = frm.doc.name; // Set the current customer as the SO customer
 					frappe.set_route("Form", "Sales Order", so.name);
 				}),
-			"Opportunity": () =>
+			Opportunity: () =>
 				frappe.model.open_mapped_doc({
 					method: "erpnext.selling.doctype.customer.customer.make_opportunity",
 					frm: frm,
 				}),
-			"Pricing Rule": () =>
-				erpnext.utils.make_pricing_rule(frm.doc.doctype, frm.doc.name),
+			"Pricing Rule": () => erpnext.utils.make_pricing_rule(frm.doc.doctype, frm.doc.name),
 		};
 
-		frm.add_fetch('lead_name', 'company_name', 'customer_name');
-		frm.add_fetch('default_sales_partner','commission_rate','default_commission_rate');
-		frm.set_query('customer_group', {'is_group': 0});
-		frm.set_query('default_price_list', { 'selling': 1});
-		frm.set_query('account', 'accounts', function(doc, cdt, cdn) {
-			let d  = locals[cdt][cdn];
+		frm.add_fetch("lead_name", "company_name", "customer_name");
+		frm.add_fetch("default_sales_partner", "commission_rate", "default_commission_rate");
+		frm.set_query("customer_group", { is_group: 0 });
+		frm.set_query("default_price_list", { selling: 1 });
+		frm.set_query("account", "accounts", function (doc, cdt, cdn) {
+			let d = locals[cdt][cdn];
 			let filters = {
-				'account_type': 'Receivable',
-				'root_type': 'Asset',
-				'company': d.company,
-				"is_group": 0
+				account_type: "Receivable",
+				root_type: "Asset",
+				company: d.company,
+				is_group: 0,
 			};
 
-			if(doc.party_account_currency) {
-				$.extend(filters, {"account_currency": doc.party_account_currency});
+			if (doc.party_account_currency) {
+				$.extend(filters, { account_currency: doc.party_account_currency });
 			}
 			return {
-				filters: filters
-			}
+				filters: filters,
+			};
 		});
 
-		frm.set_query('advance_account', 'accounts', function (doc, cdt, cdn) {
+		frm.set_query("advance_account", "accounts", function (doc, cdt, cdn) {
 			let d = locals[cdt][cdn];
 			return {
 				filters: {
-					"account_type": 'Receivable',
-					"root_type": "Liability",
-					"company": d.company,
-					"is_group": 0
-				}
-			}
+					account_type: "Receivable",
+					root_type: "Liability",
+					company: d.company,
+					is_group: 0,
+				},
+			};
 		});
 
-
 		if (frm.doc.__islocal == 1) {
 			frm.set_value("represents_company", "");
 		}
 
-		frm.set_query('customer_primary_contact', function(doc) {
+		frm.set_query("customer_primary_contact", function (doc) {
 			return {
 				query: "erpnext.selling.doctype.customer.customer.get_customer_primary_contact",
 				filters: {
-					'customer': doc.name
-				}
-			}
-		})
-		frm.set_query('customer_primary_address', function(doc) {
+					customer: doc.name,
+				},
+			};
+		});
+		frm.set_query("customer_primary_address", function (doc) {
 			return {
 				filters: {
-					'link_doctype': 'Customer',
-					'link_name': doc.name
-				}
-			}
-		})
-
-		frm.set_query('default_bank_account', function() {
-			return {
-				filters: {
-					'is_company_account': 1
-				}
-			}
+					link_doctype: "Customer",
+					link_name: doc.name,
+				},
+			};
 		});
 
-		frm.set_query("user", "portal_users", function() {
+		frm.set_query("default_bank_account", function () {
 			return {
 				filters: {
-					"ignore_user_type": true,
-				}
+					is_company_account: 1,
+				},
+			};
+		});
+
+		frm.set_query("user", "portal_users", function () {
+			return {
+				filters: {
+					ignore_user_type: true,
+				},
 			};
 		});
 	},
-	customer_primary_address: function(frm){
-		if(frm.doc.customer_primary_address){
+	customer_primary_address: function (frm) {
+		if (frm.doc.customer_primary_address) {
 			frappe.call({
-				method: 'frappe.contacts.doctype.address.address.get_address_display',
+				method: "frappe.contacts.doctype.address.address.get_address_display",
 				args: {
-					"address_dict": frm.doc.customer_primary_address
+					address_dict: frm.doc.customer_primary_address,
 				},
-				callback: function(r) {
+				callback: function (r) {
 					frm.set_value("primary_address", r.message);
-				}
+				},
 			});
 		}
-		if(!frm.doc.customer_primary_address){
+		if (!frm.doc.customer_primary_address) {
 			frm.set_value("primary_address", "");
 		}
 	},
 
-	is_internal_customer: function(frm) {
+	is_internal_customer: function (frm) {
 		if (frm.doc.is_internal_customer == 1) {
 			frm.toggle_reqd("represents_company", true);
-		}
-		else {
+		} else {
 			frm.toggle_reqd("represents_company", false);
 		}
 	},
 
-	customer_primary_contact: function(frm){
-		if(!frm.doc.customer_primary_contact){
+	customer_primary_contact: function (frm) {
+		if (!frm.doc.customer_primary_contact) {
 			frm.set_value("mobile_no", "");
 			frm.set_value("email_id", "");
 		}
 	},
 
-	loyalty_program: function(frm) {
-		if(frm.doc.loyalty_program) {
-			frm.set_value('loyalty_program_tier', null);
+	loyalty_program: function (frm) {
+		if (frm.doc.loyalty_program) {
+			frm.set_value("loyalty_program_tier", null);
 		}
 	},
 
-	refresh: function(frm) {
-		if(frappe.defaults.get_default("cust_master_name")!="Naming Series") {
+	refresh: function (frm) {
+		if (frappe.defaults.get_default("cust_master_name") != "Naming Series") {
 			frm.toggle_display("naming_series", false);
 		} else {
 			erpnext.toggle_naming_series();
 		}
 
-		if(!frm.doc.__islocal) {
+		if (!frm.doc.__islocal) {
 			frappe.contacts.render_address_and_contact(frm);
 
 			// custom buttons
 
-			frm.add_custom_button(__('Accounts Receivable'), function () {
-				frappe.set_route('query-report', 'Accounts Receivable', { party_type: "Customer", party: frm.doc.name });
-			}, __('View'));
+			frm.add_custom_button(
+				__("Accounts Receivable"),
+				function () {
+					frappe.set_route("query-report", "Accounts Receivable", {
+						party_type: "Customer",
+						party: frm.doc.name,
+					});
+				},
+				__("View")
+			);
 
-			frm.add_custom_button(__('Accounting Ledger'), function () {
-				frappe.set_route('query-report', 'General Ledger',
-					{party_type: 'Customer', party: frm.doc.name, party_name: frm.doc.customer_name});
-			}, __('View'));
+			frm.add_custom_button(
+				__("Accounting Ledger"),
+				function () {
+					frappe.set_route("query-report", "General Ledger", {
+						party_type: "Customer",
+						party: frm.doc.name,
+						party_name: frm.doc.customer_name,
+					});
+				},
+				__("View")
+			);
 
 			for (const doctype in frm.make_methods) {
 				frm.add_custom_button(__(doctype), frm.make_methods[doctype], __("Create"));
 			}
 
-			frm.add_custom_button(__('Get Customer Group Details'), function () {
-				frm.trigger("get_customer_group_details");
-			}, __('Actions'));
+			frm.add_custom_button(
+				__("Get Customer Group Details"),
+				function () {
+					frm.trigger("get_customer_group_details");
+				},
+				__("Actions")
+			);
 
 			if (cint(frappe.defaults.get_default("enable_common_party_accounting"))) {
-				frm.add_custom_button(__('Link with Supplier'), function () {
-					frm.trigger('show_party_link_dialog');
-				}, __('Actions'));
+				frm.add_custom_button(
+					__("Link with Supplier"),
+					function () {
+						frm.trigger("show_party_link_dialog");
+					},
+					__("Actions")
+				);
 			}
 
 			// indicator
 			erpnext.utils.set_party_dashboard_indicators(frm);
-
 		} else {
 			frappe.contacts.clear_address_and_contact(frm);
 		}
@@ -186,55 +204,58 @@
 		grid.set_column_disp("allocated_amount", false);
 		grid.set_column_disp("incentives", false);
 	},
-	validate: function(frm) {
-		if(frm.doc.lead_name) frappe.model.clear_doc("Lead", frm.doc.lead_name);
-
+	validate: function (frm) {
+		if (frm.doc.lead_name) frappe.model.clear_doc("Lead", frm.doc.lead_name);
 	},
-	get_customer_group_details: function(frm) {
+	get_customer_group_details: function (frm) {
 		frappe.call({
 			method: "get_customer_group_details",
 			doc: frm.doc,
-			callback: function() {
+			callback: function () {
 				frm.refresh();
-			}
+			},
 		});
-
 	},
-	show_party_link_dialog: function(frm) {
+	show_party_link_dialog: function (frm) {
 		const dialog = new frappe.ui.Dialog({
-			title: __('Select a Supplier'),
-			fields: [{
-				fieldtype: 'Link', label: __('Supplier'),
-				options: 'Supplier', fieldname: 'supplier', reqd: 1
-			}],
-			primary_action: function({ supplier }) {
+			title: __("Select a Supplier"),
+			fields: [
+				{
+					fieldtype: "Link",
+					label: __("Supplier"),
+					options: "Supplier",
+					fieldname: "supplier",
+					reqd: 1,
+				},
+			],
+			primary_action: function ({ supplier }) {
 				frappe.call({
-					method: 'erpnext.accounts.doctype.party_link.party_link.create_party_link',
+					method: "erpnext.accounts.doctype.party_link.party_link.create_party_link",
 					args: {
-						primary_role: 'Customer',
+						primary_role: "Customer",
 						primary_party: frm.doc.name,
-						secondary_party: supplier
+						secondary_party: supplier,
 					},
 					freeze: true,
-					callback: function() {
+					callback: function () {
 						dialog.hide();
 						frappe.msgprint({
-							message: __('Successfully linked to Supplier'),
-							alert: true
+							message: __("Successfully linked to Supplier"),
+							alert: true,
 						});
 					},
-					error: function() {
+					error: function () {
 						dialog.hide();
 						frappe.msgprint({
-							message: __('Linking to Supplier Failed. Please try again.'),
-							title: __('Linking Failed'),
-							indicator: 'red'
+							message: __("Linking to Supplier Failed. Please try again."),
+							title: __("Linking Failed"),
+							indicator: "red",
 						});
-					}
+					},
 				});
 			},
-			primary_action_label: __('Create Link')
+			primary_action_label: __("Create Link"),
 		});
 		dialog.show();
-	}
+	},
 });
diff --git a/erpnext/selling/doctype/customer/customer_list.js b/erpnext/selling/doctype/customer/customer_list.js
index 38fc9ad..6149c6f 100644
--- a/erpnext/selling/doctype/customer/customer_list.js
+++ b/erpnext/selling/doctype/customer/customer_list.js
@@ -1,3 +1,3 @@
-frappe.listview_settings['Customer'] = {
+frappe.listview_settings["Customer"] = {
 	add_fields: ["customer_name", "territory", "customer_group", "customer_type", "image"],
 };
diff --git a/erpnext/selling/doctype/industry_type/industry_type.js b/erpnext/selling/doctype/industry_type/industry_type.js
index 3680906..273e30f 100644
--- a/erpnext/selling/doctype/industry_type/industry_type.js
+++ b/erpnext/selling/doctype/industry_type/industry_type.js
@@ -1,13 +1,7 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-
-
 //--------- ONLOAD -------------
-cur_frm.cscript.onload = function(doc, cdt, cdn) {
+cur_frm.cscript.onload = function (doc, cdt, cdn) {};
 
-}
-
-cur_frm.cscript.refresh = function(doc, cdt, cdn) {
-
-}
+cur_frm.cscript.refresh = function (doc, cdt, cdn) {};
diff --git a/erpnext/selling/doctype/installation_note/installation_note.js b/erpnext/selling/doctype/installation_note/installation_note.js
index 8128c77..4e13fa7 100644
--- a/erpnext/selling/doctype/installation_note/installation_note.js
+++ b/erpnext/selling/doctype/installation_note/installation_note.js
@@ -1,51 +1,51 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.ui.form.on('Installation Note', {
-	setup: function(frm) {
-		frappe.dynamic_link = {doc: frm.doc, fieldname: 'customer', doctype: 'Customer'}
-		frm.set_query('customer_address', erpnext.queries.address_query);
-		frm.set_query('contact_person', erpnext.queries.contact_query);
-		frm.set_query('customer', erpnext.queries.customer);
+frappe.ui.form.on("Installation Note", {
+	setup: function (frm) {
+		frappe.dynamic_link = { doc: frm.doc, fieldname: "customer", doctype: "Customer" };
+		frm.set_query("customer_address", erpnext.queries.address_query);
+		frm.set_query("contact_person", erpnext.queries.contact_query);
+		frm.set_query("customer", erpnext.queries.customer);
 		frm.set_query("serial_and_batch_bundle", "items", (doc, cdt, cdn) => {
 			let row = locals[cdt][cdn];
 			return {
 				filters: {
-					'item_code': row.item_code,
-					'voucher_type': doc.doctype,
-					'voucher_no': ["in", [doc.name, ""]],
-					'is_cancelled': 0,
-				}
-			}
+					item_code: row.item_code,
+					voucher_type: doc.doctype,
+					voucher_no: ["in", [doc.name, ""]],
+					is_cancelled: 0,
+				},
+			};
 		});
 	},
-	onload: function(frm) {
-		if(!frm.doc.status) {
-			frm.set_value({ status:'Draft'});
+	onload: function (frm) {
+		if (!frm.doc.status) {
+			frm.set_value({ status: "Draft" });
 		}
-		if(frm.doc.__islocal) {
-			frm.set_value({inst_date: frappe.datetime.get_today()});
+		if (frm.doc.__islocal) {
+			frm.set_value({ inst_date: frappe.datetime.get_today() });
 		}
 
-		let sbb_field = frm.get_docfield('items', 'serial_and_batch_bundle');
+		let sbb_field = frm.get_docfield("items", "serial_and_batch_bundle");
 		if (sbb_field) {
 			sbb_field.get_route_options_for_new_doc = (row) => {
 				return {
-					'item_code': row.doc.item_code,
-					'voucher_type': frm.doc.doctype,
-				}
+					item_code: row.doc.item_code,
+					voucher_type: frm.doc.doctype,
+				};
 			};
 		}
 	},
-	customer: function(frm) {
+	customer: function (frm) {
 		erpnext.utils.get_party_details(frm);
 	},
-	customer_address: function(frm) {
+	customer_address: function (frm) {
 		erpnext.utils.get_address_display(frm);
 	},
-	contact_person: function(frm) {
+	contact_person: function (frm) {
 		erpnext.utils.get_contact_details(frm);
-	}
+	},
 });
 
 frappe.provide("erpnext.selling");
@@ -54,9 +54,10 @@
 erpnext.selling.InstallationNote = class InstallationNote extends frappe.ui.form.Controller {
 	refresh() {
 		var me = this;
-		if (this.frm.doc.docstatus===0) {
-			this.frm.add_custom_button(__('From Delivery Note'),
-				function() {
+		if (this.frm.doc.docstatus === 0) {
+			this.frm.add_custom_button(
+				__("From Delivery Note"),
+				function () {
 					erpnext.utils.map_current_doc({
 						method: "erpnext.stock.doctype.delivery_note.delivery_note.make_installation_note",
 						source_doctype: "Delivery Note",
@@ -69,13 +70,15 @@
 							docstatus: 1,
 							status: ["not in", ["Stopped", "Closed"]],
 							per_installed: ["<", 99.99],
-							company: me.frm.doc.company
-						}
-					})
-				}, "fa fa-download", "btn-default"
+							company: me.frm.doc.company,
+						},
+					});
+				},
+				"fa fa-download",
+				"btn-default"
 			);
 		}
 	}
 };
 
-extend_cscript(cur_frm.cscript, new erpnext.selling.InstallationNote({frm: cur_frm}));
+extend_cscript(cur_frm.cscript, new erpnext.selling.InstallationNote({ frm: cur_frm }));
diff --git a/erpnext/selling/doctype/party_specific_item/party_specific_item.js b/erpnext/selling/doctype/party_specific_item/party_specific_item.js
index 077b936..0decc70 100644
--- a/erpnext/selling/doctype/party_specific_item/party_specific_item.js
+++ b/erpnext/selling/doctype/party_specific_item/party_specific_item.js
@@ -1,8 +1,7 @@
 // Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Party Specific Item', {
+frappe.ui.form.on("Party Specific Item", {
 	// refresh: function(frm) {
-
 	// }
 });
diff --git a/erpnext/selling/doctype/quotation/quotation.js b/erpnext/selling/doctype/quotation/quotation.js
index 1bc8d68..6e2b726 100644
--- a/erpnext/selling/doctype/quotation/quotation.js
+++ b/erpnext/selling/doctype/quotation/quotation.js
@@ -6,34 +6,33 @@
 erpnext.pre_sales.set_as_lost("Quotation");
 erpnext.sales_common.setup_selling_controller();
 
-frappe.ui.form.on('Quotation', {
-	setup: function(frm) {
-		frm.custom_make_buttons = {
-			'Sales Order': 'Sales Order'
-		},
+frappe.ui.form.on("Quotation", {
+	setup: function (frm) {
+		(frm.custom_make_buttons = {
+			"Sales Order": "Sales Order",
+		}),
+			frm.set_query("quotation_to", function () {
+				return {
+					filters: {
+						name: ["in", ["Customer", "Lead", "Prospect"]],
+					},
+				};
+			});
 
-		frm.set_query("quotation_to", function() {
-			return{
-				"filters": {
-					"name": ["in", ["Customer", "Lead", "Prospect"]],
-				}
-			}
-		});
+		frm.set_df_property("packed_items", "cannot_add_rows", true);
+		frm.set_df_property("packed_items", "cannot_delete_rows", true);
 
-		frm.set_df_property('packed_items', 'cannot_add_rows', true);
-		frm.set_df_property('packed_items', 'cannot_delete_rows', true);
-
-		frm.set_query('company_address', function(doc) {
-			if(!doc.company) {
-				frappe.throw(__('Please set Company'));
+		frm.set_query("company_address", function (doc) {
+			if (!doc.company) {
+				frappe.throw(__("Please set Company"));
 			}
 
 			return {
-				query: 'frappe.contacts.doctype.address.address.address_query',
+				query: "frappe.contacts.doctype.address.address.address_query",
 				filters: {
-					link_doctype: 'Company',
-					link_name: doc.company
-				}
+					link_doctype: "Company",
+					link_name: doc.company,
+				},
 			};
 		});
 
@@ -41,40 +40,40 @@
 			let row = locals[cdt][cdn];
 			return {
 				filters: {
-					'item_code': row.item_code,
-					'voucher_type': doc.doctype,
-					'voucher_no': ["in", [doc.name, ""]],
-					'is_cancelled': 0,
-				}
-			}
+					item_code: row.item_code,
+					voucher_type: doc.doctype,
+					voucher_no: ["in", [doc.name, ""]],
+					is_cancelled: 0,
+				},
+			};
 		});
 	},
 
-	refresh: function(frm) {
+	refresh: function (frm) {
 		frm.trigger("set_label");
 		frm.trigger("set_dynamic_field_label");
 
-		let sbb_field = frm.get_docfield('packed_items', 'serial_and_batch_bundle');
+		let sbb_field = frm.get_docfield("packed_items", "serial_and_batch_bundle");
 		if (sbb_field) {
 			sbb_field.get_route_options_for_new_doc = (row) => {
 				return {
-					'item_code': row.doc.item_code,
-					'warehouse': row.doc.warehouse,
-					'voucher_type': frm.doc.doctype,
-				}
+					item_code: row.doc.item_code,
+					warehouse: row.doc.warehouse,
+					voucher_type: frm.doc.doctype,
+				};
 			};
 		}
 	},
 
-	quotation_to: function(frm) {
+	quotation_to: function (frm) {
 		frm.trigger("set_label");
 		frm.trigger("toggle_reqd_lead_customer");
 		frm.trigger("set_dynamic_field_label");
 	},
 
-	set_label: function(frm) {
+	set_label: function (frm) {
 		frm.fields_dict.customer_address.set_label(__(frm.doc.quotation_to + " Address"));
-	}
+	},
 });
 
 erpnext.selling.QuotationController = class QuotationController extends erpnext.selling.SellingController {
@@ -83,11 +82,11 @@
 	}
 	party_name() {
 		var me = this;
-		erpnext.utils.get_party_details(this.frm, null, null, function() {
+		erpnext.utils.get_party_details(this.frm, null, null, function () {
 			me.apply_price_list();
 		});
 
-		if(me.frm.doc.quotation_to=="Lead" && me.frm.doc.party_name) {
+		if (me.frm.doc.quotation_to == "Lead" && me.frm.doc.party_name) {
 			me.frm.trigger("get_lead_details");
 		}
 	}
@@ -95,43 +94,48 @@
 		super.refresh(doc, dt, dn);
 		frappe.dynamic_link = {
 			doc: this.frm.doc,
-			fieldname: 'party_name',
-			doctype: doc.quotation_to == 'Customer' ? 'Customer' : 'Lead',
+			fieldname: "party_name",
+			doctype: doc.quotation_to == "Customer" ? "Customer" : "Lead",
 		};
 
 		var me = this;
 
 		if (doc.__islocal && !doc.valid_till) {
-			if(frappe.boot.sysdefaults.quotation_valid_till){
-				this.frm.set_value('valid_till', frappe.datetime.add_days(doc.transaction_date, frappe.boot.sysdefaults.quotation_valid_till));
+			if (frappe.boot.sysdefaults.quotation_valid_till) {
+				this.frm.set_value(
+					"valid_till",
+					frappe.datetime.add_days(
+						doc.transaction_date,
+						frappe.boot.sysdefaults.quotation_valid_till
+					)
+				);
 			} else {
-				this.frm.set_value('valid_till', frappe.datetime.add_months(doc.transaction_date, 1));
+				this.frm.set_value("valid_till", frappe.datetime.add_months(doc.transaction_date, 1));
 			}
 		}
 
 		if (doc.docstatus == 1 && !["Lost", "Ordered"].includes(doc.status)) {
-			if (frappe.boot.sysdefaults.allow_sales_order_creation_for_expired_quotation
-				|| (!doc.valid_till)
-				|| frappe.datetime.get_diff(doc.valid_till, frappe.datetime.get_today()) >= 0) {
-					this.frm.add_custom_button(
-						__("Sales Order"),
-						() => this.make_sales_order(),
-						__("Create")
-					);
-				}
+			if (
+				frappe.boot.sysdefaults.allow_sales_order_creation_for_expired_quotation ||
+				!doc.valid_till ||
+				frappe.datetime.get_diff(doc.valid_till, frappe.datetime.get_today()) >= 0
+			) {
+				this.frm.add_custom_button(__("Sales Order"), () => this.make_sales_order(), __("Create"));
+			}
 
-			if(doc.status!=="Ordered") {
-				this.frm.add_custom_button(__('Set as Lost'), () => {
-						this.frm.trigger('set_as_lost_dialog');
-					});
-				}
+			if (doc.status !== "Ordered") {
+				this.frm.add_custom_button(__("Set as Lost"), () => {
+					this.frm.trigger("set_as_lost_dialog");
+				});
+			}
 
-			cur_frm.page.set_inner_btn_group_as_primary(__('Create'));
+			cur_frm.page.set_inner_btn_group_as_primary(__("Create"));
 		}
 
-		if (this.frm.doc.docstatus===0) {
-			this.frm.add_custom_button(__('Opportunity'),
-				function() {
+		if (this.frm.doc.docstatus === 0) {
+			this.frm.add_custom_button(
+				__("Opportunity"),
+				function () {
 					erpnext.utils.map_current_doc({
 						method: "erpnext.crm.doctype.opportunity.opportunity.make_quotation",
 						source_doctype: "Opportunity",
@@ -142,26 +146,28 @@
 								fieldname: "party_name",
 								fieldtype: "Link",
 								options: me.frm.doc.quotation_to,
-								default: me.frm.doc.party_name || undefined
+								default: me.frm.doc.party_name || undefined,
 							},
 							{
 								label: "Opportunity Type",
 								fieldname: "opportunity_type",
 								fieldtype: "Link",
 								options: "Opportunity Type",
-								default: me.frm.doc.order_type || undefined
-							}
+								default: me.frm.doc.order_type || undefined,
+							},
 						],
 						get_query_filters: {
 							status: ["not in", ["Lost", "Closed"]],
-							company: me.frm.doc.company
-						}
-					})
-				}, __("Get Items From"), "btn-default");
+							company: me.frm.doc.company,
+						},
+					});
+				},
+				__("Get Items From"),
+				"btn-default"
+			);
 		}
 
 		this.toggle_reqd_lead_customer();
-
 	}
 
 	make_sales_order() {
@@ -173,20 +179,20 @@
 		} else {
 			frappe.model.open_mapped_doc({
 				method: "erpnext.selling.doctype.quotation.quotation.make_sales_order",
-				frm: me.frm
+				frm: me.frm,
 			});
 		}
 	}
 
-	set_dynamic_field_label(){
+	set_dynamic_field_label() {
 		if (this.frm.doc.quotation_to == "Customer") {
 			this.frm.set_df_property("party_name", "label", "Customer");
 			this.frm.fields_dict.party_name.get_query = null;
 		} else if (this.frm.doc.quotation_to == "Lead") {
 			this.frm.set_df_property("party_name", "label", "Lead");
-			this.frm.fields_dict.party_name.get_query = function() {
-				return{	query: "erpnext.controllers.queries.lead_query" }
-			}
+			this.frm.fields_dict.party_name.get_query = function () {
+				return { query: "erpnext.controllers.queries.lead_query" };
+			};
 		} else if (this.frm.doc.quotation_to == "Prospect") {
 			this.frm.set_df_property("party_name", "label", "Prospect");
 		}
@@ -197,8 +203,8 @@
 
 		// to overwrite the customer_filter trigger from queries.js
 		this.frm.toggle_reqd("party_name", this.frm.doc.quotation_to);
-		this.frm.set_query('customer_address', this.address_query);
-		this.frm.set_query('shipping_address_name', this.address_query);
+		this.frm.set_query("customer_address", this.address_query);
+		this.frm.set_query("shipping_address_name", this.address_query);
 	}
 
 	tc_name() {
@@ -207,17 +213,22 @@
 
 	address_query(doc) {
 		return {
-			query: 'frappe.contacts.doctype.address.address.address_query',
+			query: "frappe.contacts.doctype.address.address.address_query",
 			filters: {
 				link_doctype: frappe.dynamic_link.doctype,
-				link_name: doc.party_name
-			}
+				link_name: doc.party_name,
+			},
 		};
 	}
 
 	validate_company_and_party(party_field) {
-		if(!this.frm.doc.quotation_to) {
-			frappe.msgprint(__("Please select a value for {0} quotation_to {1}", [this.frm.doc.doctype, this.frm.doc.name]));
+		if (!this.frm.doc.quotation_to) {
+			frappe.msgprint(
+				__("Please select a value for {0} quotation_to {1}", [
+					this.frm.doc.doctype,
+					this.frm.doc.name,
+				])
+			);
 			return false;
 		} else if (this.frm.doc.quotation_to == "Lead") {
 			return true;
@@ -228,85 +239,84 @@
 
 	get_lead_details() {
 		var me = this;
-		if(!this.frm.doc.quotation_to === "Lead") {
+		if (!this.frm.doc.quotation_to === "Lead") {
 			return;
 		}
 
 		frappe.call({
 			method: "erpnext.crm.doctype.lead.lead.get_lead_details",
 			args: {
-				'lead': this.frm.doc.party_name,
-				'posting_date': this.frm.doc.transaction_date,
-				'company': this.frm.doc.company,
+				lead: this.frm.doc.party_name,
+				posting_date: this.frm.doc.transaction_date,
+				company: this.frm.doc.company,
 			},
-			callback: function(r) {
-				if(r.message) {
+			callback: function (r) {
+				if (r.message) {
 					me.frm.updating_party_details = true;
 					me.frm.set_value(r.message);
 					me.frm.refresh();
 					me.frm.updating_party_details = false;
-
 				}
-			}
-		})
+			},
+		});
 	}
 
 	show_alternative_items_dialog() {
 		let me = this;
 
 		const table_fields = [
-		{
-			fieldtype:"Data",
-			fieldname:"name",
-			label: __("Name"),
-			read_only: 1,
-		},
-		{
-			fieldtype:"Link",
-			fieldname:"item_code",
-			options: "Item",
-			label: __("Item Code"),
-			read_only: 1,
-			in_list_view: 1,
-			columns: 2,
-			formatter: (value, df, options, doc) => {
-				return doc.is_alternative ? `<span class="indicator yellow">${value}</span>` : value;
-			}
-		},
-		{
-			fieldtype:"Data",
-			fieldname:"description",
-			label: __("Description"),
-			in_list_view: 1,
-			read_only: 1,
-		},
-		{
-			fieldtype:"Currency",
-			fieldname:"amount",
-			label: __("Amount"),
-			options: "currency",
-			in_list_view: 1,
-			read_only: 1,
-		},
-		{
-			fieldtype:"Check",
-			fieldname:"is_alternative",
-			label: __("Is Alternative"),
-			read_only: 1,
-		}];
+			{
+				fieldtype: "Data",
+				fieldname: "name",
+				label: __("Name"),
+				read_only: 1,
+			},
+			{
+				fieldtype: "Link",
+				fieldname: "item_code",
+				options: "Item",
+				label: __("Item Code"),
+				read_only: 1,
+				in_list_view: 1,
+				columns: 2,
+				formatter: (value, df, options, doc) => {
+					return doc.is_alternative ? `<span class="indicator yellow">${value}</span>` : value;
+				},
+			},
+			{
+				fieldtype: "Data",
+				fieldname: "description",
+				label: __("Description"),
+				in_list_view: 1,
+				read_only: 1,
+			},
+			{
+				fieldtype: "Currency",
+				fieldname: "amount",
+				label: __("Amount"),
+				options: "currency",
+				in_list_view: 1,
+				read_only: 1,
+			},
+			{
+				fieldtype: "Check",
+				fieldname: "is_alternative",
+				label: __("Is Alternative"),
+				read_only: 1,
+			},
+		];
 
-
-		this.data = this.frm.doc.items.filter(
-			(item) => item.is_alternative || item.has_alternative_item
-		).map((item) => {
-			return {
-				"name": item.name,
-				"item_code": item.item_code,
-				"description": item.description,
-				"amount": item.amount,
-				"is_alternative": item.is_alternative,
-			}
-		});
+		this.data = this.frm.doc.items
+			.filter((item) => item.is_alternative || item.has_alternative_item)
+			.map((item) => {
+				return {
+					name: item.name,
+					item_code: item.item_code,
+					description: item.description,
+					amount: item.amount,
+					is_alternative: item.is_alternative,
+				};
+			});
 
 		const dialog = new frappe.ui.Dialog({
 			title: __("Select Alternative Items for Sales Order"),
@@ -314,7 +324,7 @@
 				{
 					fieldname: "info",
 					fieldtype: "HTML",
-					read_only: 1
+					read_only: 1,
 				},
 				{
 					fieldname: "alternative_items",
@@ -328,20 +338,20 @@
 					get_data: () => {
 						return this.data;
 					},
-					fields: table_fields
+					fields: table_fields,
 				},
 			],
-			primary_action: function() {
+			primary_action: function () {
 				frappe.model.open_mapped_doc({
 					method: "erpnext.selling.doctype.quotation.quotation.make_sales_order",
 					frm: me.frm,
 					args: {
-						selected_items: dialog.fields_dict.alternative_items.grid.get_selected_children()
-					}
+						selected_items: dialog.fields_dict.alternative_items.grid.get_selected_children(),
+					},
 				});
 				dialog.hide();
 			},
-			primary_action_label: __('Continue')
+			primary_action_label: __("Continue"),
 		});
 
 		dialog.fields_dict.info.$wrapper.html(
@@ -349,19 +359,24 @@
 				<span class="indicator yellow"></span>
 				${__("Alternative Items")}
 			</p>`
-		)
+		);
 		dialog.show();
 	}
 };
 
 cur_frm.script_manager.make(erpnext.selling.QuotationController);
 
-frappe.ui.form.on("Quotation Item", "items_on_form_rendered", "packed_items_on_form_rendered", function(frm, cdt, cdn) {
-	// enable tax_amount field if Actual
-})
+frappe.ui.form.on(
+	"Quotation Item",
+	"items_on_form_rendered",
+	"packed_items_on_form_rendered",
+	function (frm, cdt, cdn) {
+		// enable tax_amount field if Actual
+	}
+);
 
-frappe.ui.form.on("Quotation Item", "stock_balance", function(frm, cdt, cdn) {
+frappe.ui.form.on("Quotation Item", "stock_balance", function (frm, cdt, cdn) {
 	var d = frappe.model.get_doc(cdt, cdn);
-	frappe.route_options = {"item_code": d.item_code};
+	frappe.route_options = { item_code: d.item_code };
 	frappe.set_route("query-report", "Stock Balance");
-})
+});
diff --git a/erpnext/selling/doctype/quotation/quotation_list.js b/erpnext/selling/doctype/quotation/quotation_list.js
index 32fce1f..ae744b9 100644
--- a/erpnext/selling/doctype/quotation/quotation_list.js
+++ b/erpnext/selling/doctype/quotation/quotation_list.js
@@ -1,38 +1,37 @@
-frappe.listview_settings['Quotation'] = {
-	add_fields: ["customer_name", "base_grand_total", "status",
-		"company", "currency", 'valid_till'],
+frappe.listview_settings["Quotation"] = {
+	add_fields: ["customer_name", "base_grand_total", "status", "company", "currency", "valid_till"],
 
-	onload: function(listview) {
+	onload: function (listview) {
 		if (listview.page.fields_dict.quotation_to) {
-			listview.page.fields_dict.quotation_to.get_query = function() {
+			listview.page.fields_dict.quotation_to.get_query = function () {
 				return {
-					"filters": {
-						"name": ["in", ["Customer", "Lead"]],
-					}
+					filters: {
+						name: ["in", ["Customer", "Lead"]],
+					},
 				};
 			};
 		}
 
-		listview.page.add_action_item(__("Sales Order"), ()=>{
+		listview.page.add_action_item(__("Sales Order"), () => {
 			erpnext.bulk_transaction_processing.create(listview, "Quotation", "Sales Order");
 		});
 
-		listview.page.add_action_item(__("Sales Invoice"), ()=>{
+		listview.page.add_action_item(__("Sales Invoice"), () => {
 			erpnext.bulk_transaction_processing.create(listview, "Quotation", "Sales Invoice");
 		});
 	},
 
-	get_indicator: function(doc) {
-		if(doc.status==="Open") {
+	get_indicator: function (doc) {
+		if (doc.status === "Open") {
 			return [__("Open"), "orange", "status,=,Open"];
-		} else if (doc.status==="Partially Ordered") {
+		} else if (doc.status === "Partially Ordered") {
 			return [__("Partially Ordered"), "yellow", "status,=,Partially Ordered"];
-		} else if(doc.status==="Ordered") {
+		} else if (doc.status === "Ordered") {
 			return [__("Ordered"), "green", "status,=,Ordered"];
-		} else if(doc.status==="Lost") {
+		} else if (doc.status === "Lost") {
 			return [__("Lost"), "gray", "status,=,Lost"];
-		} else if(doc.status==="Expired") {
+		} else if (doc.status === "Expired") {
 			return [__("Expired"), "gray", "status,=,Expired"];
 		}
-	}
+	},
 };
diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js
index 1713a7b..161a064 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.js
+++ b/erpnext/selling/doctype/sales_order/sales_order.js
@@ -6,77 +6,98 @@
 erpnext.sales_common.setup_selling_controller();
 
 frappe.ui.form.on("Sales Order", {
-	setup: function(frm) {
+	setup: function (frm) {
 		frm.custom_make_buttons = {
-			'Delivery Note': 'Delivery Note',
-			'Pick List': 'Pick List',
-			'Sales Invoice': 'Sales Invoice',
-			'Material Request': 'Material Request',
-			'Purchase Order': 'Purchase Order',
-			'Project': 'Project',
-			'Payment Entry': "Payment",
-			'Work Order': "Work Order"
-		}
-		frm.add_fetch('customer', 'tax_id', 'tax_id');
+			"Delivery Note": "Delivery Note",
+			"Pick List": "Pick List",
+			"Sales Invoice": "Sales Invoice",
+			"Material Request": "Material Request",
+			"Purchase Order": "Purchase Order",
+			Project: "Project",
+			"Payment Entry": "Payment",
+			"Work Order": "Work Order",
+		};
+		frm.add_fetch("customer", "tax_id", "tax_id");
 
 		// formatter for material request item
-		frm.set_indicator_formatter('item_code',
-			function(doc) { return (doc.stock_qty<=doc.delivered_qty) ? "green" : "orange" })
+		frm.set_indicator_formatter("item_code", function (doc) {
+			return doc.stock_qty <= doc.delivered_qty ? "green" : "orange";
+		});
 
-		frm.set_query('company_address', function(doc) {
-			if(!doc.company) {
-				frappe.throw(__('Please set Company'));
+		frm.set_query("company_address", function (doc) {
+			if (!doc.company) {
+				frappe.throw(__("Please set Company"));
 			}
 
 			return {
-				query: 'frappe.contacts.doctype.address.address.address_query',
+				query: "frappe.contacts.doctype.address.address.address_query",
 				filters: {
-					link_doctype: 'Company',
-					link_name: doc.company
-				}
+					link_doctype: "Company",
+					link_name: doc.company,
+				},
 			};
-		})
+		});
 
-		frm.set_query("bom_no", "items", function(doc, cdt, cdn) {
+		frm.set_query("bom_no", "items", function (doc, cdt, cdn) {
 			var row = locals[cdt][cdn];
 			return {
 				filters: {
-					"item": row.item_code
-				}
-			}
+					item: row.item_code,
+				},
+			};
 		});
 
-		frm.set_df_property('packed_items', 'cannot_add_rows', true);
-		frm.set_df_property('packed_items', 'cannot_delete_rows', true);
+		frm.set_df_property("packed_items", "cannot_add_rows", true);
+		frm.set_df_property("packed_items", "cannot_delete_rows", true);
 	},
 
-	refresh: function(frm) {
-		if(frm.doc.docstatus === 1) {
-			if (frm.doc.status !== 'Closed' && flt(frm.doc.per_delivered, 2) < 100 && flt(frm.doc.per_billed, 2) < 100) {
-				frm.add_custom_button(__('Update Items'), () => {
+	refresh: function (frm) {
+		if (frm.doc.docstatus === 1) {
+			if (
+				frm.doc.status !== "Closed" &&
+				flt(frm.doc.per_delivered, 2) < 100 &&
+				flt(frm.doc.per_billed, 2) < 100
+			) {
+				frm.add_custom_button(__("Update Items"), () => {
 					erpnext.utils.update_child_items({
 						frm: frm,
 						child_docname: "items",
 						child_doctype: "Sales Order Detail",
 						cannot_add_row: false,
-						has_reserved_stock: frm.doc.__onload && frm.doc.__onload.has_reserved_stock
-					})
+						has_reserved_stock: frm.doc.__onload && frm.doc.__onload.has_reserved_stock,
+					});
 				});
 
 				// Stock Reservation > Reserve button should only be visible if the SO has unreserved stock and no Pick List is created against the SO.
-				if (frm.doc.__onload && frm.doc.__onload.has_unreserved_stock && flt(frm.doc.per_picked) === 0) {
-					frm.add_custom_button(__('Reserve'), () => frm.events.create_stock_reservation_entries(frm), __('Stock Reservation'));
+				if (
+					frm.doc.__onload &&
+					frm.doc.__onload.has_unreserved_stock &&
+					flt(frm.doc.per_picked) === 0
+				) {
+					frm.add_custom_button(
+						__("Reserve"),
+						() => frm.events.create_stock_reservation_entries(frm),
+						__("Stock Reservation")
+					);
 				}
 			}
 
 			// Stock Reservation > Unreserve button will be only visible if the SO has un-delivered reserved stock.
 			if (frm.doc.__onload && frm.doc.__onload.has_reserved_stock) {
-				frm.add_custom_button(__('Unreserve'), () => frm.events.cancel_stock_reservation_entries(frm), __('Stock Reservation'));
+				frm.add_custom_button(
+					__("Unreserve"),
+					() => frm.events.cancel_stock_reservation_entries(frm),
+					__("Stock Reservation")
+				);
 			}
 
-			frm.doc.items.forEach(item => {
+			frm.doc.items.forEach((item) => {
 				if (flt(item.stock_reserved_qty) > 0) {
-					frm.add_custom_button(__('Reserved Stock'), () => frm.events.show_reserved_stock(frm), __('Stock Reservation'));
+					frm.add_custom_button(
+						__("Reserved Stock"),
+						() => frm.events.show_reserved_stock(frm),
+						__("Stock Reservation")
+					);
 					return;
 				}
 			});
@@ -94,11 +115,11 @@
 						frm.set_value("reserve_stock", 0);
 						frm.set_df_property("reserve_stock", "read_only", 1);
 						frm.set_df_property("reserve_stock", "hidden", 1);
-						frm.fields_dict.items.grid.update_docfield_property('reserve_stock', 'hidden', 1);
-						frm.fields_dict.items.grid.update_docfield_property('reserve_stock', 'default', 0);
-						frm.fields_dict.items.grid.update_docfield_property('reserve_stock', 'read_only', 1);
+						frm.fields_dict.items.grid.update_docfield_property("reserve_stock", "hidden", 1);
+						frm.fields_dict.items.grid.update_docfield_property("reserve_stock", "default", 0);
+						frm.fields_dict.items.grid.update_docfield_property("reserve_stock", "read_only", 1);
 					}
-				})
+				});
 			}
 		}
 
@@ -109,47 +130,47 @@
 	},
 
 	get_items_from_internal_purchase_order(frm) {
-		frm.add_custom_button(__('Purchase Order'), () => {
-			erpnext.utils.map_current_doc({
-				method: 'erpnext.buying.doctype.purchase_order.purchase_order.make_inter_company_sales_order',
-				source_doctype: 'Purchase Order',
-				target: frm,
-				setters: [
-					{
-						label: 'Supplier',
-						fieldname: 'supplier',
-						fieldtype: 'Link',
-						options: 'Supplier'
-					}
-				],
-				get_query_filters: {
-					company: frm.doc.company,
-					is_internal_supplier: 1,
-					docstatus: 1,
-					status: ['!=', 'Completed']
-				}
-			});
-		}, __('Get Items From'));
+		frm.add_custom_button(
+			__("Purchase Order"),
+			() => {
+				erpnext.utils.map_current_doc({
+					method: "erpnext.buying.doctype.purchase_order.purchase_order.make_inter_company_sales_order",
+					source_doctype: "Purchase Order",
+					target: frm,
+					setters: [
+						{
+							label: "Supplier",
+							fieldname: "supplier",
+							fieldtype: "Link",
+							options: "Supplier",
+						},
+					],
+					get_query_filters: {
+						company: frm.doc.company,
+						is_internal_supplier: 1,
+						docstatus: 1,
+						status: ["!=", "Completed"],
+					},
+				});
+			},
+			__("Get Items From")
+		);
 	},
 
-	onload: function(frm) {
-		if (!frm.doc.transaction_date){
-			frm.set_value('transaction_date', frappe.datetime.get_today())
+	onload: function (frm) {
+		if (!frm.doc.transaction_date) {
+			frm.set_value("transaction_date", frappe.datetime.get_today());
 		}
-		erpnext.queries.setup_queries(frm, "Warehouse", function() {
+		erpnext.queries.setup_queries(frm, "Warehouse", function () {
 			return {
-				filters: [
-					["Warehouse", "company", "in", ["", cstr(frm.doc.company)]],
-				]
+				filters: [["Warehouse", "company", "in", ["", cstr(frm.doc.company)]]],
 			};
 		});
 
-		frm.set_query('warehouse', 'items', function(doc, cdt, cdn) {
-			let row  = locals[cdt][cdn];
+		frm.set_query("warehouse", "items", function (doc, cdt, cdn) {
+			let row = locals[cdt][cdn];
 			let query = {
-				filters: [
-					["Warehouse", "company", "in", ["", cstr(frm.doc.company)]],
-				]
+				filters: [["Warehouse", "company", "in", ["", cstr(frm.doc.company)]]],
 			};
 			if (row.item_code) {
 				query.query = "erpnext.controllers.queries.warehouse_query";
@@ -160,15 +181,15 @@
 
 		// On cancel and amending a sales order with advance payment, reset advance paid amount
 		if (frm.is_new()) {
-			frm.set_value("advance_paid", 0)
+			frm.set_value("advance_paid", 0);
 		}
 
-		frm.ignore_doctypes_on_cancel_all = ['Purchase Order'];
+		frm.ignore_doctypes_on_cancel_all = ["Purchase Order"];
 	},
 
-	delivery_date: function(frm) {
-		$.each(frm.doc.items || [], function(i, d) {
-			if(!d.delivery_date) d.delivery_date = frm.doc.delivery_date;
+	delivery_date: function (frm) {
+		$.each(frm.doc.items || [], function (i, d) {
+			if (!d.delivery_date) d.delivery_date = frm.doc.delivery_date;
 		});
 		refresh_field("items");
 	},
@@ -186,9 +207,7 @@
 					default: frm.doc.set_warehouse,
 					get_query: () => {
 						return {
-							filters: [
-								["Warehouse", "is_group", "!=", 1]
-							]
+							filters: [["Warehouse", "is_group", "!=", 1]],
 						};
 					},
 					onchange: () => {
@@ -200,7 +219,7 @@
 						}
 					},
 				},
-				{fieldtype: "Column Break"},
+				{ fieldtype: "Column Break" },
 				{
 					fieldname: "add_item",
 					fieldtype: "Link",
@@ -210,19 +229,24 @@
 						return {
 							query: "erpnext.controllers.queries.get_filtered_child_rows",
 							filters: {
-								"parenttype": frm.doc.doctype,
-								"parent": frm.doc.name,
-								"reserve_stock": 1,
-							}
-						}
+								parenttype: frm.doc.doctype,
+								parent: frm.doc.name,
+								reserve_stock: 1,
+							},
+						};
 					},
 					onchange: () => {
 						let sales_order_item = dialog.get_value("add_item");
 
 						if (sales_order_item) {
-							frm.doc.items.forEach(item => {
+							frm.doc.items.forEach((item) => {
 								if (item.name === sales_order_item) {
-									let unreserved_qty = (flt(item.stock_qty) - (item.stock_reserved_qty ? flt(item.stock_reserved_qty) : (flt(item.delivered_qty) * flt(item.conversion_factor)))) / flt(item.conversion_factor);
+									let unreserved_qty =
+										(flt(item.stock_qty) -
+											(item.stock_reserved_qty
+												? flt(item.stock_reserved_qty)
+												: flt(item.delivered_qty) * flt(item.conversion_factor))) /
+										flt(item.conversion_factor);
 
 									if (unreserved_qty > 0) {
 										dialog.fields_dict.items.df.data.forEach((row) => {
@@ -233,10 +257,10 @@
 									}
 
 									dialog.fields_dict.items.df.data.push({
-										'sales_order_item': item.name,
-										'item_code': item.item_code,
-										'warehouse': dialog.get_value("set_warehouse") || item.warehouse,
-										'qty_to_reserve': Math.max(unreserved_qty, 0)
+										sales_order_item: item.name,
+										item_code: item.item_code,
+										warehouse: dialog.get_value("set_warehouse") || item.warehouse,
+										qty_to_reserve: Math.max(unreserved_qty, 0),
 									});
 									dialog.fields_dict.items.grid.refresh();
 									dialog.set_value("add_item", undefined);
@@ -245,7 +269,7 @@
 						}
 					},
 				},
-				{fieldtype: "Section Break"},
+				{ fieldtype: "Section Break" },
 				{
 					fieldname: "items",
 					fieldtype: "Table",
@@ -265,25 +289,26 @@
 								return {
 									query: "erpnext.controllers.queries.get_filtered_child_rows",
 									filters: {
-										"parenttype": frm.doc.doctype,
-										"parent": frm.doc.name,
-										"reserve_stock": 1,
-									}
-								}
+										parenttype: frm.doc.doctype,
+										parent: frm.doc.name,
+										reserve_stock: 1,
+									},
+								};
 							},
 							onchange: (event) => {
 								if (event) {
 									let name = $(event.currentTarget).closest(".grid-row").attr("data-name");
-									let item_row = dialog.fields_dict.items.grid.grid_rows_by_docname[name].doc;
+									let item_row =
+										dialog.fields_dict.items.grid.grid_rows_by_docname[name].doc;
 
-									frm.doc.items.forEach(item => {
+									frm.doc.items.forEach((item) => {
 										if (item.name === item_row.sales_order_item) {
 											item_row.item_code = item.item_code;
 										}
 									});
 									dialog.fields_dict.items.grid.refresh();
 								}
-							}
+							},
 						},
 						{
 							fieldname: "item_code",
@@ -303,9 +328,7 @@
 							in_list_view: 1,
 							get_query: () => {
 								return {
-									filters: [
-										["Warehouse", "is_group", "!=", 1]
-									]
+									filters: [["Warehouse", "is_group", "!=", 1]],
 								};
 							},
 						},
@@ -314,14 +337,14 @@
 							fieldtype: "Float",
 							label: __("Qty"),
 							reqd: 1,
-							in_list_view: 1
-						}
+							in_list_view: 1,
+						},
 					],
 				},
 			],
 			primary_action_label: __("Reserve Stock"),
 			primary_action: () => {
-				var data = {items: dialog.fields_dict.items.grid.data};
+				var data = { items: dialog.fields_dict.items.grid.data };
 
 				if (data.items && data.items.length > 0) {
 					frappe.call({
@@ -329,14 +352,14 @@
 						method: "create_stock_reservation_entries",
 						args: {
 							items_details: data.items,
-							notify: true
+							notify: true,
 						},
 						freeze: true,
 						freeze_message: __("Reserving Stock..."),
 						callback: (r) => {
 							frm.doc.__onload.has_unreserved_stock = false;
 							frm.reload_doc();
-						}
+						},
 					});
 				}
 
@@ -344,16 +367,21 @@
 			},
 		});
 
-		frm.doc.items.forEach(item => {
+		frm.doc.items.forEach((item) => {
 			if (item.reserve_stock) {
-				let unreserved_qty = (flt(item.stock_qty) - (item.stock_reserved_qty ? flt(item.stock_reserved_qty) : (flt(item.delivered_qty) * flt(item.conversion_factor)))) / flt(item.conversion_factor);
+				let unreserved_qty =
+					(flt(item.stock_qty) -
+						(item.stock_reserved_qty
+							? flt(item.stock_reserved_qty)
+							: flt(item.delivered_qty) * flt(item.conversion_factor))) /
+					flt(item.conversion_factor);
 
 				if (unreserved_qty > 0) {
 					dialog.fields_dict.items.df.data.push({
-						'sales_order_item': item.name,
-						'item_code': item.item_code,
-						'warehouse': item.warehouse,
-						'qty_to_reserve': unreserved_qty
+						sales_order_item: item.name,
+						item_code: item.item_code,
+						warehouse: item.warehouse,
+						qty_to_reserve: unreserved_qty,
 					});
 				}
 			}
@@ -410,28 +438,28 @@
 							label: __("Qty"),
 							reqd: 1,
 							read_only: 1,
-							in_list_view: 1
-						}
-					]
-				}
+							in_list_view: 1,
+						},
+					],
+				},
 			],
 			primary_action_label: __("Unreserve Stock"),
 			primary_action: () => {
-				var data = {sr_entries: dialog.fields_dict.sr_entries.grid.data};
+				var data = { sr_entries: dialog.fields_dict.sr_entries.grid.data };
 
 				if (data.sr_entries && data.sr_entries.length > 0) {
 					frappe.call({
 						doc: frm.doc,
 						method: "cancel_stock_reservation_entries",
 						args: {
-							sre_list: data.sr_entries.map(item => item.sre),
+							sre_list: data.sr_entries.map((item) => item.sre),
 						},
 						freeze: true,
-						freeze_message: __('Unreserving Stock...'),
+						freeze_message: __("Unreserving Stock..."),
 						callback: (r) => {
 							frm.doc.__onload.has_reserved_stock = false;
 							frm.reload_doc();
-						}
+						},
 					});
 				}
 
@@ -439,35 +467,39 @@
 			},
 		});
 
-		frappe.call({
-			method: 'erpnext.stock.doctype.stock_reservation_entry.stock_reservation_entry.get_stock_reservation_entries_for_voucher',
-			args: {
-				voucher_type: frm.doctype,
-				voucher_no: frm.docname,
-			},
-			callback: (r) => {
-				if (!r.exc && r.message) {
-					r.message.forEach(sre => {
-						if (flt(sre.reserved_qty) > flt(sre.delivered_qty)) {
-							dialog.fields_dict.sr_entries.df.data.push({
-								'sre': sre.name,
-								'item_code': sre.item_code,
-								'warehouse': sre.warehouse,
-								'qty': (flt(sre.reserved_qty) - flt(sre.delivered_qty))
-							});
-						}
-					});
-				}
-			}
-		}).then(r => {
-			dialog.fields_dict.sr_entries.grid.refresh();
-			dialog.show();
-		});
+		frappe
+			.call({
+				method: "erpnext.stock.doctype.stock_reservation_entry.stock_reservation_entry.get_stock_reservation_entries_for_voucher",
+				args: {
+					voucher_type: frm.doctype,
+					voucher_no: frm.docname,
+				},
+				callback: (r) => {
+					if (!r.exc && r.message) {
+						r.message.forEach((sre) => {
+							if (flt(sre.reserved_qty) > flt(sre.delivered_qty)) {
+								dialog.fields_dict.sr_entries.df.data.push({
+									sre: sre.name,
+									item_code: sre.item_code,
+									warehouse: sre.warehouse,
+									qty: flt(sre.reserved_qty) - flt(sre.delivered_qty),
+								});
+							}
+						});
+					}
+				},
+			})
+			.then((r) => {
+				dialog.fields_dict.sr_entries.grid.refresh();
+				dialog.show();
+			});
 	},
 
 	show_reserved_stock(frm) {
 		// Get the latest modified date from the items table.
-		var to_date = moment(new Date(Math.max(...frm.doc.items.map(e => new Date(e.modified))))).format('YYYY-MM-DD');
+		var to_date = moment(new Date(Math.max(...frm.doc.items.map((e) => new Date(e.modified))))).format(
+			"YYYY-MM-DD"
+		);
 
 		frappe.route_options = {
 			company: frm.doc.company,
@@ -475,13 +507,13 @@
 			to_date: to_date,
 			voucher_type: frm.doc.doctype,
 			voucher_no: frm.doc.name,
-		}
+		};
 		frappe.set_route("query-report", "Reserved Stock");
-	}
+	},
 });
 
 frappe.ui.form.on("Sales Order Item", {
-	item_code: function(frm,cdt,cdn) {
+	item_code: function (frm, cdt, cdn) {
 		var row = locals[cdt][cdn];
 		if (frm.doc.delivery_date) {
 			row.delivery_date = frm.doc.delivery_date;
@@ -490,11 +522,11 @@
 			frm.script_manager.copy_from_first_row("items", row, ["delivery_date"]);
 		}
 	},
-	delivery_date: function(frm, cdt, cdn) {
-		if(!frm.doc.delivery_date) {
+	delivery_date: function (frm, cdt, cdn) {
+		if (!frm.doc.delivery_date) {
 			erpnext.utils.copy_value_in_all_rows(frm.doc, cdt, cdn, "items", "delivery_date");
 		}
-	}
+	},
 });
 
 erpnext.selling.SalesOrderController = class SalesOrderController extends erpnext.selling.SellingController {
@@ -507,111 +539,185 @@
 		super.refresh();
 		let allow_delivery = false;
 
-		if (doc.docstatus==1) {
+		if (doc.docstatus == 1) {
+			if (this.frm.has_perm("submit")) {
+				if (doc.status === "On Hold") {
+					// un-hold
+					this.frm.add_custom_button(
+						__("Resume"),
+						function () {
+							me.frm.cscript.update_status("Resume", "Draft");
+						},
+						__("Status")
+					);
 
-			if(this.frm.has_perm("submit")) {
-				if(doc.status === 'On Hold') {
-				   // un-hold
-				   this.frm.add_custom_button(__('Resume'), function() {
-					   me.frm.cscript.update_status('Resume', 'Draft')
-				   }, __("Status"));
-
-				   if(flt(doc.per_delivered, 2) < 100 || flt(doc.per_billed, 2) < 100) {
-					   // close
-					   this.frm.add_custom_button(__('Close'), () => this.close_sales_order(), __("Status"))
-				   }
+					if (flt(doc.per_delivered, 2) < 100 || flt(doc.per_billed, 2) < 100) {
+						// close
+						this.frm.add_custom_button(__("Close"), () => this.close_sales_order(), __("Status"));
+					}
+				} else if (doc.status === "Closed") {
+					// un-close
+					this.frm.add_custom_button(
+						__("Re-open"),
+						function () {
+							me.frm.cscript.update_status("Re-open", "Draft");
+						},
+						__("Status")
+					);
 				}
-			   	else if(doc.status === 'Closed') {
-				   // un-close
-				   this.frm.add_custom_button(__('Re-open'), function() {
-					   me.frm.cscript.update_status('Re-open', 'Draft')
-				   }, __("Status"));
-			   }
 			}
-			if(doc.status !== 'Closed') {
-				if(doc.status !== 'On Hold') {
-					allow_delivery = this.frm.doc.items.some(item => item.delivered_by_supplier === 0 && item.qty > flt(item.delivered_qty))
-						&& !this.frm.doc.skip_delivery_note
+			if (doc.status !== "Closed") {
+				if (doc.status !== "On Hold") {
+					allow_delivery =
+						this.frm.doc.items.some(
+							(item) => item.delivered_by_supplier === 0 && item.qty > flt(item.delivered_qty)
+						) && !this.frm.doc.skip_delivery_note;
 
 					if (this.frm.has_perm("submit")) {
-						if(flt(doc.per_delivered, 2) < 100 || flt(doc.per_billed, 2) < 100) {
+						if (flt(doc.per_delivered, 2) < 100 || flt(doc.per_billed, 2) < 100) {
 							// hold
-							this.frm.add_custom_button(__('Hold'), () => this.hold_sales_order(), __("Status"))
+							this.frm.add_custom_button(
+								__("Hold"),
+								() => this.hold_sales_order(),
+								__("Status")
+							);
 							// close
-							this.frm.add_custom_button(__('Close'), () => this.close_sales_order(), __("Status"))
+							this.frm.add_custom_button(
+								__("Close"),
+								() => this.close_sales_order(),
+								__("Status")
+							);
 						}
 					}
 
 					if (!doc.__onload || !doc.__onload.has_reserved_stock) {
 						// Don't show the `Reserve` button if the Sales Order has Picked Items.
 						if (flt(doc.per_picked, 2) < 100 && flt(doc.per_delivered, 2) < 100) {
-							this.frm.add_custom_button(__('Pick List'), () => this.create_pick_list(), __('Create'));
+							this.frm.add_custom_button(
+								__("Pick List"),
+								() => this.create_pick_list(),
+								__("Create")
+							);
 						}
 					}
 
 					const order_is_a_sale = ["Sales", "Shopping Cart"].indexOf(doc.order_type) !== -1;
 					const order_is_maintenance = ["Maintenance"].indexOf(doc.order_type) !== -1;
 					// order type has been customised then show all the action buttons
-					const order_is_a_custom_sale = ["Sales", "Shopping Cart", "Maintenance"].indexOf(doc.order_type) === -1;
+					const order_is_a_custom_sale =
+						["Sales", "Shopping Cart", "Maintenance"].indexOf(doc.order_type) === -1;
 
 					// delivery note
-					if(flt(doc.per_delivered, 2) < 100 && (order_is_a_sale || order_is_a_custom_sale) && allow_delivery) {
-						this.frm.add_custom_button(__('Delivery Note'), () => this.make_delivery_note_based_on_delivery_date(true), __('Create'));
-						this.frm.add_custom_button(__('Work Order'), () => this.make_work_order(), __('Create'));
+					if (
+						flt(doc.per_delivered, 2) < 100 &&
+						(order_is_a_sale || order_is_a_custom_sale) &&
+						allow_delivery
+					) {
+						this.frm.add_custom_button(
+							__("Delivery Note"),
+							() => this.make_delivery_note_based_on_delivery_date(true),
+							__("Create")
+						);
+						this.frm.add_custom_button(
+							__("Work Order"),
+							() => this.make_work_order(),
+							__("Create")
+						);
 					}
 
 					// sales invoice
-					if(flt(doc.per_billed, 2) < 100) {
-						this.frm.add_custom_button(__('Sales Invoice'), () => me.make_sales_invoice(), __('Create'));
+					if (flt(doc.per_billed, 2) < 100) {
+						this.frm.add_custom_button(
+							__("Sales Invoice"),
+							() => me.make_sales_invoice(),
+							__("Create")
+						);
 					}
 
 					// material request
-					if(!doc.order_type || (order_is_a_sale || order_is_a_custom_sale) && flt(doc.per_delivered, 2) < 100) {
-						this.frm.add_custom_button(__('Material Request'), () => this.make_material_request(), __('Create'));
-						this.frm.add_custom_button(__('Request for Raw Materials'), () => this.make_raw_material_request(), __('Create'));
+					if (
+						!doc.order_type ||
+						((order_is_a_sale || order_is_a_custom_sale) && flt(doc.per_delivered, 2) < 100)
+					) {
+						this.frm.add_custom_button(
+							__("Material Request"),
+							() => this.make_material_request(),
+							__("Create")
+						);
+						this.frm.add_custom_button(
+							__("Request for Raw Materials"),
+							() => this.make_raw_material_request(),
+							__("Create")
+						);
 					}
 
 					// Make Purchase Order
 					if (!this.frm.doc.is_internal_customer) {
-						this.frm.add_custom_button(__('Purchase Order'), () => this.make_purchase_order(), __('Create'));
+						this.frm.add_custom_button(
+							__("Purchase Order"),
+							() => this.make_purchase_order(),
+							__("Create")
+						);
 					}
 
 					// maintenance
-					if(flt(doc.per_delivered, 2) < 100 && (order_is_maintenance || order_is_a_custom_sale)) {
-						this.frm.add_custom_button(__('Maintenance Visit'), () => this.make_maintenance_visit(), __('Create'));
-						this.frm.add_custom_button(__('Maintenance Schedule'), () => this.make_maintenance_schedule(), __('Create'));
+					if (flt(doc.per_delivered, 2) < 100 && (order_is_maintenance || order_is_a_custom_sale)) {
+						this.frm.add_custom_button(
+							__("Maintenance Visit"),
+							() => this.make_maintenance_visit(),
+							__("Create")
+						);
+						this.frm.add_custom_button(
+							__("Maintenance Schedule"),
+							() => this.make_maintenance_schedule(),
+							__("Create")
+						);
 					}
 
 					// project
-					if(flt(doc.per_delivered, 2) < 100) {
-							this.frm.add_custom_button(__('Project'), () => this.make_project(), __('Create'));
+					if (flt(doc.per_delivered, 2) < 100) {
+						this.frm.add_custom_button(__("Project"), () => this.make_project(), __("Create"));
 					}
 
 					if (doc.docstatus === 1 && !doc.inter_company_order_reference) {
 						let me = this;
 						let internal = me.frm.doc.is_internal_customer;
 						if (internal) {
-							let button_label = (me.frm.doc.company === me.frm.doc.represents_company) ? "Internal Purchase Order" :
-								"Inter Company Purchase Order";
+							let button_label =
+								me.frm.doc.company === me.frm.doc.represents_company
+									? "Internal Purchase Order"
+									: "Inter Company Purchase Order";
 
-							me.frm.add_custom_button(button_label, function() {
-								me.make_inter_company_order();
-							}, __('Create'));
+							me.frm.add_custom_button(
+								button_label,
+								function () {
+									me.make_inter_company_order();
+								},
+								__("Create")
+							);
 						}
 					}
 				}
 				// payment request
-				if(flt(doc.per_billed, precision('per_billed', doc)) < 100 + frappe.boot.sysdefaults.over_billing_allowance) {
-					this.frm.add_custom_button(__('Payment Request'), () => this.make_payment_request(), __('Create'));
-					this.frm.add_custom_button(__('Payment'), () => this.make_payment_entry(), __('Create'));
+				if (
+					flt(doc.per_billed, precision("per_billed", doc)) <
+					100 + frappe.boot.sysdefaults.over_billing_allowance
+				) {
+					this.frm.add_custom_button(
+						__("Payment Request"),
+						() => this.make_payment_request(),
+						__("Create")
+					);
+					this.frm.add_custom_button(__("Payment"), () => this.make_payment_entry(), __("Create"));
 				}
-				this.frm.page.set_inner_btn_group_as_primary(__('Create'));
+				this.frm.page.set_inner_btn_group_as_primary(__("Create"));
 			}
 		}
 
-		if (this.frm.doc.docstatus===0) {
-			this.frm.add_custom_button(__('Quotation'),
-				function() {
+		if (this.frm.doc.docstatus === 0) {
+			this.frm.add_custom_button(
+				__("Quotation"),
+				function () {
 					let d = erpnext.utils.map_current_doc({
 						method: "erpnext.selling.doctype.quotation.quotation.make_sales_order",
 						source_doctype: "Quotation",
@@ -622,14 +728,14 @@
 								fieldname: "party_name",
 								fieldtype: "Link",
 								options: "Customer",
-								default: me.frm.doc.customer || undefined
-							}
+								default: me.frm.doc.customer || undefined,
+							},
 						],
 						get_query_filters: {
 							company: me.frm.doc.company,
 							docstatus: 1,
-							status: ["!=", "Lost"]
-						}
+							status: ["!=", "Lost"],
+						},
 					});
 
 					setTimeout(() => {
@@ -639,8 +745,9 @@
 							</span>
 					`);
 					}, 200);
-
-				}, __("Get Items From"));
+				},
+				__("Get Items From")
+			);
 		}
 
 		this.order_type(doc);
@@ -649,8 +756,8 @@
 	create_pick_list() {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.selling.doctype.sales_order.sales_order.create_pick_list",
-			frm: this.frm
-		})
+			frm: this.frm,
+		});
 	}
 
 	make_work_order() {
@@ -661,86 +768,99 @@
 				sales_order: this.frm.docname,
 			},
 			freeze: true,
-			callback: function(r) {
-				if(!r.message) {
+			callback: function (r) {
+				if (!r.message) {
 					frappe.msgprint({
-						title: __('Work Order not created'),
-						message: __('No Items with Bill of Materials to Manufacture'),
-						indicator: 'orange'
+						title: __("Work Order not created"),
+						message: __("No Items with Bill of Materials to Manufacture"),
+						indicator: "orange",
 					});
 					return;
-				}
-				else {
-					const fields = [{
-						label: 'Items',
-						fieldtype: 'Table',
-						fieldname: 'items',
-						description: __('Select BOM and Qty for Production'),
-						fields: [{
-							fieldtype: 'Read Only',
-							fieldname: 'item_code',
-							label: __('Item Code'),
-							in_list_view: 1
-						}, {
-							fieldtype: 'Link',
-							fieldname: 'bom',
-							options: 'BOM',
-							reqd: 1,
-							label: __('Select BOM'),
-							in_list_view: 1,
-							get_query: function (doc) {
-								return { filters: { item: doc.item_code } };
-							}
-						}, {
-							fieldtype: 'Float',
-							fieldname: 'pending_qty',
-							reqd: 1,
-							label: __('Qty'),
-							in_list_view: 1
-						}, {
-							fieldtype: 'Data',
-							fieldname: 'sales_order_item',
-							reqd: 1,
-							label: __('Sales Order Item'),
-							hidden: 1
-						}],
-						data: r.message,
-						get_data: () => {
-							return r.message
-						}
-					}]
+				} else {
+					const fields = [
+						{
+							label: "Items",
+							fieldtype: "Table",
+							fieldname: "items",
+							description: __("Select BOM and Qty for Production"),
+							fields: [
+								{
+									fieldtype: "Read Only",
+									fieldname: "item_code",
+									label: __("Item Code"),
+									in_list_view: 1,
+								},
+								{
+									fieldtype: "Link",
+									fieldname: "bom",
+									options: "BOM",
+									reqd: 1,
+									label: __("Select BOM"),
+									in_list_view: 1,
+									get_query: function (doc) {
+										return { filters: { item: doc.item_code } };
+									},
+								},
+								{
+									fieldtype: "Float",
+									fieldname: "pending_qty",
+									reqd: 1,
+									label: __("Qty"),
+									in_list_view: 1,
+								},
+								{
+									fieldtype: "Data",
+									fieldname: "sales_order_item",
+									reqd: 1,
+									label: __("Sales Order Item"),
+									hidden: 1,
+								},
+							],
+							data: r.message,
+							get_data: () => {
+								return r.message;
+							},
+						},
+					];
 					var d = new frappe.ui.Dialog({
-						title: __('Select Items to Manufacture'),
+						title: __("Select Items to Manufacture"),
 						fields: fields,
-						primary_action: function() {
-							var data = {items: d.fields_dict.items.grid.get_selected_children()};
+						primary_action: function () {
+							var data = { items: d.fields_dict.items.grid.get_selected_children() };
 							me.frm.call({
-								method: 'make_work_orders',
+								method: "make_work_orders",
 								args: {
 									items: data,
 									company: me.frm.doc.company,
 									sales_order: me.frm.docname,
-									project: me.frm.project
+									project: me.frm.project,
 								},
 								freeze: true,
-								callback: function(r) {
-									if(r.message) {
+								callback: function (r) {
+									if (r.message) {
 										frappe.msgprint({
-											message: __('Work Orders Created: {0}', [r.message.map(function(d) {
-													return repl('<a href="/app/work-order/%(name)s">%(name)s</a>', {name:d})
-												}).join(', ')]),
-											indicator: 'green'
-										})
+											message: __("Work Orders Created: {0}", [
+												r.message
+													.map(function (d) {
+														return repl(
+															'<a href="/app/work-order/%(name)s">%(name)s</a>',
+															{ name: d }
+														);
+													})
+													.join(", "),
+											]),
+											indicator: "green",
+										});
 									}
 									d.hide();
-								}
+								},
 							});
 						},
-						primary_action_label: __('Create')
+						primary_action_label: __("Create"),
 					});
 					d.show();
 				}
-			}
+			},
 		});
 	}
 
@@ -755,8 +875,8 @@
 	make_material_request() {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.selling.doctype.sales_order.sales_order.make_material_request",
-			frm: this.frm
-		})
+			frm: this.frm,
+		});
 	}
 
 	skip_delivery_note() {
@@ -764,8 +884,10 @@
 	}
 
 	toggle_delivery_date() {
-		this.frm.fields_dict.items.grid.toggle_reqd("delivery_date",
-			(this.frm.doc.order_type == "Sales" && !this.frm.doc.skip_delivery_note));
+		this.frm.fields_dict.items.grid.toggle_reqd(
+			"delivery_date",
+			this.frm.doc.order_type == "Sales" && !this.frm.doc.skip_delivery_note
+		);
 	}
 
 	make_raw_material_request() {
@@ -774,104 +896,135 @@
 			method: "erpnext.selling.doctype.sales_order.sales_order.get_work_order_items",
 			args: {
 				sales_order: this.frm.docname,
-				for_raw_material_request: 1
+				for_raw_material_request: 1,
 			},
-			callback: function(r) {
-				if(!r.message) {
+			callback: function (r) {
+				if (!r.message) {
 					frappe.msgprint({
-						message: __('No Items with Bill of Materials.'),
-						indicator: 'orange'
+						message: __("No Items with Bill of Materials."),
+						indicator: "orange",
 					});
 					return;
-				}
-				else {
+				} else {
 					me.make_raw_material_request_dialog(r);
 				}
-			}
+			},
 		});
 	}
 
 	make_raw_material_request_dialog(r) {
 		var me = this;
 		var fields = [
-			{fieldtype:'Check', fieldname:'include_exploded_items',
-				label: __('Include Exploded Items')},
-			{fieldtype:'Check', fieldname:'ignore_existing_ordered_qty',
-				label: __('Ignore Existing Ordered Qty')},
+			{ fieldtype: "Check", fieldname: "include_exploded_items", label: __("Include Exploded Items") },
 			{
-				fieldtype:'Table', fieldname: 'items',
-				description: __('Select BOM, Qty and For Warehouse'),
+				fieldtype: "Check",
+				fieldname: "ignore_existing_ordered_qty",
+				label: __("Ignore Existing Ordered Qty"),
+			},
+			{
+				fieldtype: "Table",
+				fieldname: "items",
+				description: __("Select BOM, Qty and For Warehouse"),
 				fields: [
-					{fieldtype:'Read Only', fieldname:'item_code',
-						label: __('Item Code'), in_list_view:1},
-					{fieldtype:'Link', fieldname:'warehouse', options: 'Warehouse',
-						label: __('For Warehouse'), in_list_view:1},
-					{fieldtype:'Link', fieldname:'bom', options: 'BOM', reqd: 1,
-						label: __('BOM'), in_list_view:1, get_query: function(doc) {
-							return {filters: {item: doc.item_code}};
-						}
+					{
+						fieldtype: "Read Only",
+						fieldname: "item_code",
+						label: __("Item Code"),
+						in_list_view: 1,
 					},
-					{fieldtype:'Float', fieldname:'required_qty', reqd: 1,
-						label: __('Qty'), in_list_view:1},
+					{
+						fieldtype: "Link",
+						fieldname: "warehouse",
+						options: "Warehouse",
+						label: __("For Warehouse"),
+						in_list_view: 1,
+					},
+					{
+						fieldtype: "Link",
+						fieldname: "bom",
+						options: "BOM",
+						reqd: 1,
+						label: __("BOM"),
+						in_list_view: 1,
+						get_query: function (doc) {
+							return { filters: { item: doc.item_code } };
+						},
+					},
+					{
+						fieldtype: "Float",
+						fieldname: "required_qty",
+						reqd: 1,
+						label: __("Qty"),
+						in_list_view: 1,
+					},
 				],
 				data: r.message,
-				get_data: function() {
-					return r.message
-				}
-			}
-		]
+				get_data: function () {
+					return r.message;
+				},
+			},
+		];
 		var d = new frappe.ui.Dialog({
 			title: __("Items for Raw Material Request"),
 			fields: fields,
-			primary_action: function() {
+			primary_action: function () {
 				var data = d.get_values();
 				me.frm.call({
-					method: 'erpnext.selling.doctype.sales_order.sales_order.make_raw_material_request',
+					method: "erpnext.selling.doctype.sales_order.sales_order.make_raw_material_request",
 					args: {
 						items: data,
 						company: me.frm.doc.company,
 						sales_order: me.frm.docname,
-						project: me.frm.project
+						project: me.frm.project,
 					},
 					freeze: true,
-					callback: function(r) {
-						if(r.message) {
-							frappe.msgprint(__('Material Request {0} submitted.',
-							['<a href="/app/material-request/'+r.message.name+'">' + r.message.name+ '</a>']));
+					callback: function (r) {
+						if (r.message) {
+							frappe.msgprint(
+								__("Material Request {0} submitted.", [
+									'<a href="/app/material-request/' +
+										r.message.name +
+										'">' +
+										r.message.name +
+										"</a>",
+								])
+							);
 						}
 						d.hide();
 						me.frm.reload_doc();
-					}
+					},
 				});
 			},
-			primary_action_label: __('Create')
+			primary_action_label: __("Create"),
 		});
 		d.show();
 	}
 
-	make_delivery_note_based_on_delivery_date(for_reserved_stock=false) {
+	make_delivery_note_based_on_delivery_date(for_reserved_stock = false) {
 		var me = this;
 
-		var delivery_dates = this.frm.doc.items.map(i => i.delivery_date);
-		delivery_dates = [ ...new Set(delivery_dates) ];
+		var delivery_dates = this.frm.doc.items.map((i) => i.delivery_date);
+		delivery_dates = [...new Set(delivery_dates)];
 
 		var today = new Date();
 
 		var item_grid = this.frm.fields_dict["items"].grid;
-		if(!item_grid.get_selected().length && delivery_dates.length > 1) {
+		if (!item_grid.get_selected().length && delivery_dates.length > 1) {
 			var dialog = new frappe.ui.Dialog({
 				title: __("Select Items based on Delivery Date"),
-				fields: [{fieldtype: "HTML", fieldname: "dates_html"}]
+				fields: [{ fieldtype: "HTML", fieldname: "dates_html" }],
 			});
 
 			var html = $(`
 				<div style="border: 1px solid #d1d8dd">
 					<div class="list-item list-item--head">
 						<div class="list-item__content list-item__content--flex-2">
-							${__('Delivery Date')}
+							${__("Delivery Date")}
 						</div>
 					</div>
-					${delivery_dates.map(date => `
+					${delivery_dates
+						.map(
+							(date) => `
 						<div class="list-item">
 							<div class="list-item__content list-item__content--flex-2">
 								<label>
@@ -884,18 +1037,22 @@
 								</label>
 							</div>
 						</div>
-					`).join("")}
+					`
+						)
+						.join("")}
 				</div>
 			`);
 
 			var wrapper = dialog.fields_dict.dates_html.$wrapper;
 			wrapper.html(html);
 
-			dialog.set_primary_action(__("Select"), function() {
-				var dates = wrapper.find('input[type=checkbox]:checked')
-					.map((i, el) => $(el).attr('data-date')).toArray();
+			dialog.set_primary_action(__("Select"), function () {
+				var dates = wrapper
+					.find("input[type=checkbox]:checked")
+					.map((i, el) => $(el).attr("data-date"))
+					.toArray();
 
-				if(!dates) return;
+				if (!dates) return;
 
 				me.make_delivery_note(dates, for_reserved_stock);
 				dialog.hide();
@@ -906,61 +1063,64 @@
 		}
 	}
 
-	make_delivery_note(delivery_dates, for_reserved_stock=false) {
+	make_delivery_note(delivery_dates, for_reserved_stock = false) {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.selling.doctype.sales_order.sales_order.make_delivery_note",
 			frm: this.frm,
 			args: {
 				delivery_dates,
-				for_reserved_stock: for_reserved_stock
+				for_reserved_stock: for_reserved_stock,
 			},
 			freeze: true,
-			freeze_message: __("Creating Delivery Note ...")
-		})
+			freeze_message: __("Creating Delivery Note ..."),
+		});
 	}
 
 	make_sales_invoice() {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.selling.doctype.sales_order.sales_order.make_sales_invoice",
-			frm: this.frm
-		})
+			frm: this.frm,
+		});
 	}
 
 	make_maintenance_schedule() {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.selling.doctype.sales_order.sales_order.make_maintenance_schedule",
-			frm: this.frm
-		})
+			frm: this.frm,
+		});
 	}
 
 	make_project() {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.selling.doctype.sales_order.sales_order.make_project",
-			frm: this.frm
-		})
+			frm: this.frm,
+		});
 	}
 
 	make_inter_company_order() {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.selling.doctype.sales_order.sales_order.make_inter_company_purchase_order",
-			frm: this.frm
+			frm: this.frm,
 		});
 	}
 
 	make_maintenance_visit() {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.selling.doctype.sales_order.sales_order.make_maintenance_visit",
-			frm: this.frm
-		})
+			frm: this.frm,
+		});
 	}
 
-	make_purchase_order(){
-		let pending_items = this.frm.doc.items.some((item) =>{
+	make_purchase_order() {
+		let pending_items = this.frm.doc.items.some((item) => {
 			let pending_qty = flt(item.stock_qty) - flt(item.ordered_qty);
 			return pending_qty > 0;
-		})
-		if(!pending_items){
-			frappe.throw({message: __("Purchase Order already created for all Sales Order items"), title: __("Note")});
+		});
+		if (!pending_items) {
+			frappe.throw({
+				message: __("Purchase Order already created for all Sales Order items"),
+				title: __("Note"),
+			});
 		}
 
 		var me = this;
@@ -969,115 +1129,122 @@
 			size: "large",
 			fields: [
 				{
-					"fieldtype": "Check",
-					"label": __("Against Default Supplier"),
-					"fieldname": "against_default_supplier",
-					"default": 0
+					fieldtype: "Check",
+					label: __("Against Default Supplier"),
+					fieldname: "against_default_supplier",
+					default: 0,
 				},
 				{
-					fieldname: 'items_for_po', fieldtype: 'Table', label: 'Select Items',
+					fieldname: "items_for_po",
+					fieldtype: "Table",
+					label: "Select Items",
 					fields: [
 						{
-							fieldtype:'Data',
-							fieldname:'item_code',
-							label: __('Item'),
-							read_only:1,
-							in_list_view:1
-						},
-						{
-							fieldtype:'Data',
-							fieldname:'item_name',
-							label: __('Item name'),
-							read_only:1,
-							in_list_view:1
-						},
-						{
-							fieldtype:'Float',
-							fieldname:'pending_qty',
-							label: __('Pending Qty'),
+							fieldtype: "Data",
+							fieldname: "item_code",
+							label: __("Item"),
 							read_only: 1,
-							in_list_view:1
+							in_list_view: 1,
 						},
 						{
-							fieldtype:'Link',
-							read_only:1,
-							fieldname:'uom',
-							label: __('UOM'),
-							in_list_view:1,
+							fieldtype: "Data",
+							fieldname: "item_name",
+							label: __("Item name"),
+							read_only: 1,
+							in_list_view: 1,
 						},
 						{
-							fieldtype:'Data',
-							fieldname:'supplier',
-							label: __('Supplier'),
-							read_only:1,
-							in_list_view:1
+							fieldtype: "Float",
+							fieldname: "pending_qty",
+							label: __("Pending Qty"),
+							read_only: 1,
+							in_list_view: 1,
 						},
-					]
-				}
+						{
+							fieldtype: "Link",
+							read_only: 1,
+							fieldname: "uom",
+							label: __("UOM"),
+							in_list_view: 1,
+						},
+						{
+							fieldtype: "Data",
+							fieldname: "supplier",
+							label: __("Supplier"),
+							read_only: 1,
+							in_list_view: 1,
+						},
+					],
+				},
 			],
-			primary_action_label: 'Create Purchase Order',
-			primary_action (args) {
+			primary_action_label: "Create Purchase Order",
+			primary_action(args) {
 				if (!args) return;
 
 				let selected_items = dialog.fields_dict.items_for_po.grid.get_selected_children();
-				if(selected_items.length == 0) {
-					frappe.throw({message: 'Please select Items from the Table', title: __('Items Required'), indicator:'blue'})
+				if (selected_items.length == 0) {
+					frappe.throw({
+						message: "Please select Items from the Table",
+						title: __("Items Required"),
+						indicator: "blue",
+					});
 				}
 
 				dialog.hide();
 
-				var method = args.against_default_supplier ? "make_purchase_order_for_default_supplier" : "make_purchase_order"
+				var method = args.against_default_supplier
+					? "make_purchase_order_for_default_supplier"
+					: "make_purchase_order";
 				return frappe.call({
 					method: "erpnext.selling.doctype.sales_order.sales_order." + method,
 					freeze_message: __("Creating Purchase Order ..."),
 					args: {
-						"source_name": me.frm.doc.name,
-						"selected_items": selected_items
+						source_name: me.frm.doc.name,
+						selected_items: selected_items,
 					},
 					freeze: true,
-					callback: function(r) {
-						if(!r.exc) {
+					callback: function (r) {
+						if (!r.exc) {
 							if (!args.against_default_supplier) {
 								frappe.model.sync(r.message);
 								frappe.set_route("Form", r.message.doctype, r.message.name);
-							}
-							else {
+							} else {
 								frappe.route_options = {
-									"sales_order": me.frm.doc.name
-								}
+									sales_order: me.frm.doc.name,
+								};
 								frappe.set_route("List", "Purchase Order");
 							}
 						}
-					}
-				})
-			}
+					},
+				});
+			},
 		});
 
 		dialog.fields_dict["against_default_supplier"].df.onchange = () => set_po_items_data(dialog);
 
-		function set_po_items_data (dialog) {
+		function set_po_items_data(dialog) {
 			var against_default_supplier = dialog.get_value("against_default_supplier");
 			var items_for_po = dialog.get_value("items_for_po");
 
 			if (against_default_supplier) {
-				let items_with_supplier = items_for_po.filter((item) => item.supplier)
+				let items_with_supplier = items_for_po.filter((item) => item.supplier);
 
 				dialog.fields_dict["items_for_po"].df.data = items_with_supplier;
 				dialog.get_field("items_for_po").refresh();
 			} else {
 				let po_items = [];
-				me.frm.doc.items.forEach(d => {
+				me.frm.doc.items.forEach((d) => {
 					let ordered_qty = me.get_ordered_qty(d, me.frm.doc);
 					let pending_qty = (flt(d.stock_qty) - ordered_qty) / flt(d.conversion_factor);
 					if (pending_qty > 0) {
 						po_items.push({
-							"doctype": "Sales Order Item",
-							"name": d.name,
-							"item_name": d.item_name,
-							"item_code": d.item_code,
-							"pending_qty": pending_qty,
-							"uom": d.uom,
-							"supplier": d.supplier
+							doctype: "Sales Order Item",
+							name: d.name,
+							item_name: d.item_name,
+							item_code: d.item_code,
+							pending_qty: pending_qty,
+							uom: d.uom,
+							supplier: d.supplier,
 						});
 					}
 				});
@@ -1090,7 +1257,7 @@
 		set_po_items_data(dialog);
 		dialog.get_field("items_for_po").grid.only_sortable();
 		dialog.get_field("items_for_po").refresh();
-		dialog.wrapper.find('.grid-heading-row .grid-row-check').click();
+		dialog.wrapper.find(".grid-heading-row .grid-row-check").click();
 		dialog.show();
 	}
 
@@ -1098,71 +1265,66 @@
 		let ordered_qty = item.ordered_qty;
 		if (so.packed_items && so.packed_items.length) {
 			// calculate ordered qty based on packed items in case of product bundle
-			let packed_items = so.packed_items.filter(
-				(pi) => pi.parent_detail_docname == item.name
-			);
+			let packed_items = so.packed_items.filter((pi) => pi.parent_detail_docname == item.name);
 			if (packed_items && packed_items.length) {
-				ordered_qty = packed_items.reduce(
-					(sum, pi) => sum + flt(pi.ordered_qty),
-					0
-				);
+				ordered_qty = packed_items.reduce((sum, pi) => sum + flt(pi.ordered_qty), 0);
 				ordered_qty = ordered_qty / packed_items.length;
 			}
 		}
 		return ordered_qty;
 	}
 
-	hold_sales_order(){
+	hold_sales_order() {
 		var me = this;
 		var d = new frappe.ui.Dialog({
-			title: __('Reason for Hold'),
+			title: __("Reason for Hold"),
 			fields: [
 				{
-					"fieldname": "reason_for_hold",
-					"fieldtype": "Text",
-					"reqd": 1,
-				}
+					fieldname: "reason_for_hold",
+					fieldtype: "Text",
+					reqd: 1,
+				},
 			],
-			primary_action: function() {
+			primary_action: function () {
 				var data = d.get_values();
 				frappe.call({
 					method: "frappe.desk.form.utils.add_comment",
 					args: {
 						reference_doctype: me.frm.doctype,
 						reference_name: me.frm.docname,
-						content: __('Reason for hold:') + ' ' + data.reason_for_hold,
+						content: __("Reason for hold:") + " " + data.reason_for_hold,
 						comment_email: frappe.session.user,
-						comment_by: frappe.session.user_fullname
+						comment_by: frappe.session.user_fullname,
 					},
-					callback: function(r) {
-						if(!r.exc) {
-							me.update_status('Hold', 'On Hold')
+					callback: function (r) {
+						if (!r.exc) {
+							me.update_status("Hold", "On Hold");
 							d.hide();
 						}
-					}
+					},
 				});
-			}
+			},
 		});
 		d.show();
 	}
-	close_sales_order(){
-		this.frm.cscript.update_status("Close", "Closed")
+	close_sales_order() {
+		this.frm.cscript.update_status("Close", "Closed");
 	}
-	update_status(label, status){
+	update_status(label, status) {
 		var doc = this.frm.doc;
 		var me = this;
 		frappe.ui.form.is_saving = true;
 		frappe.call({
 			method: "erpnext.selling.doctype.sales_order.sales_order.update_status",
-			args: {status: status, name: doc.name},
-			callback: function(r){
+			args: { status: status, name: doc.name },
+			callback: function (r) {
 				me.frm.reload_doc();
 			},
-			always: function() {
+			always: function () {
 				frappe.ui.form.is_saving = false;
-			}
+			},
 		});
 	}
 };
 
-extend_cscript(cur_frm.cscript, new erpnext.selling.SalesOrderController({frm: cur_frm}));
+extend_cscript(cur_frm.cscript, new erpnext.selling.SalesOrderController({ frm: cur_frm }));
diff --git a/erpnext/selling/doctype/sales_order/sales_order_calendar.js b/erpnext/selling/doctype/sales_order/sales_order_calendar.js
index cb412cf..f4c0e2b 100644
--- a/erpnext/selling/doctype/sales_order/sales_order_calendar.js
+++ b/erpnext/selling/doctype/sales_order/sales_order_calendar.js
@@ -3,43 +3,44 @@
 
 frappe.views.calendar["Sales Order"] = {
 	field_map: {
-		"start": "delivery_date",
-		"end": "delivery_date",
-		"id": "name",
-		"title": "customer_name",
-		"allDay": "allDay"
+		start: "delivery_date",
+		end: "delivery_date",
+		id: "name",
+		title: "customer_name",
+		allDay: "allDay",
 	},
 	gantt: true,
 	filters: [
 		{
-			"fieldtype": "Link",
-			"fieldname": "customer",
-			"options": "Customer",
-			"label": __("Customer")
+			fieldtype: "Link",
+			fieldname: "customer",
+			options: "Customer",
+			label: __("Customer"),
 		},
 		{
-			"fieldtype": "Select",
-			"fieldname": "delivery_status",
-			"options": "Not Delivered\nFully Delivered\nPartly Delivered\nClosed\nNot Applicable",
-			"label": __("Delivery Status")
+			fieldtype: "Select",
+			fieldname: "delivery_status",
+			options: "Not Delivered\nFully Delivered\nPartly Delivered\nClosed\nNot Applicable",
+			label: __("Delivery Status"),
 		},
 		{
-			"fieldtype": "Select",
-			"fieldname": "billing_status",
-			"options": "Not Billed\nFully Billed\nPartly Billed\nClosed",
-			"label": __("Billing Status")
+			fieldtype: "Select",
+			fieldname: "billing_status",
+			options: "Not Billed\nFully Billed\nPartly Billed\nClosed",
+			label: __("Billing Status"),
 		},
 	],
 	get_events_method: "erpnext.selling.doctype.sales_order.sales_order.get_events",
-	get_css_class: function(data) {
-		if(data.status=="Closed") {
-			return "success";
-		} if(data.delivery_status=="Not Delivered") {
-			return "danger";
-		} else if(data.delivery_status=="Partly Delivered") {
-			return "warning";
-		} else if(data.delivery_status=="Fully Delivered") {
+	get_css_class: function (data) {
+		if (data.status == "Closed") {
 			return "success";
 		}
-	}
-}
+		if (data.delivery_status == "Not Delivered") {
+			return "danger";
+		} else if (data.delivery_status == "Partly Delivered") {
+			return "warning";
+		} else if (data.delivery_status == "Fully Delivered") {
+			return "success";
+		}
+	},
+};
diff --git a/erpnext/selling/doctype/sales_order/sales_order_list.js b/erpnext/selling/doctype/sales_order/sales_order_list.js
index 53de329..14ba051 100644
--- a/erpnext/selling/doctype/sales_order/sales_order_list.js
+++ b/erpnext/selling/doctype/sales_order/sales_order_list.js
@@ -1,6 +1,17 @@
-frappe.listview_settings['Sales Order'] = {
-	add_fields: ["base_grand_total", "customer_name", "currency", "delivery_date",
-		"per_delivered", "per_billed", "status", "advance_payment_status", "order_type", "name", "skip_delivery_note"],
+frappe.listview_settings["Sales Order"] = {
+	add_fields: [
+		"base_grand_total",
+		"customer_name",
+		"currency",
+		"delivery_date",
+		"per_delivered",
+		"per_billed",
+		"status",
+		"advance_payment_status",
+		"order_type",
+		"name",
+		"skip_delivery_note",
+	],
 	get_indicator: function (doc) {
 		if (doc.status === "Closed") {
 			// Closed
@@ -14,70 +25,84 @@
 			return [__("To Pay"), "gray", "advance_payment_status,=,Requested"];
 		} else if (!doc.skip_delivery_note && flt(doc.per_delivered, 2) < 100) {
 			if (frappe.datetime.get_diff(doc.delivery_date) < 0) {
-			// not delivered & overdue
-				return [__("Overdue"), "red",
-					"per_delivered,<,100|delivery_date,<,Today|status,!=,Closed"];
+				// not delivered & overdue
+				return [__("Overdue"), "red", "per_delivered,<,100|delivery_date,<,Today|status,!=,Closed"];
 			} else if (flt(doc.grand_total) === 0) {
 				// not delivered (zeroount order)
-				return [__("To Deliver"), "orange",
-					"per_delivered,<,100|grand_total,=,0|status,!=,Closed"];
+				return [__("To Deliver"), "orange", "per_delivered,<,100|grand_total,=,0|status,!=,Closed"];
 			} else if (flt(doc.per_billed, 2) < 100) {
 				// not delivered & not billed
-				return [__("To Deliver and Bill"), "orange",
-					"per_delivered,<,100|per_billed,<,100|status,!=,Closed"];
+				return [
+					__("To Deliver and Bill"),
+					"orange",
+					"per_delivered,<,100|per_billed,<,100|status,!=,Closed",
+				];
 			} else {
 				// not billed
-				return [__("To Deliver"), "orange",
-					"per_delivered,<,100|per_billed,=,100|status,!=,Closed"];
+				return [__("To Deliver"), "orange", "per_delivered,<,100|per_billed,=,100|status,!=,Closed"];
 			}
-		} else if ((flt(doc.per_delivered, 2) === 100) && flt(doc.grand_total) !== 0
-			&& flt(doc.per_billed, 2) < 100) {
+		} else if (
+			flt(doc.per_delivered, 2) === 100 &&
+			flt(doc.grand_total) !== 0 &&
+			flt(doc.per_billed, 2) < 100
+		) {
 			// to bill
-			return [__("To Bill"), "orange",
-				"per_delivered,=,100|per_billed,<,100|status,!=,Closed"];
-		} else if (doc.skip_delivery_note && flt(doc.per_billed, 2) < 100){
+			return [__("To Bill"), "orange", "per_delivered,=,100|per_billed,<,100|status,!=,Closed"];
+		} else if (doc.skip_delivery_note && flt(doc.per_billed, 2) < 100) {
 			return [__("To Bill"), "orange", "per_billed,<,100|status,!=,Closed"];
 		}
 	},
-	onload: function(listview) {
+	onload: function (listview) {
 		var method = "erpnext.selling.doctype.sales_order.sales_order.close_or_unclose_sales_orders";
 
-		listview.page.add_menu_item(__("Close"), function() {
-			listview.call_for_selected_items(method, {"status": "Closed"});
+		listview.page.add_menu_item(__("Close"), function () {
+			listview.call_for_selected_items(method, { status: "Closed" });
 		});
 
-		listview.page.add_menu_item(__("Re-open"), function() {
-			listview.call_for_selected_items(method, {"status": "Submitted"});
+		listview.page.add_menu_item(__("Re-open"), function () {
+			listview.call_for_selected_items(method, { status: "Submitted" });
 		});
 
-		listview.page.add_action_item(__("Sales Invoice"), ()=>{
+		listview.page.add_action_item(__("Sales Invoice"), () => {
 			erpnext.bulk_transaction_processing.create(listview, "Sales Order", "Sales Invoice");
 		});
 
-		listview.page.add_action_item(__("Delivery Note"), ()=>{
-			frappe.db.get_single_value("Selling Settings", "enable_cutoff_date_on_bulk_delivery_note_creation").then((value) => {
-				if (value) {
-					var dialog = new frappe.ui.Dialog({
-						title: __("Select Items up to Delivery Date"),
-						fields: [{fieldtype: "Date", fieldname: "delivery_date", default: frappe.datetime.add_days(frappe.datetime.nowdate(), 1)}]
-					});
-					dialog.set_primary_action(__("Select"), function(values) {
-						var until_delivery_date = values.delivery_date;
-						erpnext.bulk_transaction_processing.create(listview, "Sales Order", "Delivery Note", {
-							until_delivery_date
+		listview.page.add_action_item(__("Delivery Note"), () => {
+			frappe.db
+				.get_single_value("Selling Settings", "enable_cutoff_date_on_bulk_delivery_note_creation")
+				.then((value) => {
+					if (value) {
+						var dialog = new frappe.ui.Dialog({
+							title: __("Select Items up to Delivery Date"),
+							fields: [
+								{
+									fieldtype: "Date",
+									fieldname: "delivery_date",
+									default: frappe.datetime.add_days(frappe.datetime.nowdate(), 1),
+								},
+							],
 						});
-						dialog.hide();
-					});
-					dialog.show();
-				} else {
-					erpnext.bulk_transaction_processing.create(listview, "Sales Order", "Delivery Note");
-				}
-			})
+						dialog.set_primary_action(__("Select"), function (values) {
+							var until_delivery_date = values.delivery_date;
+							erpnext.bulk_transaction_processing.create(
+								listview,
+								"Sales Order",
+								"Delivery Note",
+								{
+									until_delivery_date,
+								}
+							);
+							dialog.hide();
+						});
+						dialog.show();
+					} else {
+						erpnext.bulk_transaction_processing.create(listview, "Sales Order", "Delivery Note");
+					}
+				});
 		});
 
-		listview.page.add_action_item(__("Advance Payment"), ()=>{
+		listview.page.add_action_item(__("Advance Payment"), () => {
 			erpnext.bulk_transaction_processing.create(listview, "Sales Order", "Payment Entry");
 		});
-
-	}
+	},
 };
diff --git a/erpnext/selling/doctype/sales_partner_type/sales_partner_type.js b/erpnext/selling/doctype/sales_partner_type/sales_partner_type.js
index 3e183f6..ac5a813 100644
--- a/erpnext/selling/doctype/sales_partner_type/sales_partner_type.js
+++ b/erpnext/selling/doctype/sales_partner_type/sales_partner_type.js
@@ -1,8 +1,6 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Sales Partner Type', {
-	refresh: function() {
-
-	}
+frappe.ui.form.on("Sales Partner Type", {
+	refresh: function () {},
 });
diff --git a/erpnext/selling/doctype/selling_settings/selling_settings.js b/erpnext/selling/doctype/selling_settings/selling_settings.js
index cf6fb28..4471458 100644
--- a/erpnext/selling/doctype/selling_settings/selling_settings.js
+++ b/erpnext/selling/doctype/selling_settings/selling_settings.js
@@ -1,8 +1,6 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Selling Settings', {
-	refresh: function(frm) {
-
-	}
+frappe.ui.form.on("Selling Settings", {
+	refresh: function (frm) {},
 });
diff --git a/erpnext/selling/doctype/sms_center/sms_center.js b/erpnext/selling/doctype/sms_center/sms_center.js
index 974cfc7..f513213 100644
--- a/erpnext/selling/doctype/sms_center/sms_center.js
+++ b/erpnext/selling/doctype/sms_center/sms_center.js
@@ -8,10 +8,10 @@
 
 		if (total_characters > 160) {
 			total_msg = cint(total_characters / 160);
-			total_msg = (total_characters % 160 == 0 ? total_msg : total_msg + 1);
+			total_msg = total_characters % 160 == 0 ? total_msg : total_msg + 1;
 		}
 
 		this.frm.set_value("total_characters", total_characters);
 		this.frm.set_value("total_messages", this.frm.doc.message ? total_msg : 0);
-	}
+	},
 });
diff --git a/erpnext/selling/page/point_of_sale/point_of_sale.js b/erpnext/selling/page/point_of_sale/point_of_sale.js
index 6db4150..6e4d1d0 100644
--- a/erpnext/selling/page/point_of_sale/point_of_sale.js
+++ b/erpnext/selling/page/point_of_sale/point_of_sale.js
@@ -1,19 +1,19 @@
-frappe.provide('erpnext.PointOfSale');
+frappe.provide("erpnext.PointOfSale");
 
-frappe.pages['point-of-sale'].on_page_load = function(wrapper) {
+frappe.pages["point-of-sale"].on_page_load = function (wrapper) {
 	frappe.ui.make_app_page({
 		parent: wrapper,
-		title: __('Point of Sale'),
-		single_column: true
+		title: __("Point of Sale"),
+		single_column: true,
 	});
 
-	frappe.require('point-of-sale.bundle.js', function() {
+	frappe.require("point-of-sale.bundle.js", function () {
 		wrapper.pos = new erpnext.PointOfSale.Controller(wrapper);
 		window.cur_pos = wrapper.pos;
 	});
 };
 
-frappe.pages['point-of-sale'].refresh = function(wrapper) {
+frappe.pages["point-of-sale"].refresh = function (wrapper) {
 	if (document.scannerDetectionData) {
 		onScan.detachFrom(document);
 		wrapper.pos.wrapper.html("");
diff --git a/erpnext/selling/page/point_of_sale/pos_controller.js b/erpnext/selling/page/point_of_sale/pos_controller.js
index 80e1c20..f361976 100644
--- a/erpnext/selling/page/point_of_sale/pos_controller.js
+++ b/erpnext/selling/page/point_of_sale/pos_controller.js
@@ -1,13 +1,15 @@
 erpnext.PointOfSale.Controller = class {
 	constructor(wrapper) {
-		this.wrapper = $(wrapper).find('.layout-main-section');
+		this.wrapper = $(wrapper).find(".layout-main-section");
 		this.page = wrapper.page;
 
 		this.check_opening_entry();
 	}
 
 	fetch_opening_entry() {
-		return frappe.call("erpnext.selling.page.point_of_sale.point_of_sale.check_opening_entry", { "user": frappe.session.user });
+		return frappe.call("erpnext.selling.page.point_of_sale.point_of_sale.check_opening_entry", {
+			user: frappe.session.user,
+		});
 	}
 
 	check_opening_entry() {
@@ -25,50 +27,62 @@
 		const me = this;
 		const table_fields = [
 			{
-				fieldname: "mode_of_payment", fieldtype: "Link",
-				in_list_view: 1, label: "Mode of Payment",
-				options: "Mode of Payment", reqd: 1
+				fieldname: "mode_of_payment",
+				fieldtype: "Link",
+				in_list_view: 1,
+				label: "Mode of Payment",
+				options: "Mode of Payment",
+				reqd: 1,
 			},
 			{
-				fieldname: "opening_amount", fieldtype: "Currency",
-				in_list_view: 1, label: "Opening Amount",
+				fieldname: "opening_amount",
+				fieldtype: "Currency",
+				in_list_view: 1,
+				label: "Opening Amount",
 				options: "company:company_currency",
 				change: function () {
-					dialog.fields_dict.balance_details.df.data.some(d => {
+					dialog.fields_dict.balance_details.df.data.some((d) => {
 						if (d.idx == this.doc.idx) {
 							d.opening_amount = this.value;
 							dialog.fields_dict.balance_details.grid.refresh();
 							return true;
 						}
 					});
-				}
-			}
+				},
+			},
 		];
 		const fetch_pos_payment_methods = () => {
 			const pos_profile = dialog.fields_dict.pos_profile.get_value();
 			if (!pos_profile) return;
 			frappe.db.get_doc("POS Profile", pos_profile).then(({ payments }) => {
 				dialog.fields_dict.balance_details.df.data = [];
-				payments.forEach(pay => {
+				payments.forEach((pay) => {
 					const { mode_of_payment } = pay;
-					dialog.fields_dict.balance_details.df.data.push({ mode_of_payment, opening_amount: '0' });
+					dialog.fields_dict.balance_details.df.data.push({ mode_of_payment, opening_amount: "0" });
 				});
 				dialog.fields_dict.balance_details.grid.refresh();
 			});
-		}
+		};
 		const dialog = new frappe.ui.Dialog({
-			title: __('Create POS Opening Entry'),
+			title: __("Create POS Opening Entry"),
 			static: true,
 			fields: [
 				{
-					fieldtype: 'Link', label: __('Company'), default: frappe.defaults.get_default('company'),
-					options: 'Company', fieldname: 'company', reqd: 1
+					fieldtype: "Link",
+					label: __("Company"),
+					default: frappe.defaults.get_default("company"),
+					options: "Company",
+					fieldname: "company",
+					reqd: 1,
 				},
 				{
-					fieldtype: 'Link', label: __('POS Profile'),
-					options: 'POS Profile', fieldname: 'pos_profile', reqd: 1,
+					fieldtype: "Link",
+					label: __("POS Profile"),
+					options: "POS Profile",
+					fieldname: "pos_profile",
+					reqd: 1,
 					get_query: () => pos_profile_query(),
-					onchange: () => fetch_pos_payment_methods()
+					onchange: () => fetch_pos_payment_methods(),
 				},
 				{
 					fieldname: "balance_details",
@@ -78,34 +92,38 @@
 					in_place_edit: true,
 					reqd: 1,
 					data: [],
-					fields: table_fields
-				}
+					fields: table_fields,
+				},
 			],
-			primary_action: async function({ company, pos_profile, balance_details }) {
+			primary_action: async function ({ company, pos_profile, balance_details }) {
 				if (!balance_details.length) {
 					frappe.show_alert({
 						message: __("Please add Mode of payments and opening balance details."),
-						indicator: 'red'
-					})
+						indicator: "red",
+					});
 					return frappe.utils.play_sound("error");
 				}
 
 				// filter balance details for empty rows
-				balance_details = balance_details.filter(d => d.mode_of_payment);
+				balance_details = balance_details.filter((d) => d.mode_of_payment);
 
 				const method = "erpnext.selling.page.point_of_sale.point_of_sale.create_opening_voucher";
-				const res = await frappe.call({ method, args: { pos_profile, company, balance_details }, freeze:true });
+				const res = await frappe.call({
+					method,
+					args: { pos_profile, company, balance_details },
+					freeze: true,
+				});
 				!res.exc && me.prepare_app_defaults(res.message);
 				dialog.hide();
 			},
-			primary_action_label: __('Submit')
+			primary_action_label: __("Submit"),
 		});
 		dialog.show();
 		const pos_profile_query = () => {
 			return {
-				query: 'erpnext.accounts.doctype.pos_profile.pos_profile.pos_profile_query',
-				filters: { company: dialog.fields_dict.company.get_value() }
-			}
+				query: "erpnext.accounts.doctype.pos_profile.pos_profile.pos_profile_query",
+				filters: { company: dialog.fields_dict.company.get_value() },
+			};
 		};
 	}
 
@@ -117,19 +135,19 @@
 		this.item_stock_map = {};
 		this.settings = {};
 
-		frappe.db.get_value('Stock Settings', undefined, 'allow_negative_stock').then(({ message }) => {
+		frappe.db.get_value("Stock Settings", undefined, "allow_negative_stock").then(({ message }) => {
 			this.allow_negative_stock = flt(message.allow_negative_stock) || false;
 		});
 
 		frappe.call({
 			method: "erpnext.selling.page.point_of_sale.point_of_sale.get_pos_profile_data",
-			args: { "pos_profile": this.pos_profile },
+			args: { pos_profile: this.pos_profile },
 			callback: (res) => {
 				const profile = res.message;
 				Object.assign(this.settings, profile);
-				this.settings.customer_groups = profile.customer_groups.map(group => group.name);
+				this.settings.customer_groups = profile.customer_groups.map((group) => group.name);
 				this.make_app();
-			}
+			},
 		});
 	}
 
@@ -139,7 +157,8 @@
 				<a class="text-muted" href="#Form/POS%20Opening%20Entry/${this.pos_opening}">
 					Opened at ${moment(this.pos_opening_time).format("Do MMMM, h:mma")}
 				</a>
-			</span>`);
+			</span>`
+		);
 	}
 
 	make_app() {
@@ -150,11 +169,9 @@
 	}
 
 	prepare_dom() {
-		this.wrapper.append(
-			`<div class="point-of-sale-app"></div>`
-		);
+		this.wrapper.append(`<div class="point-of-sale-app"></div>`);
 
-		this.$components_wrapper = this.wrapper.find('.point-of-sale-app');
+		this.$components_wrapper = this.wrapper.find(".point-of-sale-app");
 	}
 
 	prepare_components() {
@@ -169,13 +186,18 @@
 	prepare_menu() {
 		this.page.clear_menu();
 
-		this.page.add_menu_item(__("Open Form View"), this.open_form_view.bind(this), false, 'Ctrl+F');
+		this.page.add_menu_item(__("Open Form View"), this.open_form_view.bind(this), false, "Ctrl+F");
 
-		this.page.add_menu_item(__("Toggle Recent Orders"), this.toggle_recent_order.bind(this), false, 'Ctrl+O');
+		this.page.add_menu_item(
+			__("Toggle Recent Orders"),
+			this.toggle_recent_order.bind(this),
+			false,
+			"Ctrl+O"
+		);
 
-		this.page.add_menu_item(__("Save as Draft"), this.save_draft_invoice.bind(this), false, 'Ctrl+S');
+		this.page.add_menu_item(__("Save as Draft"), this.save_draft_invoice.bind(this), false, "Ctrl+S");
 
-		this.page.add_menu_item(__('Close the POS'), this.close_pos.bind(this), false, 'Shift+Ctrl+C');
+		this.page.add_menu_item(__("Close the POS"), this.close_pos.bind(this), false, "Shift+Ctrl+C");
 	}
 
 	open_form_view() {
@@ -184,7 +206,7 @@
 	}
 
 	toggle_recent_order() {
-		const show = this.recent_order_list.$component.is(':hidden');
+		const show = this.recent_order_list.$component.is(":hidden");
 		this.toggle_recent_order_list(show);
 	}
 
@@ -194,31 +216,33 @@
 		if (this.frm.doc.items.length == 0) {
 			frappe.show_alert({
 				message: __("You must add atleast one item to save it as draft."),
-				indicator:'red'
+				indicator: "red",
 			});
 			frappe.utils.play_sound("error");
 			return;
 		}
 
-		this.frm.save(undefined, undefined, undefined, () => {
-			frappe.show_alert({
-				message: __("There was an error saving the document."),
-				indicator: 'red'
+		this.frm
+			.save(undefined, undefined, undefined, () => {
+				frappe.show_alert({
+					message: __("There was an error saving the document."),
+					indicator: "red",
+				});
+				frappe.utils.play_sound("error");
+			})
+			.then(() => {
+				frappe.run_serially([
+					() => frappe.dom.freeze(),
+					() => this.make_new_invoice(),
+					() => frappe.dom.unfreeze(),
+				]);
 			});
-			frappe.utils.play_sound("error");
-		}).then(() => {
-			frappe.run_serially([
-				() => frappe.dom.freeze(),
-				() => this.make_new_invoice(),
-				() => frappe.dom.unfreeze(),
-			]);
-		});
 	}
 
 	close_pos() {
 		if (!this.$components_wrapper.is(":visible")) return;
 
-		let voucher = frappe.model.get_new_doc('POS Closing Entry');
+		let voucher = frappe.model.get_new_doc("POS Closing Entry");
 		voucher.pos_profile = this.frm.doc.pos_profile;
 		voucher.user = frappe.session.user;
 		voucher.company = this.frm.doc.company;
@@ -226,7 +250,7 @@
 		voucher.period_end_date = frappe.datetime.now_datetime();
 		voucher.posting_date = frappe.datetime.now_date();
 		voucher.posting_time = frappe.datetime.now_time();
-		frappe.set_route('Form', 'POS Closing Entry', voucher.name);
+		frappe.set_route("Form", "POS Closing Entry", voucher.name);
 	}
 
 	init_item_selector() {
@@ -235,11 +259,11 @@
 			pos_profile: this.pos_profile,
 			settings: this.settings,
 			events: {
-				item_selected: args => this.on_cart_update(args),
+				item_selected: (args) => this.on_cart_update(args),
 
-				get_frm: () => this.frm || {}
-			}
-		})
+				get_frm: () => this.frm || {},
+			},
+		});
 	}
 
 	init_item_cart() {
@@ -264,9 +288,9 @@
 					this.customer_details = details;
 					// will add/remove LP payment method
 					this.payment.render_loyalty_points_payment_mode();
-				}
-			}
-		})
+				},
+			},
+		});
 	}
 
 	init_item_details() {
@@ -287,7 +311,7 @@
 						const args = {
 							field,
 							value,
-							item: this.item_details.current_item
+							item: this.item_details.current_item,
 						};
 						return this.on_cart_update(args);
 					}
@@ -304,24 +328,28 @@
 					this.cart.toggle_numpad_field_edit(fieldname);
 				},
 				set_value_in_current_cart_item: (selector, value) => {
-					this.cart.update_selector_value_in_cart_item(selector, value, this.item_details.current_item);
+					this.cart.update_selector_value_in_cart_item(
+						selector,
+						value,
+						this.item_details.current_item
+					);
 				},
 				clone_new_batch_item_in_frm: (batch_serial_map, item) => {
 					// called if serial nos are 'auto_selected' and if those serial nos belongs to multiple batches
 					// for each unique batch new item row is added in the form & cart
-					Object.keys(batch_serial_map).forEach(batch => {
-						const item_to_clone = this.frm.doc.items.find(i => i.name == item.name);
+					Object.keys(batch_serial_map).forEach((batch) => {
+						const item_to_clone = this.frm.doc.items.find((i) => i.name == item.name);
 						const new_row = this.frm.add_child("items", { ...item_to_clone });
 						// update new serialno and batch
 						new_row.batch_no = batch;
 						new_row.serial_no = batch_serial_map[batch].join(`\n`);
 						new_row.qty = batch_serial_map[batch].length;
-						this.frm.doc.items.forEach(row => {
+						this.frm.doc.items.forEach((row) => {
 							if (item.item_code === row.item_code) {
 								this.update_cart_html(row);
 							}
 						});
-					})
+					});
 				},
 				remove_item_from_cart: () => this.remove_item_from_cart(),
 				get_item_stock_map: () => this.item_stock_map,
@@ -330,8 +358,8 @@
 					this.cart.prev_action = null;
 					this.cart.toggle_item_highlight();
 				},
-				get_available_stock: (item_code, warehouse) => this.get_available_stock(item_code, warehouse)
-			}
+				get_available_stock: (item_code, warehouse) => this.get_available_stock(item_code, warehouse),
+			},
 		});
 	}
 
@@ -345,7 +373,9 @@
 
 				toggle_other_sections: (show) => {
 					if (show) {
-						this.item_details.$component.is(':visible') ? this.item_details.$component.css('display', 'none') : '';
+						this.item_details.$component.is(":visible")
+							? this.item_details.$component.css("display", "none")
+							: "";
 						this.item_selector.toggle_component(false);
 					} else {
 						this.item_selector.toggle_component(true);
@@ -353,18 +383,17 @@
 				},
 
 				submit_invoice: () => {
-					this.frm.savesubmit()
-						.then((r) => {
-							this.toggle_components(false);
-							this.order_summary.toggle_component(true);
-							this.order_summary.load_summary_of(this.frm.doc, true);
-							frappe.show_alert({
-								indicator: 'green',
-								message: __('POS invoice {0} created successfully', [r.doc.name])
-							});
+					this.frm.savesubmit().then((r) => {
+						this.toggle_components(false);
+						this.order_summary.toggle_component(true);
+						this.order_summary.load_summary_of(this.frm.doc, true);
+						frappe.show_alert({
+							indicator: "green",
+							message: __("POS invoice {0} created successfully", [r.doc.name]),
 						});
-				}
-			}
+					});
+				},
+			},
 		});
 	}
 
@@ -373,13 +402,13 @@
 			wrapper: this.$components_wrapper,
 			events: {
 				open_invoice_data: (name) => {
-					frappe.db.get_doc('POS Invoice', name).then((doc) => {
+					frappe.db.get_doc("POS Invoice", name).then((doc) => {
 						this.order_summary.load_summary_of(doc);
 					});
 				},
-				reset_summary: () => this.order_summary.toggle_summary_placeholder(true)
-			}
-		})
+				reset_summary: () => this.order_summary.toggle_summary_placeholder(true),
+			},
+		});
 	}
 
 	init_order_summary() {
@@ -390,11 +419,11 @@
 
 				process_return: (name) => {
 					this.recent_order_list.toggle_component(false);
-					frappe.db.get_doc('POS Invoice', name).then((doc) => {
+					frappe.db.get_doc("POS Invoice", name).then((doc) => {
 						frappe.run_serially([
 							() => this.make_return_invoice(doc),
 							() => this.cart.load_invoice(),
-							() => this.item_selector.toggle_component(true)
+							() => this.item_selector.toggle_component(true),
 						]);
 					});
 				},
@@ -402,9 +431,9 @@
 					this.recent_order_list.toggle_component(false);
 					frappe.run_serially([
 						() => this.frm.refresh(name),
-						() => this.frm.call('reset_mode_of_payments'),
+						() => this.frm.call("reset_mode_of_payments"),
 						() => this.cart.load_invoice(),
-						() => this.item_selector.toggle_component(true)
+						() => this.item_selector.toggle_component(true),
 					]);
 				},
 				delete_order: (name) => {
@@ -419,9 +448,9 @@
 						() => this.item_selector.toggle_component(true),
 						() => frappe.dom.unfreeze(),
 					]);
-				}
-			}
-		})
+				},
+			},
+		});
 	}
 
 	toggle_recent_order_list(show) {
@@ -435,7 +464,7 @@
 		this.item_selector.toggle_component(show);
 
 		// do not show item details or payment if recent order is toggled off
-		!show ? (this.item_details.toggle_component(false) || this.payment.toggle_component(false)) : '';
+		!show ? this.item_details.toggle_component(false) || this.payment.toggle_component(false) : "";
 	}
 
 	make_new_invoice() {
@@ -445,23 +474,23 @@
 			() => this.set_pos_profile_data(),
 			() => this.set_pos_profile_status(),
 			() => this.cart.load_invoice(),
-			() => frappe.dom.unfreeze()
+			() => frappe.dom.unfreeze(),
 		]);
 	}
 
 	make_sales_invoice_frm() {
-		const doctype = 'POS Invoice';
-		return new Promise(resolve => {
+		const doctype = "POS Invoice";
+		return new Promise((resolve) => {
 			if (this.frm) {
 				this.frm = this.get_new_frm(this.frm);
 				this.frm.doc.items = [];
-				this.frm.doc.is_pos = 1
+				this.frm.doc.is_pos = 1;
 				resolve();
 			} else {
 				frappe.model.with_doctype(doctype, () => {
 					this.frm = this.get_new_frm();
 					this.frm.doc.items = [];
-					this.frm.doc.is_pos = 1
+					this.frm.doc.is_pos = 1;
 					resolve();
 				});
 			}
@@ -469,8 +498,8 @@
 	}
 
 	get_new_frm(_frm) {
-		const doctype = 'POS Invoice';
-		const page = $('<div>');
+		const doctype = "POS Invoice";
+		const page = $("<div>");
 		const frm = _frm || new frappe.ui.form.Form(doctype, page, false);
 		const name = frappe.model.make_new_doc_and_get_name(doctype, true);
 		frm.refresh(name);
@@ -485,8 +514,8 @@
 		return frappe.call({
 			method: "erpnext.accounts.doctype.pos_invoice.pos_invoice.make_sales_return",
 			args: {
-				'source_name': doc.name,
-				'target_doc': this.frm.doc
+				source_name: doc.name,
+				target_doc: this.frm.doc,
 			},
 			callback: (r) => {
 				frappe.model.sync(r.message);
@@ -494,13 +523,16 @@
 				this.set_pos_profile_data().then(() => {
 					frappe.dom.unfreeze();
 				});
-			}
+			},
 		});
 	}
 
 	set_pos_profile_data() {
 		if (this.company && !this.frm.doc.company) this.frm.doc.company = this.company;
-		if ((this.pos_profile && !this.frm.doc.pos_profile) | (this.frm.doc.is_return && this.pos_profile != this.frm.doc.pos_profile)) {
+		if (
+			(this.pos_profile && !this.frm.doc.pos_profile) |
+			(this.frm.doc.is_return && this.pos_profile != this.frm.doc.pos_profile)
+		) {
 			this.frm.doc.pos_profile = this.pos_profile;
 		}
 
@@ -521,16 +553,15 @@
 			item_row = this.get_item_from_frm(item);
 			const item_row_exists = !$.isEmptyObject(item_row);
 
-			const from_selector = field === 'qty' && value === "+1";
-			if (from_selector)
-				value = flt(item_row.stock_qty) + flt(value);
+			const from_selector = field === "qty" && value === "+1";
+			if (from_selector) value = flt(item_row.stock_qty) + flt(value);
 
 			if (item_row_exists) {
-				if (field === 'qty')
-					value = flt(value);
+				if (field === "qty") value = flt(value);
 
-				if (['qty', 'conversion_factor'].includes(field) && value > 0 && !this.allow_negative_stock) {
-					const qty_needed = field === 'qty' ? value * item_row.conversion_factor : item_row.qty * value;
+				if (["qty", "conversion_factor"].includes(field) && value > 0 && !this.allow_negative_stock) {
+					const qty_needed =
+						field === "qty" ? value * item_row.conversion_factor : item_row.qty * value;
 					await this.check_stock_availability(item_row, qty_needed, this.frm.doc.set_warehouse);
 				}
 
@@ -538,20 +569,17 @@
 					await frappe.model.set_value(item_row.doctype, item_row.name, field, value);
 					this.update_cart_html(item_row);
 				}
-
 			} else {
-				if (!this.frm.doc.customer)
-					return this.raise_customer_selection_alert();
+				if (!this.frm.doc.customer) return this.raise_customer_selection_alert();
 
 				const { item_code, batch_no, serial_no, rate, uom } = item;
 
-				if (!item_code)
-					return;
+				if (!item_code) return;
 
 				if (rate == undefined || rate == 0) {
 					frappe.show_alert({
-						message: __('Price is not set for the item.'),
-						indicator: 'orange'
+						message: __("Price is not set for the item."),
+						indicator: "orange",
 					});
 					frappe.utils.play_sound("error");
 					return;
@@ -560,15 +588,14 @@
 
 				if (serial_no) {
 					await this.check_serial_no_availablilty(item_code, this.frm.doc.set_warehouse, serial_no);
-					new_item['serial_no'] = serial_no;
+					new_item["serial_no"] = serial_no;
 				}
 
-				if (field === 'serial_no')
-					new_item['qty'] = value.split(`\n`).length || 0;
+				if (field === "serial_no") new_item["qty"] = value.split(`\n`).length || 0;
 
-				item_row = this.frm.add_child('items', new_item);
+				item_row = this.frm.add_child("items", new_item);
 
-				if (field === 'qty' && value !== 0 && !this.allow_negative_stock) {
+				if (field === "qty" && value !== 0 && !this.allow_negative_stock) {
 					const qty_needed = value * item_row.conversion_factor;
 					await this.check_stock_availability(item_row, qty_needed, this.frm.doc.set_warehouse);
 				}
@@ -577,13 +604,14 @@
 
 				this.update_cart_html(item_row);
 
-				if (this.item_details.$component.is(':visible'))
-					this.edit_item_details_of(item_row);
+				if (this.item_details.$component.is(":visible")) this.edit_item_details_of(item_row);
 
-				if (this.check_serial_batch_selection_needed(item_row) && !this.item_details.$component.is(':visible'))
+				if (
+					this.check_serial_batch_selection_needed(item_row) &&
+					!this.item_details.$component.is(":visible")
+				)
 					this.edit_item_details_of(item_row);
 			}
-
 		} catch (error) {
 			console.log(error);
 		} finally {
@@ -595,8 +623,8 @@
 	raise_customer_selection_alert() {
 		frappe.dom.unfreeze();
 		frappe.show_alert({
-			message: __('You must select a customer before adding an item.'),
-			indicator: 'orange'
+			message: __("You must select a customer before adding an item."),
+			indicator: "orange",
 		});
 		frappe.utils.play_sound("error");
 	}
@@ -604,17 +632,18 @@
 	get_item_from_frm({ name, item_code, batch_no, uom, rate }) {
 		let item_row = null;
 		if (name) {
-			item_row = this.frm.doc.items.find(i => i.name == name);
+			item_row = this.frm.doc.items.find((i) => i.name == name);
 		} else {
 			// if item is clicked twice from item selector
 			// then "item_code, batch_no, uom, rate" will help in getting the exact item
 			// to increase the qty by one
-			const has_batch_no = (batch_no !== 'null' && batch_no !== null);
+			const has_batch_no = batch_no !== "null" && batch_no !== null;
 			item_row = this.frm.doc.items.find(
-				i => i.item_code === item_code
-					&& (!has_batch_no || (has_batch_no && i.batch_no === batch_no))
-					&& (i.uom === uom)
-					&& (i.rate === flt(rate))
+				(i) =>
+					i.item_code === item_code &&
+					(!has_batch_no || (has_batch_no && i.batch_no === batch_no)) &&
+					i.uom === uom &&
+					i.rate === flt(rate)
 			);
 		}
 
@@ -642,16 +671,19 @@
 		const no_serial_selected = !item_row.serial_no;
 		const no_batch_selected = !item_row.batch_no;
 
-		if ((serialized && no_serial_selected) || (batched && no_batch_selected) ||
-			(serialized && batched && (no_batch_selected || no_serial_selected))) {
+		if (
+			(serialized && no_serial_selected) ||
+			(batched && no_batch_selected) ||
+			(serialized && batched && (no_batch_selected || no_serial_selected))
+		) {
 			return true;
 		}
 		return false;
 	}
 
 	async trigger_new_item_events(item_row) {
-		await this.frm.script_manager.trigger('item_code', item_row.doctype, item_row.name);
-		await this.frm.script_manager.trigger('qty', item_row.doctype, item_row.name);
+		await this.frm.script_manager.trigger("item_code", item_row.doctype, item_row.name);
+		await this.frm.script_manager.trigger("qty", item_row.doctype, item_row.name);
 	}
 
 	async check_stock_availability(item_row, qty_needed, warehouse) {
@@ -663,21 +695,27 @@
 		const bold_uom = item_row.stock_uom.bold();
 		const bold_item_code = item_row.item_code.bold();
 		const bold_warehouse = warehouse.bold();
-		const bold_available_qty = available_qty.toString().bold()
+		const bold_available_qty = available_qty.toString().bold();
 		if (!(available_qty > 0)) {
 			if (is_stock_item) {
 				frappe.model.clear_doc(item_row.doctype, item_row.name);
 				frappe.throw({
 					title: __("Not Available"),
-					message: __('Item Code: {0} is not available under warehouse {1}.', [bold_item_code, bold_warehouse])
+					message: __("Item Code: {0} is not available under warehouse {1}.", [
+						bold_item_code,
+						bold_warehouse,
+					]),
 				});
 			} else {
 				return;
 			}
 		} else if (is_stock_item && available_qty < qty_needed) {
 			frappe.throw({
-				message: __('Stock quantity not enough for Item Code: {0} under warehouse {1}. Available quantity {2} {3}.', [bold_item_code, bold_warehouse, bold_available_qty, bold_uom]),
-				indicator: 'orange'
+				message: __(
+					"Stock quantity not enough for Item Code: {0} under warehouse {1}. Available quantity {2} {3}.",
+					[bold_item_code, bold_warehouse, bold_available_qty, bold_uom]
+				),
+				indicator: "orange",
 			});
 			frappe.utils.play_sound("error");
 		}
@@ -686,13 +724,15 @@
 
 	async check_serial_no_availablilty(item_code, warehouse, serial_no) {
 		const method = "erpnext.stock.doctype.serial_no.serial_no.get_pos_reserved_serial_nos";
-		const args = {filters: { item_code, warehouse }}
+		const args = { filters: { item_code, warehouse } };
 		const res = await frappe.call({ method, args });
 
 		if (res.message.includes(serial_no)) {
 			frappe.throw({
 				title: __("Not Available"),
-				message: __('Serial No: {0} has already been transacted into another POS Invoice.', [serial_no.bold()])
+				message: __("Serial No: {0} has already been transacted into another POS Invoice.", [
+					serial_no.bold(),
+				]),
 			});
 		}
 	}
@@ -702,21 +742,20 @@
 		return frappe.call({
 			method: "erpnext.accounts.doctype.pos_invoice.pos_invoice.get_stock_availability",
 			args: {
-				'item_code': item_code,
-				'warehouse': warehouse,
+				item_code: item_code,
+				warehouse: warehouse,
 			},
 			callback(res) {
-				if (!me.item_stock_map[item_code])
-					me.item_stock_map[item_code] = {};
+				if (!me.item_stock_map[item_code]) me.item_stock_map[item_code] = {};
 				me.item_stock_map[item_code][warehouse] = res.message;
-			}
+			},
 		});
 	}
 
 	update_item_field(value, field_or_action) {
-		if (field_or_action === 'checkout') {
+		if (field_or_action === "checkout") {
 			this.item_details.toggle_item_details_section(null);
-		} else if (field_or_action === 'remove') {
+		} else if (field_or_action === "remove") {
 			this.remove_item_from_cart();
 		} else {
 			const field_control = this.item_details[`${field_or_action}_control`];
@@ -730,26 +769,28 @@
 		frappe.dom.freeze();
 		const { doctype, name, current_item } = this.item_details;
 
-		return frappe.model.set_value(doctype, name, 'qty', 0)
+		return frappe.model
+			.set_value(doctype, name, "qty", 0)
 			.then(() => {
 				frappe.model.clear_doc(doctype, name);
 				this.update_cart_html(current_item, true);
 				this.item_details.toggle_item_details_section(null);
 				frappe.dom.unfreeze();
 			})
-			.catch(e => console.log(e));
+			.catch((e) => console.log(e));
 	}
 
 	async save_and_checkout() {
 		if (this.frm.is_dirty()) {
 			let save_error = false;
-			await this.frm.save(null, null, null, () => save_error = true);
+			await this.frm.save(null, null, null, () => (save_error = true));
 			// only move to payment section if save is successful
 			!save_error && this.payment.checkout();
 			// show checkout button on error
-			save_error && setTimeout(() => {
-				this.cart.toggle_checkout_btn(true);
-			}, 300); // wait for save to finish
+			save_error &&
+				setTimeout(() => {
+					this.cart.toggle_checkout_btn(true);
+				}, 300); // wait for save to finish
 		} else {
 			this.payment.checkout();
 		}
diff --git a/erpnext/selling/page/point_of_sale/pos_item_cart.js b/erpnext/selling/page/point_of_sale/pos_item_cart.js
index bd85792..d95ef58 100644
--- a/erpnext/selling/page/point_of_sale/pos_item_cart.js
+++ b/erpnext/selling/page/point_of_sale/pos_item_cart.js
@@ -18,11 +18,9 @@
 	}
 
 	prepare_dom() {
-		this.wrapper.append(
-			`<section class="customer-cart-container"></section>`
-		)
+		this.wrapper.append(`<section class="customer-cart-container"></section>`);
 
-		this.$component = this.wrapper.find('.customer-cart-container');
+		this.$component = this.wrapper.find(".customer-cart-container");
 	}
 
 	init_child_components() {
@@ -31,16 +29,14 @@
 	}
 
 	init_customer_selector() {
-		this.$component.append(
-			`<div class="customer-section"></div>`
-		)
-		this.$customer_section = this.$component.find('.customer-section');
+		this.$component.append(`<div class="customer-section"></div>`);
+		this.$customer_section = this.$component.find(".customer-section");
 		this.make_customer_selector();
 	}
 
 	reset_customer_selector() {
 		const frm = this.events.get_frm();
-		frm.set_value('customer', '');
+		frm.set_value("customer", "");
 		this.make_customer_selector();
 		this.customer_field.set_focus();
 	}
@@ -49,11 +45,11 @@
 		this.$component.append(
 			`<div class="cart-container">
 				<div class="abs-cart-container">
-					<div class="cart-label">${__('Item Cart')}</div>
+					<div class="cart-label">${__("Item Cart")}</div>
 					<div class="cart-header">
-						<div class="name-header">${__('Item')}</div>
-						<div class="qty-header">${__('Quantity')}</div>
-						<div class="rate-amount-header">${__('Amount')}</div>
+						<div class="name-header">${__("Item")}</div>
+						<div class="qty-header">${__("Quantity")}</div>
+						<div class="rate-amount-header">${__("Amount")}</div>
 					</div>
 					<div class="cart-items-section"></div>
 					<div class="cart-totals-section"></div>
@@ -61,7 +57,7 @@
 				</div>
 			</div>`
 		);
-		this.$cart_container = this.$component.find('.cart-container');
+		this.$cart_container = this.$component.find(".cart-container");
 
 		this.make_cart_totals_section();
 		this.make_cart_items_section();
@@ -69,39 +65,35 @@
 	}
 
 	make_cart_items_section() {
-		this.$cart_header = this.$component.find('.cart-header');
-		this.$cart_items_wrapper = this.$component.find('.cart-items-section');
+		this.$cart_header = this.$component.find(".cart-header");
+		this.$cart_items_wrapper = this.$component.find(".cart-items-section");
 
 		this.make_no_items_placeholder();
 	}
 
 	make_no_items_placeholder() {
-		this.$cart_header.css('display', 'none');
-		this.$cart_items_wrapper.html(
-			`<div class="no-item-wrapper">${__('No items in cart')}</div>`
-		);
+		this.$cart_header.css("display", "none");
+		this.$cart_items_wrapper.html(`<div class="no-item-wrapper">${__("No items in cart")}</div>`);
 	}
 
 	get_discount_icon() {
-		return (
-			`<svg class="discount-icon" width="24" height="24" viewBox="0 0 24 24" stroke="currentColor" fill="none" xmlns="http://www.w3.org/2000/svg">
+		return `<svg class="discount-icon" width="24" height="24" viewBox="0 0 24 24" stroke="currentColor" fill="none" xmlns="http://www.w3.org/2000/svg">
 				<path d="M19 15.6213C19 15.2235 19.158 14.842 19.4393 14.5607L20.9393 13.0607C21.5251 12.4749 21.5251 11.5251 20.9393 10.9393L19.4393 9.43934C19.158 9.15804 19 8.7765 19 8.37868V6.5C19 5.67157 18.3284 5 17.5 5H15.6213C15.2235 5 14.842 4.84196 14.5607 4.56066L13.0607 3.06066C12.4749 2.47487 11.5251 2.47487 10.9393 3.06066L9.43934 4.56066C9.15804 4.84196 8.7765 5 8.37868 5H6.5C5.67157 5 5 5.67157 5 6.5V8.37868C5 8.7765 4.84196 9.15804 4.56066 9.43934L3.06066 10.9393C2.47487 11.5251 2.47487 12.4749 3.06066 13.0607L4.56066 14.5607C4.84196 14.842 5 15.2235 5 15.6213V17.5C5 18.3284 5.67157 19 6.5 19H8.37868C8.7765 19 9.15804 19.158 9.43934 19.4393L10.9393 20.9393C11.5251 21.5251 12.4749 21.5251 13.0607 20.9393L14.5607 19.4393C14.842 19.158 15.2235 19 15.6213 19H17.5C18.3284 19 19 18.3284 19 17.5V15.6213Z" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
 				<path d="M15 9L9 15" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
 				<path d="M10.5 9.5C10.5 10.0523 10.0523 10.5 9.5 10.5C8.94772 10.5 8.5 10.0523 8.5 9.5C8.5 8.94772 8.94772 8.5 9.5 8.5C10.0523 8.5 10.5 8.94772 10.5 9.5Z" fill="white" stroke-linecap="round" stroke-linejoin="round"/>
 				<path d="M15.5 14.5C15.5 15.0523 15.0523 15.5 14.5 15.5C13.9477 15.5 13.5 15.0523 13.5 14.5C13.5 13.9477 13.9477 13.5 14.5 13.5C15.0523 13.5 15.5 13.9477 15.5 14.5Z" fill="white" stroke-linecap="round" stroke-linejoin="round"/>
-			</svg>`
-		);
+			</svg>`;
 	}
 
 	make_cart_totals_section() {
-		this.$totals_section = this.$component.find('.cart-totals-section');
+		this.$totals_section = this.$component.find(".cart-totals-section");
 
 		this.$totals_section.append(
 			`<div class="add-discount-wrapper">
-				${this.get_discount_icon()} ${__('Add Discount')}
+				${this.get_discount_icon()} ${__("Add Discount")}
 			</div>
 			<div class="item-qty-total-container">
-				<div class="item-qty-total-label">${__('Total Items')}</div>
+				<div class="item-qty-total-label">${__("Total Items")}</div>
 				<div class="item-qty-total-value">0.00</div>
 			</div>
 			<div class="net-total-container">
@@ -110,39 +102,39 @@
 			</div>
 			<div class="taxes-container"></div>
 			<div class="grand-total-container">
-				<div>${__('Grand Total')}</div>
+				<div>${__("Grand Total")}</div>
 				<div>0.00</div>
 			</div>
-			<div class="checkout-btn">${__('Checkout')}</div>
-			<div class="edit-cart-btn">${__('Edit Cart')}</div>`
-		)
+			<div class="checkout-btn">${__("Checkout")}</div>
+			<div class="edit-cart-btn">${__("Edit Cart")}</div>`
+		);
 
 		this.$add_discount_elem = this.$component.find(".add-discount-wrapper");
 	}
 
 	make_cart_numpad() {
-		this.$numpad_section = this.$component.find('.numpad-section');
+		this.$numpad_section = this.$component.find(".numpad-section");
 
 		this.number_pad = new erpnext.PointOfSale.NumberPad({
 			wrapper: this.$numpad_section,
 			events: {
-				numpad_event: this.on_numpad_event.bind(this)
+				numpad_event: this.on_numpad_event.bind(this),
 			},
 			cols: 5,
 			keys: [
-				[ 1, 2, 3, 'Quantity' ],
-				[ 4, 5, 6, 'Discount' ],
-				[ 7, 8, 9, 'Rate' ],
-				[ '.', 0, 'Delete', 'Remove' ]
+				[1, 2, 3, "Quantity"],
+				[4, 5, 6, "Discount"],
+				[7, 8, 9, "Rate"],
+				[".", 0, "Delete", "Remove"],
 			],
 			css_classes: [
-				[ '', '', '', 'col-span-2' ],
-				[ '', '', '', 'col-span-2' ],
-				[ '', '', '', 'col-span-2' ],
-				[ '', '', '', 'col-span-2 remove-btn' ]
+				["", "", "", "col-span-2"],
+				["", "", "", "col-span-2"],
+				["", "", "", "col-span-2"],
+				["", "", "", "col-span-2 remove-btn"],
 			],
-			fieldnames_map: { 'Quantity': 'qty', 'Discount': 'discount_percentage' }
-		})
+			fieldnames_map: { Quantity: "qty", Discount: "discount_percentage" },
+		});
 
 		this.$numpad_section.prepend(
 			`<div class="numpad-totals">
@@ -150,49 +142,49 @@
 				<span class="numpad-net-total"></span>
 				<span class="numpad-grand-total"></span>
 			</div>`
-		)
+		);
 
 		this.$numpad_section.append(
-			`<div class="numpad-btn checkout-btn" data-button-value="checkout">${__('Checkout')}</div>`
-		)
+			`<div class="numpad-btn checkout-btn" data-button-value="checkout">${__("Checkout")}</div>`
+		);
 	}
 
 	bind_events() {
 		const me = this;
-		this.$customer_section.on('click', '.reset-customer-btn', function () {
+		this.$customer_section.on("click", ".reset-customer-btn", function () {
 			me.reset_customer_selector();
 		});
 
-		this.$customer_section.on('click', '.close-details-btn', function () {
+		this.$customer_section.on("click", ".close-details-btn", function () {
 			me.toggle_customer_info(false);
 		});
 
-		this.$customer_section.on('click', '.customer-display', function(e) {
-			if ($(e.target).closest('.reset-customer-btn').length) return;
+		this.$customer_section.on("click", ".customer-display", function (e) {
+			if ($(e.target).closest(".reset-customer-btn").length) return;
 
-			const show = me.$cart_container.is(':visible');
+			const show = me.$cart_container.is(":visible");
 			me.toggle_customer_info(show);
 		});
 
-		this.$cart_items_wrapper.on('click', '.cart-item-wrapper', function() {
+		this.$cart_items_wrapper.on("click", ".cart-item-wrapper", function () {
 			const $cart_item = $(this);
 
 			me.toggle_item_highlight(this);
 
-			const payment_section_hidden = !me.$totals_section.find('.edit-cart-btn').is(':visible');
+			const payment_section_hidden = !me.$totals_section.find(".edit-cart-btn").is(":visible");
 			if (!payment_section_hidden) {
 				// payment section is visible
 				// edit cart first and then open item details section
 				me.$totals_section.find(".edit-cart-btn").click();
 			}
 
-			const item_row_name = unescape($cart_item.attr('data-row-name'));
+			const item_row_name = unescape($cart_item.attr("data-row-name"));
 			me.events.cart_item_clicked({ name: item_row_name });
-			this.numpad_value = '';
+			this.numpad_value = "";
 		});
 
-		this.$component.on('click', '.checkout-btn', async function() {
-			if ($(this).attr('style').indexOf('--blue-500') == -1) return;
+		this.$component.on("click", ".checkout-btn", async function () {
+			if ($(this).attr("style").indexOf("--blue-500") == -1) return;
 
 			await me.events.checkout();
 			me.toggle_checkout_btn(false);
@@ -200,18 +192,18 @@
 			me.allow_discount_change && me.$add_discount_elem.removeClass("d-none");
 		});
 
-		this.$totals_section.on('click', '.edit-cart-btn', () => {
+		this.$totals_section.on("click", ".edit-cart-btn", () => {
 			this.events.edit_cart();
 			this.toggle_checkout_btn(true);
 		});
 
-		this.$component.on('click', '.add-discount-wrapper', () => {
-			const can_edit_discount = this.$add_discount_elem.find('.edit-discount-btn').length;
+		this.$component.on("click", ".add-discount-wrapper", () => {
+			const can_edit_discount = this.$add_discount_elem.find(".edit-discount-btn").length;
 
-			if(!this.discount_field || can_edit_discount) this.show_discount_control();
+			if (!this.discount_field || can_edit_discount) this.show_discount_control();
 		});
 
-		frappe.ui.form.on("POS Invoice", "paid_amount", frm => {
+		frappe.ui.form.on("POS Invoice", "paid_amount", (frm) => {
 			// called when discount is applied
 			this.update_totals_section(frm);
 		});
@@ -220,43 +212,49 @@
 	attach_shortcuts() {
 		for (let row of this.number_pad.keys) {
 			for (let btn of row) {
-				if (typeof btn !== 'string') continue; // do not make shortcuts for numbers
+				if (typeof btn !== "string") continue; // do not make shortcuts for numbers
 
 				let shortcut_key = `ctrl+${frappe.scrub(String(btn))[0]}`;
-				if (btn === 'Delete') shortcut_key = 'ctrl+backspace';
-				if (btn === 'Remove') shortcut_key = 'shift+ctrl+backspace'
-				if (btn === '.') shortcut_key = 'ctrl+>';
+				if (btn === "Delete") shortcut_key = "ctrl+backspace";
+				if (btn === "Remove") shortcut_key = "shift+ctrl+backspace";
+				if (btn === ".") shortcut_key = "ctrl+>";
 
 				// to account for fieldname map
-				const fieldname = this.number_pad.fieldnames[btn] ? this.number_pad.fieldnames[btn] :
-					typeof btn === 'string' ? frappe.scrub(btn) : btn;
+				const fieldname = this.number_pad.fieldnames[btn]
+					? this.number_pad.fieldnames[btn]
+					: typeof btn === "string"
+					? frappe.scrub(btn)
+					: btn;
 
-				let shortcut_label = shortcut_key.split('+').map(frappe.utils.to_title_case).join('+');
-				shortcut_label = frappe.utils.is_mac() ? shortcut_label.replace('Ctrl', '⌘') : shortcut_label;
-				this.$numpad_section.find(`.numpad-btn[data-button-value="${fieldname}"]`).attr("title", shortcut_label);
+				let shortcut_label = shortcut_key.split("+").map(frappe.utils.to_title_case).join("+");
+				shortcut_label = frappe.utils.is_mac() ? shortcut_label.replace("Ctrl", "⌘") : shortcut_label;
+				this.$numpad_section
+					.find(`.numpad-btn[data-button-value="${fieldname}"]`)
+					.attr("title", shortcut_label);
 
 				frappe.ui.keys.on(`${shortcut_key}`, () => {
 					const cart_is_visible = this.$component.is(":visible");
 					if (cart_is_visible && this.item_is_selected && this.$numpad_section.is(":visible")) {
 						this.$numpad_section.find(`.numpad-btn[data-button-value="${fieldname}"]`).click();
 					}
-				})
+				});
 			}
 		}
-		const ctrl_label = frappe.utils.is_mac() ? '⌘' : 'Ctrl';
+		const ctrl_label = frappe.utils.is_mac() ? "⌘" : "Ctrl";
 		this.$component.find(".checkout-btn").attr("title", `${ctrl_label}+Enter`);
 		frappe.ui.keys.add_shortcut({
 			shortcut: "ctrl+enter",
 			action: () => this.$component.find(".checkout-btn").click(),
-			condition: () => this.$component.is(":visible") && !this.$totals_section.find('.edit-cart-btn').is(':visible'),
+			condition: () =>
+				this.$component.is(":visible") && !this.$totals_section.find(".edit-cart-btn").is(":visible"),
 			description: __("Checkout Order / Submit Order / New Order"),
 			ignore_inputs: true,
-			page: cur_page.page.page
+			page: cur_page.page.page,
 		});
 		this.$component.find(".edit-cart-btn").attr("title", `${ctrl_label}+E`);
 		frappe.ui.keys.on("ctrl+e", () => {
 			const item_cart_visible = this.$component.is(":visible");
-			const checkout_btn_invisible = !this.$totals_section.find('.checkout-btn').is('visible');
+			const checkout_btn_invisible = !this.$totals_section.find(".checkout-btn").is("visible");
 			if (item_cart_visible && checkout_btn_invisible) {
 				this.$component.find(".edit-cart-btn").click();
 			}
@@ -268,7 +266,7 @@
 			condition: () => this.$add_discount_elem.is(":visible"),
 			description: __("Add Order Discount"),
 			ignore_inputs: true,
-			page: cur_page.page.page
+			page: cur_page.page.page,
 		});
 		frappe.ui.keys.on("escape", () => {
 			const item_cart_visible = this.$component.is(":visible");
@@ -284,11 +282,11 @@
 
 		if (!item || item_is_highlighted) {
 			this.item_is_selected = false;
-			this.$cart_container.find('.cart-item-wrapper').css("background-color", "");
+			this.$cart_container.find(".cart-item-wrapper").css("background-color", "");
 		} else {
 			$cart_item.css("background-color", "var(--control-bg)");
 			this.item_is_selected = true;
-			this.$cart_container.find('.cart-item-wrapper').not(item).css("background-color", "");
+			this.$cart_container.find(".cart-item-wrapper").not(item).css("background-color", "");
 		}
 	}
 
@@ -297,38 +295,38 @@
 			<div class="customer-field"></div>
 		`);
 		const me = this;
-		const query = { query: 'erpnext.controllers.queries.customer_query' };
+		const query = { query: "erpnext.controllers.queries.customer_query" };
 		const allowed_customer_group = this.allowed_customer_groups || [];
 		if (allowed_customer_group.length) {
 			query.filters = {
-				customer_group: ['in', allowed_customer_group]
-			}
+				customer_group: ["in", allowed_customer_group],
+			};
 		}
 		this.customer_field = frappe.ui.form.make_control({
 			df: {
-				label: __('Customer'),
-				fieldtype: 'Link',
-				options: 'Customer',
-				placeholder: __('Search by customer name, phone, email.'),
+				label: __("Customer"),
+				fieldtype: "Link",
+				options: "Customer",
+				placeholder: __("Search by customer name, phone, email."),
 				get_query: () => query,
-				onchange: function() {
+				onchange: function () {
 					if (this.value) {
 						const frm = me.events.get_frm();
 						frappe.dom.freeze();
-						frappe.model.set_value(frm.doc.doctype, frm.doc.name, 'customer', this.value);
-						frm.script_manager.trigger('customer', frm.doc.doctype, frm.doc.name).then(() => {
+						frappe.model.set_value(frm.doc.doctype, frm.doc.name, "customer", this.value);
+						frm.script_manager.trigger("customer", frm.doc.doctype, frm.doc.name).then(() => {
 							frappe.run_serially([
 								() => me.fetch_customer_details(this.value),
 								() => me.events.customer_details_updated(me.customer_info),
 								() => me.update_customer_section(),
 								() => me.update_totals_section(),
-								() => frappe.dom.unfreeze()
+								() => frappe.dom.unfreeze(),
 							]);
-						})
+						});
 					}
 				},
 			},
-			parent: this.$customer_section.find('.customer-field'),
+			parent: this.$customer_section.find(".customer-field"),
 			render_input: true,
 		});
 		this.customer_field.toggle_label(false);
@@ -337,66 +335,81 @@
 	fetch_customer_details(customer) {
 		if (customer) {
 			return new Promise((resolve) => {
-				frappe.db.get_value('Customer', customer, ["email_id", "mobile_no", "image", "loyalty_program"]).then(({ message }) => {
-					const { loyalty_program } = message;
-					// if loyalty program then fetch loyalty points too
-					if (loyalty_program) {
-						frappe.call({
-							method: "erpnext.accounts.doctype.loyalty_program.loyalty_program.get_loyalty_program_details_with_points",
-							args: { customer, loyalty_program, "silent": true },
-							callback: (r) => {
-								const { loyalty_points, conversion_factor } = r.message;
-								if (!r.exc) {
-									this.customer_info = { ...message, customer, loyalty_points, conversion_factor };
-									resolve();
-								}
-							}
-						});
-					} else {
-						this.customer_info = { ...message, customer };
-						resolve();
-					}
-				});
+				frappe.db
+					.get_value("Customer", customer, ["email_id", "mobile_no", "image", "loyalty_program"])
+					.then(({ message }) => {
+						const { loyalty_program } = message;
+						// if loyalty program then fetch loyalty points too
+						if (loyalty_program) {
+							frappe.call({
+								method: "erpnext.accounts.doctype.loyalty_program.loyalty_program.get_loyalty_program_details_with_points",
+								args: { customer, loyalty_program, silent: true },
+								callback: (r) => {
+									const { loyalty_points, conversion_factor } = r.message;
+									if (!r.exc) {
+										this.customer_info = {
+											...message,
+											customer,
+											loyalty_points,
+											conversion_factor,
+										};
+										resolve();
+									}
+								},
+							});
+						} else {
+							this.customer_info = { ...message, customer };
+							resolve();
+						}
+					});
 			});
 		} else {
 			return new Promise((resolve) => {
-				this.customer_info = {}
+				this.customer_info = {};
 				resolve();
 			});
 		}
 	}
 
 	show_discount_control() {
-		this.$add_discount_elem.css({ 'padding': '0px', 'border': 'none' });
-		this.$add_discount_elem.html(
-			`<div class="add-discount-field"></div>`
-		);
+		this.$add_discount_elem.css({ padding: "0px", border: "none" });
+		this.$add_discount_elem.html(`<div class="add-discount-field"></div>`);
 		const me = this;
 		const frm = me.events.get_frm();
 		let discount = frm.doc.additional_discount_percentage;
 
 		this.discount_field = frappe.ui.form.make_control({
 			df: {
-				label: __('Discount'),
-				fieldtype: 'Data',
-				placeholder: ( discount ? discount + '%' :  __('Enter discount percentage.') ),
-				input_class: 'input-xs',
-				onchange: function() {
+				label: __("Discount"),
+				fieldtype: "Data",
+				placeholder: discount ? discount + "%" : __("Enter discount percentage."),
+				input_class: "input-xs",
+				onchange: function () {
 					if (flt(this.value) != 0) {
-						frappe.model.set_value(frm.doc.doctype, frm.doc.name, 'additional_discount_percentage', flt(this.value));
+						frappe.model.set_value(
+							frm.doc.doctype,
+							frm.doc.name,
+							"additional_discount_percentage",
+							flt(this.value)
+						);
 						me.hide_discount_control(this.value);
 					} else {
-						frappe.model.set_value(frm.doc.doctype, frm.doc.name, 'additional_discount_percentage', 0);
+						frappe.model.set_value(
+							frm.doc.doctype,
+							frm.doc.name,
+							"additional_discount_percentage",
+							0
+						);
 						me.$add_discount_elem.css({
-							'border': '1px dashed var(--gray-500)',
-							'padding': 'var(--padding-sm) var(--padding-md)'
+							border: "1px dashed var(--gray-500)",
+							padding: "var(--padding-sm) var(--padding-md)",
 						});
-						me.$add_discount_elem.html(`${me.get_discount_icon()} ${__('Add Discount')}`);
+						me.$add_discount_elem.html(`${me.get_discount_icon()} ${__("Add Discount")}`);
 						me.discount_field = undefined;
 					}
 				},
 			},
-			parent: this.$add_discount_elem.find('.add-discount-field'),
+			parent: this.$add_discount_elem.find(".add-discount-field"),
 			render_input: true,
 		});
 		this.discount_field.toggle_label(false);
@@ -405,14 +418,12 @@
 
 	hide_discount_control(discount) {
 		if (!discount) {
-			this.$add_discount_elem.css({ 'padding': '0px', 'border': 'none' });
-			this.$add_discount_elem.html(
-				`<div class="add-discount-field"></div>`
-			);
+			this.$add_discount_elem.css({ padding: "0px", border: "none" });
+			this.$add_discount_elem.html(`<div class="add-discount-field"></div>`);
 		} else {
 			this.$add_discount_elem.css({
-				'border': '1px dashed var(--dark-green-500)',
-				'padding': 'var(--padding-sm) var(--padding-md)'
+				border: "1px dashed var(--dark-green-500)",
+				padding: "var(--padding-sm) var(--padding-md)",
 			});
 			this.$add_discount_elem.html(
 				`<div class="edit-discount-btn">
@@ -424,7 +435,7 @@
 
 	update_customer_section() {
 		const me = this;
-		const { customer, email_id='', mobile_no='', image } = this.customer_info || {};
+		const { customer, email_id = "", mobile_no = "", image } = this.customer_info || {};
 
 		if (customer) {
 			this.$customer_section.html(
@@ -450,7 +461,7 @@
 
 		function get_customer_description() {
 			if (!email_id && !mobile_no) {
-				return `<div class="customer-desc">${__('Click to add email / phone')}</div>`;
+				return `<div class="customer-desc">${__("Click to add email / phone")}</div>`;
 			} else if (email_id && !mobile_no) {
 				return `<div class="customer-desc">${email_id}</div>`;
 			} else if (mobile_no && !email_id) {
@@ -459,7 +470,6 @@
 				return `<div class="customer-desc">${email_id} - ${mobile_no}</div>`;
 			}
 		}
-
 	}
 
 	get_customer_image() {
@@ -476,7 +486,9 @@
 
 		this.render_net_total(frm.doc.net_total);
 		this.render_total_item_qty(frm.doc.items);
-		const grand_total = cint(frappe.sys_defaults.disable_rounded_total) ? frm.doc.grand_total : frm.doc.rounded_total;
+		const grand_total = cint(frappe.sys_defaults.disable_rounded_total)
+			? frm.doc.grand_total
+			: frm.doc.rounded_total;
 		this.render_grand_total(grand_total);
 
 		this.render_taxes(frm.doc.taxes);
@@ -484,13 +496,13 @@
 
 	render_net_total(value) {
 		const currency = this.events.get_frm().doc.currency;
-		this.$totals_section.find('.net-total-container').html(
-			`<div>${__('Net Total')}</div><div>${format_currency(value, currency)}</div>`
-		)
+		this.$totals_section
+			.find(".net-total-container")
+			.html(`<div>${__("Net Total")}</div><div>${format_currency(value, currency)}</div>`);
 
-		this.$numpad_section.find('.numpad-net-total').html(
-			`<div>${__('Net Total')}: <span>${format_currency(value, currency)}</span></div>`
-		);
+		this.$numpad_section
+			.find(".numpad-net-total")
+			.html(`<div>${__("Net Total")}: <span>${format_currency(value, currency)}</span></div>`);
 	}
 
 	render_total_item_qty(items) {
@@ -499,41 +511,47 @@
 			total_item_qty = total_item_qty + item.qty;
 		});
 
-		this.$totals_section.find('.item-qty-total-container').html(
-			`<div>${__('Total Quantity')}</div><div>${total_item_qty}</div>`
-		);
+		this.$totals_section
+			.find(".item-qty-total-container")
+			.html(`<div>${__("Total Quantity")}</div><div>${total_item_qty}</div>`);
 
-		this.$numpad_section.find('.numpad-item-qty-total').html(
-			`<div>${__('Total Quantity')}: <span>${total_item_qty}</span></div>`
-		);
+		this.$numpad_section
+			.find(".numpad-item-qty-total")
+			.html(`<div>${__("Total Quantity")}: <span>${total_item_qty}</span></div>`);
 	}
 
 	render_grand_total(value) {
 		const currency = this.events.get_frm().doc.currency;
-		this.$totals_section.find('.grand-total-container').html(
-			`<div>${__('Grand Total')}</div><div>${format_currency(value, currency)}</div>`
-		)
+		this.$totals_section
+			.find(".grand-total-container")
+			.html(`<div>${__("Grand Total")}</div><div>${format_currency(value, currency)}</div>`);
 
-		this.$numpad_section.find('.numpad-grand-total').html(
-			`<div>${__('Grand Total')}: <span>${format_currency(value, currency)}</span></div>`
-		);
+		this.$numpad_section
+			.find(".numpad-grand-total")
+			.html(`<div>${__("Grand Total")}: <span>${format_currency(value, currency)}</span></div>`);
 	}
 
 	render_taxes(taxes) {
 		if (taxes && taxes.length) {
 			const currency = this.events.get_frm().doc.currency;
-			const taxes_html = taxes.map(t => {
-				if (t.tax_amount_after_discount_amount == 0.0) return;
-				// if tax rate is 0, don't print it.
-				const description = /[0-9]+/.test(t.description) ? t.description : ((t.rate != 0) ? `${t.description} @ ${t.rate}%`: t.description);
-				return `<div class="tax-row">
+			const taxes_html = taxes
+				.map((t) => {
+					if (t.tax_amount_after_discount_amount == 0.0) return;
+					// if tax rate is 0, don't print it.
+					const description = /[0-9]+/.test(t.description)
+						? t.description
+						: t.rate != 0
+						? `${t.description} @ ${t.rate}%`
+						: t.description;
+					return `<div class="tax-row">
 					<div class="tax-label">${description}</div>
 					<div class="tax-value">${format_currency(t.tax_amount_after_discount_amount, currency)}</div>
 				</div>`;
-			}).join('');
-			this.$totals_section.find('.taxes-container').css('display', 'flex').html(taxes_html);
+				})
+				.join("");
+			this.$totals_section.find(".taxes-container").css("display", "flex").html(taxes_html);
 		} else {
-			this.$totals_section.find('.taxes-container').css('display', 'none').html('');
+			this.$totals_section.find(".taxes-container").css("display", "none").html("");
 		}
 	}
 
@@ -544,7 +562,7 @@
 
 	get_item_from_frm(item) {
 		const doc = this.events.get_frm().doc;
-		return doc.items.find(i => i.name == item.name);
+		return doc.items.find((i) => i.name == item.name);
 	}
 
 	update_item_html(item, remove_item) {
@@ -557,7 +575,7 @@
 			this.render_cart_item(item_row, $item);
 		}
 
-		const no_of_cart_items = this.$cart_items_wrapper.find('.cart-item-wrapper').length;
+		const no_of_cart_items = this.$cart_items_wrapper.find(".cart-item-wrapper").length;
 		this.highlight_checkout_btn(no_of_cart_items > 0);
 
 		this.update_empty_cart_section(no_of_cart_items);
@@ -571,7 +589,7 @@
 			this.$cart_items_wrapper.append(
 				`<div class="cart-item-wrapper" data-row-name="${escape(item_data.name)}"></div>
 				<div class="seperator"></div>`
-			)
+			);
 			$item_to_update = this.get_cart_item(item_data);
 		}
 
@@ -584,7 +602,7 @@
 				${get_description_html()}
 			</div>
 			${get_rate_discount_html()}`
-		)
+		);
 
 		set_dynamic_rate_header_width();
 
@@ -593,8 +611,7 @@
 			me.$cart_header.find(".rate-amount-header").css("width", "");
 			me.$cart_items_wrapper.find(".item-rate-amount").css("width", "");
 			let max_width = rate_cols.reduce((max_width, elm) => {
-				if ($(elm).width() > max_width)
-					max_width = $(elm).width();
+				if ($(elm).width() > max_width) max_width = $(elm).width();
 				return max_width;
 			}, 0);
 
@@ -614,7 +631,7 @@
 							<div class="item-rate">${format_currency(item_data.amount, currency)}</div>
 							<div class="item-amount">${format_currency(item_data.rate, currency)}</div>
 						</div>
-					</div>`
+					</div>`;
 			} else {
 				return `
 					<div class="item-qty-rate">
@@ -622,17 +639,20 @@
 						<div class="item-rate-amount">
 							<div class="item-rate">${format_currency(item_data.rate, currency)}</div>
 						</div>
-					</div>`
+					</div>`;
 			}
 		}
 
 		function get_description_html() {
 			if (item_data.description) {
-				if (item_data.description.indexOf('<div>') != -1) {
+				if (item_data.description.indexOf("<div>") != -1) {
 					try {
 						item_data.description = $(item_data.description).text();
 					} catch (error) {
-						item_data.description = item_data.description.replace(/<div>/g, ' ').replace(/<\/div>/g, ' ').replace(/ +/g, ' ');
+						item_data.description = item_data.description
+							.replace(/<div>/g, " ")
+							.replace(/<\/div>/g, " ")
+							.replace(/ +/g, " ");
 					}
 				}
 				item_data.description = frappe.ellipsis(item_data.description, 45);
@@ -657,7 +677,7 @@
 	}
 
 	handle_broken_image($img) {
-		const item_abbr = $($img).attr('alt');
+		const item_abbr = $($img).attr("alt");
 		$($img).parent().replaceWith(`<div class="item-image item-abbr">${item_abbr}</div>`);
 	}
 
@@ -668,44 +688,48 @@
 
 	toggle_checkout_btn(show_checkout) {
 		if (show_checkout) {
-			this.$totals_section.find('.checkout-btn').css('display', 'flex');
-			this.$totals_section.find('.edit-cart-btn').css('display', 'none');
+			this.$totals_section.find(".checkout-btn").css("display", "flex");
+			this.$totals_section.find(".edit-cart-btn").css("display", "none");
 		} else {
-			this.$totals_section.find('.checkout-btn').css('display', 'none');
-			this.$totals_section.find('.edit-cart-btn').css('display', 'flex');
+			this.$totals_section.find(".checkout-btn").css("display", "none");
+			this.$totals_section.find(".edit-cart-btn").css("display", "flex");
 		}
 	}
 
 	highlight_checkout_btn(toggle) {
 		if (toggle) {
-			this.$add_discount_elem.css('display', 'flex');
-			this.$cart_container.find('.checkout-btn').css({
-				'background-color': 'var(--blue-500)'
+			this.$add_discount_elem.css("display", "flex");
+			this.$cart_container.find(".checkout-btn").css({
+				"background-color": "var(--blue-500)",
 			});
 		} else {
-			this.$add_discount_elem.css('display', 'none');
-			this.$cart_container.find('.checkout-btn').css({
-				'background-color': 'var(--blue-200)'
+			this.$add_discount_elem.css("display", "none");
+			this.$cart_container.find(".checkout-btn").css({
+				"background-color": "var(--blue-200)",
 			});
 		}
 	}
 
 	update_empty_cart_section(no_of_cart_items) {
-		const $no_item_element = this.$cart_items_wrapper.find('.no-item-wrapper');
+		const $no_item_element = this.$cart_items_wrapper.find(".no-item-wrapper");
 
 		// if cart has items and no item is present
-		no_of_cart_items > 0 && $no_item_element && $no_item_element.remove() && this.$cart_header.css('display', 'flex');
+		no_of_cart_items > 0 &&
+			$no_item_element &&
+			$no_item_element.remove() &&
+			this.$cart_header.css("display", "flex");
 
 		no_of_cart_items === 0 && !$no_item_element.length && this.make_no_items_placeholder();
 	}
 
 	on_numpad_event($btn) {
-		const current_action = $btn.attr('data-button-value');
-		const action_is_field_edit = ['qty', 'discount_percentage', 'rate'].includes(current_action);
-		const action_is_allowed = action_is_field_edit ? (
-			(current_action == 'rate' && this.allow_rate_change) ||
-			(current_action == 'discount_percentage' && this.allow_discount_change) ||
-			(current_action == 'qty')) : true;
+		const current_action = $btn.attr("data-button-value");
+		const action_is_field_edit = ["qty", "discount_percentage", "rate"].includes(current_action);
+		const action_is_allowed = action_is_field_edit
+			? (current_action == "rate" && this.allow_rate_change) ||
+			  (current_action == "discount_percentage" && this.allow_discount_change) ||
+			  current_action == "qty"
+			: true;
 
 		const action_is_pressed_twice = this.prev_action === current_action;
 		const first_click_event = !this.prev_action;
@@ -713,11 +737,11 @@
 
 		if (action_is_field_edit) {
 			if (!action_is_allowed) {
-				const label = current_action == 'rate' ? 'Rate'.bold() : 'Discount'.bold();
-				const message = __('Editing {0} is not allowed as per POS Profile settings', [label]);
+				const label = current_action == "rate" ? "Rate".bold() : "Discount".bold();
+				const message = __("Editing {0} is not allowed as per POS Profile settings", [label]);
 				frappe.show_alert({
-					indicator: 'red',
-					message: message
+					indicator: "red",
+					message: message,
 				});
 				frappe.utils.play_sound("error");
 				return;
@@ -728,20 +752,22 @@
 			} else if (action_is_pressed_twice) {
 				this.prev_action = undefined;
 			}
-			this.numpad_value = '';
-
-		} else if (current_action === 'checkout') {
+			this.numpad_value = "";
+		} else if (current_action === "checkout") {
 			this.prev_action = undefined;
 			this.toggle_item_highlight();
 			this.events.numpad_event(undefined, current_action);
 			return;
-		} else if (current_action === 'remove') {
+		} else if (current_action === "remove") {
 			this.prev_action = undefined;
 			this.toggle_item_highlight();
 			this.events.numpad_event(undefined, current_action);
 			return;
 		} else {
-			this.numpad_value = current_action === 'delete' ? this.numpad_value.slice(0, -1) : this.numpad_value + current_action;
+			this.numpad_value =
+				current_action === "delete"
+					? this.numpad_value.slice(0, -1)
+					: this.numpad_value + current_action;
 			this.numpad_value = this.numpad_value || 0;
 		}
 
@@ -749,17 +775,17 @@
 
 		if (first_click_event_is_not_field_edit) {
 			frappe.show_alert({
-				indicator: 'red',
-				message: __('Please select a field to edit from numpad')
+				indicator: "red",
+				message: __("Please select a field to edit from numpad"),
 			});
 			frappe.utils.play_sound("error");
 			return;
 		}
 
-		if (flt(this.numpad_value) > 100 && this.prev_action === 'discount_percentage') {
+		if (flt(this.numpad_value) > 100 && this.prev_action === "discount_percentage") {
 			frappe.show_alert({
-				message: __('Discount cannot be greater than 100%'),
-				indicator: 'orange'
+				message: __("Discount cannot be greater than 100%"),
+				indicator: "orange",
 			});
 			frappe.utils.play_sound("error");
 			this.numpad_value = current_action;
@@ -770,48 +796,48 @@
 	}
 
 	highlight_numpad_btn($btn, curr_action) {
-		const curr_action_is_highlighted = $btn.hasClass('highlighted-numpad-btn');
-		const curr_action_is_action = ['qty', 'discount_percentage', 'rate', 'done'].includes(curr_action);
+		const curr_action_is_highlighted = $btn.hasClass("highlighted-numpad-btn");
+		const curr_action_is_action = ["qty", "discount_percentage", "rate", "done"].includes(curr_action);
 
 		if (!curr_action_is_highlighted) {
-			$btn.addClass('highlighted-numpad-btn');
+			$btn.addClass("highlighted-numpad-btn");
 		}
 		if (this.prev_action === curr_action && curr_action_is_highlighted) {
 			// if Qty is pressed twice
-			$btn.removeClass('highlighted-numpad-btn');
+			$btn.removeClass("highlighted-numpad-btn");
 		}
 		if (this.prev_action && this.prev_action !== curr_action && curr_action_is_action) {
 			// Order: Qty -> Rate then remove Qty highlight
 			const prev_btn = $(`[data-button-value='${this.prev_action}']`);
-			prev_btn.removeClass('highlighted-numpad-btn');
+			prev_btn.removeClass("highlighted-numpad-btn");
 		}
-		if (!curr_action_is_action || curr_action === 'done') {
+		if (!curr_action_is_action || curr_action === "done") {
 			// if numbers are clicked
 			setTimeout(() => {
-				$btn.removeClass('highlighted-numpad-btn');
+				$btn.removeClass("highlighted-numpad-btn");
 			}, 200);
 		}
 	}
 
 	toggle_numpad(show) {
 		if (show) {
-			this.$totals_section.css('display', 'none');
-			this.$numpad_section.css('display', 'flex');
+			this.$totals_section.css("display", "none");
+			this.$numpad_section.css("display", "flex");
 		} else {
-			this.$totals_section.css('display', 'flex');
-			this.$numpad_section.css('display', 'none');
+			this.$totals_section.css("display", "flex");
+			this.$numpad_section.css("display", "none");
 		}
 		this.reset_numpad();
 	}
 
 	reset_numpad() {
-		this.numpad_value = '';
+		this.numpad_value = "";
 		this.prev_action = undefined;
-		this.$numpad_section.find('.highlighted-numpad-btn').removeClass('highlighted-numpad-btn');
+		this.$numpad_section.find(".highlighted-numpad-btn").removeClass("highlighted-numpad-btn");
 	}
 
 	toggle_numpad_field_edit(fieldname) {
-		if (['qty', 'discount_percentage', 'rate'].includes(fieldname)) {
+		if (["qty", "discount_percentage", "rate"].includes(fieldname)) {
 			this.$numpad_section.find(`[data-button-value="${fieldname}"]`).click();
 		}
 	}
@@ -820,12 +846,12 @@
 		if (show) {
 			const { customer } = this.customer_info || {};
 
-			this.$cart_container.css('display', 'none');
+			this.$cart_container.css("display", "none");
 			this.$customer_section.css({
-				'height': '100%',
-				'padding-top': '0px'
+				height: "100%",
+				"padding-top": "0px",
 			});
-			this.$customer_section.find('.customer-details').html(
+			this.$customer_section.find(".customer-details").html(
 				`<div class="header">
 					<div class="label">Contact Details</div>
 					<div class="close-details-btn">
@@ -854,12 +880,11 @@
 
 			this.render_customer_fields();
 			this.fetch_customer_transactions();
-
 		} else {
-			this.$cart_container.css('display', 'flex');
+			this.$cart_container.css("display", "flex");
 			this.$customer_section.css({
-				'height': '',
-				'padding-top': ''
+				height: "",
+				"padding-top": "",
 			});
 
 			this.update_customer_section();
@@ -867,100 +892,107 @@
 	}
 
 	render_customer_fields() {
-		const $customer_form = this.$customer_section.find('.customer-fields-container');
+		const $customer_form = this.$customer_section.find(".customer-fields-container");
 
-		const dfs = [{
-			fieldname: 'email_id',
-			label: __('Email'),
-			fieldtype: 'Data',
-			options: 'email',
-			placeholder: __("Enter customer's email")
-		},{
-			fieldname: 'mobile_no',
-			label: __('Phone Number'),
-			fieldtype: 'Data',
-			placeholder: __("Enter customer's phone number")
-		},{
-			fieldname: 'loyalty_program',
-			label: __('Loyalty Program'),
-			fieldtype: 'Link',
-			options: 'Loyalty Program',
-			placeholder: __("Select Loyalty Program")
-		},{
-			fieldname: 'loyalty_points',
-			label: __('Loyalty Points'),
-			fieldtype: 'Data',
-			read_only: 1
-		}];
+		const dfs = [
+			{
+				fieldname: "email_id",
+				label: __("Email"),
+				fieldtype: "Data",
+				options: "email",
+				placeholder: __("Enter customer's email"),
+			},
+			{
+				fieldname: "mobile_no",
+				label: __("Phone Number"),
+				fieldtype: "Data",
+				placeholder: __("Enter customer's phone number"),
+			},
+			{
+				fieldname: "loyalty_program",
+				label: __("Loyalty Program"),
+				fieldtype: "Link",
+				options: "Loyalty Program",
+				placeholder: __("Select Loyalty Program"),
+			},
+			{
+				fieldname: "loyalty_points",
+				label: __("Loyalty Points"),
+				fieldtype: "Data",
+				read_only: 1,
+			},
+		];
 
 		const me = this;
-		dfs.forEach(df => {
+		dfs.forEach((df) => {
 			this[`customer_${df.fieldname}_field`] = frappe.ui.form.make_control({
-				df: { ...df,
-					onchange: handle_customer_field_change,
-				},
+				df: { ...df, onchange: handle_customer_field_change },
 				parent: $customer_form.find(`.${df.fieldname}-field`),
 				render_input: true,
 			});
 			this[`customer_${df.fieldname}_field`].set_value(this.customer_info[df.fieldname]);
-		})
+		});
 
 		function handle_customer_field_change() {
 			const current_value = me.customer_info[this.df.fieldname];
 			const current_customer = me.customer_info.customer;
 
-			if (this.value && current_value != this.value && this.df.fieldname != 'loyalty_points') {
+			if (this.value && current_value != this.value && this.df.fieldname != "loyalty_points") {
 				frappe.call({
-					method: 'erpnext.selling.page.point_of_sale.point_of_sale.set_customer_info',
+					method: "erpnext.selling.page.point_of_sale.point_of_sale.set_customer_info",
 					args: {
 						fieldname: this.df.fieldname,
 						customer: current_customer,
-						value: this.value
+						value: this.value,
 					},
 					callback: (r) => {
-						if(!r.exc) {
+						if (!r.exc) {
 							me.customer_info[this.df.fieldname] = this.value;
 							frappe.show_alert({
 								message: __("Customer contact updated successfully."),
-								indicator: 'green'
+								indicator: "green",
 							});
 							frappe.utils.play_sound("submit");
 						}
-					}
+					},
 				});
 			}
 		}
 	}
 
 	fetch_customer_transactions() {
-		frappe.db.get_list('POS Invoice', {
-			filters: { customer: this.customer_info.customer, docstatus: 1 },
-			fields: ['name', 'grand_total', 'status', 'posting_date', 'posting_time', 'currency'],
-			limit: 20
-		}).then((res) => {
-			const transaction_container = this.$customer_section.find('.customer-transactions');
+		frappe.db
+			.get_list("POS Invoice", {
+				filters: { customer: this.customer_info.customer, docstatus: 1 },
+				fields: ["name", "grand_total", "status", "posting_date", "posting_time", "currency"],
+				limit: 20,
+			})
+			.then((res) => {
+				const transaction_container = this.$customer_section.find(".customer-transactions");
 
-			if (!res.length) {
-				transaction_container.html(
-					`<div class="no-transactions-placeholder">No recent transactions found</div>`
-				)
-				return;
-			}
+				if (!res.length) {
+					transaction_container.html(
+						`<div class="no-transactions-placeholder">No recent transactions found</div>`
+					);
+					return;
+				}
 
-			const elapsed_time = moment(res[0].posting_date+" "+res[0].posting_time).fromNow();
-			this.$customer_section.find('.customer-desc').html(`Last transacted ${elapsed_time}`);
+				const elapsed_time = moment(res[0].posting_date + " " + res[0].posting_time).fromNow();
+				this.$customer_section.find(".customer-desc").html(`Last transacted ${elapsed_time}`);
 
-			res.forEach(invoice => {
-				const posting_datetime = moment(invoice.posting_date+" "+invoice.posting_time).format("Do MMMM, h:mma");
-				let indicator_color = {
-					'Paid': 'green',
-					'Draft': 'red',
-					'Return': 'gray',
-					'Consolidated': 'blue'
-				};
+				res.forEach((invoice) => {
+					const posting_datetime = moment(invoice.posting_date + " " + invoice.posting_time).format(
+						"Do MMMM, h:mma"
+					);
+					let indicator_color = {
+						Paid: "green",
+						Draft: "red",
+						Return: "gray",
+						Consolidated: "blue",
+					};
 
-				transaction_container.append(
-					`<div class="invoice-wrapper" data-invoice-name="${escape(invoice.name)}">
+					transaction_container.append(
+						`<div class="invoice-wrapper" data-invoice-name="${escape(invoice.name)}">
 						<div class="invoice-name-date">
 							<div class="invoice-name">${invoice.name}</div>
 							<div class="invoice-date">${posting_datetime}</div>
@@ -977,17 +1009,17 @@
 						</div>
 					</div>
 					<div class="seperator"></div>`
-				)
+					);
+				});
 			});
-		});
 	}
 
 	attach_refresh_field_event(frm) {
-		$(frm.wrapper).off('refresh-fields');
-		$(frm.wrapper).on('refresh-fields', () => {
+		$(frm.wrapper).off("refresh-fields");
+		$(frm.wrapper).on("refresh-fields", () => {
 			if (frm.doc.items.length) {
-				this.$cart_items_wrapper.html('');
-				frm.doc.items.forEach(item => {
+				this.$cart_items_wrapper.html("");
+				frm.doc.items.forEach((item) => {
 					this.update_item_html(item);
 				});
 			}
@@ -1005,9 +1037,9 @@
 			this.update_customer_section();
 		});
 
-		this.$cart_items_wrapper.html('');
+		this.$cart_items_wrapper.html("");
 		if (frm.doc.items.length) {
-			frm.doc.items.forEach(item => {
+			frm.doc.items.forEach((item) => {
 				this.update_item_html(item);
 			});
 		} else {
@@ -1017,19 +1049,18 @@
 
 		this.update_totals_section(frm);
 
-		if(frm.doc.docstatus === 1) {
-			this.$totals_section.find('.checkout-btn').css('display', 'none');
-			this.$totals_section.find('.edit-cart-btn').css('display', 'none');
+		if (frm.doc.docstatus === 1) {
+			this.$totals_section.find(".checkout-btn").css("display", "none");
+			this.$totals_section.find(".edit-cart-btn").css("display", "none");
 		} else {
-			this.$totals_section.find('.checkout-btn').css('display', 'flex');
-			this.$totals_section.find('.edit-cart-btn').css('display', 'none');
+			this.$totals_section.find(".checkout-btn").css("display", "flex");
+			this.$totals_section.find(".edit-cart-btn").css("display", "none");
 		}
 
 		this.toggle_component(true);
 	}
 
 	toggle_component(show) {
-		show ? this.$component.css('display', 'flex') : this.$component.css('display', 'none');
+		show ? this.$component.css("display", "flex") : this.$component.css("display", "none");
 	}
-
-}
+};
diff --git a/erpnext/selling/page/point_of_sale/pos_item_details.js b/erpnext/selling/page/point_of_sale/pos_item_details.js
index b6e567c..9646a04 100644
--- a/erpnext/selling/page/point_of_sale/pos_item_details.js
+++ b/erpnext/selling/page/point_of_sale/pos_item_details.js
@@ -18,17 +18,15 @@
 	}
 
 	prepare_dom() {
-		this.wrapper.append(
-			`<section class="item-details-container"></section>`
-		)
+		this.wrapper.append(`<section class="item-details-container"></section>`);
 
-		this.$component = this.wrapper.find('.item-details-container');
+		this.$component = this.wrapper.find(".item-details-container");
 	}
 
 	init_child_components() {
 		this.$component.html(
 			`<div class="item-details-header">
-				<div class="label">${__('Item Details')}</div>
+				<div class="label">${__("Item Details")}</div>
 				<div class="close-btn">
 					<svg width="32" height="32" viewBox="0 0 14 14" fill="none">
 						<path d="M4.93764 4.93759L7.00003 6.99998M9.06243 9.06238L7.00003 6.99998M7.00003 6.99998L4.93764 9.06238L9.06243 4.93759" stroke="#8D99A6"/>
@@ -46,15 +44,15 @@
 			<div class="discount-section"></div>
 			<div class="form-container"></div>
 			<div class="serial-batch-container"></div>`
-		)
+		);
 
-		this.$item_name = this.$component.find('.item-name');
-		this.$item_description = this.$component.find('.item-desc');
-		this.$item_price = this.$component.find('.item-price');
-		this.$item_image = this.$component.find('.item-image');
-		this.$form_container = this.$component.find('.form-container');
-		this.$dicount_section = this.$component.find('.discount-section');
-		this.$serial_batch_container = this.$component.find('.serial-batch-container');
+		this.$item_name = this.$component.find(".item-name");
+		this.$item_description = this.$component.find(".item-desc");
+		this.$item_price = this.$component.find(".item-price");
+		this.$item_image = this.$component.find(".item-image");
+		this.$form_container = this.$component.find(".form-container");
+		this.$dicount_section = this.$component.find(".discount-section");
+		this.$serial_batch_container = this.$component.find(".serial-batch-container");
 	}
 
 	compare_with_current_item(item) {
@@ -97,7 +95,7 @@
 
 	validate_serial_batch_item() {
 		const doc = this.events.get_frm().doc;
-		const item_row = doc.items.find(item => item.name === this.name);
+		const item_row = doc.items.find((item) => item.name === this.name);
 
 		if (!item_row) return;
 
@@ -108,7 +106,7 @@
 		if ((serialized && no_bundle_selected) || (batched && no_bundle_selected)) {
 			frappe.show_alert({
 				message: __("Item is removed since no serial / batch no selected."),
-				indicator: 'orange'
+				indicator: "orange",
 			});
 			frappe.utils.play_sound("cancel");
 			return this.events.remove_item_from_cart();
@@ -120,7 +118,10 @@
 
 		function get_description_html() {
 			if (description) {
-				description = description.indexOf('...') === -1 && description.length > 140 ? description.substr(0, 139) + '...' : description;
+				description =
+					description.indexOf("...") === -1 && description.length > 140
+						? description.substr(0, 139) + "..."
+						: description;
 				return description;
 			}
 			return ``;
@@ -140,11 +141,10 @@
 		} else {
 			this.$item_image.html(`<div class="item-abbr">${frappe.get_abbr(item_name)}</div>`);
 		}
-
 	}
 
 	handle_broken_image($img) {
-		const item_abbr = $($img).attr('alt');
+		const item_abbr = $($img).attr("alt");
 		$($img).replaceWith(`<div class="item-abbr">${item_abbr}</div>`);
 	}
 
@@ -153,36 +153,36 @@
 			this.$dicount_section.html(
 				`<div class="item-rate">${format_currency(item.price_list_rate, this.currency)}</div>
 				<div class="item-discount">${item.discount_percentage}% off</div>`
-			)
+			);
 			this.$item_price.html(format_currency(item.rate, this.currency));
 		} else {
-			this.$dicount_section.html(``)
+			this.$dicount_section.html(``);
 		}
 	}
 
 	render_form(item) {
 		const fields_to_display = this.get_form_fields(item);
-		this.$form_container.html('');
+		this.$form_container.html("");
 
 		fields_to_display.forEach((fieldname, idx) => {
 			this.$form_container.append(
 				`<div class="${fieldname}-control" data-fieldname="${fieldname}"></div>`
-			)
+			);
 
-			const field_meta = this.item_meta.fields.find(df => df.fieldname === fieldname);
-			fieldname === 'discount_percentage' ? (field_meta.label = __('Discount (%)')) : '';
+			const field_meta = this.item_meta.fields.find((df) => df.fieldname === fieldname);
+			fieldname === "discount_percentage" ? (field_meta.label = __("Discount (%)")) : "";
 			const me = this;
 
 			this[`${fieldname}_control`] = frappe.ui.form.make_control({
 				df: {
 					...field_meta,
-					onchange: function() {
+					onchange: function () {
 						me.events.form_updated(me.current_item, fieldname, this.value);
-					}
+					},
 				},
 				parent: this.$form_container.find(`.${fieldname}-control`),
 				render_input: true,
-			})
+			});
 			this[`${fieldname}_control`].set_value(item[fieldname]);
 		});
 
@@ -192,28 +192,37 @@
 	}
 
 	get_form_fields(item) {
-		const fields = ['qty', 'uom', 'rate', 'conversion_factor', 'discount_percentage', 'warehouse', 'actual_qty', 'price_list_rate'];
-		if (item.has_serial_no) fields.push('serial_no');
-		if (item.has_batch_no) fields.push('batch_no');
+		const fields = [
+			"qty",
+			"uom",
+			"rate",
+			"conversion_factor",
+			"discount_percentage",
+			"warehouse",
+			"actual_qty",
+			"price_list_rate",
+		];
+		if (item.has_serial_no) fields.push("serial_no");
+		if (item.has_batch_no) fields.push("batch_no");
 		return fields;
 	}
 
 	make_auto_serial_selection_btn(item) {
 		if (item.has_serial_no || item.has_batch_no) {
-			const label = item.has_serial_no ? __('Select Serial No') : __('Select Batch No');
+			const label = item.has_serial_no ? __("Select Serial No") : __("Select Batch No");
 			this.$form_container.append(
 				`<div class="btn btn-sm btn-secondary auto-fetch-btn">${label}</div>`
 			);
-			this.$form_container.find('.serial_no-control').find('textarea').css('height', '6rem');
+			this.$form_container.find(".serial_no-control").find("textarea").css("height", "6rem");
 		}
 	}
 
 	bind_custom_control_change_event() {
 		const me = this;
 		if (this.rate_control) {
-			this.rate_control.df.onchange = function() {
+			this.rate_control.df.onchange = function () {
 				if (this.value || flt(this.value) === 0) {
-					me.events.form_updated(me.current_item, 'rate', this.value).then(() => {
+					me.events.form_updated(me.current_item, "rate", this.value).then(() => {
 						const item_row = frappe.get_doc(me.doctype, me.name);
 						const doc = me.events.get_frm().doc;
 						me.$item_price.html(format_currency(item_row.rate, doc.currency));
@@ -232,43 +241,48 @@
 
 		if (this.warehouse_control) {
 			this.warehouse_control.df.reqd = 1;
-			this.warehouse_control.df.onchange = function() {
+			this.warehouse_control.df.onchange = function () {
 				if (this.value) {
-					me.events.form_updated(me.current_item, 'warehouse', this.value).then(() => {
+					me.events.form_updated(me.current_item, "warehouse", this.value).then(() => {
 						me.item_stock_map = me.events.get_item_stock_map();
 						const available_qty = me.item_stock_map[me.item_row.item_code][this.value][0];
-						const is_stock_item = Boolean(me.item_stock_map[me.item_row.item_code][this.value][1]);
+						const is_stock_item = Boolean(
+							me.item_stock_map[me.item_row.item_code][this.value][1]
+						);
 						if (available_qty === undefined) {
 							me.events.get_available_stock(me.item_row.item_code, this.value).then(() => {
 								// item stock map is updated now reset warehouse
 								me.warehouse_control.set_value(this.value);
-							})
+							});
 						} else if (available_qty === 0 && is_stock_item) {
-							me.warehouse_control.set_value('');
+							me.warehouse_control.set_value("");
 							const bold_item_code = me.item_row.item_code.bold();
 							const bold_warehouse = this.value.bold();
 							frappe.throw(
-								__('Item Code: {0} is not available under warehouse {1}.', [bold_item_code, bold_warehouse])
+								__("Item Code: {0} is not available under warehouse {1}.", [
+									bold_item_code,
+									bold_warehouse,
+								])
 							);
 						}
 						me.actual_qty_control.set_value(available_qty);
 					});
 				}
-			}
+			};
 			this.warehouse_control.df.get_query = () => {
 				return {
-					filters: { company: this.events.get_frm().doc.company }
-				}
+					filters: { company: this.events.get_frm().doc.company },
+				};
 			};
 			this.warehouse_control.refresh();
 		}
 
 		if (this.serial_no_control) {
 			this.serial_no_control.df.reqd = 1;
-			this.serial_no_control.df.onchange = async function() {
-				!me.current_item.batch_no && await me.auto_update_batch_no();
-				me.events.form_updated(me.current_item, 'serial_no', this.value);
-			}
+			this.serial_no_control.df.onchange = async function () {
+				!me.current_item.batch_no && (await me.auto_update_batch_no());
+				me.events.form_updated(me.current_item, "serial_no", this.value);
+			};
 			this.serial_no_control.refresh();
 		}
 
@@ -276,25 +290,25 @@
 			this.batch_no_control.df.reqd = 1;
 			this.batch_no_control.df.get_query = () => {
 				return {
-					query: 'erpnext.controllers.queries.get_batch_no',
+					query: "erpnext.controllers.queries.get_batch_no",
 					filters: {
 						item_code: me.item_row.item_code,
 						warehouse: me.item_row.warehouse,
-						posting_date: me.events.get_frm().doc.posting_date
-					}
-				}
+						posting_date: me.events.get_frm().doc.posting_date,
+					},
+				};
 			};
 			this.batch_no_control.refresh();
 		}
 
 		if (this.uom_control) {
-			this.uom_control.df.onchange = function() {
-				me.events.form_updated(me.current_item, 'uom', this.value);
+			this.uom_control.df.onchange = function () {
+				me.events.form_updated(me.current_item, "uom", this.value);
 
 				const item_row = frappe.get_doc(me.doctype, me.name);
-				me.conversion_factor_control.df.read_only = (item_row.stock_uom == this.value);
+				me.conversion_factor_control.df.read_only = item_row.stock_uom == this.value;
 				me.conversion_factor_control.refresh();
-			}
+			};
 		}
 
 		frappe.model.on("POS Invoice Item", "*", (fieldname, value, item_row) => {
@@ -310,13 +324,16 @@
 
 	async auto_update_batch_no() {
 		if (this.serial_no_control && this.batch_no_control) {
-			const selected_serial_nos = this.serial_no_control.get_value().split(`\n`).filter(s => s);
+			const selected_serial_nos = this.serial_no_control
+				.get_value()
+				.split(`\n`)
+				.filter((s) => s);
 			if (!selected_serial_nos.length) return;
 
 			// find batch nos of the selected serial no
 			const serials_with_batch_no = await frappe.db.get_list("Serial No", {
-				filters: { 'name': ["in", selected_serial_nos]},
-				fields: ["batch_no", "name"]
+				filters: { name: ["in", selected_serial_nos] },
+				fields: ["batch_no", "name"],
 			});
 			const batch_serial_map = serials_with_batch_no.reduce((acc, r) => {
 				if (!acc[r.batch_no]) {
@@ -329,10 +346,11 @@
 			const batch_no = Object.keys(batch_serial_map)[0];
 			const batch_serial_nos = batch_serial_map[batch_no].join(`\n`);
 			// eg. 10 selected serial no. -> 5 belongs to first batch other 5 belongs to second batch
-			const serial_nos_belongs_to_other_batch = selected_serial_nos.length !== batch_serial_map[batch_no].length;
+			const serial_nos_belongs_to_other_batch =
+				selected_serial_nos.length !== batch_serial_map[batch_no].length;
 
 			const current_batch_no = this.batch_no_control.get_value();
-			current_batch_no != batch_no && await this.batch_no_control.set_value(batch_no);
+			current_batch_no != batch_no && (await this.batch_no_control.set_value(batch_no));
 
 			if (serial_nos_belongs_to_other_batch) {
 				this.serial_no_control.set_value(batch_serial_nos);
@@ -348,13 +366,13 @@
 		this.bind_auto_serial_fetch_event();
 		this.bind_fields_to_numpad_fields();
 
-		this.$component.on('click', '.close-btn', () => {
+		this.$component.on("click", ".close-btn", () => {
 			this.events.close_item_details();
 		});
 	}
 
 	attach_shortcuts() {
-		this.wrapper.find('.close-btn').attr("title", "Esc");
+		this.wrapper.find(".close-btn").attr("title", "Esc");
 		frappe.ui.keys.on("escape", () => {
 			const item_details_visible = this.$component.is(":visible");
 			if (item_details_visible) {
@@ -365,8 +383,8 @@
 
 	bind_fields_to_numpad_fields() {
 		const me = this;
-		this.$form_container.on('click', '.input-with-feedback', function() {
-			const fieldname = $(this).attr('data-fieldname');
+		this.$form_container.on("click", ".input-with-feedback", function () {
+			const fieldname = $(this).attr("data-fieldname");
 			if (this.last_field_focused != fieldname) {
 				me.events.item_field_focused(fieldname);
 				this.last_field_focused = fieldname;
@@ -375,7 +393,7 @@
 	}
 
 	bind_auto_serial_fetch_event() {
-		this.$form_container.on('click', '.auto-fetch-btn', () => {
+		this.$form_container.on("click", ".auto-fetch-btn", () => {
 			frappe.require("assets/erpnext/js/utils/serial_no_batch_selector.js", () => {
 				let frm = this.events.get_frm();
 				let item_row = this.item_row;
@@ -384,16 +402,16 @@
 				new erpnext.SerialBatchPackageSelector(frm, item_row, (r) => {
 					if (r) {
 						frappe.model.set_value(item_row.doctype, item_row.name, {
-							"serial_and_batch_bundle": r.name,
-							"qty": Math.abs(r.total_qty)
+							serial_and_batch_bundle: r.name,
+							qty: Math.abs(r.total_qty),
 						});
 					}
 				});
 			});
-		})
+		});
 	}
 
 	toggle_component(show) {
-		show ? this.$component.css('display', 'flex') : this.$component.css('display', 'none');
+		show ? this.$component.css("display", "flex") : this.$component.css("display", "none");
 	}
-}
+};
diff --git a/erpnext/selling/page/point_of_sale/pos_item_selector.js b/erpnext/selling/page/point_of_sale/pos_item_selector.js
index ec67bdf..b5fa884 100644
--- a/erpnext/selling/page/point_of_sale/pos_item_selector.js
+++ b/erpnext/selling/page/point_of_sale/pos_item_selector.js
@@ -1,4 +1,4 @@
-import onScan from 'onscan.js';
+import onScan from "onscan.js";
 
 erpnext.PointOfSale.ItemSelector = class {
 	// eslint-disable-next-line no-unused-vars
@@ -24,7 +24,7 @@
 		this.wrapper.append(
 			`<section class="items-selector">
 				<div class="filter-section">
-					<div class="label">${__('All Items')}</div>
+					<div class="label">${__("All Items")}</div>
 					<div class="search-field"></div>
 					<div class="item-group-field"></div>
 				</div>
@@ -32,13 +32,13 @@
 			</section>`
 		);
 
-		this.$component = this.wrapper.find('.items-selector');
-		this.$items_container = this.$component.find('.items-container');
+		this.$component = this.wrapper.find(".items-selector");
+		this.$items_container = this.$component.find(".items-container");
 	}
 
 	async load_items_data() {
 		if (!this.item_group) {
-			const res = await frappe.db.get_value("Item Group", {lft: 1, is_group: 1}, "name");
+			const res = await frappe.db.get_value("Item Group", { lft: 1, is_group: 1 }, "name");
 			this.parent_item_group = res.message.name;
 		}
 		if (!this.price_list) {
@@ -46,12 +46,12 @@
 			this.price_list = res.message.selling_price_list;
 		}
 
-		this.get_items({}).then(({message}) => {
+		this.get_items({}).then(({ message }) => {
 			this.render_item_list(message.items);
 		});
 	}
 
-	get_items({start = 0, page_length = 40, search_term=''}) {
+	get_items({ start = 0, page_length = 40, search_term = "" }) {
 		const doc = this.events.get_frm().doc;
 		const price_list = (doc && doc.selling_price_list) || this.price_list;
 		let { item_group, pos_profile } = this;
@@ -65,11 +65,10 @@
 		});
 	}
 
-
 	render_item_list(items) {
-		this.$items_container.html('');
+		this.$items_container.html("");
 
-		items.forEach(item => {
+		items.forEach((item) => {
 			const item_html = this.get_item_html(item);
 			this.$items_container.append(item_html);
 		});
@@ -84,15 +83,15 @@
 		let qty_to_display = actual_qty;
 
 		if (item.is_stock_item) {
-			indicator_color = (actual_qty > 10 ? "green" : actual_qty <= 0 ? "red" : "orange");
+			indicator_color = actual_qty > 10 ? "green" : actual_qty <= 0 ? "red" : "orange";
 
 			if (Math.round(qty_to_display) > 999) {
-				qty_to_display = Math.round(qty_to_display)/1000;
-				qty_to_display = qty_to_display.toFixed(1) + 'K';
+				qty_to_display = Math.round(qty_to_display) / 1000;
+				qty_to_display = qty_to_display.toFixed(1) + "K";
 			}
 		} else {
-			indicator_color = '';
-			qty_to_display = '';
+			indicator_color = "";
+			qty_to_display = "";
 		}
 
 		function get_item_image_html() {
@@ -115,8 +114,7 @@
 			}
 		}
 
-		return (
-			`<div class="item-wrapper"
+		return `<div class="item-wrapper"
 				data-item-code="${escape(item.item_code)}" data-serial-no="${escape(serial_no)}"
 				data-batch-no="${escape(batch_no)}" data-uom="${escape(uom)}"
 				data-rate="${escape(price_list_rate || 0)}"
@@ -130,51 +128,50 @@
 					</div>
 					<div class="item-rate">${format_currency(price_list_rate, item.currency, precision) || 0} / ${uom}</div>
 				</div>
-			</div>`
-		);
+			</div>`;
 	}
 
 	handle_broken_image($img) {
-		const item_abbr = $($img).attr('alt');
+		const item_abbr = $($img).attr("alt");
 		$($img).parent().replaceWith(`<div class="item-display abbr">${item_abbr}</div>`);
 	}
 
 	make_search_bar() {
 		const me = this;
 		const doc = me.events.get_frm().doc;
-		this.$component.find('.search-field').html('');
-		this.$component.find('.item-group-field').html('');
+		this.$component.find(".search-field").html("");
+		this.$component.find(".item-group-field").html("");
 
 		this.search_field = frappe.ui.form.make_control({
 			df: {
-				label: __('Search'),
-				fieldtype: 'Data',
-				placeholder: __('Search by item code, serial number or barcode')
+				label: __("Search"),
+				fieldtype: "Data",
+				placeholder: __("Search by item code, serial number or barcode"),
 			},
-			parent: this.$component.find('.search-field'),
+			parent: this.$component.find(".search-field"),
 			render_input: true,
 		});
 		this.item_group_field = frappe.ui.form.make_control({
 			df: {
-				label: __('Item Group'),
-				fieldtype: 'Link',
-				options: 'Item Group',
-				placeholder: __('Select item group'),
-				onchange: function() {
+				label: __("Item Group"),
+				fieldtype: "Link",
+				options: "Item Group",
+				placeholder: __("Select item group"),
+				onchange: function () {
 					me.item_group = this.value;
 					!me.item_group && (me.item_group = me.parent_item_group);
 					me.filter_items();
 				},
 				get_query: function () {
 					return {
-						query: 'erpnext.selling.page.point_of_sale.point_of_sale.item_group_query',
+						query: "erpnext.selling.page.point_of_sale.point_of_sale.item_group_query",
 						filters: {
-							pos_profile: doc ? doc.pos_profile : ''
-						}
+							pos_profile: doc ? doc.pos_profile : "",
+						},
 					};
 				},
 			},
-			parent: this.$component.find('.item-group-field'),
+			parent: this.$component.find(".item-group-field"),
 			render_input: true,
 		});
 		this.search_field.toggle_label(false);
@@ -184,18 +181,18 @@
 	}
 
 	attach_clear_btn() {
-		this.search_field.$wrapper.find('.control-input').append(
+		this.search_field.$wrapper.find(".control-input").append(
 			`<span class="link-btn" style="top: 2px;">
 				<a class="btn-open no-decoration" title="${__("Clear")}">
-					${frappe.utils.icon('close', 'sm')}
+					${frappe.utils.icon("close", "sm")}
 				</a>
 			</span>`
 		);
 
-		this.$clear_search_btn = this.search_field.$wrapper.find('.link-btn');
+		this.$clear_search_btn = this.search_field.$wrapper.find(".link-btn");
 
-		this.$clear_search_btn.on('click', 'a', () => {
-			this.set_search_value('');
+		this.$clear_search_btn.on("click", "a", () => {
+			this.set_search_value("");
 			this.search_field.set_focus();
 		});
 	}
@@ -217,39 +214,43 @@
 				case iCode >= 186 && iCode <= 194: // (; = , - . / `)
 				case iCode >= 219 && iCode <= 222: // ([ \ ] ')
 				case iCode == 32: // spacebar
-					if (oEvent.key !== undefined && oEvent.key !== '') {
+					if (oEvent.key !== undefined && oEvent.key !== "") {
 						return oEvent.key;
 					}
 
 					var sDecoded = String.fromCharCode(iCode);
 					switch (oEvent.shiftKey) {
-						case false: sDecoded = sDecoded.toLowerCase(); break;
-						case true: sDecoded = sDecoded.toUpperCase(); break;
+						case false:
+							sDecoded = sDecoded.toLowerCase();
+							break;
+						case true:
+							sDecoded = sDecoded.toUpperCase();
+							break;
 					}
 					return sDecoded;
 				case iCode >= 96 && iCode <= 105: // numbers on numeric keypad
 					return 0 + (iCode - 96);
 			}
-			return '';
+			return "";
 		};
 
 		onScan.attachTo(document, {
 			onScan: (sScancode) => {
-				if (this.search_field && this.$component.is(':visible')) {
+				if (this.search_field && this.$component.is(":visible")) {
 					this.search_field.set_focus();
 					this.set_search_value(sScancode);
 					this.barcode_scanned = true;
 				}
-			}
+			},
 		});
 
-		this.$component.on('click', '.item-wrapper', function() {
+		this.$component.on("click", ".item-wrapper", function () {
 			const $item = $(this);
-			const item_code = unescape($item.attr('data-item-code'));
-			let batch_no = unescape($item.attr('data-batch-no'));
-			let serial_no = unescape($item.attr('data-serial-no'));
-			let uom = unescape($item.attr('data-uom'));
-			let rate = unescape($item.attr('data-rate'));
+			const item_code = unescape($item.attr("data-item-code"));
+			let batch_no = unescape($item.attr("data-batch-no"));
+			let serial_no = unescape($item.attr("data-serial-no"));
+			let uom = unescape($item.attr("data-uom"));
+			let rate = unescape($item.attr("data-rate"));
 
 			// escape(undefined) returns "undefined" then unescape returns "undefined"
 			batch_no = batch_no === "undefined" ? undefined : batch_no;
@@ -258,76 +259,72 @@
 			rate = rate === "undefined" ? undefined : rate;
 
 			me.events.item_selected({
-				field: 'qty',
+				field: "qty",
 				value: "+1",
-				item: { item_code, batch_no, serial_no, uom, rate }
+				item: { item_code, batch_no, serial_no, uom, rate },
 			});
 			me.search_field.set_focus();
 		});
 
-		this.search_field.$input.on('input', (e) => {
+		this.search_field.$input.on("input", (e) => {
 			clearTimeout(this.last_search);
 			this.last_search = setTimeout(() => {
 				const search_term = e.target.value;
 				this.filter_items({ search_term });
 			}, 300);
 
-			this.$clear_search_btn.toggle(
-				Boolean(this.search_field.$input.val())
-			);
+			this.$clear_search_btn.toggle(Boolean(this.search_field.$input.val()));
 		});
 
-		this.search_field.$input.on('focus', () => {
-			this.$clear_search_btn.toggle(
-				Boolean(this.search_field.$input.val())
-			);
+		this.search_field.$input.on("focus", () => {
+			this.$clear_search_btn.toggle(Boolean(this.search_field.$input.val()));
 		});
 	}
 
 	attach_shortcuts() {
-		const ctrl_label = frappe.utils.is_mac() ? '⌘' : 'Ctrl';
+		const ctrl_label = frappe.utils.is_mac() ? "⌘" : "Ctrl";
 		this.search_field.parent.attr("title", `${ctrl_label}+I`);
 		frappe.ui.keys.add_shortcut({
 			shortcut: "ctrl+i",
 			action: () => this.search_field.set_focus(),
-			condition: () => this.$component.is(':visible'),
+			condition: () => this.$component.is(":visible"),
 			description: __("Focus on search input"),
 			ignore_inputs: true,
-			page: cur_page.page.page
+			page: cur_page.page.page,
 		});
 		this.item_group_field.parent.attr("title", `${ctrl_label}+G`);
 		frappe.ui.keys.add_shortcut({
 			shortcut: "ctrl+g",
 			action: () => this.item_group_field.set_focus(),
-			condition: () => this.$component.is(':visible'),
+			condition: () => this.$component.is(":visible"),
 			description: __("Focus on Item Group filter"),
 			ignore_inputs: true,
-			page: cur_page.page.page
+			page: cur_page.page.page,
 		});
 
 		// for selecting the last filtered item on search
 		frappe.ui.keys.on("enter", () => {
-			const selector_is_visible = this.$component.is(':visible');
+			const selector_is_visible = this.$component.is(":visible");
 			if (!selector_is_visible || this.search_field.get_value() === "") return;
 
 			if (this.items.length == 1) {
 				this.$items_container.find(".item-wrapper").click();
 				frappe.utils.play_sound("submit");
-				this.set_search_value('');
+				this.set_search_value("");
 			} else if (this.items.length == 0 && this.barcode_scanned) {
 				// only show alert of barcode is scanned and enter is pressed
 				frappe.show_alert({
 					message: __("No items found. Scan barcode again."),
-					indicator: 'orange'
+					indicator: "orange",
 				});
 				frappe.utils.play_sound("error");
 				this.barcode_scanned = false;
-				this.set_search_value('');
+				this.set_search_value("");
 			}
 		});
 	}
 
-	filter_items({ search_term='' }={}) {
+	filter_items({ search_term = "" } = {}) {
 		if (search_term) {
 			search_term = search_term.toLowerCase();
 
@@ -342,44 +339,47 @@
 			}
 		}
 
-		this.get_items({ search_term })
-			.then(({ message }) => {
-				// eslint-disable-next-line no-unused-vars
-				const { items, serial_no, batch_no, barcode } = message;
-				if (search_term && !barcode) {
-					this.search_index[search_term] = items;
-				}
-				this.items = items;
-				this.render_item_list(items);
-				this.auto_add_item && this.items.length == 1 && this.add_filtered_item_to_cart();
-			});
+		this.get_items({ search_term }).then(({ message }) => {
+			// eslint-disable-next-line no-unused-vars
+			const { items, serial_no, batch_no, barcode } = message;
+			if (search_term && !barcode) {
+				this.search_index[search_term] = items;
+			}
+			this.items = items;
+			this.render_item_list(items);
+			this.auto_add_item && this.items.length == 1 && this.add_filtered_item_to_cart();
+		});
 	}
 
 	add_filtered_item_to_cart() {
 		this.$items_container.find(".item-wrapper").click();
-		this.set_search_value('');
+		this.set_search_value("");
 	}
 
 	resize_selector(minimize) {
-		minimize ?
-			this.$component.find('.filter-section').css('grid-template-columns', 'repeat(1, minmax(0, 1fr))') :
-			this.$component.find('.filter-section').css('grid-template-columns', 'repeat(12, minmax(0, 1fr))');
+		minimize
+			? this.$component
+					.find(".filter-section")
+					.css("grid-template-columns", "repeat(1, minmax(0, 1fr))")
+			: this.$component
+					.find(".filter-section")
+					.css("grid-template-columns", "repeat(12, minmax(0, 1fr))");
 
-		minimize ?
-			this.$component.find('.search-field').css('margin', 'var(--margin-sm) 0px') :
-			this.$component.find('.search-field').css('margin', '0px var(--margin-sm)');
+		minimize
+			? this.$component.find(".search-field").css("margin", "var(--margin-sm) 0px")
+			: this.$component.find(".search-field").css("margin", "0px var(--margin-sm)");
 
-		minimize ?
-			this.$component.css('grid-column', 'span 2 / span 2') :
-			this.$component.css('grid-column', 'span 6 / span 6');
+		minimize
+			? this.$component.css("grid-column", "span 2 / span 2")
+			: this.$component.css("grid-column", "span 6 / span 6");
 
-		minimize ?
-			this.$items_container.css('grid-template-columns', 'repeat(1, minmax(0, 1fr))') :
-			this.$items_container.css('grid-template-columns', 'repeat(4, minmax(0, 1fr))');
+		minimize
+			? this.$items_container.css("grid-template-columns", "repeat(1, minmax(0, 1fr))")
+			: this.$items_container.css("grid-template-columns", "repeat(4, minmax(0, 1fr))");
 	}
 
 	toggle_component(show) {
-		this.set_search_value('');
-		this.$component.css('display', show ? 'flex': 'none');
+		this.set_search_value("");
+		this.$component.css("display", show ? "flex" : "none");
 	}
 };
diff --git a/erpnext/selling/page/point_of_sale/pos_number_pad.js b/erpnext/selling/page/point_of_sale/pos_number_pad.js
index f27b0d5..c77f206 100644
--- a/erpnext/selling/page/point_of_sale/pos_number_pad.js
+++ b/erpnext/selling/page/point_of_sale/pos_number_pad.js
@@ -20,28 +20,40 @@
 
 		function get_keys() {
 			return keys.reduce((a, row, i) => {
-				return a + row.reduce((a2, number, j) => {
-					const class_to_append = css_classes && css_classes[i] ? css_classes[i][j] : '';
-					const fieldname = fieldnames && fieldnames[number] ?
-						fieldnames[number] : typeof number === 'string' ? frappe.scrub(number) : number;
+				return (
+					a +
+					row.reduce((a2, number, j) => {
+						const class_to_append = css_classes && css_classes[i] ? css_classes[i][j] : "";
+						const fieldname =
+							fieldnames && fieldnames[number]
+								? fieldnames[number]
+								: typeof number === "string"
+								? frappe.scrub(number)
+								: number;
 
-					return a2 + `<div class="numpad-btn ${class_to_append}" data-button-value="${fieldname}">${__(number)}</div>`;
-				}, '');
-			}, '');
+						return (
+							a2 +
+							`<div class="numpad-btn ${class_to_append}" data-button-value="${fieldname}">${__(
+								number
+							)}</div>`
+						);
+					}, "")
+				);
+			}, "");
 		}
 
 		this.wrapper.html(
 			`<div class="numpad-container">
 				${get_keys()}
 			</div>`
-		)
+		);
 	}
 
 	bind_events() {
 		const me = this;
-		this.wrapper.on('click', '.numpad-btn', function() {
+		this.wrapper.on("click", ".numpad-btn", function () {
 			const $btn = $(this);
 			me.events.numpad_event($btn);
 		});
 	}
-}
+};
diff --git a/erpnext/selling/page/point_of_sale/pos_past_order_list.js b/erpnext/selling/page/point_of_sale/pos_past_order_list.js
index a0475c7..c450d8a 100644
--- a/erpnext/selling/page/point_of_sale/pos_past_order_list.js
+++ b/erpnext/selling/page/point_of_sale/pos_past_order_list.js
@@ -16,7 +16,7 @@
 		this.wrapper.append(
 			`<section class="past-order-list">
 				<div class="filter-section">
-					<div class="label">${__('Recent Orders')}</div>
+					<div class="label">${__("Recent Orders")}</div>
 					<div class="search-field"></div>
 					<div class="status-field"></div>
 				</div>
@@ -24,12 +24,12 @@
 			</section>`
 		);
 
-		this.$component = this.wrapper.find('.past-order-list');
-		this.$invoices_container = this.$component.find('.invoices-container');
+		this.$component = this.wrapper.find(".past-order-list");
+		this.$invoices_container = this.$component.find(".invoices-container");
 	}
 
 	bind_events() {
-		this.search_field.$input.on('input', (e) => {
+		this.search_field.$input.on("input", (e) => {
 			clearTimeout(this.last_search);
 			this.last_search = setTimeout(() => {
 				const search_term = e.target.value;
@@ -37,8 +37,8 @@
 			}, 300);
 		});
 		const me = this;
-		this.$invoices_container.on('click', '.invoice-wrapper', function() {
-			const invoice_name = unescape($(this).attr('data-invoice-name'));
+		this.$invoices_container.on("click", ".invoice-wrapper", function () {
+			const invoice_name = unescape($(this).attr("data-invoice-name"));
 
 			me.events.open_invoice_data(invoice_name);
 		});
@@ -48,29 +48,29 @@
 		const me = this;
 		this.search_field = frappe.ui.form.make_control({
 			df: {
-				label: __('Search'),
-				fieldtype: 'Data',
-				placeholder: __('Search by invoice id or customer name')
+				label: __("Search"),
+				fieldtype: "Data",
+				placeholder: __("Search by invoice id or customer name"),
 			},
-			parent: this.$component.find('.search-field'),
+			parent: this.$component.find(".search-field"),
 			render_input: true,
 		});
 		this.status_field = frappe.ui.form.make_control({
 			df: {
-				label: __('Invoice Status'),
-				fieldtype: 'Select',
+				label: __("Invoice Status"),
+				fieldtype: "Select",
 				options: `Draft\nPaid\nConsolidated\nReturn`,
-				placeholder: __('Filter by invoice status'),
-				onchange: function() {
-					if (me.$component.is(':visible')) me.refresh_list();
-				}
+				placeholder: __("Filter by invoice status"),
+				onchange: function () {
+					if (me.$component.is(":visible")) me.refresh_list();
+				},
 			},
-			parent: this.$component.find('.status-field'),
+			parent: this.$component.find(".status-field"),
 			render_input: true,
 		});
 		this.search_field.toggle_label(false);
 		this.status_field.toggle_label(false);
-		this.status_field.set_value('Draft');
+		this.status_field.set_value("Draft");
 	}
 
 	refresh_list() {
@@ -79,7 +79,7 @@
 		const search_term = this.search_field.get_value();
 		const status = this.status_field.get_value();
 
-		this.$invoices_container.html('');
+		this.$invoices_container.html("");
 
 		return frappe.call({
 			method: "erpnext.selling.page.point_of_sale.point_of_sale.get_past_order_list",
@@ -87,18 +87,19 @@
 			args: { search_term, status },
 			callback: (response) => {
 				frappe.dom.unfreeze();
-				response.message.forEach(invoice => {
+				response.message.forEach((invoice) => {
 					const invoice_html = this.get_invoice_html(invoice);
 					this.$invoices_container.append(invoice_html);
 				});
-			}
+			},
 		});
 	}
 
 	get_invoice_html(invoice) {
-		const posting_datetime = moment(invoice.posting_date+" "+invoice.posting_time).format("Do MMMM, h:mma");
-		return (
-			`<div class="invoice-wrapper" data-invoice-name="${escape(invoice.name)}">
+		const posting_datetime = moment(invoice.posting_date + " " + invoice.posting_time).format(
+			"Do MMMM, h:mma"
+		);
+		return `<div class="invoice-wrapper" data-invoice-name="${escape(invoice.name)}">
 				<div class="invoice-name-date">
 					<div class="invoice-name">${invoice.name}</div>
 					<div class="invoice-date">
@@ -113,11 +114,12 @@
 					<div class="invoice-date">${posting_datetime}</div>
 				</div>
 			</div>
-			<div class="seperator"></div>`
-		);
+			<div class="seperator"></div>`;
 	}
 
 	toggle_component(show) {
-		show ? this.$component.css('display', 'flex') && this.refresh_list() : this.$component.css('display', 'none');
+		show
+			? this.$component.css("display", "flex") && this.refresh_list()
+			: this.$component.css("display", "none");
 	}
 };
diff --git a/erpnext/selling/page/point_of_sale/pos_past_order_summary.js b/erpnext/selling/page/point_of_sale/pos_past_order_summary.js
index d341d23..448dbca 100644
--- a/erpnext/selling/page/point_of_sale/pos_past_order_summary.js
+++ b/erpnext/selling/page/point_of_sale/pos_past_order_summary.js
@@ -17,16 +17,16 @@
 		this.wrapper.append(
 			`<section class="past-order-summary">
 				<div class="no-summary-placeholder">
-					${__('Select an invoice to load summary data')}
+					${__("Select an invoice to load summary data")}
 				</div>
 				<div class="invoice-summary-wrapper">
 					<div class="abs-container">
 						<div class="upper-section"></div>
-						<div class="label">${__('Items')}</div>
+						<div class="label">${__("Items")}</div>
 						<div class="items-container summary-container"></div>
-						<div class="label">${__('Totals')}</div>
+						<div class="label">${__("Totals")}</div>
 						<div class="totals-container summary-container"></div>
-						<div class="label">${__('Payments')}</div>
+						<div class="label">${__("Payments")}</div>
 						<div class="payments-container summary-container"></div>
 						<div class="summary-btns"></div>
 					</div>
@@ -34,55 +34,53 @@
 			</section>`
 		);
 
-		this.$component = this.wrapper.find('.past-order-summary');
-		this.$summary_wrapper = this.$component.find('.invoice-summary-wrapper');
-		this.$summary_container = this.$component.find('.abs-container');
-		this.$upper_section = this.$summary_container.find('.upper-section');
-		this.$items_container = this.$summary_container.find('.items-container');
-		this.$totals_container = this.$summary_container.find('.totals-container');
-		this.$payment_container = this.$summary_container.find('.payments-container');
-		this.$summary_btns = this.$summary_container.find('.summary-btns');
+		this.$component = this.wrapper.find(".past-order-summary");
+		this.$summary_wrapper = this.$component.find(".invoice-summary-wrapper");
+		this.$summary_container = this.$component.find(".abs-container");
+		this.$upper_section = this.$summary_container.find(".upper-section");
+		this.$items_container = this.$summary_container.find(".items-container");
+		this.$totals_container = this.$summary_container.find(".totals-container");
+		this.$payment_container = this.$summary_container.find(".payments-container");
+		this.$summary_btns = this.$summary_container.find(".summary-btns");
 	}
 
 	init_email_print_dialog() {
 		const email_dialog = new frappe.ui.Dialog({
-			title: 'Email Receipt',
+			title: "Email Receipt",
 			fields: [
-				{fieldname: 'email_id', fieldtype: 'Data', options: 'Email', label: 'Email ID', reqd: 1},
-				{fieldname:'content', fieldtype:'Small Text', label:'Message (if any)'}
+				{ fieldname: "email_id", fieldtype: "Data", options: "Email", label: "Email ID", reqd: 1 },
+				{ fieldname: "content", fieldtype: "Small Text", label: "Message (if any)" },
 			],
 			primary_action: () => {
 				this.send_email();
 			},
-			primary_action_label: __('Send'),
+			primary_action_label: __("Send"),
 		});
 		this.email_dialog = email_dialog;
 
 		const print_dialog = new frappe.ui.Dialog({
-			title: 'Print Receipt',
-			fields: [
-				{fieldname: 'print', fieldtype: 'Data', label: 'Print Preview'}
-			],
+			title: "Print Receipt",
+			fields: [{ fieldname: "print", fieldtype: "Data", label: "Print Preview" }],
 			primary_action: () => {
 				this.print_receipt();
 			},
-			primary_action_label: __('Print'),
+			primary_action_label: __("Print"),
 		});
 		this.print_dialog = print_dialog;
 	}
 
 	get_upper_section_html(doc) {
 		const { status } = doc;
-		let indicator_color = '';
+		let indicator_color = "";
 
-		in_list(['Paid', 'Consolidated'], status) && (indicator_color = 'green');
-		status === 'Draft' && (indicator_color = 'red');
-		status === 'Return' && (indicator_color = 'grey');
+		in_list(["Paid", "Consolidated"], status) && (indicator_color = "green");
+		status === "Draft" && (indicator_color = "red");
+		status === "Return" && (indicator_color = "grey");
 
 		return `<div class="left-section">
 					<div class="customer-name">${doc.customer}</div>
 					<div class="customer-email">${this.customer_email}</div>
-					<div class="cashier">${__('Sold by')}: ${doc.owner}</div>
+					<div class="cashier">${__("Sold by")}: ${doc.owner}</div>
 				</div>
 				<div class="right-section">
 					<div class="paid-amount">${format_currency(doc.paid_amount, doc.currency)}</div>
@@ -103,7 +101,10 @@
 				return `<span class="item-disc">(${item_data.discount_percentage}% off)</span>
 						<div class="item-rate">${format_currency(item_data.rate, doc.currency)}</div>`;
 			} else {
-				return `<div class="item-rate">${format_currency(item_data.price_list_rate || item_data.rate, doc.currency)}</div>`;
+				return `<div class="item-rate">${format_currency(
+					item_data.price_list_rate || item_data.rate,
+					doc.currency
+				)}</div>`;
 			}
 		}
 	}
@@ -121,31 +122,37 @@
 
 	get_net_total_html(doc) {
 		return `<div class="summary-row-wrapper">
-					<div>${__('Net Total')}</div>
+					<div>${__("Net Total")}</div>
 					<div>${format_currency(doc.net_total, doc.currency)}</div>
 				</div>`;
 	}
 
 	get_taxes_html(doc) {
-		if (!doc.taxes.length) return '';
+		if (!doc.taxes.length) return "";
 
-		let taxes_html = doc.taxes.map(t => {
-			// if tax rate is 0, don't print it.
-			const description = /[0-9]+/.test(t.description) ? t.description : ((t.rate != 0) ? `${t.description} @ ${t.rate}%`: t.description);
-			return `
+		let taxes_html = doc.taxes
+			.map((t) => {
+				// if tax rate is 0, don't print it.
+				const description = /[0-9]+/.test(t.description)
+					? t.description
+					: t.rate != 0
+					? `${t.description} @ ${t.rate}%`
+					: t.description;
+				return `
 				<div class="tax-row">
 					<div class="tax-label">${description}</div>
 					<div class="tax-value">${format_currency(t.tax_amount_after_discount_amount, doc.currency)}</div>
 				</div>
 			`;
-		}).join('');
+			})
+			.join("");
 
 		return `<div class="taxes-wrapper">${taxes_html}</div>`;
 	}
 
 	get_grand_total_html(doc) {
 		return `<div class="summary-row-wrapper grand-total">
-					<div>${__('Grand Total')}</div>
+					<div>${__("Grand Total")}</div>
 					<div>${format_currency(doc.grand_total, doc.currency)}</div>
 				</div>`;
 	}
@@ -158,26 +165,26 @@
 	}
 
 	bind_events() {
-		this.$summary_container.on('click', '.return-btn', () => {
+		this.$summary_container.on("click", ".return-btn", () => {
 			this.events.process_return(this.doc.name);
 			this.toggle_component(false);
-			this.$component.find('.no-summary-placeholder').css('display', 'flex');
-			this.$summary_wrapper.css('display', 'none');
+			this.$component.find(".no-summary-placeholder").css("display", "flex");
+			this.$summary_wrapper.css("display", "none");
 		});
 
-		this.$summary_container.on('click', '.edit-btn', () => {
+		this.$summary_container.on("click", ".edit-btn", () => {
 			this.events.edit_order(this.doc.name);
 			this.toggle_component(false);
-			this.$component.find('.no-summary-placeholder').css('display', 'flex');
-			this.$summary_wrapper.css('display', 'none');
+			this.$component.find(".no-summary-placeholder").css("display", "flex");
+			this.$summary_wrapper.css("display", "none");
 		});
 
-		this.$summary_container.on('click', '.delete-btn', () => {
+		this.$summary_container.on("click", ".delete-btn", () => {
 			this.events.delete_order(this.doc.name);
 			this.show_summary_placeholder();
 		});
 
-		this.$summary_container.on('click', '.delete-btn', () => {
+		this.$summary_container.on("click", ".delete-btn", () => {
 			this.events.delete_order(this.doc.name);
 			this.show_summary_placeholder();
 			// this.toggle_component(false);
@@ -185,19 +192,19 @@
 			// this.$summary_wrapper.addClass('d-none');
 		});
 
-		this.$summary_container.on('click', '.new-btn', () => {
+		this.$summary_container.on("click", ".new-btn", () => {
 			this.events.new_order();
 			this.toggle_component(false);
-			this.$component.find('.no-summary-placeholder').css('display', 'flex');
-			this.$summary_wrapper.css('display', 'none');
+			this.$component.find(".no-summary-placeholder").css("display", "flex");
+			this.$summary_wrapper.css("display", "none");
 		});
 
-		this.$summary_container.on('click', '.email-btn', () => {
+		this.$summary_container.on("click", ".email-btn", () => {
 			this.email_dialog.fields_dict.email_id.set_value(this.customer_email);
 			this.email_dialog.show();
 		});
 
-		this.$summary_container.on('click', '.print-btn', () => {
+		this.$summary_container.on("click", ".print-btn", () => {
 			this.print_receipt();
 		});
 	}
@@ -214,29 +221,31 @@
 	}
 
 	attach_shortcuts() {
-		const ctrl_label = frappe.utils.is_mac() ? '⌘' : 'Ctrl';
-		this.$summary_container.find('.print-btn').attr("title", `${ctrl_label}+P`);
+		const ctrl_label = frappe.utils.is_mac() ? "⌘" : "Ctrl";
+		this.$summary_container.find(".print-btn").attr("title", `${ctrl_label}+P`);
 		frappe.ui.keys.add_shortcut({
 			shortcut: "ctrl+p",
-			action: () => this.$summary_container.find('.print-btn').click(),
-			condition: () => this.$component.is(':visible') && this.$summary_container.find('.print-btn').is(":visible"),
+			action: () => this.$summary_container.find(".print-btn").click(),
+			condition: () =>
+				this.$component.is(":visible") && this.$summary_container.find(".print-btn").is(":visible"),
 			description: __("Print Receipt"),
-			page: cur_page.page.page
+			page: cur_page.page.page,
 		});
-		this.$summary_container.find('.new-btn').attr("title", `${ctrl_label}+Enter`);
+		this.$summary_container.find(".new-btn").attr("title", `${ctrl_label}+Enter`);
 		frappe.ui.keys.on("ctrl+enter", () => {
 			const summary_is_visible = this.$component.is(":visible");
-			if (summary_is_visible && this.$summary_container.find('.new-btn').is(":visible")) {
-				this.$summary_container.find('.new-btn').click();
+			if (summary_is_visible && this.$summary_container.find(".new-btn").is(":visible")) {
+				this.$summary_container.find(".new-btn").click();
 			}
 		});
-		this.$summary_container.find('.edit-btn').attr("title", `${ctrl_label}+E`);
+		this.$summary_container.find(".edit-btn").attr("title", `${ctrl_label}+E`);
 		frappe.ui.keys.add_shortcut({
 			shortcut: "ctrl+e",
-			action: () => this.$summary_container.find('.edit-btn').click(),
-			condition: () => this.$component.is(':visible') && this.$summary_container.find('.edit-btn').is(":visible"),
+			action: () => this.$summary_container.find(".edit-btn").click(),
+			condition: () =>
+				this.$component.is(":visible") && this.$summary_container.find(".edit-btn").is(":visible"),
 			description: __("Edit Receipt"),
-			page: cur_page.page.page
+			page: cur_page.page.page,
 		});
 	}
 
@@ -251,43 +260,44 @@
 			method: "frappe.core.doctype.communication.email.make",
 			args: {
 				recipients: recipients,
-				subject: __(frm.meta.name) + ': ' + doc.name,
-				content: content ? content : __(frm.meta.name) + ': ' + doc.name,
+				subject: __(frm.meta.name) + ": " + doc.name,
+				content: content ? content : __(frm.meta.name) + ": " + doc.name,
 				doctype: doc.doctype,
 				name: doc.name,
 				send_email: 1,
 				print_format,
 				sender_full_name: frappe.user.full_name(),
-				_lang: doc.language
+				_lang: doc.language,
 			},
-			callback: r => {
+			callback: (r) => {
 				if (!r.exc) {
 					frappe.utils.play_sound("email");
 					if (r.message["emails_not_sent_to"]) {
-						frappe.msgprint(__(
-							"Email not sent to {0} (unsubscribed / disabled)",
-							[ frappe.utils.escape_html(r.message["emails_not_sent_to"]) ]
-						));
+						frappe.msgprint(
+							__("Email not sent to {0} (unsubscribed / disabled)", [
+								frappe.utils.escape_html(r.message["emails_not_sent_to"]),
+							])
+						);
 					} else {
 						frappe.show_alert({
-							message: __('Email sent successfully.'),
-							indicator: 'green'
+							message: __("Email sent successfully."),
+							indicator: "green",
 						});
 					}
 					this.email_dialog.hide();
 				} else {
 					frappe.msgprint(__("There were errors while sending email. Please try again."));
 				}
-			}
+			},
 		});
 	}
 
 	add_summary_btns(map) {
-		this.$summary_btns.html('');
-		map.forEach(m => {
+		this.$summary_btns.html("");
+		map.forEach((m) => {
 			if (m.condition) {
-				m.visible_btns.forEach(b => {
-					const class_name = b.split(' ')[0].toLowerCase();
+				m.visible_btns.forEach((b) => {
+					const class_name = b.split(" ")[0].toLowerCase();
 					const btn = __(b);
 					this.$summary_btns.append(
 						`<div class="summary-btn btn btn-default ${class_name}-btn">${btn}</div>`
@@ -295,34 +305,40 @@
 				});
 			}
 		});
-		this.$summary_btns.children().last().removeClass('mr-4');
+		this.$summary_btns.children().last().removeClass("mr-4");
 	}
 
 	toggle_summary_placeholder(show) {
 		if (show) {
-			this.$summary_wrapper.css('display', 'none');
-			this.$component.find('.no-summary-placeholder').css('display', 'flex');
+			this.$summary_wrapper.css("display", "none");
+			this.$component.find(".no-summary-placeholder").css("display", "flex");
 		} else {
-			this.$summary_wrapper.css('display', 'flex');
-			this.$component.find('.no-summary-placeholder').css('display', 'none');
+			this.$summary_wrapper.css("display", "flex");
+			this.$component.find(".no-summary-placeholder").css("display", "none");
 		}
 	}
 
 	get_condition_btn_map(after_submission) {
 		if (after_submission)
-			return [{ condition: true, visible_btns: ['Print Receipt', 'Email Receipt', 'New Order'] }];
+			return [{ condition: true, visible_btns: ["Print Receipt", "Email Receipt", "New Order"] }];
 
 		return [
-			{ condition: this.doc.docstatus === 0, visible_btns: ['Edit Order', 'Delete Order'] },
-			{ condition: !this.doc.is_return && this.doc.docstatus === 1, visible_btns: ['Print Receipt', 'Email Receipt', 'Return']},
-			{ condition: this.doc.is_return && this.doc.docstatus === 1, visible_btns: ['Print Receipt', 'Email Receipt']}
+			{ condition: this.doc.docstatus === 0, visible_btns: ["Edit Order", "Delete Order"] },
+			{
+				condition: !this.doc.is_return && this.doc.docstatus === 1,
+				visible_btns: ["Print Receipt", "Email Receipt", "Return"],
+			},
+			{
+				condition: this.doc.is_return && this.doc.docstatus === 1,
+				visible_btns: ["Print Receipt", "Email Receipt"],
+			},
 		];
 	}
 
-	load_summary_of(doc, after_submission=false) {
-		after_submission ?
-			this.$component.css('grid-column', 'span 10 / span 10') :
-			this.$component.css('grid-column', 'span 6 / span 6');
+	load_summary_of(doc, after_submission = false) {
+		after_submission
+			? this.$component.css("grid-column", "span 10 / span 10")
+			: this.$component.css("grid-column", "span 6 / span 6");
 
 		this.toggle_summary_placeholder(false);
 
@@ -342,16 +358,16 @@
 	}
 
 	attach_document_info(doc) {
-		frappe.db.get_value('Customer', this.doc.customer, 'email_id').then(({ message }) => {
-			this.customer_email = message.email_id || '';
+		frappe.db.get_value("Customer", this.doc.customer, "email_id").then(({ message }) => {
+			this.customer_email = message.email_id || "";
 			const upper_section_dom = this.get_upper_section_html(doc);
 			this.$upper_section.html(upper_section_dom);
 		});
 	}
 
 	attach_items_info(doc) {
-		this.$items_container.html('');
-		doc.items.forEach(item => {
+		this.$items_container.html("");
+		doc.items.forEach((item) => {
 			const item_dom = this.get_item_html(doc, item);
 			this.$items_container.append(item_dom);
 			this.set_dynamic_rate_header_width();
@@ -362,8 +378,7 @@
 		const rate_cols = Array.from(this.$items_container.find(".item-rate-disc"));
 		this.$items_container.find(".item-rate-disc").css("width", "");
 		let max_width = rate_cols.reduce((max_width, elm) => {
-			if ($(elm).width() > max_width)
-				max_width = $(elm).width();
+			if ($(elm).width() > max_width) max_width = $(elm).width();
 			return max_width;
 		}, 0);
 
@@ -374,8 +389,8 @@
 	}
 
 	attach_payments_info(doc) {
-		this.$payment_container.html('');
-		doc.payments.forEach(p => {
+		this.$payment_container.html("");
+		doc.payments.forEach((p) => {
 			if (p.amount) {
 				const payment_dom = this.get_payment_html(doc, p);
 				this.$payment_container.append(payment_dom);
@@ -383,7 +398,7 @@
 		});
 		if (doc.redeem_loyalty_points && doc.loyalty_amount) {
 			const payment_dom = this.get_payment_html(doc, {
-				mode_of_payment: 'Loyalty Points',
+				mode_of_payment: "Loyalty Points",
 				amount: doc.loyalty_amount,
 			});
 			this.$payment_container.append(payment_dom);
@@ -391,7 +406,7 @@
 	}
 
 	attach_totals_info(doc) {
-		this.$totals_container.html('');
+		this.$totals_container.html("");
 
 		const net_total_dom = this.get_net_total_html(doc);
 		const taxes_dom = this.get_taxes_html(doc);
@@ -404,6 +419,6 @@
 	}
 
 	toggle_component(show) {
-		show ? this.$component.css('display', 'flex') : this.$component.css('display', 'none');
+		show ? this.$component.css("display", "flex") : this.$component.css("display", "none");
 	}
 };
diff --git a/erpnext/selling/page/point_of_sale/pos_payment.js b/erpnext/selling/page/point_of_sale/pos_payment.js
index 588b698..cadbfa7 100644
--- a/erpnext/selling/page/point_of_sale/pos_payment.js
+++ b/erpnext/selling/page/point_of_sale/pos_payment.js
@@ -12,17 +12,16 @@
 		this.initialize_numpad();
 		this.bind_events();
 		this.attach_shortcuts();
-
 	}
 
 	prepare_dom() {
 		this.wrapper.append(
 			`<section class="payment-container">
-				<div class="section-label payment-section">${__('Payment Method')}</div>
+				<div class="section-label payment-section">${__("Payment Method")}</div>
 				<div class="payment-modes"></div>
 				<div class="fields-numpad-container">
 					<div class="fields-section">
-						<div class="section-label">${__('Additional Information')}</div>
+						<div class="section-label">${__("Additional Information")}</div>
 						<div class="invoice-fields"></div>
 					</div>
 					<div class="number-pad"></div>
@@ -33,12 +32,12 @@
 				<div class="submit-order-btn">${__("Complete Order")}</div>
 			</section>`
 		);
-		this.$component = this.wrapper.find('.payment-container');
-		this.$payment_modes = this.$component.find('.payment-modes');
-		this.$totals_section = this.$component.find('.totals-section');
-		this.$totals = this.$component.find('.totals');
-		this.$numpad = this.$component.find('.number-pad');
-		this.$invoice_fields_section = this.$component.find('.fields-section');
+		this.$component = this.wrapper.find(".payment-container");
+		this.$payment_modes = this.$component.find(".payment-modes");
+		this.$totals_section = this.$component.find(".totals-section");
+		this.$totals = this.$component.find(".totals");
+		this.$numpad = this.$component.find(".number-pad");
+		this.$invoice_fields_section = this.$component.find(".fields-section");
 	}
 
 	make_invoice_fields_control() {
@@ -46,33 +45,33 @@
 			const fields = doc.invoice_fields;
 			if (!fields.length) return;
 
-			this.$invoice_fields = this.$invoice_fields_section.find('.invoice-fields');
-			this.$invoice_fields.html('');
+			this.$invoice_fields = this.$invoice_fields_section.find(".invoice-fields");
+			this.$invoice_fields.html("");
 			const frm = this.events.get_frm();
 
-			fields.forEach(df => {
+			fields.forEach((df) => {
 				this.$invoice_fields.append(
 					`<div class="invoice_detail_field ${df.fieldname}-field" data-fieldname="${df.fieldname}"></div>`
 				);
 				let df_events = {
-					onchange: function() {
+					onchange: function () {
 						frm.set_value(this.df.fieldname, this.get_value());
-					}
+					},
 				};
 				if (df.fieldtype == "Button") {
 					df_events = {
-						click: function() {
+						click: function () {
 							if (frm.script_manager.has_handlers(df.fieldname, frm.doc.doctype)) {
 								frm.script_manager.trigger(df.fieldname, frm.doc.doctype, frm.doc.docname);
 							}
-						}
+						},
 					};
 				}
 
 				this[`${df.fieldname}_field`] = frappe.ui.form.make_control({
 					df: {
 						...df,
-						...df_events
+						...df_events,
 					},
 					parent: this.$invoice_fields.find(`.${df.fieldname}-field`),
 					render_input: true,
@@ -87,34 +86,35 @@
 		this.number_pad = new erpnext.PointOfSale.NumberPad({
 			wrapper: this.$numpad,
 			events: {
-				numpad_event: function($btn) {
+				numpad_event: function ($btn) {
 					me.on_numpad_clicked($btn);
-				}
+				},
 			},
 			cols: 3,
 			keys: [
-				[ 1, 2, 3 ],
-				[ 4, 5, 6 ],
-				[ 7, 8, 9 ],
-				[ '.', 0, 'Delete' ]
+				[1, 2, 3],
+				[4, 5, 6],
+				[7, 8, 9],
+				[".", 0, "Delete"],
 			],
 		});
 
-		this.numpad_value = '';
+		this.numpad_value = "";
 	}
 
 	on_numpad_clicked($btn) {
-		const button_value = $btn.attr('data-button-value');
+		const button_value = $btn.attr("data-button-value");
 
 		highlight_numpad_btn($btn);
-		this.numpad_value = button_value === 'delete' ? this.numpad_value.slice(0, -1) : this.numpad_value + button_value;
+		this.numpad_value =
+			button_value === "delete" ? this.numpad_value.slice(0, -1) : this.numpad_value + button_value;
 		this.selected_mode.$input.get(0).focus();
 		this.selected_mode.set_value(this.numpad_value);
 
 		function highlight_numpad_btn($btn) {
-			$btn.addClass('shadow-base-inner bg-selected');
+			$btn.addClass("shadow-base-inner bg-selected");
 			setTimeout(() => {
-				$btn.removeClass('shadow-base-inner bg-selected');
+				$btn.removeClass("shadow-base-inner bg-selected");
 			}, 100);
 		}
 	}
@@ -122,36 +122,37 @@
 	bind_events() {
 		const me = this;
 
-		this.$payment_modes.on('click', '.mode-of-payment', function(e) {
+		this.$payment_modes.on("click", ".mode-of-payment", function (e) {
 			const mode_clicked = $(this);
 			// if clicked element doesn't have .mode-of-payment class then return
 			if (!$(e.target).is(mode_clicked)) return;
 
-			const scrollLeft = mode_clicked.offset().left - me.$payment_modes.offset().left + me.$payment_modes.scrollLeft();
+			const scrollLeft =
+				mode_clicked.offset().left - me.$payment_modes.offset().left + me.$payment_modes.scrollLeft();
 			me.$payment_modes.animate({ scrollLeft });
 
-			const mode = mode_clicked.attr('data-mode');
+			const mode = mode_clicked.attr("data-mode");
 
 			// hide all control fields and shortcuts
-			$(`.mode-of-payment-control`).css('display', 'none');
-			$(`.cash-shortcuts`).css('display', 'none');
-			me.$payment_modes.find(`.pay-amount`).css('display', 'inline');
-			me.$payment_modes.find(`.loyalty-amount-name`).css('display', 'none');
+			$(`.mode-of-payment-control`).css("display", "none");
+			$(`.cash-shortcuts`).css("display", "none");
+			me.$payment_modes.find(`.pay-amount`).css("display", "inline");
+			me.$payment_modes.find(`.loyalty-amount-name`).css("display", "none");
 
 			// remove highlight from all mode-of-payments
-			$('.mode-of-payment').removeClass('border-primary');
+			$(".mode-of-payment").removeClass("border-primary");
 
-			if (mode_clicked.hasClass('border-primary')) {
+			if (mode_clicked.hasClass("border-primary")) {
 				// clicked one is selected then unselect it
-				mode_clicked.removeClass('border-primary');
-				me.selected_mode = '';
+				mode_clicked.removeClass("border-primary");
+				me.selected_mode = "";
 			} else {
 				// clicked one is not selected then select it
-				mode_clicked.addClass('border-primary');
-				mode_clicked.find('.mode-of-payment-control').css('display', 'flex');
-				mode_clicked.find('.cash-shortcuts').css('display', 'grid');
-				me.$payment_modes.find(`.${mode}-amount`).css('display', 'none');
-				me.$payment_modes.find(`.${mode}-name`).css('display', 'inline');
+				mode_clicked.addClass("border-primary");
+				mode_clicked.find(".mode-of-payment-control").css("display", "flex");
+				mode_clicked.find(".cash-shortcuts").css("display", "grid");
+				me.$payment_modes.find(`.${mode}-amount`).css("display", "none");
+				me.$payment_modes.find(`.${mode}-name`).css("display", "inline");
 
 				me.selected_mode = me[`${mode}_control`];
 				me.selected_mode && me.selected_mode.$input.get(0).focus();
@@ -159,33 +160,33 @@
 			}
 		});
 
-		frappe.ui.form.on('POS Invoice', 'contact_mobile', (frm) => {
+		frappe.ui.form.on("POS Invoice", "contact_mobile", (frm) => {
 			const contact = frm.doc.contact_mobile;
 			const request_button = $(this.request_for_payment_field?.$input[0]);
 			if (contact) {
-				request_button.removeClass('btn-default').addClass('btn-primary');
+				request_button.removeClass("btn-default").addClass("btn-primary");
 			} else {
-				request_button.removeClass('btn-primary').addClass('btn-default');
+				request_button.removeClass("btn-primary").addClass("btn-default");
 			}
 		});
 
-		frappe.ui.form.on('POS Invoice', 'coupon_code', (frm) => {
+		frappe.ui.form.on("POS Invoice", "coupon_code", (frm) => {
 			if (frm.doc.coupon_code && !frm.applying_pos_coupon_code) {
 				if (!frm.doc.ignore_pricing_rule) {
 					frm.applying_pos_coupon_code = true;
 					frappe.run_serially([
-						() => frm.doc.ignore_pricing_rule=1,
-						() => frm.trigger('ignore_pricing_rule'),
-						() => frm.doc.ignore_pricing_rule=0,
-						() => frm.trigger('apply_pricing_rule'),
+						() => (frm.doc.ignore_pricing_rule = 1),
+						() => frm.trigger("ignore_pricing_rule"),
+						() => (frm.doc.ignore_pricing_rule = 0),
+						() => frm.trigger("apply_pricing_rule"),
 						() => frm.save(),
 						() => this.update_totals_section(frm.doc),
-						() => (frm.applying_pos_coupon_code = false)
+						() => (frm.applying_pos_coupon_code = false),
 					]);
 				} else if (frm.doc.ignore_pricing_rule) {
 					frappe.show_alert({
 						message: __("Ignore Pricing Rule is enabled. Cannot apply coupon code."),
-						indicator: "orange"
+						indicator: "orange",
 					});
 				}
 			}
@@ -193,18 +194,20 @@
 
 		this.setup_listener_for_payments();
 
-		this.$payment_modes.on('click', '.shortcut', function() {
-			const value = $(this).attr('data-value');
+		this.$payment_modes.on("click", ".shortcut", function () {
+			const value = $(this).attr("data-value");
 			me.selected_mode.set_value(value);
 		});
 
-		this.$component.on('click', '.submit-order-btn', () => {
+		this.$component.on("click", ".submit-order-btn", () => {
 			const doc = this.events.get_frm().doc;
 			const paid_amount = doc.paid_amount;
 			const items = doc.items;
 
 			if (!items.length || (paid_amount == 0 && doc.additional_discount_percentage != 100)) {
-				const message = items.length ? __("You cannot submit the order without payment.") : __("You cannot submit empty order.");
+				const message = items.length
+					? __("You cannot submit the order without payment.")
+					: __("You cannot submit empty order.");
 				frappe.show_alert({ message, indicator: "orange" });
 				frappe.utils.play_sound("error");
 				return;
@@ -213,17 +216,18 @@
 			this.events.submit_invoice();
 		});
 
-		frappe.ui.form.on('POS Invoice', 'paid_amount', (frm) => {
+		frappe.ui.form.on("POS Invoice", "paid_amount", (frm) => {
 			this.update_totals_section(frm.doc);
 
 			// need to re calculate cash shortcuts after discount is applied
-			const is_cash_shortcuts_invisible = !this.$payment_modes.find('.cash-shortcuts').is(':visible');
+			const is_cash_shortcuts_invisible = !this.$payment_modes.find(".cash-shortcuts").is(":visible");
 			this.attach_cash_shortcuts(frm.doc);
-			!is_cash_shortcuts_invisible && this.$payment_modes.find('.cash-shortcuts').css('display', 'grid');
+			!is_cash_shortcuts_invisible &&
+				this.$payment_modes.find(".cash-shortcuts").css("display", "grid");
 			this.render_payment_mode_dom();
 		});
 
-		frappe.ui.form.on('POS Invoice', 'loyalty_amount', (frm) => {
+		frappe.ui.form.on("POS Invoice", "loyalty_amount", (frm) => {
 			const formatted_currency = format_currency(frm.doc.loyalty_amount, frm.doc.currency);
 			this.$payment_modes.find(`.loyalty-amount-amount`).html(formatted_currency);
 		});
@@ -246,28 +250,36 @@
 
 			if (success) {
 				title = __("Payment Received");
-				const grand_total = cint(frappe.sys_defaults.disable_rounded_total) ? doc.grand_total : doc.rounded_total;
+				const grand_total = cint(frappe.sys_defaults.disable_rounded_total)
+					? doc.grand_total
+					: doc.rounded_total;
 				if (amount >= grand_total) {
 					frappe.dom.unfreeze();
-					message = __("Payment of {0} received successfully.", [format_currency(amount, doc.currency, 0)]);
+					message = __("Payment of {0} received successfully.", [
+						format_currency(amount, doc.currency, 0),
+					]);
 					this.events.submit_invoice();
 					cur_frm.reload_doc();
-
 				} else {
-					message = __("Payment of {0} received successfully. Waiting for other requests to complete...", [format_currency(amount, doc.currency, 0)]);
+					message = __(
+						"Payment of {0} received successfully. Waiting for other requests to complete...",
+						[format_currency(amount, doc.currency, 0)]
+					);
 				}
 			} else if (failure_message) {
 				message = failure_message;
 				title = __("Payment Failed");
 			}
 
-			frappe.msgprint({ "message": message, "title": title });
+			frappe.msgprint({ message: message, title: title });
 		});
 	}
 
 	auto_set_remaining_amount() {
 		const doc = this.events.get_frm().doc;
-		const grand_total = cint(frappe.sys_defaults.disable_rounded_total) ? doc.grand_total : doc.rounded_total;
+		const grand_total = cint(frappe.sys_defaults.disable_rounded_total)
+			? doc.grand_total
+			: doc.rounded_total;
 		const remaining_amount = grand_total - doc.paid_amount;
 		const current_value = this.selected_mode ? this.selected_mode.get_value() : undefined;
 		if (!current_value && remaining_amount > 0 && this.selected_mode) {
@@ -276,13 +288,13 @@
 	}
 
 	attach_shortcuts() {
-		const ctrl_label = frappe.utils.is_mac() ? '⌘' : 'Ctrl';
-		this.$component.find('.submit-order-btn').attr("title", `${ctrl_label}+Enter`);
+		const ctrl_label = frappe.utils.is_mac() ? "⌘" : "Ctrl";
+		this.$component.find(".submit-order-btn").attr("title", `${ctrl_label}+Enter`);
 		frappe.ui.keys.on("ctrl+enter", () => {
 			const payment_is_visible = this.$component.is(":visible");
 			const active_mode = this.$payment_modes.find(".border-primary");
 			if (payment_is_visible && active_mode.length) {
-				this.$component.find('.submit-order-btn').click();
+				this.$component.find(".submit-order-btn").click();
 			}
 		});
 
@@ -295,19 +307,24 @@
 
 				if (!active_mode) return;
 
-				const mode_of_payments = Array.from(this.$payment_modes.find(".mode-of-payment")).map(m => $(m).attr("data-mode"));
+				const mode_of_payments = Array.from(this.$payment_modes.find(".mode-of-payment")).map((m) =>
+					$(m).attr("data-mode")
+				);
 				const mode_index = mode_of_payments.indexOf(active_mode);
 				const next_mode_index = (mode_index + 1) % mode_of_payments.length;
-				const next_mode_to_be_clicked = this.$payment_modes.find(`.mode-of-payment[data-mode="${mode_of_payments[next_mode_index]}"]`);
+				const next_mode_to_be_clicked = this.$payment_modes.find(
+					`.mode-of-payment[data-mode="${mode_of_payments[next_mode_index]}"]`
+				);
 
 				if (payment_is_visible && mode_index != next_mode_index) {
 					next_mode_to_be_clicked.click();
 				}
 			},
-			condition: () => this.$component.is(':visible') && this.$payment_modes.find(".border-primary").length,
+			condition: () =>
+				this.$component.is(":visible") && this.$payment_modes.find(".border-primary").length,
 			description: __("Switch Between Payment Modes"),
 			ignore_inputs: true,
-			page: cur_page.page.page
+			page: cur_page.page.page,
 		});
 	}
 
@@ -341,20 +358,20 @@
 	}
 
 	toggle_remarks_control() {
-		if (this.$remarks.find('.frappe-control').length) {
-			this.$remarks.html('+ Add Remark');
+		if (this.$remarks.find(".frappe-control").length) {
+			this.$remarks.html("+ Add Remark");
 		} else {
-			this.$remarks.html('');
+			this.$remarks.html("");
 			this[`remark_control`] = frappe.ui.form.make_control({
 				df: {
-					label: __('Remark'),
-					fieldtype: 'Data',
-					onchange: function() {}
+					label: __("Remark"),
+					fieldtype: "Data",
+					onchange: function () {},
 				},
 				parent: this.$totals_section.find(`.remarks`),
 				render_input: true,
 			});
-			this[`remark_control`].set_value('');
+			this[`remark_control`].set_value("");
 		}
 	}
 
@@ -363,14 +380,15 @@
 		const payments = doc.payments;
 		const currency = doc.currency;
 
-		this.$payment_modes.html(`${
-			payments.map((p, i) => {
-				const mode = p.mode_of_payment.replace(/ +/g, "_").toLowerCase();
-				const payment_type = p.type;
-				const margin = i % 2 === 0 ? 'pr-2' : 'pl-2';
-				const amount = p.amount > 0 ? format_currency(p.amount, currency) : '';
+		this.$payment_modes.html(
+			`${payments
+				.map((p, i) => {
+					const mode = p.mode_of_payment.replace(/ +/g, "_").toLowerCase();
+					const payment_type = p.type;
+					const margin = i % 2 === 0 ? "pr-2" : "pl-2";
+					const amount = p.amount > 0 ? format_currency(p.amount, currency) : "";
 
-				return (`
+					return `
 					<div class="payment-mode-wrapper">
 						<div class="mode-of-payment" data-mode="${mode}" data-payment-type="${payment_type}">
 							${p.mode_of_payment}
@@ -378,29 +396,30 @@
 							<div class="${mode} mode-of-payment-control"></div>
 						</div>
 					</div>
-				`);
-			}).join('')
-		}`);
+				`;
+				})
+				.join("")}`
+		);
 
-		payments.forEach(p => {
+		payments.forEach((p) => {
 			const mode = p.mode_of_payment.replace(/ +/g, "_").toLowerCase();
 			const me = this;
 			this[`${mode}_control`] = frappe.ui.form.make_control({
 				df: {
 					label: p.mode_of_payment,
-					fieldtype: 'Currency',
-					placeholder: __('Enter {0} amount.', [__(p.mode_of_payment)]),
-					onchange: function() {
-						const current_value = frappe.model.get_value(p.doctype, p.name, 'amount');
+					fieldtype: "Currency",
+					placeholder: __("Enter {0} amount.", [__(p.mode_of_payment)]),
+					onchange: function () {
+						const current_value = frappe.model.get_value(p.doctype, p.name, "amount");
 						if (current_value != this.value) {
 							frappe.model
-								.set_value(p.doctype, p.name, 'amount', flt(this.value))
-								.then(() => me.update_totals_section())
+								.set_value(p.doctype, p.name, "amount", flt(this.value))
+								.then(() => me.update_totals_section());
 
 							const formatted_currency = format_currency(this.value, currency);
 							me.$payment_modes.find(`.${mode}-amount`).html(formatted_currency);
 						}
-					}
+					},
 				},
 				parent: this.$payment_modes.find(`.${mode}.mode-of-payment-control`),
 				render_input: true,
@@ -417,7 +436,7 @@
 	focus_on_default_mop() {
 		const doc = this.events.get_frm().doc;
 		const payments = doc.payments;
-		payments.forEach(p => {
+		payments.forEach((p) => {
 			const mode = p.mode_of_payment.replace(/ +/g, "_").toLowerCase();
 			if (p.default) {
 				setTimeout(() => {
@@ -428,17 +447,23 @@
 	}
 
 	attach_cash_shortcuts(doc) {
-		const grand_total = cint(frappe.sys_defaults.disable_rounded_total) ? doc.grand_total : doc.rounded_total;
+		const grand_total = cint(frappe.sys_defaults.disable_rounded_total)
+			? doc.grand_total
+			: doc.rounded_total;
 		const currency = doc.currency;
 
 		const shortcuts = this.get_cash_shortcuts(flt(grand_total));
 
-		this.$payment_modes.find('.cash-shortcuts').remove();
-		let shortcuts_html = shortcuts.map(s => {
-			return `<div class="shortcut" data-value="${s}">${format_currency(s, currency, 0)}</div>`;
-		}).join('');
+		this.$payment_modes.find(".cash-shortcuts").remove();
+		let shortcuts_html = shortcuts
+			.map((s) => {
+				return `<div class="shortcut" data-value="${s}">${format_currency(s, currency, 0)}</div>`;
+			})
+			.join("");
 
-		this.$payment_modes.find('[data-payment-type="Cash"]').find('.mode-of-payment-control')
+		this.$payment_modes
+			.find('[data-payment-type="Cash"]')
+			.find(".mode-of-payment-control")
 			.after(`<div class="cash-shortcuts">${shortcuts_html}</div>`);
 	}
 
@@ -446,10 +471,10 @@
 		let steps = [1, 5, 10];
 		const digits = String(Math.round(grand_total)).length;
 
-		steps = steps.map(x => x * (10 ** (digits - 2)));
+		steps = steps.map((x) => x * 10 ** (digits - 2));
 
 		const get_nearest = (amount, x) => {
-			let nearest_x = Math.ceil((amount / x)) * x;
+			let nearest_x = Math.ceil(amount / x) * x;
 			return nearest_x === amount ? nearest_x + x : nearest_x;
 		};
 
@@ -474,13 +499,16 @@
 			description = __("You don't have enough points to redeem.");
 			read_only = true;
 		} else {
-			max_redeemable_amount = flt(flt(loyalty_points) * flt(conversion_factor), precision("loyalty_amount", doc));
+			max_redeemable_amount = flt(
+				flt(loyalty_points) * flt(conversion_factor),
+				precision("loyalty_amount", doc)
+			);
 			description = __("You can redeem upto {0}.", [format_currency(max_redeemable_amount)]);
 			read_only = false;
 		}
 
-		const margin = this.$payment_modes.children().length % 2 === 0 ? 'pr-2' : 'pl-2';
-		const amount = doc.loyalty_amount > 0 ? format_currency(doc.loyalty_amount, doc.currency) : '';
+		const margin = this.$payment_modes.children().length % 2 === 0 ? "pr-2" : "pl-2";
+		const amount = doc.loyalty_amount > 0 ? format_currency(doc.loyalty_amount, doc.currency) : "";
 		this.$payment_modes.append(
 			`<div class="payment-mode-wrapper">
 				<div class="mode-of-payment loyalty-card" data-mode="loyalty-amount" data-payment-type="loyalty-amount">
@@ -492,35 +520,47 @@
 			</div>`
 		);
 
-		this['loyalty-amount_control'] = frappe.ui.form.make_control({
+		this["loyalty-amount_control"] = frappe.ui.form.make_control({
 			df: {
 				label: __("Redeem Loyalty Points"),
-				fieldtype: 'Currency',
+				fieldtype: "Currency",
 				placeholder: __("Enter amount to be redeemed."),
-				options: 'company:currency',
+				options: "company:currency",
 				read_only,
-				onchange: async function() {
+				onchange: async function () {
 					if (!loyalty_points) return;
 
 					if (this.value > max_redeemable_amount) {
 						frappe.show_alert({
-							message: __("You cannot redeem more than {0}.", [format_currency(max_redeemable_amount)]),
-							indicator: "red"
+							message: __("You cannot redeem more than {0}.", [
+								format_currency(max_redeemable_amount),
+							]),
+							indicator: "red",
 						});
 						frappe.utils.play_sound("submit");
-						me['loyalty-amount_control'].set_value(0);
+						me["loyalty-amount_control"].set_value(0);
 						return;
 					}
 					const redeem_loyalty_points = this.value > 0 ? 1 : 0;
-					await frappe.model.set_value(doc.doctype, doc.name, 'redeem_loyalty_points', redeem_loyalty_points);
-					frappe.model.set_value(doc.doctype, doc.name, 'loyalty_points', parseInt(this.value / conversion_factor));
+					await frappe.model.set_value(
+						doc.doctype,
+						doc.name,
+						"redeem_loyalty_points",
+						redeem_loyalty_points
+					);
+					frappe.model.set_value(
+						doc.doctype,
+						doc.name,
+						"loyalty_points",
+						parseInt(this.value / conversion_factor)
+					);
 				},
-				description
+				description,
 			},
 			parent: this.$payment_modes.find(`.loyalty-amount.mode-of-payment-control`),
 			render_input: true,
 		});
-		this['loyalty-amount_control'].toggle_label(false);
+		this["loyalty-amount_control"].toggle_label(false);
 
 		// this.render_add_payment_method_dom();
 	}
@@ -538,20 +578,22 @@
 	update_totals_section(doc) {
 		if (!doc) doc = this.events.get_frm().doc;
 		const paid_amount = doc.paid_amount;
-		const grand_total = cint(frappe.sys_defaults.disable_rounded_total) ? doc.grand_total : doc.rounded_total;
+		const grand_total = cint(frappe.sys_defaults.disable_rounded_total)
+			? doc.grand_total
+			: doc.rounded_total;
 		const remaining = grand_total - doc.paid_amount;
 		const change = doc.change_amount || remaining <= 0 ? -1 * remaining : undefined;
 		const currency = doc.currency;
-		const label = change ? __('Change') : __('To Be Paid');
+		const label = change ? __("Change") : __("To Be Paid");
 
 		this.$totals.html(
 			`<div class="col">
-				<div class="total-label">${__('Grand Total')}</div>
+				<div class="total-label">${__("Grand Total")}</div>
 				<div class="value">${format_currency(grand_total, currency)}</div>
 			</div>
 			<div class="seperator-y"></div>
 			<div class="col">
-				<div class="total-label">${__('Paid Amount')}</div>
+				<div class="total-label">${__("Paid Amount")}</div>
 				<div class="value">${format_currency(paid_amount, currency)}</div>
 			</div>
 			<div class="seperator-y"></div>
@@ -563,6 +605,6 @@
 	}
 
 	toggle_component(show) {
-		show ? this.$component.css('display', 'flex') : this.$component.css('display', 'none');
+		show ? this.$component.css("display", "flex") : this.$component.css("display", "none");
 	}
 };
diff --git a/erpnext/selling/page/sales_funnel/sales_funnel.js b/erpnext/selling/page/sales_funnel/sales_funnel.js
index a0a1222..1d52597 100644
--- a/erpnext/selling/page/sales_funnel/sales_funnel.js
+++ b/erpnext/selling/page/sales_funnel/sales_funnel.js
@@ -1,23 +1,23 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.pages['sales-funnel'].on_page_load = function(wrapper) {
+frappe.pages["sales-funnel"].on_page_load = function (wrapper) {
 	frappe.ui.make_app_page({
 		parent: wrapper,
-		title: __('Sales Funnel'),
-		single_column: true
+		title: __("Sales Funnel"),
+		single_column: true,
 	});
 
 	wrapper.sales_funnel = new erpnext.SalesFunnel(wrapper);
 
 	frappe.breadcrumbs.add("Selling");
-}
+};
 
 erpnext.SalesFunnel = class SalesFunnel {
 	constructor(wrapper) {
 		var me = this;
 		// 0 setTimeout hack - this gives time for canvas to get width and height
-		setTimeout(function() {
+		setTimeout(function () {
 			me.setup(wrapper);
 			me.get_data();
 		}, 0);
@@ -26,50 +26,65 @@
 	setup(wrapper) {
 		var me = this;
 
-		this.company_field = wrapper.page.add_field({"fieldtype": "Link", "fieldname": "company", "options": "Company",
-			"label": __("Company"), "reqd": 1, "default": frappe.defaults.get_user_default('company'),
-			change: function() {
-				me.company = this.value || frappe.defaults.get_user_default('company');
+		(this.company_field = wrapper.page.add_field({
+			fieldtype: "Link",
+			fieldname: "company",
+			options: "Company",
+			label: __("Company"),
+			reqd: 1,
+			default: frappe.defaults.get_user_default("company"),
+			change: function () {
+				me.company = this.value || frappe.defaults.get_user_default("company");
 				me.get_data();
-			}
-		}),
+			},
+		})),
+			(this.elements = {
+				layout: $(wrapper).find(".layout-main"),
+				from_date: wrapper.page.add_date(__("From Date")),
+				to_date: wrapper.page.add_date(__("To Date")),
+				chart: wrapper.page.add_select(__("Chart"), [
+					{ value: "sales_funnel", label: __("Sales Funnel") },
+					{ value: "sales_pipeline", label: __("Sales Pipeline") },
+					{ value: "opp_by_lead_source", label: __("Opportunities by lead source") },
+				]),
+				refresh_btn: wrapper.page.set_primary_action(
+					__("Refresh"),
+					function () {
+						me.get_data();
+					},
+					"fa fa-refresh"
+				),
+			});
 
-		this.elements = {
-			layout: $(wrapper).find(".layout-main"),
-			from_date: wrapper.page.add_date(__("From Date")),
-			to_date: wrapper.page.add_date(__("To Date")),
-			chart: wrapper.page.add_select(__("Chart"), [{value: 'sales_funnel', label:__("Sales Funnel")},
-				{value: 'sales_pipeline', label:__("Sales Pipeline")},
-				{value: 'opp_by_lead_source', label:__("Opportunities by lead source")}]),
-			refresh_btn: wrapper.page.set_primary_action(__("Refresh"),
-				function() { me.get_data(); }, "fa fa-refresh"),
-		};
-
-		this.elements.no_data = $('<div class="alert alert-warning">' + __("No Data") + '</div>')
+		this.elements.no_data = $('<div class="alert alert-warning">' + __("No Data") + "</div>")
 			.toggle(false)
 			.appendTo(this.elements.layout);
 
-		this.elements.funnel_wrapper = $('<div class="funnel-wrapper text-center"></div>')
-			.appendTo(this.elements.layout);
+		this.elements.funnel_wrapper = $('<div class="funnel-wrapper text-center"></div>').appendTo(
+			this.elements.layout
+		);
 
-		this.company = frappe.defaults.get_user_default('company');
+		this.company = frappe.defaults.get_user_default("company");
 		this.options = {
 			from_date: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
 			to_date: frappe.datetime.get_today(),
-			chart: 'sales_funnel'
+			chart: "sales_funnel",
 		};
 
 		// set defaults and bind on change
-		$.each(this.options, function(k, v) {
-			if (['from_date', 'to_date'].includes(k)) {
+		$.each(this.options, function (k, v) {
+			if (["from_date", "to_date"].includes(k)) {
 				me.elements[k].val(frappe.datetime.str_to_user(v));
 			} else {
 				me.elements[k].val(v);
 			}
 
-			me.elements[k].on("change", function() {
-				if (['from_date', 'to_date'].includes(k)) {
-					me.options[k] = frappe.datetime.user_to_str($(this).val()) != 'Invalid date' ? frappe.datetime.user_to_str($(this).val()) : frappe.datetime.get_today();
+			me.elements[k].on("change", function () {
+				if (["from_date", "to_date"].includes(k)) {
+					me.options[k] =
+						frappe.datetime.user_to_str($(this).val()) != "Invalid date"
+							? frappe.datetime.user_to_str($(this).val())
+							: frappe.datetime.get_today();
 				} else {
 					me.options.chart = $(this).val();
 				}
@@ -78,12 +93,12 @@
 		});
 
 		// bind refresh
-		this.elements.refresh_btn.on("click", function() {
+		this.elements.refresh_btn.on("click", function () {
 			me.get_data(this);
 		});
 
 		// bind resize
-		$(window).resize(function() {
+		$(window).resize(function () {
 			me.render();
 		});
 	}
@@ -95,39 +110,39 @@
 		}
 
 		const method_map = {
-			"sales_funnel": "erpnext.selling.page.sales_funnel.sales_funnel.get_funnel_data",
-			"opp_by_lead_source": "erpnext.selling.page.sales_funnel.sales_funnel.get_opp_by_lead_source",
-			"sales_pipeline": "erpnext.selling.page.sales_funnel.sales_funnel.get_pipeline_data"
+			sales_funnel: "erpnext.selling.page.sales_funnel.sales_funnel.get_funnel_data",
+			opp_by_lead_source: "erpnext.selling.page.sales_funnel.sales_funnel.get_opp_by_lead_source",
+			sales_pipeline: "erpnext.selling.page.sales_funnel.sales_funnel.get_pipeline_data",
 		};
 		frappe.call({
 			method: method_map[this.options.chart],
 			args: {
 				from_date: this.options.from_date,
 				to_date: this.options.to_date,
-				company: this.company
+				company: this.company,
 			},
 			btn: btn,
-			callback: function(r) {
-				if(!r.exc) {
+			callback: function (r) {
+				if (!r.exc) {
 					me.options.data = r.message;
-					if (me.options.data=='empty') {
+					if (me.options.data == "empty") {
 						const $parent = me.elements.funnel_wrapper;
-						$parent.html(__('No data for this period'));
+						$parent.html(__("No data for this period"));
 					} else {
 						me.render();
 					}
 				}
-			}
+			},
 		});
 	}
 
 	render() {
 		let me = this;
-		if (me.options.chart == 'sales_funnel'){
+		if (me.options.chart == "sales_funnel") {
 			me.render_funnel();
-		} else if (me.options.chart == 'opp_by_lead_source'){
+		} else if (me.options.chart == "opp_by_lead_source") {
 			me.render_chart(__("Sales Opportunities by Source"));
-		} else if (me.options.chart == 'sales_pipeline'){
+		} else if (me.options.chart == "sales_pipeline") {
 			me.render_chart(__("Sales Pipeline by Stage"));
 		}
 	}
@@ -143,12 +158,12 @@
 			y = 0,
 			y_old = 0.0;
 
-		if(this.options.total_value === 0) {
+		if (this.options.total_value === 0) {
 			this.elements.no_data.toggle(true);
 			return;
 		}
 
-		this.options.data.forEach(function(d) {
+		this.options.data.forEach(function (d) {
 			context.fillStyle = d.color;
 			context.strokeStyle = d.color;
 			me.draw_triangle(x_start, x_mid, x_end, y, me.options.height);
@@ -175,21 +190,22 @@
 		this.elements.no_data.toggle(false);
 
 		// calculate width and height options
-		this.options.width = $(this.elements.funnel_wrapper).width() * 2.0 / 3.0;
+		this.options.width = ($(this.elements.funnel_wrapper).width() * 2.0) / 3.0;
 		this.options.height = (Math.sqrt(3) * this.options.width) / 2.0;
 
 		// calculate total weightage
 		// as height decreases, area decreases by the square of the reduction
 		// hence, compensating by squaring the index value
-		this.options.total_weightage = this.options.data.reduce(
-			function(prev, curr, i) { return prev + Math.pow(i+1, 2) * curr.value; }, 0.0);
+		this.options.total_weightage = this.options.data.reduce(function (prev, curr, i) {
+			return prev + Math.pow(i + 1, 2) * curr.value;
+		}, 0.0);
 
 		// calculate height for each data
-		$.each(this.options.data, function(i, d) {
-			d.height = me.options.height * d.value * Math.pow(i+1, 2) / me.options.total_weightage;
+		$.each(this.options.data, function (i, d) {
+			d.height = (me.options.height * d.value * Math.pow(i + 1, 2)) / me.options.total_weightage;
 		});
 
-		this.elements.canvas = $('<canvas></canvas>')
+		this.elements.canvas = $("<canvas></canvas>")
 			.appendTo(this.elements.funnel_wrapper.empty())
 			.attr("width", $(this.elements.funnel_wrapper).width())
 			.attr("height", this.options.height);
@@ -211,7 +227,7 @@
 	draw_legend(x_mid, y_mid, width, height, title) {
 		var context = this.elements.context;
 
-		if(y_mid == 0) {
+		if (y_mid == 0) {
 			y_mid = 7;
 		}
 
@@ -246,13 +262,13 @@
 			title: title,
 			height: 400,
 			data: chart_data,
-			type: 'bar',
+			type: "bar",
 			barOptions: {
-				stacked: 1
+				stacked: 1,
 			},
 			tooltipOptions: {
-				formatTooltipY: d => format_currency(d, currency),
-			}
+				formatTooltipY: (d) => format_currency(d, currency),
+			},
 		});
 	}
 };
diff --git a/erpnext/selling/report/address_and_contacts/address_and_contacts.js b/erpnext/selling/report/address_and_contacts/address_and_contacts.js
index f81d1c1..c19ed7d 100644
--- a/erpnext/selling/report/address_and_contacts/address_and_contacts.js
+++ b/erpnext/selling/report/address_and_contacts/address_and_contacts.js
@@ -1,34 +1,33 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Address And Contacts"] = {
-	"filters": [
+	filters: [
 		{
-			"reqd": 1,
-			"fieldname":"party_type",
-			"label": __("Party Type"),
-			"fieldtype": "Link",
-			"options": "DocType",
-			"get_query": function() {
+			reqd: 1,
+			fieldname: "party_type",
+			label: __("Party Type"),
+			fieldtype: "Link",
+			options: "DocType",
+			get_query: function () {
 				return {
-					"filters": {
-						"name": ["in","Customer,Supplier,Sales Partner,Lead"],
-					}
-				}
-			}
+					filters: {
+						name: ["in", "Customer,Supplier,Sales Partner,Lead"],
+					},
+				};
+			},
 		},
 		{
-			"fieldname":"party_name",
-			"label": __("Party Name"),
-			"fieldtype": "Dynamic Link",
-			"get_options": function() {
-				let party_type = frappe.query_report.get_filter_value('party_type');
-				if(!party_type) {
+			fieldname: "party_name",
+			label: __("Party Name"),
+			fieldtype: "Dynamic Link",
+			get_options: function () {
+				let party_type = frappe.query_report.get_filter_value("party_type");
+				if (!party_type) {
 					frappe.throw(__("Please select Party Type first"));
 				}
 				return party_type;
-			}
-		}
-	]
-}
+			},
+		},
+	],
+};
diff --git a/erpnext/selling/report/available_stock_for_packing_items/available_stock_for_packing_items.js b/erpnext/selling/report/available_stock_for_packing_items/available_stock_for_packing_items.js
index 1e83acd..a9ee0cb 100644
--- a/erpnext/selling/report/available_stock_for_packing_items/available_stock_for_packing_items.js
+++ b/erpnext/selling/report/available_stock_for_packing_items/available_stock_for_packing_items.js
@@ -2,7 +2,5 @@
 // For license information, please see license.txt
 
 frappe.query_reports["Available Stock for Packing Items"] = {
-	"filters": [
-
-	]
-}
+	filters: [],
+};
diff --git a/erpnext/selling/report/customer_acquisition_and_loyalty/customer_acquisition_and_loyalty.js b/erpnext/selling/report/customer_acquisition_and_loyalty/customer_acquisition_and_loyalty.js
index 744b5d9..745550b 100644
--- a/erpnext/selling/report/customer_acquisition_and_loyalty/customer_acquisition_and_loyalty.js
+++ b/erpnext/selling/report/customer_acquisition_and_loyalty/customer_acquisition_and_loyalty.js
@@ -2,43 +2,43 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.query_reports["Customer Acquisition and Loyalty"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname": "view_type",
-			"label": __("View Type"),
-			"fieldtype": "Select",
-			"options": ["Monthly", "Territory Wise"],
-			"default": "Monthly",
-			"reqd": 1
+			fieldname: "view_type",
+			label: __("View Type"),
+			fieldtype: "Select",
+			options: ["Monthly", "Territory Wise"],
+			default: "Monthly",
+			reqd: 1,
 		},
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company"),
-			"reqd": 1
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
+			reqd: 1,
 		},
 		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
-			"reqd": 1
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
+			reqd: 1,
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
-			"reqd": 1
-		}
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
+			reqd: 1,
+		},
 	],
-	'formatter': function(value, row, column, data, default_formatter) {
+	formatter: function (value, row, column, data, default_formatter) {
 		value = default_formatter(value, row, column, data);
 		if (data && data.bold) {
 			value = value.bold();
 		}
 		return value;
-	}
-}
+	},
+};
diff --git a/erpnext/selling/report/customer_credit_balance/customer_credit_balance.js b/erpnext/selling/report/customer_credit_balance/customer_credit_balance.js
index 3a99eb0..9902abe 100644
--- a/erpnext/selling/report/customer_credit_balance/customer_credit_balance.js
+++ b/erpnext/selling/report/customer_credit_balance/customer_credit_balance.js
@@ -2,20 +2,20 @@
 // For license information, please see license.txt
 
 frappe.query_reports["Customer Credit Balance"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"reqd": 1,
-			"default": frappe.defaults.get_user_default("Company")
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			reqd: 1,
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
-			"fieldname":"customer",
-			"label": __("Customer"),
-			"fieldtype": "Link",
-			"options": "Customer"
-		}
-	]
-}
+			fieldname: "customer",
+			label: __("Customer"),
+			fieldtype: "Link",
+			options: "Customer",
+		},
+	],
+};
diff --git a/erpnext/selling/report/customer_wise_item_price/customer_wise_item_price.js b/erpnext/selling/report/customer_wise_item_price/customer_wise_item_price.js
index 2aac343..02c7125 100644
--- a/erpnext/selling/report/customer_wise_item_price/customer_wise_item_price.js
+++ b/erpnext/selling/report/customer_wise_item_price/customer_wise_item_price.js
@@ -1,27 +1,26 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Customer-wise Item Price"] = {
-	"filters": [
+	filters: [
 		{
-			"label": __("Customer"),
-			"fieldname": "customer",
-			"fieldtype": "Link",
-			"options": "Customer",
-			"reqd": 1
+			label: __("Customer"),
+			fieldname: "customer",
+			fieldtype: "Link",
+			options: "Customer",
+			reqd: 1,
 		},
 		{
-			"label": __("Item"),
-			"fieldname": "item",
-			"fieldtype": "Link",
-			"options": "Item",
-			"get_query": () => {
+			label: __("Item"),
+			fieldname: "item",
+			fieldtype: "Link",
+			options: "Item",
+			get_query: () => {
 				return {
 					query: "erpnext.controllers.queries.item_query",
-					filters: { 'is_sales_item': 1 }
-				}
-			}
-		}
-	]
-}
+					filters: { is_sales_item: 1 },
+				};
+			},
+		},
+	],
+};
diff --git a/erpnext/selling/report/inactive_customers/inactive_customers.js b/erpnext/selling/report/inactive_customers/inactive_customers.js
index 804d17e..a191d56 100644
--- a/erpnext/selling/report/inactive_customers/inactive_customers.js
+++ b/erpnext/selling/report/inactive_customers/inactive_customers.js
@@ -2,19 +2,19 @@
 // For license information, please see license.txt
 
 frappe.query_reports["Inactive Customers"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"days_since_last_order",
-			"label": __("Days Since Last Order"),
-			"fieldtype": "Int",
-			"default": 60
+			fieldname: "days_since_last_order",
+			label: __("Days Since Last Order"),
+			fieldtype: "Int",
+			default: 60,
 		},
 		{
-			"fieldname":"doctype",
-			"label": __("Doctype"),
-			"fieldtype": "Select",
-			"default": "Sales Order",
-			"options": "Sales Order\nSales Invoice"
-		}
-	]
-}
+			fieldname: "doctype",
+			label: __("Doctype"),
+			fieldtype: "Select",
+			default: "Sales Order",
+			options: "Sales Order\nSales Invoice",
+		},
+	],
+};
diff --git a/erpnext/selling/report/item_wise_sales_history/item_wise_sales_history.js b/erpnext/selling/report/item_wise_sales_history/item_wise_sales_history.js
index f63d02e..2b4b8e7 100644
--- a/erpnext/selling/report/item_wise_sales_history/item_wise_sales_history.js
+++ b/erpnext/selling/report/item_wise_sales_history/item_wise_sales_history.js
@@ -1,57 +1,56 @@
 // Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Item-wise Sales History"] = {
-	"filters": [
+	filters: [
 		{
-			fieldname:"company",
+			fieldname: "company",
 			label: __("Company"),
 			fieldtype: "Link",
 			options: "Company",
 			default: frappe.defaults.get_user_default("Company"),
-			reqd: 1
+			reqd: 1,
 		},
 		{
-			fieldname:"from_date",
+			fieldname: "from_date",
 			reqd: 1,
 			label: __("From Date"),
 			fieldtype: "Date",
 			default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
 		},
 		{
-			fieldname:"to_date",
+			fieldname: "to_date",
 			reqd: 1,
 			default: frappe.datetime.get_today(),
 			label: __("To Date"),
 			fieldtype: "Date",
 		},
 		{
-			fieldname:"item_group",
+			fieldname: "item_group",
 			label: __("Item Group"),
 			fieldtype: "Link",
-			options: "Item Group"
+			options: "Item Group",
 		},
 		{
-			fieldname:"item_code",
+			fieldname: "item_code",
 			label: __("Item"),
 			fieldtype: "Link",
 			options: "Item",
 			get_query: () => {
 				return {
-					query: "erpnext.controllers.queries.item_query"
-				}
-			}
+					query: "erpnext.controllers.queries.item_query",
+				};
+			},
 		},
 		{
-			fieldname:"customer",
+			fieldname: "customer",
 			label: __("Customer"),
 			fieldtype: "Link",
-			options: "Customer"
-		}
+			options: "Customer",
+		},
 	],
 
-	"formatter": function (value, row, column, data, default_formatter) {
+	formatter: function (value, row, column, data, default_formatter) {
 		value = default_formatter(value, row, column, data);
 		let format_fields = ["delivered_quantity", "billed_amount"];
 
@@ -59,5 +58,5 @@
 			value = "<span style='color:green;'>" + value + "</span>";
 		}
 		return value;
-	}
+	},
 };
diff --git a/erpnext/selling/report/payment_terms_status_for_sales_order/payment_terms_status_for_sales_order.js b/erpnext/selling/report/payment_terms_status_for_sales_order/payment_terms_status_for_sales_order.js
index 0203a05..99ef5e4 100644
--- a/erpnext/selling/report/payment_terms_status_for_sales_order/payment_terms_status_for_sales_order.js
+++ b/erpnext/selling/report/payment_terms_status_for_sales_order/payment_terms_status_for_sales_order.js
@@ -1,144 +1,138 @@
 // Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 function get_filters() {
 	let filters = [
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company"),
-			"reqd": 1
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
+			reqd: 1,
 		},
 		{
-			"fieldname":"period_start_date",
-			"label": __("Start Date"),
-			"fieldtype": "Date",
-			"reqd": 1,
-			"default": frappe.datetime.add_months(frappe.datetime.get_today(), -1)
+			fieldname: "period_start_date",
+			label: __("Start Date"),
+			fieldtype: "Date",
+			reqd: 1,
+			default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
 		},
 		{
-			"fieldname":"period_end_date",
-			"label": __("End Date"),
-			"fieldtype": "Date",
-			"reqd": 1,
-			"default": frappe.datetime.get_today()
+			fieldname: "period_end_date",
+			label: __("End Date"),
+			fieldtype: "Date",
+			reqd: 1,
+			default: frappe.datetime.get_today(),
 		},
 		{
-			"fieldname":"customer_group",
-			"label": __("Customer Group"),
-			"fieldtype": "Link",
-			"width": 100,
-			"options": "Customer Group",
+			fieldname: "customer_group",
+			label: __("Customer Group"),
+			fieldtype: "Link",
+			width: 100,
+			options: "Customer Group",
 		},
 		{
-			"fieldname":"customer",
-			"label": __("Customer"),
-			"fieldtype": "Link",
-			"width": 100,
-			"options": "Customer",
-			"get_query": () => {
-				var customer_group = frappe.query_report.get_filter_value('customer_group');
-				return{
-					"query": "erpnext.selling.report.payment_terms_status_for_sales_order.payment_terms_status_for_sales_order.get_customers_or_items",
-					"filters": [
-						['Customer', 'disabled', '=', '0'],
-						['Customer Group','name', '=', customer_group]
-					]
-				}
-			}
+			fieldname: "customer",
+			label: __("Customer"),
+			fieldtype: "Link",
+			width: 100,
+			options: "Customer",
+			get_query: () => {
+				var customer_group = frappe.query_report.get_filter_value("customer_group");
+				return {
+					query: "erpnext.selling.report.payment_terms_status_for_sales_order.payment_terms_status_for_sales_order.get_customers_or_items",
+					filters: [
+						["Customer", "disabled", "=", "0"],
+						["Customer Group", "name", "=", customer_group],
+					],
+				};
+			},
 		},
 		{
-			"fieldname":"item_group",
-			"label": __("Item Group"),
-			"fieldtype": "Link",
-			"width": 100,
-			"options": "Item Group",
-
+			fieldname: "item_group",
+			label: __("Item Group"),
+			fieldtype: "Link",
+			width: 100,
+			options: "Item Group",
 		},
 		{
-			"fieldname":"item",
-			"label": __("Item"),
-			"fieldtype": "Link",
-			"width": 100,
-			"options": "Item",
-			"get_query": () => {
-				var item_group = frappe.query_report.get_filter_value('item_group');
-				return{
-					"query": "erpnext.selling.report.payment_terms_status_for_sales_order.payment_terms_status_for_sales_order.get_customers_or_items",
-					"filters": [
-						['Item', 'disabled', '=', '0'],
-						['Item Group','name', '=', item_group]
-					]
-				}
-			}
+			fieldname: "item",
+			label: __("Item"),
+			fieldtype: "Link",
+			width: 100,
+			options: "Item",
+			get_query: () => {
+				var item_group = frappe.query_report.get_filter_value("item_group");
+				return {
+					query: "erpnext.selling.report.payment_terms_status_for_sales_order.payment_terms_status_for_sales_order.get_customers_or_items",
+					filters: [
+						["Item", "disabled", "=", "0"],
+						["Item Group", "name", "=", item_group],
+					],
+				};
+			},
 		},
 		{
-			"fieldname":"from_due_date",
-			"label": __("From Due Date"),
-			"fieldtype": "Date",
+			fieldname: "from_due_date",
+			label: __("From Due Date"),
+			fieldtype: "Date",
 		},
 		{
-			"fieldname":"to_due_date",
-			"label": __("To Due Date"),
-			"fieldtype": "Date",
+			fieldname: "to_due_date",
+			label: __("To Due Date"),
+			fieldtype: "Date",
 		},
 		{
-			"fieldname":"status",
-			"label": __("Status"),
-			"fieldtype": "MultiSelectList",
-			"width": 100,
-			get_data: function(txt) {
-				let status = ["Overdue", "Unpaid", "Completed", "Partly Paid"]
-				let options = []
-				for (let option of status){
+			fieldname: "status",
+			label: __("Status"),
+			fieldtype: "MultiSelectList",
+			width: 100,
+			get_data: function (txt) {
+				let status = ["Overdue", "Unpaid", "Completed", "Partly Paid"];
+				let options = [];
+				for (let option of status) {
 					options.push({
-						"value": option,
-						"label": __(option),
-						"description": ""
-					})
+						value: option,
+						label: __(option),
+						description: "",
+					});
 				}
-				return options
-			}
+				return options;
+			},
 		},
 		{
-			"fieldname":"only_immediate_upcoming_term",
-			"label": __("Show only the Immediate Upcoming Term"),
-			"fieldtype": "Check",
+			fieldname: "only_immediate_upcoming_term",
+			label: __("Show only the Immediate Upcoming Term"),
+			fieldtype: "Check",
 		},
-	]
+	];
 	return filters;
 }
 
 frappe.query_reports["Payment Terms Status for Sales Order"] = {
-	"filters": get_filters(),
-	"formatter": function(value, row, column, data, default_formatter){
-		if(column.fieldname == 'invoices' && value) {
-			let invoices = value.split(',');
+	filters: get_filters(),
+	formatter: function (value, row, column, data, default_formatter) {
+		if (column.fieldname == "invoices" && value) {
+			let invoices = value.split(",");
 			const invoice_formatter = (prev_value, curr_value) => {
-				if(prev_value != "") {
+				if (prev_value != "") {
 					return prev_value + ", " + default_formatter(curr_value, row, column, data);
-				}
-				else {
+				} else {
 					return default_formatter(curr_value, row, column, data);
 				}
-			}
-			return invoices.reduce(invoice_formatter, "")
-		}
-		else if (column.fieldname == 'paid_amount' && value){
+			};
+			return invoices.reduce(invoice_formatter, "");
+		} else if (column.fieldname == "paid_amount" && value) {
 			let formatted_value = default_formatter(value, row, column, data);
-			if(value > 0) {
-				formatted_value = "<span style='color:green;'>" + formatted_value + "</span>"
+			if (value > 0) {
+				formatted_value = "<span style='color:green;'>" + formatted_value + "</span>";
 			}
 			return formatted_value;
-		}
-		else if (column.fieldname == 'status' && value == 'Completed'){
+		} else if (column.fieldname == "status" && value == "Completed") {
 			return "<span style='color:green;'>" + default_formatter(value, row, column, data) + "</span>";
 		}
 
 		return default_formatter(value, row, column, data);
 	},
-
 };
diff --git a/erpnext/selling/report/pending_so_items_for_purchase_request/pending_so_items_for_purchase_request.js b/erpnext/selling/report/pending_so_items_for_purchase_request/pending_so_items_for_purchase_request.js
index 2042059..76d04b0 100644
--- a/erpnext/selling/report/pending_so_items_for_purchase_request/pending_so_items_for_purchase_request.js
+++ b/erpnext/selling/report/pending_so_items_for_purchase_request/pending_so_items_for_purchase_request.js
@@ -1,6 +1,4 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
-frappe.query_reports["Pending SO Items For Purchase Request"] = {
-}
+frappe.query_reports["Pending SO Items For Purchase Request"] = {};
diff --git a/erpnext/selling/report/quotation_trends/quotation_trends.js b/erpnext/selling/report/quotation_trends/quotation_trends.js
index 97a1931..8ffeda4 100644
--- a/erpnext/selling/report/quotation_trends/quotation_trends.js
+++ b/erpnext/selling/report/quotation_trends/quotation_trends.js
@@ -1,8 +1,8 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.require("assets/erpnext/js/sales_trends_filters.js", function() {
+frappe.require("assets/erpnext/js/sales_trends_filters.js", function () {
 	frappe.query_reports["Quotation Trends"] = {
-		filters: erpnext.get_sales_trends_filters()
-	}
+		filters: erpnext.get_sales_trends_filters(),
+	};
 });
diff --git a/erpnext/selling/report/sales_analytics/sales_analytics.js b/erpnext/selling/report/sales_analytics/sales_analytics.js
index abe4f01..a01103a 100644
--- a/erpnext/selling/report/sales_analytics/sales_analytics.js
+++ b/erpnext/selling/report/sales_analytics/sales_analytics.js
@@ -1,49 +1,56 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Sales Analytics"] = {
-	"filters": [
+	filters: [
 		{
 			fieldname: "tree_type",
 			label: __("Tree Type"),
 			fieldtype: "Select",
-			options: ["Customer Group", "Customer", "Item Group", "Item", "Territory", "Order Type", "Project"],
+			options: [
+				"Customer Group",
+				"Customer",
+				"Item Group",
+				"Item",
+				"Territory",
+				"Order Type",
+				"Project",
+			],
 			default: "Customer",
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			fieldname: "doc_type",
 			label: __("based_on"),
 			fieldtype: "Select",
-			options: ["Sales Order","Delivery Note","Sales Invoice"],
+			options: ["Sales Order", "Delivery Note", "Sales Invoice"],
 			default: "Sales Invoice",
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			fieldname: "value_quantity",
 			label: __("Value Or Qty"),
 			fieldtype: "Select",
 			options: [
-				{ "value": "Value", "label": __("Value") },
-				{ "value": "Quantity", "label": __("Quantity") },
+				{ value: "Value", label: __("Value") },
+				{ value: "Quantity", label: __("Quantity") },
 			],
 			default: "Value",
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			fieldname: "from_date",
 			label: __("From Date"),
 			fieldtype: "Date",
 			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
-			reqd: 1
+			reqd: 1,
 		},
 		{
-			fieldname:"to_date",
+			fieldname: "to_date",
 			label: __("To Date"),
 			fieldtype: "Date",
 			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			fieldname: "company",
@@ -51,21 +58,21 @@
 			fieldtype: "Link",
 			options: "Company",
 			default: frappe.defaults.get_user_default("Company"),
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			fieldname: "range",
 			label: __("Range"),
 			fieldtype: "Select",
 			options: [
-				{ "value": "Weekly", "label": __("Weekly") },
-				{ "value": "Monthly", "label": __("Monthly") },
-				{ "value": "Quarterly", "label": __("Quarterly") },
-				{ "value": "Yearly", "label": __("Yearly") }
+				{ value: "Weekly", label: __("Weekly") },
+				{ value: "Monthly", label: __("Monthly") },
+				{ value: "Quarterly", label: __("Quarterly") },
+				{ value: "Yearly", label: __("Yearly") },
 			],
 			default: "Monthly",
-			reqd: 1
-		}
+			reqd: 1,
+		},
 	],
 	get_datatable_options(options) {
 		return Object.assign(options, {
@@ -73,32 +80,26 @@
 			events: {
 				onCheckRow: function (data) {
 					if (!data) return;
-					const data_doctype = $(
-						data[2].html
-					)[0].attributes.getNamedItem("data-doctype").value;
+					const data_doctype = $(data[2].html)[0].attributes.getNamedItem("data-doctype").value;
 					const tree_type = frappe.query_report.filters[0].value;
 					if (data_doctype != tree_type) return;
 
 					const row_name = data[2].content;
 					const raw_data = frappe.query_report.chart.data;
 					const new_datasets = raw_data.datasets;
-					const element_found = new_datasets.some(
-						(element, index, array) => {
-							if (element.name == row_name) {
-								array.splice(index, 1);
-								return true;
-							}
-							return false;
+					const element_found = new_datasets.some((element, index, array) => {
+						if (element.name == row_name) {
+							array.splice(index, 1);
+							return true;
 						}
-					);
+						return false;
+					});
 					const slice_at = { Customer: 4, Item: 5 }[tree_type] || 3;
 
 					if (!element_found) {
 						new_datasets.push({
 							name: row_name,
-							values: data
-								.slice(slice_at, data.length - 1)
-								.map(column => column.content),
+							values: data.slice(slice_at, data.length - 1).map((column) => column.content),
 						});
 					}
 
@@ -106,7 +107,9 @@
 						labels: raw_data.labels,
 						datasets: new_datasets,
 					};
-					const new_options = Object.assign({}, frappe.query_report.chart_options, {data: new_data});
+					const new_options = Object.assign({}, frappe.query_report.chart_options, {
+						data: new_data,
+					});
 					frappe.query_report.render_chart(new_options);
 
 					frappe.query_report.raw_chart_data = new_data;
diff --git a/erpnext/selling/report/sales_order_analysis/sales_order_analysis.js b/erpnext/selling/report/sales_order_analysis/sales_order_analysis.js
index fc685e0..2b6e143 100644
--- a/erpnext/selling/report/sales_order_analysis/sales_order_analysis.js
+++ b/erpnext/selling/report/sales_order_analysis/sales_order_analysis.js
@@ -1,82 +1,81 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Sales Order Analysis"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname": "company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"width": "80",
-			"options": "Company",
-			"reqd": 1,
-			"default": frappe.defaults.get_default("company")
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			width: "80",
+			options: "Company",
+			reqd: 1,
+			default: frappe.defaults.get_default("company"),
 		},
 		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"width": "80",
-			"reqd": 1,
-			"default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			width: "80",
+			reqd: 1,
+			default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"width": "80",
-			"reqd": 1,
-			"default": frappe.datetime.get_today()
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			width: "80",
+			reqd: 1,
+			default: frappe.datetime.get_today(),
 		},
 		{
-			"fieldname": "sales_order",
-			"label": __("Sales Order"),
-			"fieldtype": "MultiSelectList",
-			"width": "80",
-			"options": "Sales Order",
-			"get_data": function(txt) {
+			fieldname: "sales_order",
+			label: __("Sales Order"),
+			fieldtype: "MultiSelectList",
+			width: "80",
+			options: "Sales Order",
+			get_data: function (txt) {
 				return frappe.db.get_link_options("Sales Order", txt);
 			},
-			"get_query": () =>{
+			get_query: () => {
 				return {
-					filters: { "docstatus": 1 }
-				}
-			}
+					filters: { docstatus: 1 },
+				};
+			},
 		},
 		{
-			"fieldname": "warehouse",
-			"label": __("Warehouse"),
-			"fieldtype": "Link",
-			"options": "Warehouse"
+			fieldname: "warehouse",
+			label: __("Warehouse"),
+			fieldtype: "Link",
+			options: "Warehouse",
 		},
 		{
-			"fieldname": "status",
-			"label": __("Status"),
-			"fieldtype": "MultiSelectList",
-			"width": "80",
-			get_data: function(txt) {
-				let status = ["To Pay", "To Bill", "To Deliver", "To Deliver and Bill", "Completed"]
-				let options = []
-				for (let option of status){
+			fieldname: "status",
+			label: __("Status"),
+			fieldtype: "MultiSelectList",
+			width: "80",
+			get_data: function (txt) {
+				let status = ["To Pay", "To Bill", "To Deliver", "To Deliver and Bill", "Completed"];
+				let options = [];
+				for (let option of status) {
 					options.push({
-						"value": option,
-						"label": __(option),
-						"description": ""
-					})
+						value: option,
+						label: __(option),
+						description: "",
+					});
 				}
-				return options
-			}
+				return options;
+			},
 		},
 		{
-			"fieldname": "group_by_so",
-			"label": __("Group by Sales Order"),
-			"fieldtype": "Check",
-			"default": 0
-		}
+			fieldname: "group_by_so",
+			label: __("Group by Sales Order"),
+			fieldtype: "Check",
+			default: 0,
+		},
 	],
 
-	"formatter": function (value, row, column, data, default_formatter) {
+	formatter: function (value, row, column, data, default_formatter) {
 		value = default_formatter(value, row, column, data);
 		let format_fields = ["delivered_qty", "billed_amount"];
 
@@ -88,5 +87,5 @@
 			value = "<span style='color:red;'>" + value + "</span>";
 		}
 		return value;
-	}
+	},
 };
diff --git a/erpnext/selling/report/sales_order_trends/sales_order_trends.js b/erpnext/selling/report/sales_order_trends/sales_order_trends.js
index b22ea8f..fe38804 100644
--- a/erpnext/selling/report/sales_order_trends/sales_order_trends.js
+++ b/erpnext/selling/report/sales_order_trends/sales_order_trends.js
@@ -1,8 +1,8 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.require("assets/erpnext/js/sales_trends_filters.js", function() {
+frappe.require("assets/erpnext/js/sales_trends_filters.js", function () {
 	frappe.query_reports["Sales Order Trends"] = {
-		filters: erpnext.get_sales_trends_filters()
-	}
+		filters: erpnext.get_sales_trends_filters(),
+	};
 });
diff --git a/erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.js b/erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.js
index f08780a..4a1ebab 100644
--- a/erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.js
+++ b/erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.js
@@ -1,22 +1,20 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Sales Partner Commission Summary"] = {
-	"filters": [
-
+	filters: [
 		{
 			fieldname: "sales_partner",
 			label: __("Sales Partner"),
 			fieldtype: "Link",
-			options: "Sales Partner"
+			options: "Sales Partner",
 		},
 		{
 			fieldname: "doctype",
 			label: __("Document Type"),
 			fieldtype: "Select",
 			options: "Sales Order\nDelivery Note\nSales Invoice",
-			default: "Sales Order"
+			default: "Sales Order",
 		},
 		{
 			fieldname: "from_date",
@@ -25,30 +23,29 @@
 			default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
 		},
 		{
-			fieldname:"to_date",
+			fieldname: "to_date",
 			label: __("To Date"),
 			fieldtype: "Date",
-			default: frappe.datetime.get_today()
+			default: frappe.datetime.get_today(),
 		},
 		{
-			fieldname:"company",
+			fieldname: "company",
 			label: __("Company"),
 			fieldtype: "Link",
 			options: "Company",
-			default: frappe.defaults.get_user_default("Company")
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
-			fieldname:"customer",
+			fieldname: "customer",
 			label: __("Customer"),
 			fieldtype: "Link",
 			options: "Customer",
 		},
 		{
-			fieldname:"territory",
+			fieldname: "territory",
 			label: __("Territory"),
 			fieldtype: "Link",
 			options: "Territory",
 		},
-
-	]
-}
+	],
+};
diff --git a/erpnext/selling/report/sales_partner_target_variance_based_on_item_group/sales_partner_target_variance_based_on_item_group.js b/erpnext/selling/report/sales_partner_target_variance_based_on_item_group/sales_partner_target_variance_based_on_item_group.js
index 93aad54..6809b38 100644
--- a/erpnext/selling/report/sales_partner_target_variance_based_on_item_group/sales_partner_target_variance_based_on_item_group.js
+++ b/erpnext/selling/report/sales_partner_target_variance_based_on_item_group/sales_partner_target_variance_based_on_item_group.js
@@ -1,63 +1,60 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Sales Partner Target Variance based on Item Group"] = {
-	"filters": [
+	filters: [
 		{
-			fieldname:"company",
+			fieldname: "company",
 			label: __("Company"),
 			fieldtype: "Link",
 			options: "Company",
-			default: frappe.defaults.get_user_default("Company")
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
 			fieldname: "fiscal_year",
 			label: __("Fiscal Year"),
 			fieldtype: "Link",
 			options: "Fiscal Year",
-			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today())
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
 		},
 		{
 			fieldname: "doctype",
 			label: __("Document Type"),
 			fieldtype: "Select",
 			options: "Sales Order\nDelivery Note\nSales Invoice",
-			default: "Sales Order"
+			default: "Sales Order",
 		},
 		{
 			fieldname: "period",
 			label: __("Period"),
 			fieldtype: "Select",
 			options: [
-				{ "value": "Monthly", "label": __("Monthly") },
-				{ "value": "Quarterly", "label": __("Quarterly") },
-				{ "value": "Half-Yearly", "label": __("Half-Yearly") },
-				{ "value": "Yearly", "label": __("Yearly") }
+				{ value: "Monthly", label: __("Monthly") },
+				{ value: "Quarterly", label: __("Quarterly") },
+				{ value: "Half-Yearly", label: __("Half-Yearly") },
+				{ value: "Yearly", label: __("Yearly") },
 			],
-			default: "Monthly"
+			default: "Monthly",
 		},
 		{
 			fieldname: "target_on",
 			label: __("Target On"),
 			fieldtype: "Select",
 			options: "Quantity\nAmount",
-			default: "Quantity"
+			default: "Quantity",
 		},
 	],
-	"formatter": function (value, row, column, data, default_formatter) {
+	formatter: function (value, row, column, data, default_formatter) {
 		value = default_formatter(value, row, column, data);
 
-		if (column.fieldname.includes('variance')) {
-
+		if (column.fieldname.includes("variance")) {
 			if (data[column.fieldname] < 0) {
 				value = "<span style='color:red'>" + value + "</span>";
-			}
-			else if (data[column.fieldname] > 0) {
+			} else if (data[column.fieldname] > 0) {
 				value = "<span style='color:green'>" + value + "</span>";
 			}
 		}
 
 		return value;
-	}
-}
+	},
+};
diff --git a/erpnext/selling/report/sales_partner_transaction_summary/sales_partner_transaction_summary.js b/erpnext/selling/report/sales_partner_transaction_summary/sales_partner_transaction_summary.js
index e443ab3..b7bca8a 100644
--- a/erpnext/selling/report/sales_partner_transaction_summary/sales_partner_transaction_summary.js
+++ b/erpnext/selling/report/sales_partner_transaction_summary/sales_partner_transaction_summary.js
@@ -1,21 +1,20 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Sales Partner Transaction Summary"] = {
-	"filters": [
+	filters: [
 		{
 			fieldname: "sales_partner",
 			label: __("Sales Partner"),
 			fieldtype: "Link",
-			options: "Sales Partner"
+			options: "Sales Partner",
 		},
 		{
 			fieldname: "doctype",
 			label: __("Document Type"),
 			fieldtype: "Select",
 			options: "Sales Order\nDelivery Note\nSales Invoice",
-			default: "Sales Order"
+			default: "Sales Order",
 		},
 		{
 			fieldname: "from_date",
@@ -24,48 +23,48 @@
 			default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
 		},
 		{
-			fieldname:"to_date",
+			fieldname: "to_date",
 			label: __("To Date"),
 			fieldtype: "Date",
-			default: frappe.datetime.get_today()
+			default: frappe.datetime.get_today(),
 		},
 		{
-			fieldname:"company",
+			fieldname: "company",
 			label: __("Company"),
 			fieldtype: "Link",
 			options: "Company",
 			default: frappe.defaults.get_user_default("Company"),
-			reqd: 1
+			reqd: 1,
 		},
 		{
-			fieldname:"item_group",
+			fieldname: "item_group",
 			label: __("Item Group"),
 			fieldtype: "Link",
 			options: "Item Group",
 		},
 		{
-			fieldname:"brand",
+			fieldname: "brand",
 			label: __("Brand"),
 			fieldtype: "Link",
 			options: "Brand",
 		},
 		{
-			fieldname:"customer",
+			fieldname: "customer",
 			label: __("Customer"),
 			fieldtype: "Link",
 			options: "Customer",
 		},
 		{
-			fieldname:"territory",
+			fieldname: "territory",
 			label: __("Territory"),
 			fieldtype: "Link",
 			options: "Territory",
 		},
 		{
-			fieldname:"show_return_entries",
+			fieldname: "show_return_entries",
 			label: __("Show Return Entries"),
 			fieldtype: "Check",
 			default: 0,
 		},
-	]
-}
+	],
+};
diff --git a/erpnext/selling/report/sales_person_commission_summary/sales_person_commission_summary.js b/erpnext/selling/report/sales_person_commission_summary/sales_person_commission_summary.js
index 9ed0b00..b197a9a 100644
--- a/erpnext/selling/report/sales_person_commission_summary/sales_person_commission_summary.js
+++ b/erpnext/selling/report/sales_person_commission_summary/sales_person_commission_summary.js
@@ -1,22 +1,20 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Sales Person Commission Summary"] = {
-	"filters": [
-
+	filters: [
 		{
 			fieldname: "sales_person",
 			label: __("Sales Person"),
 			fieldtype: "Link",
-			options: "Sales Person"
+			options: "Sales Person",
 		},
 		{
 			fieldname: "doc_type",
 			label: __("Document Type"),
 			fieldtype: "Select",
 			options: "Sales Order\nDelivery Note\nSales Invoice",
-			default: "Sales Order"
+			default: "Sales Order",
 		},
 		{
 			fieldname: "from_date",
@@ -25,30 +23,29 @@
 			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
 		},
 		{
-			fieldname:"to_date",
+			fieldname: "to_date",
 			label: __("To Date"),
 			fieldtype: "Date",
-			default: frappe.datetime.get_today()
+			default: frappe.datetime.get_today(),
 		},
 		{
-			fieldname:"company",
+			fieldname: "company",
 			label: __("Company"),
 			fieldtype: "Link",
 			options: "Company",
-			default: frappe.defaults.get_user_default("Company")
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
-			fieldname:"customer",
+			fieldname: "customer",
 			label: __("Customer"),
 			fieldtype: "Link",
 			options: "Customer",
 		},
 		{
-			fieldname:"territory",
+			fieldname: "territory",
 			label: __("Territory"),
 			fieldtype: "Link",
 			options: "Territory",
 		},
-
-	]
-}
+	],
+};
diff --git a/erpnext/selling/report/sales_person_target_variance_based_on_item_group/sales_person_target_variance_based_on_item_group.js b/erpnext/selling/report/sales_person_target_variance_based_on_item_group/sales_person_target_variance_based_on_item_group.js
index 8ee86dc..f9e8cc6 100644
--- a/erpnext/selling/report/sales_person_target_variance_based_on_item_group/sales_person_target_variance_based_on_item_group.js
+++ b/erpnext/selling/report/sales_person_target_variance_based_on_item_group/sales_person_target_variance_based_on_item_group.js
@@ -1,15 +1,14 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Sales Person Target Variance Based On Item Group"] = {
-	"filters": [
+	filters: [
 		{
-			fieldname:"company",
+			fieldname: "company",
 			label: __("Company"),
 			fieldtype: "Link",
 			options: "Company",
-			default: frappe.defaults.get_user_default("Company")
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
 			fieldname: "fiscal_year",
@@ -23,41 +22,39 @@
 			label: __("Document Type"),
 			fieldtype: "Select",
 			options: "Sales Order\nDelivery Note\nSales Invoice",
-			default: "Sales Order"
+			default: "Sales Order",
 		},
 		{
 			fieldname: "period",
 			label: __("Period"),
 			fieldtype: "Select",
 			options: [
-				{ "value": "Monthly", "label": __("Monthly") },
-				{ "value": "Quarterly", "label": __("Quarterly") },
-				{ "value": "Half-Yearly", "label": __("Half-Yearly") },
-				{ "value": "Yearly", "label": __("Yearly") }
+				{ value: "Monthly", label: __("Monthly") },
+				{ value: "Quarterly", label: __("Quarterly") },
+				{ value: "Half-Yearly", label: __("Half-Yearly") },
+				{ value: "Yearly", label: __("Yearly") },
 			],
-			default: "Monthly"
+			default: "Monthly",
 		},
 		{
 			fieldname: "target_on",
 			label: __("Target On"),
 			fieldtype: "Select",
 			options: "Quantity\nAmount",
-			default: "Quantity"
+			default: "Quantity",
 		},
 	],
-	"formatter": function (value, row, column, data, default_formatter) {
+	formatter: function (value, row, column, data, default_formatter) {
 		value = default_formatter(value, row, column, data);
 
-		if (column.fieldname.includes('variance')) {
-
+		if (column.fieldname.includes("variance")) {
 			if (data[column.fieldname] < 0) {
 				value = "<span style='color:red'>" + value + "</span>";
-			}
-			else if (data[column.fieldname] > 0) {
+			} else if (data[column.fieldname] > 0) {
 				value = "<span style='color:green'>" + value + "</span>";
 			}
 		}
 
 		return value;
-	}
-}
+	},
+};
diff --git a/erpnext/selling/report/sales_person_wise_transaction_summary/sales_person_wise_transaction_summary.js b/erpnext/selling/report/sales_person_wise_transaction_summary/sales_person_wise_transaction_summary.js
index 80c7b5f..828e9e7 100644
--- a/erpnext/selling/report/sales_person_wise_transaction_summary/sales_person_wise_transaction_summary.js
+++ b/erpnext/selling/report/sales_person_wise_transaction_summary/sales_person_wise_transaction_summary.js
@@ -2,19 +2,19 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.query_reports["Sales Person-wise Transaction Summary"] = {
-	"filters": [
+	filters: [
 		{
 			fieldname: "sales_person",
 			label: __("Sales Person"),
 			fieldtype: "Link",
-			options: "Sales Person"
+			options: "Sales Person",
 		},
 		{
 			fieldname: "doc_type",
 			label: __("Document Type"),
 			fieldtype: "Select",
 			options: "Sales Order\nDelivery Note\nSales Invoice",
-			default: "Sales Order"
+			default: "Sales Order",
 		},
 		{
 			fieldname: "from_date",
@@ -23,48 +23,48 @@
 			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
 		},
 		{
-			fieldname:"to_date",
+			fieldname: "to_date",
 			label: __("To Date"),
 			fieldtype: "Date",
-			default: frappe.datetime.get_today()
+			default: frappe.datetime.get_today(),
 		},
 		{
-			fieldname:"company",
+			fieldname: "company",
 			label: __("Company"),
 			fieldtype: "Link",
 			options: "Company",
 			default: frappe.defaults.get_user_default("Company"),
-			reqd: 1
+			reqd: 1,
 		},
 		{
-			fieldname:"item_group",
+			fieldname: "item_group",
 			label: __("Item Group"),
 			fieldtype: "Link",
 			options: "Item Group",
 		},
 		{
-			fieldname:"brand",
+			fieldname: "brand",
 			label: __("Brand"),
 			fieldtype: "Link",
 			options: "Brand",
 		},
 		{
-			fieldname:"customer",
+			fieldname: "customer",
 			label: __("Customer"),
 			fieldtype: "Link",
 			options: "Customer",
 		},
 		{
-			fieldname:"territory",
+			fieldname: "territory",
 			label: __("Territory"),
 			fieldtype: "Link",
 			options: "Territory",
 		},
 		{
-			fieldname:"show_return_entries",
+			fieldname: "show_return_entries",
 			label: __("Show Return Entries"),
 			fieldtype: "Check",
 			default: 0,
 		},
-	]
-}
+	],
+};
diff --git a/erpnext/selling/report/territory_target_variance_based_on_item_group/territory_target_variance_based_on_item_group.js b/erpnext/selling/report/territory_target_variance_based_on_item_group/territory_target_variance_based_on_item_group.js
index 50ac4da..a9e3432 100644
--- a/erpnext/selling/report/territory_target_variance_based_on_item_group/territory_target_variance_based_on_item_group.js
+++ b/erpnext/selling/report/territory_target_variance_based_on_item_group/territory_target_variance_based_on_item_group.js
@@ -1,63 +1,60 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Territory Target Variance Based On Item Group"] = {
-	"filters": [
+	filters: [
 		{
-			fieldname:"company",
+			fieldname: "company",
 			label: __("Company"),
 			fieldtype: "Link",
 			options: "Company",
-			default: frappe.defaults.get_user_default("Company")
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
 			fieldname: "fiscal_year",
 			label: __("Fiscal Year"),
 			fieldtype: "Link",
 			options: "Fiscal Year",
-			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today())
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
 		},
 		{
 			fieldname: "doctype",
 			label: __("Document Type"),
 			fieldtype: "Select",
 			options: "Sales Order\nDelivery Note\nSales Invoice",
-			default: "Sales Order"
+			default: "Sales Order",
 		},
 		{
 			fieldname: "period",
 			label: __("Period"),
 			fieldtype: "Select",
 			options: [
-				{ "value": "Monthly", "label": __("Monthly") },
-				{ "value": "Quarterly", "label": __("Quarterly") },
-				{ "value": "Half-Yearly", "label": __("Half-Yearly") },
-				{ "value": "Yearly", "label": __("Yearly") }
+				{ value: "Monthly", label: __("Monthly") },
+				{ value: "Quarterly", label: __("Quarterly") },
+				{ value: "Half-Yearly", label: __("Half-Yearly") },
+				{ value: "Yearly", label: __("Yearly") },
 			],
-			default: "Monthly"
+			default: "Monthly",
 		},
 		{
 			fieldname: "target_on",
 			label: __("Target On"),
 			fieldtype: "Select",
 			options: "Quantity\nAmount",
-			default: "Quantity"
+			default: "Quantity",
 		},
 	],
-	"formatter": function (value, row, column, data, default_formatter) {
+	formatter: function (value, row, column, data, default_formatter) {
 		value = default_formatter(value, row, column, data);
 
-		if (column.fieldname.includes('variance')) {
-
+		if (column.fieldname.includes("variance")) {
 			if (data[column.fieldname] < 0) {
 				value = "<span style='color:red'>" + value + "</span>";
-			}
-			else if (data[column.fieldname] > 0) {
+			} else if (data[column.fieldname] > 0) {
 				value = "<span style='color:green'>" + value + "</span>";
 			}
 		}
 
 		return value;
-	}
-}
+	},
+};
diff --git a/erpnext/selling/report/territory_wise_sales/territory_wise_sales.js b/erpnext/selling/report/territory_wise_sales/territory_wise_sales.js
index c755a75..409b7c7 100644
--- a/erpnext/selling/report/territory_wise_sales/territory_wise_sales.js
+++ b/erpnext/selling/report/territory_wise_sales/territory_wise_sales.js
@@ -1,22 +1,23 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
-
 frappe.query_reports["Territory-wise Sales"] = {
-	"breadcrumb":"Selling",
-	"filters": [
+	breadcrumb: "Selling",
+	filters: [
 		{
-			fieldname:"transaction_date",
+			fieldname: "transaction_date",
 			label: __("Transaction Date"),
 			fieldtype: "DateRange",
-			default: [frappe.datetime.add_months(frappe.datetime.get_today(),-1), frappe.datetime.get_today()],
+			default: [
+				frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+				frappe.datetime.get_today(),
+			],
 		},
 		{
 			fieldname: "company",
 			label: __("Company"),
 			fieldtype: "Link",
 			options: "Company",
-		}
-	]
+		},
+	],
 };
diff --git a/erpnext/setup/doctype/authorization_rule/authorization_rule.js b/erpnext/setup/doctype/authorization_rule/authorization_rule.js
index f00ed3e..0004119 100644
--- a/erpnext/setup/doctype/authorization_rule/authorization_rule.js
+++ b/erpnext/setup/doctype/authorization_rule/authorization_rule.js
@@ -2,17 +2,17 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.ui.form.on("Authorization Rule", {
-	refresh: function(frm) {
+	refresh: function (frm) {
 		frm.events.set_master_type(frm);
 	},
-	set_master_type: function(frm) {
-		if(frm.doc.based_on==="Customerwise Discount") {
+	set_master_type: function (frm) {
+		if (frm.doc.based_on === "Customerwise Discount") {
 			unhide_field("master_name");
 			frm.set_value("customer_or_item", "Customer");
-		} else if(frm.doc.based_on==="Itemwise Discount") {
+		} else if (frm.doc.based_on === "Itemwise Discount") {
 			unhide_field("master_name");
 			frm.set_value("customer_or_item", "Item");
-		} else if(frm.doc.based_on==="Item Group wise Discount") {
+		} else if (frm.doc.based_on === "Item Group wise Discount") {
 			unhide_field("master_name");
 			frm.set_value("customer_or_item", "Item Group");
 		} else {
@@ -21,84 +21,74 @@
 			hide_field("master_name");
 		}
 	},
-	based_on: function(frm) {
+	based_on: function (frm) {
 		frm.events.set_master_type(frm);
-		if (frm.doc.based_on === 'Not Applicable') {
+		if (frm.doc.based_on === "Not Applicable") {
 			frm.set_value("value", 0);
-			hide_field('value');
+			hide_field("value");
 		} else {
-			unhide_field('value');
+			unhide_field("value");
 		}
 	},
-	transaction: function(frm) {
-		unhide_field(['system_role', 'system_user', 'value', 'based_on']);
-		hide_field(['to_emp', 'to_designation']);
-	}
-})
-
+	transaction: function (frm) {
+		unhide_field(["system_role", "system_user", "value", "based_on"]);
+		hide_field(["to_emp", "to_designation"]);
+	},
+});
 
 // Settings Module
-cur_frm.cscript.refresh = function(doc, cdt, cdn) {
-	if (doc.based_on == 'Not Applicable')
-		hide_field('value');
-	else
-		unhide_field('value');
+cur_frm.cscript.refresh = function (doc, cdt, cdn) {
+	if (doc.based_on == "Not Applicable") hide_field("value");
+	else unhide_field("value");
 
-	unhide_field(['system_role', 'system_user', 'value']);
-	hide_field(['to_emp', 'to_designation']);
-}
+	unhide_field(["system_role", "system_user", "value"]);
+	hide_field(["to_emp", "to_designation"]);
+};
 
-cur_frm.fields_dict.system_user.get_query = function(doc, cdt, cdn) {
-	return { query:"frappe.core.doctype.user.user.user_query" }
-}
+cur_frm.fields_dict.system_user.get_query = function (doc, cdt, cdn) {
+	return { query: "frappe.core.doctype.user.user.user_query" };
+};
 
-cur_frm.fields_dict.approving_user.get_query = function(doc, cdt, cdn) {
-	return { query:"frappe.core.doctype.user.user.user_query" }
-}
+cur_frm.fields_dict.approving_user.get_query = function (doc, cdt, cdn) {
+	return { query: "frappe.core.doctype.user.user.user_query" };
+};
 
-cur_frm.fields_dict['approving_role'].get_query = cur_frm.fields_dict['system_role'].get_query;
+cur_frm.fields_dict["approving_role"].get_query = cur_frm.fields_dict["system_role"].get_query;
 
 // System Role Trigger
 // -----------------------
-cur_frm.fields_dict['system_role'].get_query = function(doc) {
+cur_frm.fields_dict["system_role"].get_query = function (doc) {
 	return {
-		filters:[
-			['Role', 'name', 'not in', 'Administrator, Guest, All']
-		]
-	}
-}
-
+		filters: [["Role", "name", "not in", "Administrator, Guest, All"]],
+	};
+};
 
 // Master Name Trigger
 // --------------------
-cur_frm.fields_dict['master_name'].get_query = function(doc) {
-	if (doc.based_on == 'Customerwise Discount')
+cur_frm.fields_dict["master_name"].get_query = function (doc) {
+	if (doc.based_on == "Customerwise Discount")
 		return {
 			doctype: "Customer",
-			filters:[
-				['Customer', 'docstatus', '!=', 2]
-			]
-		}
-	else if (doc.based_on == 'Itemwise Discount')
+			filters: [["Customer", "docstatus", "!=", 2]],
+		};
+	else if (doc.based_on == "Itemwise Discount")
 		return {
 			doctype: "Item",
-			query: "erpnext.controllers.queries.item_query"
-		}
-	else if (doc.based_on==="Item Group wise Discount")
+			query: "erpnext.controllers.queries.item_query",
+		};
+	else if (doc.based_on === "Item Group wise Discount")
 		return {
 			doctype: "Item Group",
 			filters: {
-				"is_group": 0
-			}
-		}
+				is_group: 0,
+			},
+		};
 	else
 		return {
-			filters: [
-				['Item', 'name', '=', 'cheating done to avoid null']
-			]
-		}
-}
+			filters: [["Item", "name", "=", "cheating done to avoid null"]],
+		};
+};
 
-cur_frm.fields_dict.to_emp.get_query = function(doc, cdt, cdn) {
-	return { query: "erpnext.controllers.queries.employee_query" }
-}
+cur_frm.fields_dict.to_emp.get_query = function (doc, cdt, cdn) {
+	return { query: "erpnext.controllers.queries.employee_query" };
+};
diff --git a/erpnext/setup/doctype/branch/branch.js b/erpnext/setup/doctype/branch/branch.js
index c8a0afc..6e17c78 100644
--- a/erpnext/setup/doctype/branch/branch.js
+++ b/erpnext/setup/doctype/branch/branch.js
@@ -1,8 +1,6 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Branch', {
-	refresh: function(frm) {
-
-	}
+frappe.ui.form.on("Branch", {
+	refresh: function (frm) {},
 });
diff --git a/erpnext/setup/doctype/brand/brand.js b/erpnext/setup/doctype/brand/brand.js
index 0abb71a..5d16d73 100644
--- a/erpnext/setup/doctype/brand/brand.js
+++ b/erpnext/setup/doctype/brand/brand.js
@@ -1,71 +1,99 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.ui.form.on('Brand', {
+frappe.ui.form.on("Brand", {
 	setup: (frm) => {
-        frm.fields_dict["brand_defaults"].grid.get_field("default_warehouse").get_query = function(doc, cdt, cdn) {
+		frm.fields_dict["brand_defaults"].grid.get_field("default_warehouse").get_query = function (
+			doc,
+			cdt,
+			cdn
+		) {
 			const row = locals[cdt][cdn];
 			return {
-				filters: { company: row.company }
-			}
-		}
-
-        frm.fields_dict["brand_defaults"].grid.get_field("default_discount_account").get_query = function(doc, cdt, cdn) {
-			const row = locals[cdt][cdn];
-			return {
-				filters: {
-					'report_type': 'Profit and Loss',
-					'company': row.company,
-					"is_group": 0
-				}
+				filters: { company: row.company },
 			};
-		}
+		};
 
-        frm.fields_dict["brand_defaults"].grid.get_field("buying_cost_center").get_query = function(doc, cdt, cdn) {
+		frm.fields_dict["brand_defaults"].grid.get_field("default_discount_account").get_query = function (
+			doc,
+			cdt,
+			cdn
+		) {
 			const row = locals[cdt][cdn];
 			return {
 				filters: {
-					"is_group": 0,
-					"company": row.company
-				}
-			}
-		}
+					report_type: "Profit and Loss",
+					company: row.company,
+					is_group: 0,
+				},
+			};
+		};
 
-        frm.fields_dict["brand_defaults"].grid.get_field("expense_account").get_query = function(doc, cdt, cdn) {
+		frm.fields_dict["brand_defaults"].grid.get_field("buying_cost_center").get_query = function (
+			doc,
+			cdt,
+			cdn
+		) {
+			const row = locals[cdt][cdn];
+			return {
+				filters: {
+					is_group: 0,
+					company: row.company,
+				},
+			};
+		};
+
+		frm.fields_dict["brand_defaults"].grid.get_field("expense_account").get_query = function (
+			doc,
+			cdt,
+			cdn
+		) {
 			const row = locals[cdt][cdn];
 			return {
 				query: "erpnext.controllers.queries.get_expense_account",
-				filters: { company: row.company }
-			}
-		}
-
-        frm.fields_dict["brand_defaults"].grid.get_field("default_provisional_account").get_query = function(doc, cdt, cdn) {
-			const row = locals[cdt][cdn];
-			return {
-				filters: {
-					"company": row.company,
-					"root_type": ["in", ["Liability", "Asset"]],
-					"is_group": 0
-				}
+				filters: { company: row.company },
 			};
-		}
+		};
 
-        frm.fields_dict["brand_defaults"].grid.get_field("selling_cost_center").get_query = function(doc, cdt, cdn) {
+		frm.fields_dict["brand_defaults"].grid.get_field("default_provisional_account").get_query = function (
+			doc,
+			cdt,
+			cdn
+		) {
 			const row = locals[cdt][cdn];
 			return {
 				filters: {
-					"is_group": 0,
-					"company": row.company
-				}
-			}
-		}
+					company: row.company,
+					root_type: ["in", ["Liability", "Asset"]],
+					is_group: 0,
+				},
+			};
+		};
 
-        frm.fields_dict["brand_defaults"].grid.get_field("income_account").get_query = function(doc, cdt, cdn) {
+		frm.fields_dict["brand_defaults"].grid.get_field("selling_cost_center").get_query = function (
+			doc,
+			cdt,
+			cdn
+		) {
+			const row = locals[cdt][cdn];
+			return {
+				filters: {
+					is_group: 0,
+					company: row.company,
+				},
+			};
+		};
+
+		frm.fields_dict["brand_defaults"].grid.get_field("income_account").get_query = function (
+			doc,
+			cdt,
+			cdn
+		) {
 			const row = locals[cdt][cdn];
 			return {
 				query: "erpnext.controllers.queries.get_income_account",
-				filters: { company: row.company }
-			}
-		}
-	}
-});
\ No newline at end of file
+				filters: { company: row.company },
+			};
+		};
+	},
+});
diff --git a/erpnext/setup/doctype/company/company.js b/erpnext/setup/doctype/company/company.js
index 340a917..3917005 100644
--- a/erpnext/setup/doctype/company/company.js
+++ b/erpnext/setup/doctype/company/company.js
@@ -4,119 +4,146 @@
 frappe.provide("erpnext.company");
 
 frappe.ui.form.on("Company", {
-	onload: function(frm) {
+	onload: function (frm) {
 		if (frm.doc.__islocal && frm.doc.parent_company) {
-			frappe.db.get_value('Company', frm.doc.parent_company, 'is_group', (r) => {
+			frappe.db.get_value("Company", frm.doc.parent_company, "is_group", (r) => {
 				if (!r.is_group) {
-					frm.set_value('parent_company', '');
+					frm.set_value("parent_company", "");
 				}
 			});
 		}
 
-		frm.call('check_if_transactions_exist').then(r => {
-			frm.toggle_enable("default_currency", (!r.message));
+		frm.call("check_if_transactions_exist").then((r) => {
+			frm.toggle_enable("default_currency", !r.message);
 		});
 	},
-	setup: function(frm) {
+	setup: function (frm) {
 		frm.__rename_queue = "long";
 		erpnext.company.setup_queries(frm);
 
-		frm.set_query("parent_company", function() {
+		frm.set_query("parent_company", function () {
 			return {
-				filters: {"is_group": 1}
-			}
+				filters: { is_group: 1 },
+			};
 		});
 
-		frm.set_query("default_selling_terms", function() {
+		frm.set_query("default_selling_terms", function () {
 			return { filters: { selling: 1 } };
 		});
 
-		frm.set_query("default_buying_terms", function() {
+		frm.set_query("default_buying_terms", function () {
 			return { filters: { buying: 1 } };
 		});
 
-		frm.set_query("default_in_transit_warehouse", function() {
+		frm.set_query("default_in_transit_warehouse", function () {
 			return {
-				filters:{
-					'warehouse_type' : 'Transit',
-					'is_group': 0,
-					'company': frm.doc.company_name
-				}
+				filters: {
+					warehouse_type: "Transit",
+					is_group: 0,
+					company: frm.doc.company_name,
+				},
 			};
 		});
 	},
 
-	company_name: function(frm) {
-		if(frm.doc.__islocal) {
+	company_name: function (frm) {
+		if (frm.doc.__islocal) {
 			// add missing " " arg in split method
 			let parts = frm.doc.company_name.split(" ");
 			let abbr = $.map(parts, function (p) {
-				return p? p.substr(0, 1) : null;
+				return p ? p.substr(0, 1) : null;
 			}).join("");
 			frm.set_value("abbr", abbr);
 		}
 	},
 
-	parent_company: function(frm) {
+	parent_company: function (frm) {
 		var bool = frm.doc.parent_company ? true : false;
-		frm.set_value('create_chart_of_accounts_based_on', bool ? "Existing Company" : "");
-		frm.set_value('existing_company', bool ? frm.doc.parent_company : "");
+		frm.set_value("create_chart_of_accounts_based_on", bool ? "Existing Company" : "");
+		frm.set_value("existing_company", bool ? frm.doc.parent_company : "");
 		disbale_coa_fields(frm, bool);
 	},
 
-	date_of_commencement: function(frm) {
-		if(frm.doc.date_of_commencement<frm.doc.date_of_incorporation)
-		{
+	date_of_commencement: function (frm) {
+		if (frm.doc.date_of_commencement < frm.doc.date_of_incorporation) {
 			frappe.throw(__("Date of Commencement should be greater than Date of Incorporation"));
 		}
-		if(!frm.doc.date_of_commencement){
-			frm.doc.date_of_incorporation = ""
+		if (!frm.doc.date_of_commencement) {
+			frm.doc.date_of_incorporation = "";
 		}
 	},
 
-	refresh: function(frm) {
-		frm.toggle_display('address_html', !frm.is_new());
+	refresh: function (frm) {
+		frm.toggle_display("address_html", !frm.is_new());
 
 		if (!frm.is_new()) {
 			frm.doc.abbr && frm.set_df_property("abbr", "read_only", 1);
 			disbale_coa_fields(frm);
 			frappe.contacts.render_address_and_contact(frm);
 
-			if (frappe.perm.has_perm("Cost Center", 0, 'read')) {
-				frm.add_custom_button(__('Cost Centers'), function() {
-					frappe.set_route('Tree', 'Cost Center', {'company': frm.doc.name});
-				}, __("View"));
+			if (frappe.perm.has_perm("Cost Center", 0, "read")) {
+				frm.add_custom_button(
+					__("Cost Centers"),
+					function () {
+						frappe.set_route("Tree", "Cost Center", { company: frm.doc.name });
+					},
+					__("View")
+				);
 			}
 
-			if (frappe.perm.has_perm("Account", 0, 'read')) {
-				frm.add_custom_button(__('Chart of Accounts'), function() {
-					frappe.set_route('Tree', 'Account', {'company': frm.doc.name});
-				}, __("View"));
+			if (frappe.perm.has_perm("Account", 0, "read")) {
+				frm.add_custom_button(
+					__("Chart of Accounts"),
+					function () {
+						frappe.set_route("Tree", "Account", { company: frm.doc.name });
+					},
+					__("View")
+				);
 			}
 
-			if (frappe.perm.has_perm("Sales Taxes and Charges Template", 0, 'read')) {
-				frm.add_custom_button(__('Sales Tax Template'), function() {
-					frappe.set_route('List', 'Sales Taxes and Charges Template', {'company': frm.doc.name});
-				}, __("View"));
+			if (frappe.perm.has_perm("Sales Taxes and Charges Template", 0, "read")) {
+				frm.add_custom_button(
+					__("Sales Tax Template"),
+					function () {
+						frappe.set_route("List", "Sales Taxes and Charges Template", {
+							company: frm.doc.name,
+						});
+					},
+					__("View")
+				);
 			}
 
-			if (frappe.perm.has_perm("Purchase Taxes and Charges Template", 0, 'read')) {
-				frm.add_custom_button(__('Purchase Tax Template'), function() {
-					frappe.set_route('List', 'Purchase Taxes and Charges Template', {'company': frm.doc.name});
-				}, __("View"));
+			if (frappe.perm.has_perm("Purchase Taxes and Charges Template", 0, "read")) {
+				frm.add_custom_button(
+					__("Purchase Tax Template"),
+					function () {
+						frappe.set_route("List", "Purchase Taxes and Charges Template", {
+							company: frm.doc.name,
+						});
+					},
+					__("View")
+				);
 			}
 
-			if (frm.has_perm('write')) {
-				frm.add_custom_button(__('Create Tax Template'), function() {
-					frm.trigger("make_default_tax_template");
-				}, __('Manage'));
+			if (frm.has_perm("write")) {
+				frm.add_custom_button(
+					__("Create Tax Template"),
+					function () {
+						frm.trigger("make_default_tax_template");
+					},
+					__("Manage")
+				);
 			}
 
-			if (frappe.user.has_role('System Manager')) {
-				if (frm.has_perm('write')) {
-					frm.add_custom_button(__('Delete Transactions'), function() {
-						frm.trigger("delete_company_transactions");
-					}, __('Manage'));
+			if (frappe.user.has_role("System Manager")) {
+				if (frm.has_perm("write")) {
+					frm.add_custom_button(
+						__("Delete Transactions"),
+						function () {
+							frm.trigger("delete_company_transactions");
+						},
+						__("Manage")
+					);
 				}
 			}
 		}
@@ -124,157 +151,168 @@
 		erpnext.company.set_chart_of_accounts_options(frm.doc);
 	},
 
-	make_default_tax_template: function(frm) {
+	make_default_tax_template: function (frm) {
 		frm.call({
 			method: "create_default_tax_template",
 			doc: frm.doc,
 			freeze: true,
-			callback: function() {
+			callback: function () {
 				frappe.msgprint(__("Default tax templates for sales, purchase and items are created."));
-			}
-		})
+			},
+		});
 	},
 
-	country: function(frm) {
+	country: function (frm) {
 		erpnext.company.set_chart_of_accounts_options(frm.doc);
 	},
 
-	delete_company_transactions: function(frm) {
+	delete_company_transactions: function (frm) {
 		frappe.call({
 			method: "erpnext.setup.doctype.company.company.is_deletion_job_running",
 			args: {
-				company: frm.doc.name
+				company: frm.doc.name,
 			},
 			freeze: true,
-			callback: function(r) {
-				if(!r.exc) {
-					frappe.verify_password(function() {
-						var d = frappe.prompt({
-							fieldtype:"Data",
-							fieldname: "company_name",
-							label: __("Please enter the company name to confirm"),
-							reqd: 1,
-							description: __("Please make sure you really want to delete all the transactions for this company. Your master data will remain as it is. This action cannot be undone.")
-						},
-								      function(data) {
-									      if(data.company_name !== frm.doc.name) {
-										      frappe.msgprint(__("Company name not same"));
-										      return;
-									      }
-									      frappe.call({
-										      method: "erpnext.setup.doctype.company.company.create_transaction_deletion_request",
-										      args: {
-											      company: data.company_name
-										      },
-										      freeze: true,
-										      callback: function(r, rt) { },
-										      onerror: function() {
-											      frappe.msgprint(__("Wrong Password"));
-										      }
-									      });
-								      },
-								      __("Delete all the Transactions for this Company"), __("Delete")
-								     );
+			callback: function (r) {
+				if (!r.exc) {
+					frappe.verify_password(function () {
+						var d = frappe.prompt(
+							{
+								fieldtype: "Data",
+								fieldname: "company_name",
+								label: __("Please enter the company name to confirm"),
+								reqd: 1,
+								description: __(
+									"Please make sure you really want to delete all the transactions for this company. Your master data will remain as it is. This action cannot be undone."
+								),
+							},
+							function (data) {
+								if (data.company_name !== frm.doc.name) {
+									frappe.msgprint(__("Company name not same"));
+									return;
+								}
+								frappe.call({
+									method: "erpnext.setup.doctype.company.company.create_transaction_deletion_request",
+									args: {
+										company: data.company_name,
+									},
+									freeze: true,
+									callback: function (r, rt) {},
+									onerror: function () {
+										frappe.msgprint(__("Wrong Password"));
+									},
+								});
+							},
+							__("Delete all the Transactions for this Company"),
+							__("Delete")
+						);
 						d.get_primary_btn().addClass("btn-danger");
 					});
 				}
-
 			},
 		});
-
-	}
+	},
 });
 
-
-erpnext.company.set_chart_of_accounts_options = function(doc) {
+erpnext.company.set_chart_of_accounts_options = function (doc) {
 	var selected_value = doc.chart_of_accounts;
-	if(doc.country) {
+	if (doc.country) {
 		return frappe.call({
 			method: "erpnext.accounts.doctype.account.chart_of_accounts.chart_of_accounts.get_charts_for_country",
 			args: {
-				"country": doc.country,
-				"with_standard": true
+				country: doc.country,
+				with_standard: true,
 			},
-			callback: function(r) {
-				if(!r.exc) {
+			callback: function (r) {
+				if (!r.exc) {
 					set_field_options("chart_of_accounts", [""].concat(r.message).join("\n"));
-					if(in_list(r.message, selected_value))
+					if (in_list(r.message, selected_value))
 						cur_frm.set_value("chart_of_accounts", selected_value);
 				}
-			}
-		})
-	}
-}
-
-erpnext.company.setup_queries = function(frm) {
-	$.each([
-		["default_bank_account", {"account_type": "Bank"}],
-		["default_cash_account", {"account_type": "Cash"}],
-		["default_receivable_account", { "root_type": "Asset", "account_type": "Receivable" }],
-		["default_payable_account", { "root_type": "Liability", "account_type": "Payable" }],
-		["default_expense_account", {"root_type": "Expense"}],
-		["default_income_account", {"root_type": "Income"}],
-		["round_off_account", {"root_type": "Expense"}],
-		["write_off_account", {"root_type": "Expense"}],
-		["default_deferred_expense_account", {}],
-		["default_deferred_revenue_account", {}],
-		["default_discount_account", {}],
-		["discount_allowed_account", {"root_type": "Expense"}],
-		["discount_received_account", {"root_type": "Income"}],
-		["exchange_gain_loss_account", {"root_type": ["in", ["Expense", "Income"]]}],
-		["unrealized_exchange_gain_loss_account", {"root_type": ["in", ["Expense", "Income"]]}],
-		["accumulated_depreciation_account",
-			{"root_type": "Asset", "account_type": "Accumulated Depreciation"}],
-		["depreciation_expense_account", {"root_type": "Expense", "account_type": "Depreciation"}],
-		["disposal_account", {"report_type": "Profit and Loss"}],
-		["default_inventory_account", {"account_type": "Stock"}],
-		["cost_center", {}],
-		["round_off_cost_center", {}],
-		["depreciation_cost_center", {}],
-		["capital_work_in_progress_account", {"account_type": "Capital Work in Progress"}],
-		["asset_received_but_not_billed", {"account_type": "Asset Received But Not Billed"}],
-		["unrealized_profit_loss_account", {"root_type": ["in", ["Liability", "Asset"]]}],
-		["default_provisional_account", {"root_type": ["in", ["Liability", "Asset"]]}],
-		["default_advance_received_account", {"root_type": "Liability", "account_type": "Receivable"}],
-		["default_advance_paid_account", {"root_type": "Asset", "account_type": "Payable"}],
-	], function(i, v) {
-		erpnext.company.set_custom_query(frm, v);
-	});
-
-	if (frm.doc.enable_perpetual_inventory) {
-		$.each([
-			["stock_adjustment_account",
-				{"root_type": "Expense", "account_type": "Stock Adjustment"}],
-			["stock_received_but_not_billed",
-				{"root_type": "Liability", "account_type": "Stock Received But Not Billed"}],
-			["service_received_but_not_billed",
-				{"root_type": "Liability", "account_type": "Service Received But Not Billed"}],
-
-		], function(i, v) {
-			erpnext.company.set_custom_query(frm, v);
+			},
 		});
 	}
-}
+};
 
-erpnext.company.set_custom_query = function(frm, v) {
+erpnext.company.setup_queries = function (frm) {
+	$.each(
+		[
+			["default_bank_account", { account_type: "Bank" }],
+			["default_cash_account", { account_type: "Cash" }],
+			["default_receivable_account", { root_type: "Asset", account_type: "Receivable" }],
+			["default_payable_account", { root_type: "Liability", account_type: "Payable" }],
+			["default_expense_account", { root_type: "Expense" }],
+			["default_income_account", { root_type: "Income" }],
+			["round_off_account", { root_type: "Expense" }],
+			["write_off_account", { root_type: "Expense" }],
+			["default_deferred_expense_account", {}],
+			["default_deferred_revenue_account", {}],
+			["default_discount_account", {}],
+			["discount_allowed_account", { root_type: "Expense" }],
+			["discount_received_account", { root_type: "Income" }],
+			["exchange_gain_loss_account", { root_type: ["in", ["Expense", "Income"]] }],
+			["unrealized_exchange_gain_loss_account", { root_type: ["in", ["Expense", "Income"]] }],
+			[
+				"accumulated_depreciation_account",
+				{ root_type: "Asset", account_type: "Accumulated Depreciation" },
+			],
+			["depreciation_expense_account", { root_type: "Expense", account_type: "Depreciation" }],
+			["disposal_account", { report_type: "Profit and Loss" }],
+			["default_inventory_account", { account_type: "Stock" }],
+			["cost_center", {}],
+			["round_off_cost_center", {}],
+			["depreciation_cost_center", {}],
+			["capital_work_in_progress_account", { account_type: "Capital Work in Progress" }],
+			["asset_received_but_not_billed", { account_type: "Asset Received But Not Billed" }],
+			["unrealized_profit_loss_account", { root_type: ["in", ["Liability", "Asset"]] }],
+			["default_provisional_account", { root_type: ["in", ["Liability", "Asset"]] }],
+			["default_advance_received_account", { root_type: "Liability", account_type: "Receivable" }],
+			["default_advance_paid_account", { root_type: "Asset", account_type: "Payable" }],
+		],
+		function (i, v) {
+			erpnext.company.set_custom_query(frm, v);
+		}
+	);
+
+	if (frm.doc.enable_perpetual_inventory) {
+		$.each(
+			[
+				["stock_adjustment_account", { root_type: "Expense", account_type: "Stock Adjustment" }],
+				[
+					"stock_received_but_not_billed",
+					{ root_type: "Liability", account_type: "Stock Received But Not Billed" },
+				],
+				[
+					"service_received_but_not_billed",
+					{ root_type: "Liability", account_type: "Service Received But Not Billed" },
+				],
+			],
+			function (i, v) {
+				erpnext.company.set_custom_query(frm, v);
+			}
+		);
+	}
+};
+
+erpnext.company.set_custom_query = function (frm, v) {
 	var filters = {
-		"company": frm.doc.name,
-		"is_group": 0
+		company: frm.doc.name,
+		is_group: 0,
 	};
 
 	for (var key in v[1]) {
 		filters[key] = v[1][key];
 	}
 
-	frm.set_query(v[0], function() {
+	frm.set_query(v[0], function () {
 		return {
-			filters: filters
-		}
+			filters: filters,
+		};
 	});
-}
+};
 
-var disbale_coa_fields = function(frm, bool=true) {
+var disbale_coa_fields = function (frm, bool = true) {
 	frm.set_df_property("create_chart_of_accounts_based_on", "read_only", bool);
 	frm.set_df_property("chart_of_accounts", "read_only", bool);
 	frm.set_df_property("existing_company", "read_only", bool);
-}
+};
diff --git a/erpnext/setup/doctype/company/company_list.js b/erpnext/setup/doctype/company/company_list.js
index 1d1184f..558e750 100644
--- a/erpnext/setup/doctype/company/company_list.js
+++ b/erpnext/setup/doctype/company/company_list.js
@@ -1,5 +1,5 @@
-frappe.listview_settings['Company'] = {
+frappe.listview_settings["Company"] = {
 	onload() {
-		frappe.breadcrumbs.add('Accounts');
+		frappe.breadcrumbs.add("Accounts");
 	},
 };
diff --git a/erpnext/setup/doctype/company/company_tree.js b/erpnext/setup/doctype/company/company_tree.js
index 160481c..0ee55df 100644
--- a/erpnext/setup/doctype/company/company_tree.js
+++ b/erpnext/setup/doctype/company/company_tree.js
@@ -1,18 +1,18 @@
 frappe.treeview_settings["Company"] = {
-	ignore_fields:["parent_company"],
-	get_tree_nodes: 'erpnext.setup.doctype.company.company.get_children',
-	add_tree_node: 'erpnext.setup.doctype.company.company.add_node',
+	ignore_fields: ["parent_company"],
+	get_tree_nodes: "erpnext.setup.doctype.company.company.get_children",
+	add_tree_node: "erpnext.setup.doctype.company.company.add_node",
 	filters: [
 		{
 			fieldname: "company",
-			fieldtype:"Link",
+			fieldtype: "Link",
 			options: "Company",
 			label: __("Company"),
-			get_query: function() {
+			get_query: function () {
 				return {
-					filters: [["Company", 'is_group', '=', 1]]
+					filters: [["Company", "is_group", "=", 1]],
 				};
-			}
+			},
 		},
 	],
 	breadcrumb: "Setup",
@@ -21,13 +21,13 @@
 	menu_items: [
 		{
 			label: __("New Company"),
-			action: function() {
+			action: function () {
 				frappe.new_doc("Company", true);
 			},
-			condition: 'frappe.boot.user.can_create.indexOf("Company") !== -1'
-		}
+			condition: 'frappe.boot.user.can_create.indexOf("Company") !== -1',
+		},
 	],
-	onload: function(treeview) {
+	onload: function (treeview) {
 		treeview.make_tree();
-	}
+	},
 };
diff --git a/erpnext/setup/doctype/currency_exchange/currency_exchange.js b/erpnext/setup/doctype/currency_exchange/currency_exchange.js
index 85036a1..82f0e22 100644
--- a/erpnext/setup/doctype/currency_exchange/currency_exchange.js
+++ b/erpnext/setup/doctype/currency_exchange/currency_exchange.js
@@ -2,29 +2,30 @@
 // License: GNU General Public License v3. See license.txt
 
 extend_cscript(cur_frm.cscript, {
-	onload: function() {
-		if(cur_frm.doc.__islocal) {
+	onload: function () {
+		if (cur_frm.doc.__islocal) {
 			cur_frm.set_value("to_currency", frappe.defaults.get_global_default("currency"));
 		}
 	},
 
-	refresh: function() {
+	refresh: function () {
 		cur_frm.cscript.set_exchange_rate_label();
 	},
 
-	from_currency: function() {
+	from_currency: function () {
 		cur_frm.cscript.set_exchange_rate_label();
 	},
 
-	to_currency: function() {
+	to_currency: function () {
 		cur_frm.cscript.set_exchange_rate_label();
 	},
 
-	set_exchange_rate_label: function() {
-		if(cur_frm.doc.from_currency && cur_frm.doc.to_currency) {
+	set_exchange_rate_label: function () {
+		if (cur_frm.doc.from_currency && cur_frm.doc.to_currency) {
 			var default_label = __(frappe.meta.docfield_map[cur_frm.doctype]["exchange_rate"].label);
-			cur_frm.fields_dict.exchange_rate.set_label(default_label +
-				repl(" (1 %(from_currency)s = [?] %(to_currency)s)", cur_frm.doc));
+			cur_frm.fields_dict.exchange_rate.set_label(
+				default_label + repl(" (1 %(from_currency)s = [?] %(to_currency)s)", cur_frm.doc)
+			);
 		}
-	}
+	},
 });
diff --git a/erpnext/setup/doctype/customer_group/customer_group.js b/erpnext/setup/doctype/customer_group/customer_group.js
index e352818..9d60a70 100644
--- a/erpnext/setup/doctype/customer_group/customer_group.js
+++ b/erpnext/setup/doctype/customer_group/customer_group.js
@@ -2,44 +2,44 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.ui.form.on("Customer Group", {
-	setup: function(frm){
-		frm.set_query('parent_customer_group', function (doc) {
+	setup: function (frm) {
+		frm.set_query("parent_customer_group", function (doc) {
 			return {
 				filters: {
-					'is_group': 1,
-					'name': ['!=', cur_frm.doc.customer_group_name]
-				}
-			}
+					is_group: 1,
+					name: ["!=", cur_frm.doc.customer_group_name],
+				},
+			};
 		});
 
-		frm.set_query('account', 'accounts', function (doc, cdt, cdn) {
+		frm.set_query("account", "accounts", function (doc, cdt, cdn) {
 			return {
 				filters: {
-					'root_type': 'Asset',
-					"account_type": 'Receivable',
-					"company": locals[cdt][cdn].company,
-					"is_group": 0
-				}
-			}
+					root_type: "Asset",
+					account_type: "Receivable",
+					company: locals[cdt][cdn].company,
+					is_group: 0,
+				},
+			};
 		});
 
-		frm.set_query('advance_account', 'accounts', function (doc, cdt, cdn) {
+		frm.set_query("advance_account", "accounts", function (doc, cdt, cdn) {
 			return {
 				filters: {
-					"root_type": 'Liability',
-					"account_type": "Receivable",
-					"company": locals[cdt][cdn].company,
-					"is_group": 0
-				}
-			}
+					root_type: "Liability",
+					account_type: "Receivable",
+					company: locals[cdt][cdn].company,
+					is_group: 0,
+				},
+			};
 		});
 	},
-	refresh: function(frm) {
+	refresh: function (frm) {
 		frm.trigger("set_root_readonly");
 	},
-	set_root_readonly: function(frm) {
+	set_root_readonly: function (frm) {
 		// read-only for root customer group
-		if(!frm.doc.parent_customer_group && !frm.doc.__islocal) {
+		if (!frm.doc.parent_customer_group && !frm.doc.__islocal) {
 			frm.set_read_only();
 			frm.set_intro(__("This is a root customer group and cannot be edited."));
 		} else {
diff --git a/erpnext/setup/doctype/customer_group/customer_group_tree.js b/erpnext/setup/doctype/customer_group/customer_group_tree.js
index d50e9c8..151fb2c 100644
--- a/erpnext/setup/doctype/customer_group/customer_group_tree.js
+++ b/erpnext/setup/doctype/customer_group/customer_group_tree.js
@@ -1,3 +1,3 @@
 frappe.treeview_settings["Customer Group"] = {
-	ignore_fields:["parent_customer_group"]
-}
+	ignore_fields: ["parent_customer_group"],
+};
diff --git a/erpnext/setup/doctype/department/department.js b/erpnext/setup/doctype/department/department.js
index 322eea5..d703a52 100644
--- a/erpnext/setup/doctype/department/department.js
+++ b/erpnext/setup/doctype/department/department.js
@@ -2,21 +2,21 @@
 // For license information, please see license.txt
 
 frappe.ui.form.on("Department", {
-	onload: function(frm) {
-		frm.set_query("parent_department", function() {
-			return {"filters": [["Department", "is_group", "=", 1]]};
+	onload: function (frm) {
+		frm.set_query("parent_department", function () {
+			return { filters: [["Department", "is_group", "=", 1]] };
 		});
 	},
-	refresh: function(frm) {
+	refresh: function (frm) {
 		// read-only for root department
-		if(!frm.doc.parent_department && !frm.is_new()) {
+		if (!frm.doc.parent_department && !frm.is_new()) {
 			frm.set_read_only();
 			frm.set_intro(__("This is a root department and cannot be edited."));
 		}
 	},
-	validate: function(frm) {
-		if(frm.doc.name=="All Departments") {
+	validate: function (frm) {
+		if (frm.doc.name == "All Departments") {
 			frappe.throw(__("You cannot edit root node."));
 		}
-	}
+	},
 });
diff --git a/erpnext/setup/doctype/department/department_tree.js b/erpnext/setup/doctype/department/department_tree.js
index 9c1341b..7ca70af 100644
--- a/erpnext/setup/doctype/department/department_tree.js
+++ b/erpnext/setup/doctype/department/department_tree.js
@@ -1,11 +1,11 @@
 frappe.treeview_settings["Department"] = {
-	ignore_fields:["parent_department"],
-	get_tree_nodes: 'erpnext.setup.doctype.department.department.get_children',
-	add_tree_node: 'erpnext.setup.doctype.department.department.add_node',
+	ignore_fields: ["parent_department"],
+	get_tree_nodes: "erpnext.setup.doctype.department.department.get_children",
+	add_tree_node: "erpnext.setup.doctype.department.department.add_node",
 	filters: [
 		{
 			fieldname: "company",
-			fieldtype:"Link",
+			fieldtype: "Link",
 			options: "Company",
 			label: __("Company"),
 		},
@@ -16,13 +16,13 @@
 	menu_items: [
 		{
 			label: __("New Department"),
-			action: function() {
+			action: function () {
 				frappe.new_doc("Department", true);
 			},
-			condition: 'frappe.boot.user.can_create.indexOf("Department") !== -1'
-		}
+			condition: 'frappe.boot.user.can_create.indexOf("Department") !== -1',
+		},
 	],
-	onload: function(treeview) {
+	onload: function (treeview) {
 		treeview.make_tree();
-	}
+	},
 };
diff --git a/erpnext/setup/doctype/designation/designation.js b/erpnext/setup/doctype/designation/designation.js
index 952c73f..f68a032 100644
--- a/erpnext/setup/doctype/designation/designation.js
+++ b/erpnext/setup/doctype/designation/designation.js
@@ -1,8 +1,6 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Designation', {
-	refresh: function(frm) {
-
-	}
+frappe.ui.form.on("Designation", {
+	refresh: function (frm) {},
 });
diff --git a/erpnext/setup/doctype/driver/driver.js b/erpnext/setup/doctype/driver/driver.js
index b3c24c1..0bd80ed 100644
--- a/erpnext/setup/doctype/driver/driver.js
+++ b/erpnext/setup/doctype/driver/driver.js
@@ -2,35 +2,35 @@
 // For license information, please see license.txt
 
 frappe.ui.form.on("Driver", {
-	setup: function(frm) {
-		frm.set_query("transporter", function() {
+	setup: function (frm) {
+		frm.set_query("transporter", function () {
 			return {
 				filters: {
-					is_transporter: 1
-				}
+					is_transporter: 1,
+				},
 			};
 		});
 	},
 
-	refresh: function(frm) {
-		frm.set_query("address", function() {
+	refresh: function (frm) {
+		frm.set_query("address", function () {
 			return {
 				filters: {
-					is_your_company_address: !frm.doc.transporter ? 1 : 0
-				}
+					is_your_company_address: !frm.doc.transporter ? 1 : 0,
+				},
 			};
 		});
 	},
 
-	transporter: function(frm, cdt, cdn) {
+	transporter: function (frm, cdt, cdn) {
 		// this assumes that supplier's address has same title as supplier's name
 		frappe.db
 			.get_doc("Address", null, { address_title: frm.doc.transporter })
-			.then(r => {
+			.then((r) => {
 				frappe.model.set_value(cdt, cdn, "address", r.name);
 			})
-			.catch(err => {
+			.catch((err) => {
 				console.log(err);
 			});
-	}
+	},
 });
diff --git a/erpnext/setup/doctype/email_digest/email_digest.js b/erpnext/setup/doctype/email_digest/email_digest.js
index c2c2710..c0a887e 100644
--- a/erpnext/setup/doctype/email_digest/email_digest.js
+++ b/erpnext/setup/doctype/email_digest/email_digest.js
@@ -2,30 +2,30 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.ui.form.on("Email Digest", {
-	refresh: function(frm) {
+	refresh: function (frm) {
 		if (!frm.is_new()) {
-			frm.add_custom_button(__('View Now'), function() {
+			frm.add_custom_button(__("View Now"), function () {
 				frappe.call({
-					method: 'erpnext.setup.doctype.email_digest.email_digest.get_digest_msg',
+					method: "erpnext.setup.doctype.email_digest.email_digest.get_digest_msg",
 					args: {
-						name: frm.doc.name
+						name: frm.doc.name,
 					},
-					callback: function(r) {
+					callback: function (r) {
 						let d = new frappe.ui.Dialog({
-							title: __('Email Digest: {0}', [frm.doc.name]),
-							width: 800
+							title: __("Email Digest: {0}", [frm.doc.name]),
+							width: 800,
 						});
 						$(d.body).html(r.message);
 						d.show();
-					}
+					},
 				});
 			});
 
-			frm.add_custom_button(__('Send Now'), function() {
-				return frm.call('send', null, () => {
-					frappe.show_alert({ message: __("Message Sent"), indicator: 'green'});
+			frm.add_custom_button(__("Send Now"), function () {
+				return frm.call("send", null, () => {
+					frappe.show_alert({ message: __("Message Sent"), indicator: "green" });
 				});
 			});
 		}
-	}
+	},
 });
diff --git a/erpnext/setup/doctype/employee/employee.js b/erpnext/setup/doctype/employee/employee.js
index efc3fd1..d165d42 100755
--- a/erpnext/setup/doctype/employee/employee.js
+++ b/erpnext/setup/doctype/employee/employee.js
@@ -4,14 +4,15 @@
 frappe.provide("erpnext.setup");
 erpnext.setup.EmployeeController = class EmployeeController extends frappe.ui.form.Controller {
 	setup() {
-		this.frm.fields_dict.user_id.get_query = function(doc, cdt, cdn) {
+		this.frm.fields_dict.user_id.get_query = function (doc, cdt, cdn) {
 			return {
 				query: "frappe.core.doctype.user.user.user_query",
-				filters: {ignore_user_type: 1}
-			}
-		}
-		this.frm.fields_dict.reports_to.get_query = function(doc, cdt, cdn) {
-			return { query: "erpnext.controllers.queries.employee_query"} }
+				filters: { ignore_user_type: 1 },
+			};
+		};
+		this.frm.fields_dict.reports_to.get_query = function (doc, cdt, cdn) {
+			return { query: "erpnext.controllers.queries.employee_query" };
+		};
 	}
 
 	refresh() {
@@ -20,58 +21,59 @@
 
 	salutation() {
 		if (this.frm.doc.salutation) {
-			this.frm.set_value("gender", {
-				"Mr": "Male",
-				"Ms": "Female"
-			}[this.frm.doc.salutation]);
+			this.frm.set_value(
+				"gender",
+				{
+					Mr: "Male",
+					Ms: "Female",
+				}[this.frm.doc.salutation]
+			);
 		}
 	}
-
 };
 
 frappe.ui.form.on("Employee", {
 	onload: function (frm) {
-		frm.set_query("department", function() {
+		frm.set_query("department", function () {
 			return {
-				"filters": {
-					"company": frm.doc.company,
-				}
+				filters: {
+					company: frm.doc.company,
+				},
 			};
 		});
 	},
-	prefered_contact_email: function(frm) {
+	prefered_contact_email: function (frm) {
 		frm.events.update_contact(frm);
 	},
 
-	personal_email: function(frm) {
+	personal_email: function (frm) {
 		frm.events.update_contact(frm);
 	},
 
-	company_email: function(frm) {
+	company_email: function (frm) {
 		frm.events.update_contact(frm);
 	},
 
-	user_id: function(frm) {
+	user_id: function (frm) {
 		frm.events.update_contact(frm);
 	},
 
-	update_contact: function(frm) {
-		var prefered_email_fieldname = frappe.model.scrub(frm.doc.prefered_contact_email) || 'user_id';
-		frm.set_value("prefered_email",
-			frm.fields_dict[prefered_email_fieldname].value);
+	update_contact: function (frm) {
+		var prefered_email_fieldname = frappe.model.scrub(frm.doc.prefered_contact_email) || "user_id";
+		frm.set_value("prefered_email", frm.fields_dict[prefered_email_fieldname].value);
 	},
 
-	status: function(frm) {
+	status: function (frm) {
 		return frm.call({
 			method: "deactivate_sales_person",
 			args: {
 				employee: frm.doc.employee,
-				status: frm.doc.status
-			}
+				status: frm.doc.status,
+			},
 		});
 	},
 
-	create_user: function(frm) {
+	create_user: function (frm) {
 		if (!frm.doc.prefered_email) {
 			frappe.throw(__("Please enter Preferred Contact Email"));
 		}
@@ -79,46 +81,53 @@
 			method: "erpnext.setup.doctype.employee.employee.create_user",
 			args: {
 				employee: frm.doc.name,
-				email: frm.doc.prefered_email
+				email: frm.doc.prefered_email,
 			},
 			freeze: true,
 			freeze_message: __("Creating User..."),
 			callback: function (r) {
 				frm.reload_doc();
-			}
+			},
 		});
-	}
+	},
 });
 
 cur_frm.cscript = new erpnext.setup.EmployeeController({
-	frm: cur_frm
+	frm: cur_frm,
 });
 
-
-frappe.tour['Employee'] = [
+frappe.tour["Employee"] = [
 	{
 		fieldname: "first_name",
 		title: "First Name",
-		description: __("Enter First and Last name of Employee, based on Which Full Name will be updated. IN transactions, it will be Full Name which will be fetched.")
+		description: __(
+			"Enter First and Last name of Employee, based on Which Full Name will be updated. IN transactions, it will be Full Name which will be fetched."
+		),
 	},
 	{
 		fieldname: "company",
 		title: "Company",
-		description: __("Select a Company this Employee belongs to.")
+		description: __("Select a Company this Employee belongs to."),
 	},
 	{
 		fieldname: "date_of_birth",
 		title: "Date of Birth",
-		description: __("Select Date of Birth. This will validate Employees age and prevent hiring of under-age staff.")
+		description: __(
+			"Select Date of Birth. This will validate Employees age and prevent hiring of under-age staff."
+		),
 	},
 	{
 		fieldname: "date_of_joining",
 		title: "Date of Joining",
-		description: __("Select Date of joining. It will have impact on the first salary calculation, Leave allocation on pro-rata bases.")
+		description: __(
+			"Select Date of joining. It will have impact on the first salary calculation, Leave allocation on pro-rata bases."
+		),
 	},
 	{
 		fieldname: "reports_to",
 		title: "Reports To",
-		description: __("Here, you can select a senior of this Employee. Based on this, Organization Chart will be populated.")
+		description: __(
+			"Here, you can select a senior of this Employee. Based on this, Organization Chart will be populated."
+		),
 	},
 ];
diff --git a/erpnext/setup/doctype/employee/employee_list.js b/erpnext/setup/doctype/employee/employee_list.js
index d37e149..0c97b62 100644
--- a/erpnext/setup/doctype/employee/employee_list.js
+++ b/erpnext/setup/doctype/employee/employee_list.js
@@ -1,9 +1,9 @@
-frappe.listview_settings['Employee'] = {
-	add_fields: ["status", "branch", "department", "designation","image"],
-	filters: [["status","=", "Active"]],
-	get_indicator: function(doc) {
+frappe.listview_settings["Employee"] = {
+	add_fields: ["status", "branch", "department", "designation", "image"],
+	filters: [["status", "=", "Active"]],
+	get_indicator: function (doc) {
 		var indicator = [__(doc.status), frappe.utils.guess_colour(doc.status), "status,=," + doc.status];
-		indicator[1] = {"Active": "green", "Inactive": "red", "Left": "gray", "Suspended": "orange"}[doc.status];
+		indicator[1] = { Active: "green", Inactive: "red", Left: "gray", Suspended: "orange" }[doc.status];
 		return indicator;
-	}
+	},
 };
diff --git a/erpnext/setup/doctype/employee/employee_tree.js b/erpnext/setup/doctype/employee/employee_tree.js
index 8f52cff..26a8971 100644
--- a/erpnext/setup/doctype/employee/employee_tree.js
+++ b/erpnext/setup/doctype/employee/employee_tree.js
@@ -1,13 +1,13 @@
-frappe.treeview_settings['Employee'] = {
+frappe.treeview_settings["Employee"] = {
 	get_tree_nodes: "erpnext.setup.doctype.employee.employee.get_children",
 	filters: [
 		{
 			fieldname: "company",
-			fieldtype:"Select",
-			options: ['All Companies'].concat(erpnext.utils.get_tree_options("company")),
+			fieldtype: "Select",
+			options: ["All Companies"].concat(erpnext.utils.get_tree_options("company")),
 			label: __("Company"),
-			default: erpnext.utils.get_tree_default("company")
-		}
+			default: erpnext.utils.get_tree_default("company"),
+		},
 	],
 	breadcrumb: "Hr",
 	disable_add_node: true,
@@ -15,22 +15,22 @@
 	toolbar: [
 		{ toggle_btn: true },
 		{
-			label:__("Edit"),
-			condition: function(node) {
+			label: __("Edit"),
+			condition: function (node) {
 				return !node.is_root;
 			},
-			click: function(node) {
+			click: function (node) {
 				frappe.set_route("Form", "Employee", node.data.value);
-			}
-		}
+			},
+		},
 	],
 	menu_items: [
 		{
 			label: __("New Employee"),
-			action: function() {
+			action: function () {
 				frappe.new_doc("Employee", true);
 			},
-			condition: 'frappe.boot.user.can_create.indexOf("Employee") !== -1'
-		}
+			condition: 'frappe.boot.user.can_create.indexOf("Employee") !== -1',
+		},
 	],
 };
diff --git a/erpnext/setup/doctype/employee_group/employee_group.js b/erpnext/setup/doctype/employee_group/employee_group.js
index 3db5718..0ffa877 100644
--- a/erpnext/setup/doctype/employee_group/employee_group.js
+++ b/erpnext/setup/doctype/employee_group/employee_group.js
@@ -1,6 +1,4 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Employee Group', {
-
-});
+frappe.ui.form.on("Employee Group", {});
diff --git a/erpnext/setup/doctype/global_defaults/global_defaults.js b/erpnext/setup/doctype/global_defaults/global_defaults.js
index 942dd59..20ac6da 100644
--- a/erpnext/setup/doctype/global_defaults/global_defaults.js
+++ b/erpnext/setup/doctype/global_defaults/global_defaults.js
@@ -1,14 +1,14 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.ui.form.on('Global Defaults', {
-	onload: function(frm) {
-		frm.trigger('get_distance_uoms');
+frappe.ui.form.on("Global Defaults", {
+	onload: function (frm) {
+		frm.trigger("get_distance_uoms");
 	},
-	validate: function(frm) {
-		frm.call('get_defaults', null, r => {
+	validate: function (frm) {
+		frm.call("get_defaults", null, (r) => {
 			frappe.sys_defaults = r.message;
-		})
+		});
 	},
 	get_distance_uoms: function (frm) {
 		let units = [];
@@ -17,16 +17,16 @@
 			method: "frappe.client.get_list",
 			args: {
 				doctype: "UOM Conversion Factor",
-				filters: { "category": __("Length") },
+				filters: { category: __("Length") },
 				fields: ["to_uom"],
-				limit_page_length: 500
+				limit_page_length: 500,
 			},
 			callback: function (r) {
-				r.message.forEach(row => units.push(row.to_uom));
-			}
+				r.message.forEach((row) => units.push(row.to_uom));
+			},
 		});
 		frm.set_query("default_distance_unit", function () {
-			return { filters: { "name": ["IN", units] } };
+			return { filters: { name: ["IN", units] } };
 		});
-	}
+	},
 });
diff --git a/erpnext/setup/doctype/holiday_list/holiday_list.js b/erpnext/setup/doctype/holiday_list/holiday_list.js
index 90d9f1b..1f95a73 100644
--- a/erpnext/setup/doctype/holiday_list/holiday_list.js
+++ b/erpnext/setup/doctype/holiday_list/holiday_list.js
@@ -2,12 +2,12 @@
 // For license information, please see license.txt
 
 frappe.ui.form.on("Holiday List", {
-	refresh: function(frm) {
+	refresh: function (frm) {
 		if (frm.doc.holidays) {
 			frm.set_value("total_holidays", frm.doc.holidays.length);
 		}
 
-		frm.call("get_supported_countries").then(r => {
+		frm.call("get_supported_countries").then((r) => {
 			frm.subdivisions_by_country = r.message.subdivisions_by_country;
 			frm.fields_dict.country.set_data(
 				r.message.countries.sort((a, b) => a.label.localeCompare(b.label))
@@ -18,20 +18,20 @@
 			}
 		});
 	},
-	from_date: function(frm) {
+	from_date: function (frm) {
 		if (frm.doc.from_date && !frm.doc.to_date) {
 			var a_year_from_start = frappe.datetime.add_months(frm.doc.from_date, 12);
 			frm.set_value("to_date", frappe.datetime.add_days(a_year_from_start, -1));
 		}
 	},
-	country: function(frm) {
+	country: function (frm) {
 		frm.set_value("subdivision", "");
 
 		if (frm.doc.country) {
 			frm.trigger("set_subdivisions");
 		}
 	},
-	set_subdivisions: function(frm) {
+	set_subdivisions: function (frm) {
 		const subdivisions = [...frm.subdivisions_by_country[frm.doc.country]];
 		if (subdivisions && subdivisions.length > 0) {
 			frm.fields_dict.subdivision.set_data(subdivisions);
@@ -67,11 +67,15 @@
 	{
 		fieldname: "get_weekly_off_dates",
 		title: "Add Holidays",
-		description: __("Click on Add to Holidays. This will populate the holidays table with all the dates that fall on the selected weekly off. Repeat the process for populating the dates for all your weekly holidays"),
+		description: __(
+			"Click on Add to Holidays. This will populate the holidays table with all the dates that fall on the selected weekly off. Repeat the process for populating the dates for all your weekly holidays"
+		),
 	},
 	{
 		fieldname: "holidays",
 		title: "Holidays",
-		description: __("Here, your weekly offs are pre-populated based on the previous selections. You can add more rows to also add public and national holidays individually.")
+		description: __(
+			"Here, your weekly offs are pre-populated based on the previous selections. You can add more rows to also add public and national holidays individually."
+		),
 	},
 ];
diff --git a/erpnext/setup/doctype/holiday_list/holiday_list_calendar.js b/erpnext/setup/doctype/holiday_list/holiday_list_calendar.js
index bb6d831..ff83088 100644
--- a/erpnext/setup/doctype/holiday_list/holiday_list_calendar.js
+++ b/erpnext/setup/doctype/holiday_list/holiday_list_calendar.js
@@ -3,20 +3,20 @@
 
 frappe.views.calendar["Holiday List"] = {
 	field_map: {
-		"start": "holiday_date",
-		"end": "holiday_date",
-		"id": "name",
-		"title": "description",
-		"allDay": "allDay"
+		start: "holiday_date",
+		end: "holiday_date",
+		id: "name",
+		title: "description",
+		allDay: "allDay",
 	},
 	order_by: `from_date`,
 	get_events_method: "erpnext.setup.doctype.holiday_list.holiday_list.get_events",
 	filters: [
 		{
-			'fieldtype': 'Link',
-			'fieldname': 'holiday_list',
-			'options': 'Holiday List',
-			'label': __('Holiday List')
-		}
-	]
-}
+			fieldtype: "Link",
+			fieldname: "holiday_list",
+			options: "Holiday List",
+			label: __("Holiday List"),
+		},
+	],
+};
diff --git a/erpnext/setup/doctype/item_group/item_group.js b/erpnext/setup/doctype/item_group/item_group.js
index d6eb11f..6835be1 100644
--- a/erpnext/setup/doctype/item_group/item_group.js
+++ b/erpnext/setup/doctype/item_group/item_group.js
@@ -2,85 +2,102 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.ui.form.on("Item Group", {
-	onload: function(frm) {
+	onload: function (frm) {
 		frm.list_route = "Tree/Item Group";
 
 		//get query select item group
-		frm.fields_dict['parent_item_group'].get_query = function(doc,cdt,cdn) {
-			return{
-				filters:[
-					['Item Group', 'is_group', '=', 1],
-					['Item Group', 'name', '!=', doc.item_group_name]
-				]
-			}
-		}
-		frm.fields_dict['item_group_defaults'].grid.get_field("default_discount_account").get_query = function(doc, cdt, cdn) {
-			const row = locals[cdt][cdn];
+		frm.fields_dict["parent_item_group"].get_query = function (doc, cdt, cdn) {
 			return {
-				filters: {
-					'report_type': 'Profit and Loss',
-					'company': row.company,
-					"is_group": 0
-				}
+				filters: [
+					["Item Group", "is_group", "=", 1],
+					["Item Group", "name", "!=", doc.item_group_name],
+				],
 			};
-		}
-		frm.fields_dict["item_group_defaults"].grid.get_field("expense_account").get_query = function(doc, cdt, cdn) {
+		};
+		frm.fields_dict["item_group_defaults"].grid.get_field("default_discount_account").get_query =
+			function (doc, cdt, cdn) {
+				const row = locals[cdt][cdn];
+				return {
+					filters: {
+						report_type: "Profit and Loss",
+						company: row.company,
+						is_group: 0,
+					},
+				};
+			};
+		frm.fields_dict["item_group_defaults"].grid.get_field("expense_account").get_query = function (
+			doc,
+			cdt,
+			cdn
+		) {
 			const row = locals[cdt][cdn];
 			return {
 				query: "erpnext.controllers.queries.get_expense_account",
-				filters: { company: row.company }
-			}
-		}
-		frm.fields_dict["item_group_defaults"].grid.get_field("income_account").get_query = function(doc, cdt, cdn) {
+				filters: { company: row.company },
+			};
+		};
+		frm.fields_dict["item_group_defaults"].grid.get_field("income_account").get_query = function (
+			doc,
+			cdt,
+			cdn
+		) {
 			const row = locals[cdt][cdn];
 			return {
 				query: "erpnext.controllers.queries.get_income_account",
-				filters: { company: row.company }
-			}
-		}
+				filters: { company: row.company },
+			};
+		};
 
-		frm.fields_dict["item_group_defaults"].grid.get_field("buying_cost_center").get_query = function(doc, cdt, cdn) {
+		frm.fields_dict["item_group_defaults"].grid.get_field("buying_cost_center").get_query = function (
+			doc,
+			cdt,
+			cdn
+		) {
 			const row = locals[cdt][cdn];
 			return {
 				filters: {
-					"is_group": 0,
-					"company": row.company
-				}
-			}
-		}
+					is_group: 0,
+					company: row.company,
+				},
+			};
+		};
 
-		frm.fields_dict["item_group_defaults"].grid.get_field("selling_cost_center").get_query = function(doc, cdt, cdn) {
+		frm.fields_dict["item_group_defaults"].grid.get_field("selling_cost_center").get_query = function (
+			doc,
+			cdt,
+			cdn
+		) {
 			const row = locals[cdt][cdn];
 			return {
 				filters: {
-					"is_group": 0,
-					"company": row.company
-				}
-			}
-		}
+					is_group: 0,
+					company: row.company,
+				},
+			};
+		};
 	},
 
-	refresh: function(frm) {
+	refresh: function (frm) {
 		frm.trigger("set_root_readonly");
-		frm.add_custom_button(__("Item Group Tree"), function() {
+		frm.add_custom_button(__("Item Group Tree"), function () {
 			frappe.set_route("Tree", "Item Group");
 		});
 
-		if(!frm.is_new()) {
-			frm.add_custom_button(__("Items"), function() {
-				frappe.set_route("List", "Item", {"item_group": frm.doc.name});
+		if (!frm.is_new()) {
+			frm.add_custom_button(__("Items"), function () {
+				frappe.set_route("List", "Item", { item_group: frm.doc.name });
 			});
 		}
 	},
 
-	set_root_readonly: function(frm) {
+	set_root_readonly: function (frm) {
 		// read-only for root item group
 		frm.set_intro("");
-		if(!frm.doc.parent_item_group && !frm.doc.__islocal) {
+		if (!frm.doc.parent_item_group && !frm.doc.__islocal) {
 			frm.set_read_only();
 			frm.set_intro(__("This is a root item group and cannot be edited."), true);
 		}
 	},
 
-	page_name: frappe.utils.warn_page_name_change
+	page_name: frappe.utils.warn_page_name_change,
 });
diff --git a/erpnext/setup/doctype/item_group/item_group_tree.js b/erpnext/setup/doctype/item_group/item_group_tree.js
index b2628f4..a7c2b63 100644
--- a/erpnext/setup/doctype/item_group/item_group_tree.js
+++ b/erpnext/setup/doctype/item_group/item_group_tree.js
@@ -1,3 +1,3 @@
 frappe.treeview_settings["Item Group"] = {
-	ignore_fields:["parent_item_group"]
-}
+	ignore_fields: ["parent_item_group"],
+};
diff --git a/erpnext/setup/doctype/party_type/party_type.js b/erpnext/setup/doctype/party_type/party_type.js
index 7a96dc5..9bbfd7d 100644
--- a/erpnext/setup/doctype/party_type/party_type.js
+++ b/erpnext/setup/doctype/party_type/party_type.js
@@ -1,15 +1,15 @@
 // Copyright (c) 2016, Frappe Technologies and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Party Type', {
-	setup: function(frm) {
-		frm.fields_dict["party_type"].get_query = function(frm) {
+frappe.ui.form.on("Party Type", {
+	setup: function (frm) {
+		frm.fields_dict["party_type"].get_query = function (frm) {
 			return {
 				filters: {
-					"istable": 0,
-					"is_submittable": 0
-				}
-			}
-		}
-	}
+					istable: 0,
+					is_submittable: 0,
+				},
+			};
+		};
+	},
 });
diff --git a/erpnext/setup/doctype/print_heading/print_heading.js b/erpnext/setup/doctype/print_heading/print_heading.js
index 3680906..273e30f 100644
--- a/erpnext/setup/doctype/print_heading/print_heading.js
+++ b/erpnext/setup/doctype/print_heading/print_heading.js
@@ -1,13 +1,7 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-
-
 //--------- ONLOAD -------------
-cur_frm.cscript.onload = function(doc, cdt, cdn) {
+cur_frm.cscript.onload = function (doc, cdt, cdn) {};
 
-}
-
-cur_frm.cscript.refresh = function(doc, cdt, cdn) {
-
-}
+cur_frm.cscript.refresh = function (doc, cdt, cdn) {};
diff --git a/erpnext/setup/doctype/quotation_lost_reason/quotation_lost_reason.js b/erpnext/setup/doctype/quotation_lost_reason/quotation_lost_reason.js
index 3680906..273e30f 100644
--- a/erpnext/setup/doctype/quotation_lost_reason/quotation_lost_reason.js
+++ b/erpnext/setup/doctype/quotation_lost_reason/quotation_lost_reason.js
@@ -1,13 +1,7 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-
-
 //--------- ONLOAD -------------
-cur_frm.cscript.onload = function(doc, cdt, cdn) {
+cur_frm.cscript.onload = function (doc, cdt, cdn) {};
 
-}
-
-cur_frm.cscript.refresh = function(doc, cdt, cdn) {
-
-}
+cur_frm.cscript.refresh = function (doc, cdt, cdn) {};
diff --git a/erpnext/setup/doctype/sales_partner/sales_partner.js b/erpnext/setup/doctype/sales_partner/sales_partner.js
index f9e3770..f6b3dd2 100644
--- a/erpnext/setup/doctype/sales_partner/sales_partner.js
+++ b/erpnext/setup/doctype/sales_partner/sales_partner.js
@@ -1,32 +1,31 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.ui.form.on('Sales Partner', {
-	refresh: function(frm) {
-		if(frm.doc.__islocal){
-			hide_field(['address_html', 'contact_html', 'address_contacts']);
+frappe.ui.form.on("Sales Partner", {
+	refresh: function (frm) {
+		if (frm.doc.__islocal) {
+			hide_field(["address_html", "contact_html", "address_contacts"]);
 			frappe.contacts.clear_address_and_contact(frm);
-		}
-		else{
-			unhide_field(['address_html', 'contact_html', 'address_contacts']);
+		} else {
+			unhide_field(["address_html", "contact_html", "address_contacts"]);
 			frappe.contacts.render_address_and_contact(frm);
 		}
 	},
 
-	setup: function(frm) {
-		frm.fields_dict["targets"].grid.get_field("distribution_id").get_query = function(doc, cdt, cdn){
+	setup: function (frm) {
+		frm.fields_dict["targets"].grid.get_field("distribution_id").get_query = function (doc, cdt, cdn) {
 			var row = locals[cdt][cdn];
 			return {
 				filters: {
-					'fiscal_year': row.fiscal_year
-				}
-			}
+					fiscal_year: row.fiscal_year,
+				},
+			};
 		};
 	},
-	referral_code:function(frm){
+	referral_code: function (frm) {
 		if (frm.doc.referral_code) {
-			frm.doc.referral_code=frm.doc.referral_code.toUpperCase();
-			frm.refresh_field('referral_code');
+			frm.doc.referral_code = frm.doc.referral_code.toUpperCase();
+			frm.refresh_field("referral_code");
 		}
-	}
+	},
 });
diff --git a/erpnext/setup/doctype/sales_person/sales_person.js b/erpnext/setup/doctype/sales_person/sales_person.js
index f0d9aa8..127bdac 100644
--- a/erpnext/setup/doctype/sales_person/sales_person.js
+++ b/erpnext/setup/doctype/sales_person/sales_person.js
@@ -1,56 +1,65 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.ui.form.on('Sales Person', {
-	refresh: function(frm) {
-		if(frm.doc.__onload && frm.doc.__onload.dashboard_info) {
+frappe.ui.form.on("Sales Person", {
+	refresh: function (frm) {
+		if (frm.doc.__onload && frm.doc.__onload.dashboard_info) {
 			let info = frm.doc.__onload.dashboard_info;
-			frm.dashboard.add_indicator(__('Total Contribution Amount Against Orders: {0}',
-				[format_currency(info.allocated_amount_against_order, info.currency)]), 'blue');
+			frm.dashboard.add_indicator(
+				__("Total Contribution Amount Against Orders: {0}", [
+					format_currency(info.allocated_amount_against_order, info.currency),
+				]),
+				"blue"
+			);
 
-			frm.dashboard.add_indicator(__('Total Contribution Amount Against Invoices: {0}',
-				[format_currency(info.allocated_amount_against_invoice, info.currency)]), 'blue');
+			frm.dashboard.add_indicator(
+				__("Total Contribution Amount Against Invoices: {0}", [
+					format_currency(info.allocated_amount_against_invoice, info.currency),
+				]),
+				"blue"
+			);
 		}
 		frm.trigger("set_root_readonly");
 	},
 
-	setup: function(frm) {
-		frm.fields_dict["targets"].grid.get_field("distribution_id").get_query = function(doc, cdt, cdn){
+	setup: function (frm) {
+		frm.fields_dict["targets"].grid.get_field("distribution_id").get_query = function (doc, cdt, cdn) {
 			var row = locals[cdt][cdn];
 			return {
 				filters: {
-					'fiscal_year': row.fiscal_year
-				}
-			}
+					fiscal_year: row.fiscal_year,
+				},
+			};
 		};
 
 		frm.make_methods = {
-			'Sales Order': () => frappe.new_doc("Sales Order")
-				.then(() => frm.add_child("sales_team", {"sales_person": frm.doc.name}))
-		}
+			"Sales Order": () =>
+				frappe
+					.new_doc("Sales Order")
+					.then(() => frm.add_child("sales_team", { sales_person: frm.doc.name })),
+		};
 	},
-	set_root_readonly: function(frm) {
+	set_root_readonly: function (frm) {
 		// read-only for root
-		if(!frm.doc.parent_sales_person && !frm.doc.__islocal) {
+		if (!frm.doc.parent_sales_person && !frm.doc.__islocal) {
 			frm.set_read_only();
 			frm.set_intro(__("This is a root sales person and cannot be edited."));
 		} else {
 			frm.set_intro(null);
 		}
-	}
+	},
 });
 
-
 //get query select sales person
-cur_frm.fields_dict['parent_sales_person'].get_query = function(doc, cdt, cdn) {
-	return{
+cur_frm.fields_dict["parent_sales_person"].get_query = function (doc, cdt, cdn) {
+	return {
 		filters: [
-			['Sales Person', 'is_group', '=', 1],
-			['Sales Person', 'name', '!=', doc.sales_person_name]
-		]
-	}
-}
+			["Sales Person", "is_group", "=", 1],
+			["Sales Person", "name", "!=", doc.sales_person_name],
+		],
+	};
+};
 
-cur_frm.fields_dict.employee.get_query = function(doc, cdt, cdn) {
-	return { query: "erpnext.controllers.queries.employee_query" }
-}
+cur_frm.fields_dict.employee.get_query = function (doc, cdt, cdn) {
+	return { query: "erpnext.controllers.queries.employee_query" };
+};
diff --git a/erpnext/setup/doctype/sales_person/sales_person_tree.js b/erpnext/setup/doctype/sales_person/sales_person_tree.js
index 00056fd..0fcd592 100644
--- a/erpnext/setup/doctype/sales_person/sales_person_tree.js
+++ b/erpnext/setup/doctype/sales_person/sales_person_tree.js
@@ -1,12 +1,18 @@
-
 frappe.treeview_settings["Sales Person"] = {
 	fields: [
-		{fieldtype:'Data', fieldname: 'sales_person_name',
-			label:__('New Sales Person Name'), reqd:true},
-		{fieldtype:'Link', fieldname:'employee',
-			label:__('Employee'), options:'Employee',
-			description: __("Please enter Employee Id of this sales person")},
-		{fieldtype:'Check', fieldname:'is_group', label:__('Group Node'),
-			description: __("Further nodes can be only created under 'Group' type nodes")}
+		{ fieldtype: "Data", fieldname: "sales_person_name", label: __("New Sales Person Name"), reqd: true },
+		{
+			fieldtype: "Link",
+			fieldname: "employee",
+			label: __("Employee"),
+			options: "Employee",
+			description: __("Please enter Employee Id of this sales person"),
+		},
+		{
+			fieldtype: "Check",
+			fieldname: "is_group",
+			label: __("Group Node"),
+			description: __("Further nodes can be only created under 'Group' type nodes"),
+		},
 	],
-}
+};
diff --git a/erpnext/setup/doctype/supplier_group/supplier_group.js b/erpnext/setup/doctype/supplier_group/supplier_group.js
index c697a99..d720b3b 100644
--- a/erpnext/setup/doctype/supplier_group/supplier_group.js
+++ b/erpnext/setup/doctype/supplier_group/supplier_group.js
@@ -2,48 +2,48 @@
 // For license information, please see license.txt
 
 frappe.ui.form.on("Supplier Group", {
-	setup: function(frm){
-		frm.set_query('parent_supplier_group', function (doc) {
+	setup: function (frm) {
+		frm.set_query("parent_supplier_group", function (doc) {
 			return {
 				filters: {
-					'is_group': 1,
-					'name': ['!=', cur_frm.doc.supplier_group_name]
-				}
-			}
+					is_group: 1,
+					name: ["!=", cur_frm.doc.supplier_group_name],
+				},
+			};
 		});
 
-		frm.set_query('account', 'accounts', function (doc, cdt, cdn) {
+		frm.set_query("account", "accounts", function (doc, cdt, cdn) {
 			return {
 				filters: {
-					'root_type': 'Liability',
-					'account_type': 'Payable',
-					'company': locals[cdt][cdn].company,
-					"is_group": 0
-				}
-			}
+					root_type: "Liability",
+					account_type: "Payable",
+					company: locals[cdt][cdn].company,
+					is_group: 0,
+				},
+			};
 		});
 
-		frm.set_query('advance_account', 'accounts', function (doc, cdt, cdn) {
+		frm.set_query("advance_account", "accounts", function (doc, cdt, cdn) {
 			return {
 				filters: {
-					"root_type": 'Asset',
-					"account_type": "Payable",
-					"company": locals[cdt][cdn].company,
-					"is_group": 0
-				}
-			}
+					root_type: "Asset",
+					account_type: "Payable",
+					company: locals[cdt][cdn].company,
+					is_group: 0,
+				},
+			};
 		});
 	},
-	refresh: function(frm) {
+	refresh: function (frm) {
 		frm.set_intro(frm.doc.__islocal ? "" : __("There is nothing to edit."));
 		frm.trigger("set_root_readonly");
 	},
-	set_root_readonly: function(frm) {
-		if(!frm.doc.parent_supplier_group && !frm.doc.__islocal) {
+	set_root_readonly: function (frm) {
+		if (!frm.doc.parent_supplier_group && !frm.doc.__islocal) {
 			frm.trigger("set_read_only");
 			frm.set_intro(__("This is a root supplier group and cannot be edited."));
 		} else {
 			frm.set_intro(null);
 		}
-	}
+	},
 });
diff --git a/erpnext/setup/doctype/supplier_group/supplier_group_tree.js b/erpnext/setup/doctype/supplier_group/supplier_group_tree.js
index 728793e..9210dc1 100644
--- a/erpnext/setup/doctype/supplier_group/supplier_group_tree.js
+++ b/erpnext/setup/doctype/supplier_group/supplier_group_tree.js
@@ -1,4 +1,4 @@
 frappe.treeview_settings["Supplier Group"] = {
 	breadcrumbs: "Buying",
-	ignore_fields:["parent_supplier_group"]
+	ignore_fields: ["parent_supplier_group"],
 };
diff --git a/erpnext/setup/doctype/territory/territory.js b/erpnext/setup/doctype/territory/territory.js
index e11d20b..62fab45 100644
--- a/erpnext/setup/doctype/territory/territory.js
+++ b/erpnext/setup/doctype/territory/territory.js
@@ -2,37 +2,36 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.ui.form.on("Territory", {
-	setup: function(frm) {
-		frm.fields_dict["targets"].grid.get_field("distribution_id").get_query = function(doc, cdt, cdn){
+	setup: function (frm) {
+		frm.fields_dict["targets"].grid.get_field("distribution_id").get_query = function (doc, cdt, cdn) {
 			var row = locals[cdt][cdn];
 			return {
 				filters: {
-					'fiscal_year': row.fiscal_year
-				}
-			}
+					fiscal_year: row.fiscal_year,
+				},
+			};
 		};
 	},
-	refresh: function(frm) {
+	refresh: function (frm) {
 		frm.trigger("set_root_readonly");
 	},
-	set_root_readonly: function(frm) {
+	set_root_readonly: function (frm) {
 		// read-only for root territory
-		if(!frm.doc.parent_territory && !frm.doc.__islocal) {
+		if (!frm.doc.parent_territory && !frm.doc.__islocal) {
 			frm.set_read_only();
 			frm.set_intro(__("This is a root territory and cannot be edited."));
 		} else {
 			frm.set_intro(null);
 		}
-	}
-
+	},
 });
 
 //get query select territory
-cur_frm.fields_dict['parent_territory'].get_query = function(doc,cdt,cdn) {
-	return{
-		filters:[
-			['Territory', 'is_group', '=', 1],
-			['Territory', 'name', '!=', doc.territory_name]
-		]
-	}
-}
+cur_frm.fields_dict["parent_territory"].get_query = function (doc, cdt, cdn) {
+	return {
+		filters: [
+			["Territory", "is_group", "=", 1],
+			["Territory", "name", "!=", doc.territory_name],
+		],
+	};
+};
diff --git a/erpnext/setup/doctype/territory/territory_tree.js b/erpnext/setup/doctype/territory/territory_tree.js
index dadeeef..4892b8c 100644
--- a/erpnext/setup/doctype/territory/territory_tree.js
+++ b/erpnext/setup/doctype/territory/territory_tree.js
@@ -1,3 +1,3 @@
 frappe.treeview_settings["Territory"] = {
-	ignore_fields:["parent_territory"]
-}
+	ignore_fields: ["parent_territory"],
+};
diff --git a/erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.js b/erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.js
index a7b0709..527c753 100644
--- a/erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.js
+++ b/erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.js
@@ -1,39 +1,38 @@
 // Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Transaction Deletion Record', {
-	onload: function(frm) {
+frappe.ui.form.on("Transaction Deletion Record", {
+	onload: function (frm) {
 		if (frm.doc.docstatus == 0) {
 			let doctypes_to_be_ignored_array;
 			frappe.call({
-				method: 'erpnext.setup.doctype.transaction_deletion_record.transaction_deletion_record.get_doctypes_to_be_ignored',
-				callback: function(r) {
+				method: "erpnext.setup.doctype.transaction_deletion_record.transaction_deletion_record.get_doctypes_to_be_ignored",
+				callback: function (r) {
 					doctypes_to_be_ignored_array = r.message;
 					populate_doctypes_to_be_ignored(doctypes_to_be_ignored_array, frm);
-					frm.fields_dict['doctypes_to_be_ignored'].grid.set_column_disp('no_of_docs', false);
-					frm.refresh_field('doctypes_to_be_ignored');
-				}
+					frm.fields_dict["doctypes_to_be_ignored"].grid.set_column_disp("no_of_docs", false);
+					frm.refresh_field("doctypes_to_be_ignored");
+				},
 			});
 		}
 
-		frm.get_field('doctypes_to_be_ignored').grid.cannot_add_rows = true;
-		frm.fields_dict['doctypes_to_be_ignored'].grid.set_column_disp('no_of_docs', false);
-		frm.refresh_field('doctypes_to_be_ignored');
+		frm.get_field("doctypes_to_be_ignored").grid.cannot_add_rows = true;
+		frm.fields_dict["doctypes_to_be_ignored"].grid.set_column_disp("no_of_docs", false);
+		frm.refresh_field("doctypes_to_be_ignored");
 	},
 
-	refresh: function(frm) {
-		frm.fields_dict['doctypes_to_be_ignored'].grid.set_column_disp('no_of_docs', false);
-		frm.refresh_field('doctypes_to_be_ignored');
-	}
-
+	refresh: function (frm) {
+		frm.fields_dict["doctypes_to_be_ignored"].grid.set_column_disp("no_of_docs", false);
+		frm.refresh_field("doctypes_to_be_ignored");
+	},
 });
 
 function populate_doctypes_to_be_ignored(doctypes_to_be_ignored_array, frm) {
 	if (frm.doc.doctypes_to_be_ignored.length === 0) {
 		var i;
 		for (i = 0; i < doctypes_to_be_ignored_array.length; i++) {
-			frm.add_child('doctypes_to_be_ignored', {
-				doctype_name: doctypes_to_be_ignored_array[i]
+			frm.add_child("doctypes_to_be_ignored", {
+				doctype_name: doctypes_to_be_ignored_array[i],
 			});
 		}
 	}
diff --git a/erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record_list.js b/erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record_list.js
index c238f18..08a35df 100644
--- a/erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record_list.js
+++ b/erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record_list.js
@@ -1,12 +1,12 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.listview_settings['Transaction Deletion Record'] = {
-	get_indicator: function(doc) {
+frappe.listview_settings["Transaction Deletion Record"] = {
+	get_indicator: function (doc) {
 		if (doc.docstatus == 0) {
 			return [__("Draft"), "red"];
 		} else {
 			return [__("Completed"), "green"];
 		}
-	}
+	},
 };
diff --git a/erpnext/setup/doctype/uom/uom.js b/erpnext/setup/doctype/uom/uom.js
index 3680906..273e30f 100644
--- a/erpnext/setup/doctype/uom/uom.js
+++ b/erpnext/setup/doctype/uom/uom.js
@@ -1,13 +1,7 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-
-
 //--------- ONLOAD -------------
-cur_frm.cscript.onload = function(doc, cdt, cdn) {
+cur_frm.cscript.onload = function (doc, cdt, cdn) {};
 
-}
-
-cur_frm.cscript.refresh = function(doc, cdt, cdn) {
-
-}
+cur_frm.cscript.refresh = function (doc, cdt, cdn) {};
diff --git a/erpnext/setup/doctype/uom_conversion_factor/uom_conversion_factor.js b/erpnext/setup/doctype/uom_conversion_factor/uom_conversion_factor.js
index e734d83..e975729 100644
--- a/erpnext/setup/doctype/uom_conversion_factor/uom_conversion_factor.js
+++ b/erpnext/setup/doctype/uom_conversion_factor/uom_conversion_factor.js
@@ -1,8 +1,6 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('UOM Conversion Factor', {
-	refresh: function() {
-
-	}
+frappe.ui.form.on("UOM Conversion Factor", {
+	refresh: function () {},
 });
diff --git a/erpnext/setup/doctype/vehicle/vehicle.js b/erpnext/setup/doctype/vehicle/vehicle.js
index f12c434..9d598a9 100644
--- a/erpnext/setup/doctype/vehicle/vehicle.js
+++ b/erpnext/setup/doctype/vehicle/vehicle.js
@@ -1,8 +1,6 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Vehicle', {
-	refresh: function(frm) {
-
-	}
+frappe.ui.form.on("Vehicle", {
+	refresh: function (frm) {},
 });
diff --git a/erpnext/stock/dashboard/item_dashboard.js b/erpnext/stock/dashboard/item_dashboard.js
index e02abb4..36a5105 100644
--- a/erpnext/stock/dashboard/item_dashboard.js
+++ b/erpnext/stock/dashboard/item_dashboard.js
@@ -1,4 +1,4 @@
-frappe.provide('erpnext.stock');
+frappe.provide("erpnext.stock");
 
 erpnext.stock.ItemDashboard = class ItemDashboard {
 	constructor(opts) {
@@ -9,46 +9,51 @@
 		var me = this;
 		this.start = 0;
 		if (!this.sort_by) {
-			this.sort_by = 'projected_qty';
-			this.sort_order = 'asc';
+			this.sort_by = "projected_qty";
+			this.sort_order = "asc";
 		}
 
-		this.content = $(frappe.render_template('item_dashboard')).appendTo(this.parent);
-		this.result = this.content.find('.result');
+		this.content = $(frappe.render_template("item_dashboard")).appendTo(this.parent);
+		this.result = this.content.find(".result");
 
-		this.content.on('click', '.btn-move', function () {
+		this.content.on("click", ".btn-move", function () {
 			handle_move_add($(this), "Move");
 		});
 
-		this.content.on('click', '.btn-add', function () {
+		this.content.on("click", ".btn-add", function () {
 			handle_move_add($(this), "Add");
 		});
 
-		this.content.on('click', '.btn-edit', function () {
-			let item = unescape($(this).attr('data-item'));
-			let warehouse = unescape($(this).attr('data-warehouse'));
-			let company = unescape($(this).attr('data-company'));
-			frappe.db.get_value('Putaway Rule', {
-				'item_code': item,
-				'warehouse': warehouse,
-				'company': company
-			}, 'name', (r) => {
-				frappe.set_route("Form", "Putaway Rule", r.name);
-			});
+		this.content.on("click", ".btn-edit", function () {
+			let item = unescape($(this).attr("data-item"));
+			let warehouse = unescape($(this).attr("data-warehouse"));
+			let company = unescape($(this).attr("data-company"));
+			frappe.db.get_value(
+				"Putaway Rule",
+				{
+					item_code: item,
+					warehouse: warehouse,
+					company: company,
+				},
+				"name",
+				(r) => {
+					frappe.set_route("Form", "Putaway Rule", r.name);
+				}
+			);
 		});
 
 		function handle_move_add(element, action) {
-			let item = unescape(element.attr('data-item'));
-			let warehouse = unescape(element.attr('data-warehouse'));
-			let actual_qty = unescape(element.attr('data-actual_qty'));
-			let disable_quick_entry = Number(unescape(element.attr('data-disable_quick_entry')));
+			let item = unescape(element.attr("data-item"));
+			let warehouse = unescape(element.attr("data-warehouse"));
+			let actual_qty = unescape(element.attr("data-actual_qty"));
+			let disable_quick_entry = Number(unescape(element.attr("data-disable_quick_entry")));
 			let entry_type = action === "Move" ? "Material Transfer" : "Material Receipt";
 
 			if (disable_quick_entry) {
 				open_stock_entry(item, warehouse, entry_type);
 			} else {
 				if (action === "Add") {
-					let rate = unescape($(this).attr('data-rate'));
+					let rate = unescape($(this).attr("data-rate"));
 					erpnext.stock.move_item(item, null, warehouse, actual_qty, rate, function () {
 						me.refresh();
 					});
@@ -61,35 +66,33 @@
 		}
 
 		function open_stock_entry(item, warehouse, entry_type) {
-			frappe.model.with_doctype('Stock Entry', function () {
-				var doc = frappe.model.get_new_doc('Stock Entry');
+			frappe.model.with_doctype("Stock Entry", function () {
+				var doc = frappe.model.get_new_doc("Stock Entry");
 				if (entry_type) {
 					doc.stock_entry_type = entry_type;
 				}
 
-				var row = frappe.model.add_child(doc, 'items');
+				var row = frappe.model.add_child(doc, "items");
 				row.item_code = item;
 
 				if (entry_type === "Material Transfer") {
 					row.s_warehouse = warehouse;
-				}
-				else {
+				} else {
 					row.t_warehouse = warehouse;
 				}
 
-				frappe.set_route('Form', doc.doctype, doc.name);
+				frappe.set_route("Form", doc.doctype, doc.name);
 			});
 		}
 
 		// more
-		this.content.find('.btn-more').on('click', function () {
+		this.content.find(".btn-more").on("click", function () {
 			me.start += me.page_length;
 			me.refresh();
 		});
-
 	}
 	refresh() {
-		if(this.before_refresh) {
+		if (this.before_refresh) {
 			this.before_refresh();
 		}
 
@@ -101,7 +104,7 @@
 			company: this.company,
 			start: this.start,
 			sort_by: this.sort_by,
-			sort_order: this.sort_order
+			sort_order: this.sort_order,
 		};
 
 		var me = this;
@@ -110,14 +113,14 @@
 			args: args,
 			callback: function (r) {
 				me.render(r.message);
-				if(me.after_refresh) {
+				if (me.after_refresh) {
 					me.after_refresh();
 				}
-			}
+			},
 		});
 	}
 	render(data) {
-		if (this.start===0) {
+		if (this.start === 0) {
 			this.max_count = 0;
 			this.result.empty();
 		}
@@ -130,22 +133,22 @@
 		}
 
 		// show more button
-		if (data && data.length === (this.page_length + 1)) {
-			this.content.find('.more').removeClass('hidden');
+		if (data && data.length === this.page_length + 1) {
+			this.content.find(".more").removeClass("hidden");
 
 			// remove the last element
 			data.splice(-1);
 		} else {
-			this.content.find('.more').addClass('hidden');
+			this.content.find(".more").addClass("hidden");
 		}
 
 		// If not any stock in any warehouses provide a message to end user
 		if (context.data.length > 0) {
-			this.content.find('.result').css('text-align', 'unset');
+			this.content.find(".result").css("text-align", "unset");
 			$(frappe.render_template(this.template, context)).appendTo(this.result);
 		} else {
 			var message = __("No Stock Available Currently");
-			this.content.find('.result').css('text-align', 'center');
+			this.content.find(".result").css("text-align", "center");
 
 			$(`<div class='text-muted' style='margin: 20px 5px;'>
 				${message} </div>`).appendTo(this.result);
@@ -153,19 +156,23 @@
 	}
 
 	get_item_dashboard_data(data, max_count, show_item) {
-		if(!max_count) max_count = 0;
-		if(!data) data = [];
+		if (!max_count) max_count = 0;
+		if (!data) data = [];
 
 		data.forEach(function (d) {
-			d.actual_or_pending = d.projected_qty + d.reserved_qty + d.reserved_qty_for_production + d.reserved_qty_for_sub_contract;
+			d.actual_or_pending =
+				d.projected_qty +
+				d.reserved_qty +
+				d.reserved_qty_for_production +
+				d.reserved_qty_for_sub_contract;
 			d.pending_qty = 0;
-			d.total_reserved = d.reserved_qty + d.reserved_qty_for_production + d.reserved_qty_for_sub_contract;
+			d.total_reserved =
+				d.reserved_qty + d.reserved_qty_for_production + d.reserved_qty_for_sub_contract;
 			if (d.actual_or_pending > d.actual_qty) {
 				d.pending_qty = d.actual_or_pending - d.actual_qty;
 			}
 
-			max_count = Math.max(d.actual_or_pending, d.actual_qty,
-				d.total_reserved, max_count);
+			max_count = Math.max(d.actual_or_pending, d.actual_qty, d.total_reserved, max_count);
 		});
 
 		let can_write = 0;
@@ -177,7 +184,7 @@
 			data: data,
 			max_count: max_count,
 			can_write: can_write,
-			show_item: show_item || false
+			show_item: show_item || false,
 		};
 	}
 
@@ -202,73 +209,74 @@
 
 erpnext.stock.move_item = function (item, source, target, actual_qty, rate, callback) {
 	var dialog = new frappe.ui.Dialog({
-		title: target ? __('Add Item') : __('Move Item'),
-		fields: [{
-			fieldname: 'item_code',
-			label: __('Item'),
-			fieldtype: 'Link',
-			options: 'Item',
-			read_only: 1
-		},
-		{
-			fieldname: 'source',
-			label: __('Source Warehouse'),
-			fieldtype: 'Link',
-			options: 'Warehouse',
-			read_only: 1
-		},
-		{
-			fieldname: 'target',
-			label: __('Target Warehouse'),
-			fieldtype: 'Link',
-			options: 'Warehouse',
-			reqd: 1,
-			get_query() {
-				return {
-					filters: {
-						is_group: 0
-					}
-				}
-			}
-		},
-		{
-			fieldname: 'qty',
-			label: __('Quantity'),
-			reqd: 1,
-			fieldtype: 'Float',
-			description: __('Available {0}', [actual_qty])
-		},
-		{
-			fieldname: 'rate',
-			label: __('Rate'),
-			fieldtype: 'Currency',
-			hidden: 1
-		},
+		title: target ? __("Add Item") : __("Move Item"),
+		fields: [
+			{
+				fieldname: "item_code",
+				label: __("Item"),
+				fieldtype: "Link",
+				options: "Item",
+				read_only: 1,
+			},
+			{
+				fieldname: "source",
+				label: __("Source Warehouse"),
+				fieldtype: "Link",
+				options: "Warehouse",
+				read_only: 1,
+			},
+			{
+				fieldname: "target",
+				label: __("Target Warehouse"),
+				fieldtype: "Link",
+				options: "Warehouse",
+				reqd: 1,
+				get_query() {
+					return {
+						filters: {
+							is_group: 0,
+						},
+					};
+				},
+			},
+			{
+				fieldname: "qty",
+				label: __("Quantity"),
+				reqd: 1,
+				fieldtype: "Float",
+				description: __("Available {0}", [actual_qty]),
+			},
+			{
+				fieldname: "rate",
+				label: __("Rate"),
+				fieldtype: "Currency",
+				hidden: 1,
+			},
 		],
 	});
 	dialog.show();
-	dialog.get_field('item_code').set_input(item);
+	dialog.get_field("item_code").set_input(item);
 
 	if (source) {
-		dialog.get_field('source').set_input(source);
+		dialog.get_field("source").set_input(source);
 	} else {
-		dialog.get_field('source').df.hidden = 1;
-		dialog.get_field('source').refresh();
+		dialog.get_field("source").df.hidden = 1;
+		dialog.get_field("source").refresh();
 	}
 
 	if (rate) {
-		dialog.get_field('rate').set_value(rate);
-		dialog.get_field('rate').df.hidden = 0;
-		dialog.get_field('rate').refresh();
+		dialog.get_field("rate").set_value(rate);
+		dialog.get_field("rate").df.hidden = 0;
+		dialog.get_field("rate").refresh();
 	}
 
 	if (target) {
-		dialog.get_field('target').df.read_only = 1;
-		dialog.get_field('target').value = target;
-		dialog.get_field('target').refresh();
+		dialog.get_field("target").df.read_only = 1;
+		dialog.get_field("target").value = target;
+		dialog.get_field("target").refresh();
 	}
 
-	dialog.set_primary_action(__('Create Stock Entry'), function () {
+	dialog.set_primary_action(__("Create Stock Entry"), function () {
 		if (source && (dialog.get_value("qty") == 0 || dialog.get_value("qty") > actual_qty)) {
 			frappe.msgprint(__("Quantity must be greater than zero, and less or equal to {0}", [actual_qty]));
 			return;
@@ -279,20 +287,20 @@
 			return;
 		}
 
-		frappe.model.with_doctype('Stock Entry', function () {
-			let doc = frappe.model.get_new_doc('Stock Entry');
-			doc.from_warehouse = dialog.get_value('source');
-			doc.to_warehouse = dialog.get_value('target');
+		frappe.model.with_doctype("Stock Entry", function () {
+			let doc = frappe.model.get_new_doc("Stock Entry");
+			doc.from_warehouse = dialog.get_value("source");
+			doc.to_warehouse = dialog.get_value("target");
 			doc.stock_entry_type = doc.from_warehouse ? "Material Transfer" : "Material Receipt";
-			let row = frappe.model.add_child(doc, 'items');
-			row.item_code = dialog.get_value('item_code');
-			row.s_warehouse = dialog.get_value('source');
-			row.t_warehouse = dialog.get_value('target');
-			row.qty = dialog.get_value('qty');
+			let row = frappe.model.add_child(doc, "items");
+			row.item_code = dialog.get_value("item_code");
+			row.s_warehouse = dialog.get_value("source");
+			row.t_warehouse = dialog.get_value("target");
+			row.qty = dialog.get_value("qty");
 			row.conversion_factor = 1;
-			row.transfer_qty = dialog.get_value('qty');
-			row.basic_rate = dialog.get_value('rate');
-			frappe.set_route('Form', doc.doctype, doc.name);
+			row.transfer_qty = dialog.get_value("qty");
+			row.basic_rate = dialog.get_value("rate");
+			frappe.set_route("Form", doc.doctype, doc.name);
 		});
 	});
 };
diff --git a/erpnext/stock/dashboard_chart_source/warehouse_wise_stock_value/warehouse_wise_stock_value.js b/erpnext/stock/dashboard_chart_source/warehouse_wise_stock_value/warehouse_wise_stock_value.js
index 2b9d46e..a550174 100644
--- a/erpnext/stock/dashboard_chart_source/warehouse_wise_stock_value/warehouse_wise_stock_value.js
+++ b/erpnext/stock/dashboard_chart_source/warehouse_wise_stock_value/warehouse_wise_stock_value.js
@@ -1,4 +1,4 @@
-frappe.provide('frappe.dashboards.chart_sources');
+frappe.provide("frappe.dashboards.chart_sources");
 
 frappe.dashboards.chart_sources["Warehouse wise Stock Value"] = {
 	method: "erpnext.stock.dashboard_chart_source.warehouse_wise_stock_value.warehouse_wise_stock_value.get",
@@ -8,7 +8,7 @@
 			label: __("Company"),
 			fieldtype: "Link",
 			options: "Company",
-			default: frappe.defaults.get_user_default("Company")
-		}
-	]
+			default: frappe.defaults.get_user_default("Company"),
+		},
+	],
 };
diff --git a/erpnext/stock/doctype/batch/batch.js b/erpnext/stock/doctype/batch/batch.js
index f4a935a..3719c96 100644
--- a/erpnext/stock/doctype/batch/batch.js
+++ b/erpnext/stock/doctype/batch/batch.js
@@ -1,62 +1,72 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.ui.form.on('Batch', {
+frappe.ui.form.on("Batch", {
 	setup: (frm) => {
-		frm.fields_dict['item'].get_query = function(doc, cdt, cdn) {
+		frm.fields_dict["item"].get_query = function (doc, cdt, cdn) {
 			return {
 				query: "erpnext.controllers.queries.item_query",
-				filters:{
-					'is_stock_item': 1,
-					'has_batch_no': 1
-				}
-			}
-		}
+				filters: {
+					is_stock_item: 1,
+					has_batch_no: 1,
+				},
+			};
+		};
 	},
 	refresh: (frm) => {
-		if(!frm.is_new()) {
+		if (!frm.is_new()) {
 			frm.add_custom_button(__("View Ledger"), () => {
 				frappe.route_options = {
-					batch_no: frm.doc.name
+					batch_no: frm.doc.name,
 				};
 				frappe.set_route("query-report", "Stock Ledger");
 			});
-			frm.trigger('make_dashboard');
+			frm.trigger("make_dashboard");
 		}
 	},
 	item: (frm) => {
 		// frappe.db.get_value('Item', {name: frm.doc.item}, 'has_expiry_date', (r) => {
 		// 	frm.toggle_reqd('expiry_date', r.has_expiry_date);
 		// });
-		frappe.db.get_value('Item', {name: frm.doc.item}, ['shelf_life_in_days', 'has_expiry_date'], (r) => {
-			if (r.has_expiry_date && r.shelf_life_in_days) {
-				// Calculate expiry date based on shelf_life_in_days
-				frm.set_value('expiry_date', frappe.datetime.add_days(frm.doc.manufacturing_date, r.shelf_life_in_days));
-			}else if(r.has_expiry_date){
-				frm.toggle_reqd('expiry_date', r.has_expiry_date);
+		frappe.db.get_value(
+			"Item",
+			{ name: frm.doc.item },
+			["shelf_life_in_days", "has_expiry_date"],
+			(r) => {
+				if (r.has_expiry_date && r.shelf_life_in_days) {
+					// Calculate expiry date based on shelf_life_in_days
+					frm.set_value(
+						"expiry_date",
+						frappe.datetime.add_days(frm.doc.manufacturing_date, r.shelf_life_in_days)
+					);
+				} else if (r.has_expiry_date) {
+					frm.toggle_reqd("expiry_date", r.has_expiry_date);
+				}
 			}
-		})
+		);
 	},
 	make_dashboard: (frm) => {
-		if(!frm.is_new()) {
+		if (!frm.is_new()) {
 			frappe.call({
-				method: 'erpnext.stock.doctype.batch.batch.get_batch_qty',
-				args: {batch_no: frm.doc.name, item_code: frm.doc.item},
+				method: "erpnext.stock.doctype.batch.batch.get_batch_qty",
+				args: { batch_no: frm.doc.name, item_code: frm.doc.item },
 				callback: (r) => {
-					if(!r.message) {
+					if (!r.message) {
 						return;
 					}
 
-					const section = frm.dashboard.add_section('', __("Stock Levels"));
+					const section = frm.dashboard.add_section("", __("Stock Levels"));
 
 					// sort by qty
-					r.message.sort(function(a, b) { a.qty > b.qty ? 1 : -1 });
+					r.message.sort(function (a, b) {
+						a.qty > b.qty ? 1 : -1;
+					});
 
-					const rows = $('<div></div>').appendTo(section);
+					const rows = $("<div></div>").appendTo(section);
 
 					// show
-					(r.message || []).forEach(function(d) {
-						if(d.qty > 0) {
+					(r.message || []).forEach(function (d) {
+						if (d.qty > 0) {
 							$(`<div class='row' style='margin-bottom: 10px;'>
 								<div class='col-sm-3 small' style='padding-top: 3px;'>${d.warehouse}</div>
 								<div class='col-sm-3 small text-right' style='padding-top: 3px;'>${d.qty}</div>
@@ -64,98 +74,110 @@
 									<button class='btn btn-default btn-xs btn-move' style='margin-right: 7px;'
 										data-qty = "${d.qty}"
 										data-warehouse = "${d.warehouse}">
-										${__('Move')}</button>
+										${__("Move")}</button>
 									<button class='btn btn-default btn-xs btn-split'
 										data-qty = "${d.qty}"
 										data-warehouse = "${d.warehouse}">
-										${__('Split')}</button>
+										${__("Split")}</button>
 								</div>
 							</div>`).appendTo(rows);
 						}
 					});
 
 					// move - ask for target warehouse and make stock entry
-					rows.find('.btn-move').on('click', function() {
+					rows.find(".btn-move").on("click", function () {
 						const $btn = $(this);
 						const fields = [
 							{
-								fieldname: 'to_warehouse',
-								label: __('To Warehouse'),
-								fieldtype: 'Link',
-								options: 'Warehouse'
-							}
+								fieldname: "to_warehouse",
+								label: __("To Warehouse"),
+								fieldtype: "Link",
+								options: "Warehouse",
+							},
 						];
 
 						frappe.prompt(
 							fields,
 							(data) => {
 								frappe.call({
-									method: 'erpnext.stock.doctype.stock_entry.stock_entry_utils.make_stock_entry',
+									method: "erpnext.stock.doctype.stock_entry.stock_entry_utils.make_stock_entry",
 									args: {
 										item_code: frm.doc.item,
 										batch_no: frm.doc.name,
-										qty: $btn.attr('data-qty'),
-										from_warehouse: $btn.attr('data-warehouse'),
+										qty: $btn.attr("data-qty"),
+										from_warehouse: $btn.attr("data-warehouse"),
 										to_warehouse: data.to_warehouse,
 										source_document: frm.doc.reference_name,
-										reference_doctype: frm.doc.reference_doctype
+										reference_doctype: frm.doc.reference_doctype,
 									},
 									callback: (r) => {
-										frappe.show_alert(__('Stock Entry {0} created',
-											['<a href="/app/stock-entry/'+r.message.name+'">' + r.message.name+ '</a>']));
+										frappe.show_alert(
+											__("Stock Entry {0} created", [
+												'<a href="/app/stock-entry/' +
+													r.message.name +
+													'">' +
+													r.message.name +
+													"</a>",
+											])
+										);
 										frm.refresh();
 									},
 								});
 							},
-							__('Select Target Warehouse'),
-							__('Move')
+							__("Select Target Warehouse"),
+							__("Move")
 						);
 					});
 
 					// split - ask for new qty and batch ID (optional)
 					// and make stock entry via batch.batch_split
-					rows.find('.btn-split').on('click', function() {
+					rows.find(".btn-split").on("click", function () {
 						const $btn = $(this);
-						frappe.prompt([{
-							fieldname: 'qty',
-							label: __('New Batch Qty'),
-							fieldtype: 'Float',
-							'default': $btn.attr('data-qty')
-						},
-						{
-							fieldname: 'new_batch_id',
-							label: __('New Batch ID (Optional)'),
-							fieldtype: 'Data',
-						}],
-						(data) => {
-							frappe.xcall(
-								'erpnext.stock.doctype.batch.batch.split_batch',
+						frappe.prompt(
+							[
 								{
-									item_code: frm.doc.item,
-									batch_no: frm.doc.name,
-									qty: data.qty,
-									warehouse: $btn.attr('data-warehouse'),
-									new_batch_id: data.new_batch_id
-								}
-							).then(() => frm.reload_doc());
-						},
-						__('Split Batch'),
-						__('Split')
+									fieldname: "qty",
+									label: __("New Batch Qty"),
+									fieldtype: "Float",
+									default: $btn.attr("data-qty"),
+								},
+								{
+									fieldname: "new_batch_id",
+									label: __("New Batch ID (Optional)"),
+									fieldtype: "Data",
+								},
+							],
+							(data) => {
+								frappe
+									.xcall("erpnext.stock.doctype.batch.batch.split_batch", {
+										item_code: frm.doc.item,
+										batch_no: frm.doc.name,
+										qty: data.qty,
+										warehouse: $btn.attr("data-warehouse"),
+										new_batch_id: data.new_batch_id,
+									})
+									.then(() => frm.reload_doc());
+							},
+							__("Split Batch"),
+							__("Split")
 						);
-					})
+					});
 
 					frm.dashboard.show();
-				}
+				},
 			});
 		}
-	}
-})
+	},
+});
 
-frappe.ui.form.on('Batch', 'manufacturing_date', function (frm){
-	frappe.db.get_value('Item', {name: frm.doc.item}, ['shelf_life_in_days', 'has_expiry_date'], (r) => {
+frappe.ui.form.on("Batch", "manufacturing_date", function (frm) {
+	frappe.db.get_value("Item", { name: frm.doc.item }, ["shelf_life_in_days", "has_expiry_date"], (r) => {
 		if (r.has_expiry_date && r.shelf_life_in_days) {
 			// Calculate expiry date based on shelf_life_in_days
-			frm.set_value('expiry_date', frappe.datetime.add_days(frm.doc.manufacturing_date, r.shelf_life_in_days));
+			frm.set_value(
+				"expiry_date",
+				frappe.datetime.add_days(frm.doc.manufacturing_date, r.shelf_life_in_days)
+			);
 		}
-	})
-})
+	});
+});
diff --git a/erpnext/stock/doctype/batch/batch_list.js b/erpnext/stock/doctype/batch/batch_list.js
index f1a0643..2060d6e 100644
--- a/erpnext/stock/doctype/batch/batch_list.js
+++ b/erpnext/stock/doctype/batch/batch_list.js
@@ -1,14 +1,21 @@
-frappe.listview_settings['Batch'] = {
+frappe.listview_settings["Batch"] = {
 	add_fields: ["item", "expiry_date", "batch_qty", "disabled"],
 	get_indicator: (doc) => {
 		if (doc.disabled) {
 			return [__("Disabled"), "gray", "disabled,=,1"];
 		} else if (!doc.batch_qty) {
 			return [__("Empty"), "gray", "batch_qty,=,0|disabled,=,0"];
-		} else if (doc.expiry_date && frappe.datetime.get_diff(doc.expiry_date, frappe.datetime.nowdate()) <= 0) {
-			return [__("Expired"), "red", "expiry_date,not in,|expiry_date,<=,Today|batch_qty,>,0|disabled,=,0"]
+		} else if (
+			doc.expiry_date &&
+			frappe.datetime.get_diff(doc.expiry_date, frappe.datetime.nowdate()) <= 0
+		) {
+			return [
+				__("Expired"),
+				"red",
+				"expiry_date,not in,|expiry_date,<=,Today|batch_qty,>,0|disabled,=,0",
+			];
 		} else {
 			return [__("Active"), "green", "batch_qty,>,0|disabled,=,0"];
 		}
-	}
+	},
 };
diff --git a/erpnext/stock/doctype/bin/bin.js b/erpnext/stock/doctype/bin/bin.js
index 40411b6..02ff8b6 100644
--- a/erpnext/stock/doctype/bin/bin.js
+++ b/erpnext/stock/doctype/bin/bin.js
@@ -1,8 +1,6 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Bin', {
-	refresh: function(frm) {
-
-	}
+frappe.ui.form.on("Bin", {
+	refresh: function (frm) {},
 });
diff --git a/erpnext/stock/doctype/closing_stock_balance/closing_stock_balance.js b/erpnext/stock/doctype/closing_stock_balance/closing_stock_balance.js
index 5c807a8..0f0221f 100644
--- a/erpnext/stock/doctype/closing_stock_balance/closing_stock_balance.js
+++ b/erpnext/stock/doctype/closing_stock_balance/closing_stock_balance.js
@@ -16,9 +16,9 @@
 					freeze: true,
 					callback: () => {
 						frm.reload_doc();
-					}
-				})
-			})
+					},
+				});
+			});
 		}
 	},
 
@@ -31,9 +31,9 @@
 					freeze: true,
 					callback: () => {
 						frm.reload_doc();
-					}
-				})
-			})
+					},
+				});
+			});
 		}
-	}
+	},
 });
diff --git a/erpnext/stock/doctype/customs_tariff_number/customs_tariff_number.js b/erpnext/stock/doctype/customs_tariff_number/customs_tariff_number.js
index a39414c..bb60ee7 100644
--- a/erpnext/stock/doctype/customs_tariff_number/customs_tariff_number.js
+++ b/erpnext/stock/doctype/customs_tariff_number/customs_tariff_number.js
@@ -1,8 +1,6 @@
 // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Customs Tariff Number', {
-	refresh: function(frm) {
-
-	}
+frappe.ui.form.on("Customs Tariff Number", {
+	refresh: function (frm) {},
 });
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.js b/erpnext/stock/doctype/delivery_note/delivery_note.js
index 14aedca..c04d5c1 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.js
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.js
@@ -1,7 +1,7 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-cur_frm.add_fetch('customer', 'tax_id', 'tax_id');
+cur_frm.add_fetch("customer", "tax_id", "tax_id");
 
 frappe.provide("erpnext.stock");
 frappe.provide("erpnext.stock.delivery_note");
@@ -11,138 +11,148 @@
 erpnext.accounts.taxes.setup_tax_validations("Delivery Note");
 erpnext.sales_common.setup_selling_controller();
 
-
 frappe.ui.form.on("Delivery Note", {
-	setup: function(frm) {
-		frm.custom_make_buttons = {
-			'Packing Slip': 'Packing Slip',
-			'Installation Note': 'Installation Note',
-			'Sales Invoice': 'Sales Invoice',
-			'Stock Entry': 'Return',
-			'Shipment': 'Shipment'
-		},
-		frm.set_indicator_formatter('item_code',
-			function(doc) {
-				return (doc.docstatus==1 || doc.qty<=doc.actual_qty) ? "green" : "orange"
-			})
+	setup: function (frm) {
+		(frm.custom_make_buttons = {
+			"Packing Slip": "Packing Slip",
+			"Installation Note": "Installation Note",
+			"Sales Invoice": "Sales Invoice",
+			"Stock Entry": "Return",
+			Shipment: "Shipment",
+		}),
+			frm.set_indicator_formatter("item_code", function (doc) {
+				return doc.docstatus == 1 || doc.qty <= doc.actual_qty ? "green" : "orange";
+			});
 
-		erpnext.queries.setup_queries(frm, "Warehouse", function() {
+		erpnext.queries.setup_queries(frm, "Warehouse", function () {
 			return erpnext.queries.warehouse(frm.doc);
 		});
 		erpnext.queries.setup_warehouse_query(frm);
 
-		frm.set_query('transporter', function() {
+		frm.set_query("transporter", function () {
 			return {
 				filters: {
-					'is_transporter': 1
-				}
-			}
+					is_transporter: 1,
+				},
+			};
 		});
 
-		frm.set_query('driver', function(doc) {
+		frm.set_query("driver", function (doc) {
 			return {
 				filters: {
-					'transporter': doc.transporter
-				}
-			}
+					transporter: doc.transporter,
+				},
+			};
 		});
 
-
-		frm.set_query('expense_account', 'items', function(doc, cdt, cdn) {
+		frm.set_query("expense_account", "items", function (doc, cdt, cdn) {
 			if (erpnext.is_perpetual_inventory_enabled(doc.company)) {
 				return {
 					filters: {
-						"report_type": "Profit and Loss",
-						"company": doc.company,
-						"is_group": 0
-					}
-				}
+						report_type: "Profit and Loss",
+						company: doc.company,
+						is_group: 0,
+					},
+				};
 			}
 		});
 
-		frm.set_query('cost_center', 'items', function(doc, cdt, cdn) {
+		frm.set_query("cost_center", "items", function (doc, cdt, cdn) {
 			if (erpnext.is_perpetual_inventory_enabled(doc.company)) {
 				return {
 					filters: {
-						'company': doc.company,
-						"is_group": 0
-					}
-				}
+						company: doc.company,
+						is_group: 0,
+					},
+				};
 			}
 		});
 
-		frm.set_df_property('packed_items', 'cannot_add_rows', true);
-		frm.set_df_property('packed_items', 'cannot_delete_rows', true);
+		frm.set_df_property("packed_items", "cannot_add_rows", true);
+		frm.set_df_property("packed_items", "cannot_delete_rows", true);
 	},
 
-	print_without_amount: function(frm) {
+	print_without_amount: function (frm) {
 		erpnext.stock.delivery_note.set_print_hide(frm.doc);
 	},
 
-	refresh: function(frm) {
+	refresh: function (frm) {
 		if (frm.doc.docstatus === 1 && frm.doc.is_return === 1 && frm.doc.per_billed !== 100) {
-			frm.add_custom_button(__('Credit Note'), function() {
-				frappe.model.open_mapped_doc({
-					method: "erpnext.stock.doctype.delivery_note.delivery_note.make_sales_invoice",
-					frm: cur_frm,
-				})
-			}, __('Create'));
-			frm.page.set_inner_btn_group_as_primary(__('Create'));
+			frm.add_custom_button(
+				__("Credit Note"),
+				function () {
+					frappe.model.open_mapped_doc({
+						method: "erpnext.stock.doctype.delivery_note.delivery_note.make_sales_invoice",
+						frm: cur_frm,
+					});
+				},
+				__("Create")
+			);
+			frm.page.set_inner_btn_group_as_primary(__("Create"));
 		}
 
 		if (frm.doc.docstatus == 1 && !frm.doc.inter_company_reference) {
 			let internal = frm.doc.is_internal_customer;
 			if (internal) {
-				let button_label = (frm.doc.company === frm.doc.represents_company) ? "Internal Purchase Receipt" :
-					"Inter Company Purchase Receipt";
+				let button_label =
+					frm.doc.company === frm.doc.represents_company
+						? "Internal Purchase Receipt"
+						: "Inter Company Purchase Receipt";
 
-				frm.add_custom_button(__(button_label), function() {
-					frappe.model.open_mapped_doc({
-						method: 'erpnext.stock.doctype.delivery_note.delivery_note.make_inter_company_purchase_receipt',
-						frm: frm,
-					});
-				}, __('Create'));
+				frm.add_custom_button(
+					__(button_label),
+					function () {
+						frappe.model.open_mapped_doc({
+							method: "erpnext.stock.doctype.delivery_note.delivery_note.make_inter_company_purchase_receipt",
+							frm: frm,
+						});
+					},
+					__("Create")
+				);
 			}
 		}
-	}
+	},
 });
 
 frappe.ui.form.on("Delivery Note Item", {
-	expense_account: function(frm, dt, dn) {
+	expense_account: function (frm, dt, dn) {
 		var d = locals[dt][dn];
-		frm.update_in_all_rows('items', 'expense_account', d.expense_account);
+		frm.update_in_all_rows("items", "expense_account", d.expense_account);
 	},
-	cost_center: function(frm, dt, dn) {
+	cost_center: function (frm, dt, dn) {
 		var d = locals[dt][dn];
-		frm.update_in_all_rows('items', 'cost_center', d.cost_center);
-	}
+		frm.update_in_all_rows("items", "cost_center", d.cost_center);
+	},
 });
 
-erpnext.stock.DeliveryNoteController = class DeliveryNoteController extends erpnext.selling.SellingController {
+erpnext.stock.DeliveryNoteController = class DeliveryNoteController extends (
+	erpnext.selling.SellingController
+) {
 	setup(doc) {
 		this.setup_posting_date_time_check();
 		super.setup(doc);
 		this.frm.make_methods = {
-			'Delivery Trip': this.make_delivery_trip,
+			"Delivery Trip": this.make_delivery_trip,
 		};
 	}
 	refresh(doc, dt, dn) {
 		var me = this;
 		super.refresh();
-		if ((!doc.is_return) && (doc.status!="Closed" || this.frm.is_new())) {
-			if (this.frm.doc.docstatus===0) {
-				this.frm.add_custom_button(__('Sales Order'),
-					function() {
+		if (!doc.is_return && (doc.status != "Closed" || this.frm.is_new())) {
+			if (this.frm.doc.docstatus === 0) {
+				this.frm.add_custom_button(
+					__("Sales Order"),
+					function () {
 						if (!me.frm.doc.customer) {
 							frappe.throw({
 								title: __("Mandatory"),
-								message: __("Please Select a Customer")
+								message: __("Please Select a Customer"),
 							});
 						}
 						erpnext.utils.map_current_doc({
 							method: "erpnext.selling.doctype.sales_order.sales_order.make_delivery_note",
 							args: {
-								for_reserved_stock: 1
+								for_reserved_stock: 1,
 							},
 							source_doctype: "Sales Order",
 							target: me.frm,
@@ -155,45 +165,71 @@
 								per_delivered: ["<", 99.99],
 								company: me.frm.doc.company,
 								project: me.frm.doc.project || undefined,
-							}
-						})
-					}, __("Get Items From"));
+							},
+						});
+					},
+					__("Get Items From")
+				);
 			}
 		}
 
-		if (!doc.is_return && doc.status!="Closed") {
-			if(doc.docstatus == 1) {
-				this.frm.add_custom_button(__('Shipment'), function() {
-					me.make_shipment() }, __('Create'));
+		if (!doc.is_return && doc.status != "Closed") {
+			if (doc.docstatus == 1) {
+				this.frm.add_custom_button(
+					__("Shipment"),
+					function () {
+						me.make_shipment();
+					},
+					__("Create")
+				);
 			}
 
-			if(flt(doc.per_installed, 2) < 100 && doc.docstatus==1)
-				this.frm.add_custom_button(__('Installation Note'), function() {
-					me.make_installation_note() }, __('Create'));
+			if (flt(doc.per_installed, 2) < 100 && doc.docstatus == 1)
+				this.frm.add_custom_button(
+					__("Installation Note"),
+					function () {
+						me.make_installation_note();
+					},
+					__("Create")
+				);
 
-			if (doc.docstatus==1) {
-				this.frm.add_custom_button(__('Sales Return'), function() {
-					me.make_sales_return() }, __('Create'));
+			if (doc.docstatus == 1) {
+				this.frm.add_custom_button(
+					__("Sales Return"),
+					function () {
+						me.make_sales_return();
+					},
+					__("Create")
+				);
 			}
 
-			if (doc.docstatus==1) {
-				this.frm.add_custom_button(__('Delivery Trip'), function() {
-					me.make_delivery_trip() }, __('Create'));
+			if (doc.docstatus == 1) {
+				this.frm.add_custom_button(
+					__("Delivery Trip"),
+					function () {
+						me.make_delivery_trip();
+					},
+					__("Create")
+				);
 			}
 
-			if(doc.docstatus==0 && !doc.__islocal) {
+			if (doc.docstatus == 0 && !doc.__islocal) {
 				if (doc.__onload && doc.__onload.has_unpacked_items) {
-					this.frm.add_custom_button(__('Packing Slip'), function() {
-						frappe.model.open_mapped_doc({
-							method: "erpnext.stock.doctype.delivery_note.delivery_note.make_packing_slip",
-							frm: me.frm
-						}) }, __('Create')
+					this.frm.add_custom_button(
+						__("Packing Slip"),
+						function () {
+							frappe.model.open_mapped_doc({
+								method: "erpnext.stock.doctype.delivery_note.delivery_note.make_packing_slip",
+								frm: me.frm,
+							});
+						},
+						__("Create")
 					);
 				}
 			}
 
-			if (!doc.__islocal && doc.docstatus==1) {
-				this.frm.page.set_inner_btn_group_as_primary(__('Create'));
+			if (!doc.__islocal && doc.docstatus == 1) {
+				this.frm.page.set_inner_btn_group_as_primary(__("Create"));
 			}
 		}
 
@@ -206,27 +242,42 @@
 				this.show_general_ledger();
 			}
 			if (this.frm.has_perm("submit") && doc.status !== "Closed") {
-				me.frm.add_custom_button(__("Close"), function() { me.close_delivery_note() },
-					__("Status"))
+				me.frm.add_custom_button(
+					__("Close"),
+					function () {
+						me.close_delivery_note();
+					},
+					__("Status")
+				);
 			}
 		}
 
-		if(doc.docstatus==1 && !doc.is_return && doc.status!="Closed" && flt(doc.per_billed) < 100) {
+		if (doc.docstatus == 1 && !doc.is_return && doc.status != "Closed" && flt(doc.per_billed) < 100) {
 			// show Make Invoice button only if Delivery Note is not created from Sales Invoice
 			var from_sales_invoice = false;
-			from_sales_invoice = me.frm.doc.items.some(function(item) {
+			from_sales_invoice = me.frm.doc.items.some(function (item) {
 				return item.against_sales_invoice ? true : false;
 			});
 
-			if(!from_sales_invoice) {
-				this.frm.add_custom_button(__('Sales Invoice'), function() { me.make_sales_invoice() },
-					__('Create'));
+			if (!from_sales_invoice) {
+				this.frm.add_custom_button(
+					__("Sales Invoice"),
+					function () {
+						me.make_sales_invoice();
+					},
+					__("Create")
+				);
 			}
 		}
 
-		if(doc.docstatus==1 && doc.status === "Closed" && this.frm.has_perm("submit")) {
-			this.frm.add_custom_button(__('Reopen'), function() { me.reopen_delivery_note() },
-				__("Status"))
+		if (doc.docstatus == 1 && doc.status === "Closed" && this.frm.has_perm("submit")) {
+			this.frm.add_custom_button(
+				__("Reopen"),
+				function () {
+					me.reopen_delivery_note();
+				},
+				__("Status")
+			);
 		}
 		erpnext.stock.delivery_note.set_print_hide(doc, dt, dn);
 	}
@@ -234,36 +285,36 @@
 	make_shipment() {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.stock.doctype.delivery_note.delivery_note.make_shipment",
-			frm: this.frm
-		})
+			frm: this.frm,
+		});
 	}
 
 	make_sales_invoice() {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.stock.doctype.delivery_note.delivery_note.make_sales_invoice",
-			frm: this.frm
-		})
+			frm: this.frm,
+		});
 	}
 
 	make_installation_note() {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.stock.doctype.delivery_note.delivery_note.make_installation_note",
-			frm: this.frm
+			frm: this.frm,
 		});
 	}
 
 	make_sales_return() {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.stock.doctype.delivery_note.delivery_note.make_sales_return",
-			frm: this.frm
-		})
+			frm: this.frm,
+		});
 	}
 
 	make_delivery_trip() {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.stock.doctype.delivery_note.delivery_note.make_delivery_trip",
-			frm: cur_frm
-		})
+			frm: cur_frm,
+		});
 	}
 
 	tc_name() {
@@ -278,96 +329,91 @@
 		erpnext.setup_serial_or_batch_no();
 	}
 
-	close_delivery_note(doc){
-		this.update_status("Closed")
+	close_delivery_note(doc) {
+		this.update_status("Closed");
 	}
 
 	reopen_delivery_note() {
-		this.update_status("Submitted")
+		this.update_status("Submitted");
 	}
 
 	update_status(status) {
 		var me = this;
 		frappe.ui.form.is_saving = true;
 		frappe.call({
-			method:"erpnext.stock.doctype.delivery_note.delivery_note.update_delivery_note_status",
-			args: {docname: me.frm.doc.name, status: status},
-			callback: function(r){
-				if(!r.exc)
-					me.frm.reload_doc();
+			method: "erpnext.stock.doctype.delivery_note.delivery_note.update_delivery_note_status",
+			args: { docname: me.frm.doc.name, status: status },
+			callback: function (r) {
+				if (!r.exc) me.frm.reload_doc();
 			},
-			always: function(){
+			always: function () {
 				frappe.ui.form.is_saving = false;
-			}
-		})
+			},
+		});
 	}
 };
 
-extend_cscript(cur_frm.cscript, new erpnext.stock.DeliveryNoteController({frm: cur_frm}));
+extend_cscript(cur_frm.cscript, new erpnext.stock.DeliveryNoteController({ frm: cur_frm }));
 
-frappe.ui.form.on('Delivery Note', {
-	setup: function(frm) {
-		if(frm.doc.company) {
+frappe.ui.form.on("Delivery Note", {
+	setup: function (frm) {
+		if (frm.doc.company) {
 			frm.trigger("unhide_account_head");
 		}
 	},
 
-	company: function(frm) {
+	company: function (frm) {
 		frm.trigger("unhide_account_head");
 		erpnext.accounts.dimensions.update_dimension(frm, frm.doctype);
 	},
 
-	unhide_account_head: function(frm) {
+	unhide_account_head: function (frm) {
 		// unhide expense_account and cost_center if perpetual inventory is enabled in the company
-		var aii_enabled = erpnext.is_perpetual_inventory_enabled(frm.doc.company)
+		var aii_enabled = erpnext.is_perpetual_inventory_enabled(frm.doc.company);
 		frm.fields_dict["items"].grid.set_column_disp(["expense_account", "cost_center"], aii_enabled);
-	}
-})
+	},
+});
 
-
-erpnext.stock.delivery_note.set_print_hide = function(doc, cdt, cdn){
-	var dn_fields = frappe.meta.docfield_map['Delivery Note'];
-	var dn_item_fields = frappe.meta.docfield_map['Delivery Note Item'];
+erpnext.stock.delivery_note.set_print_hide = function (doc, cdt, cdn) {
+	var dn_fields = frappe.meta.docfield_map["Delivery Note"];
+	var dn_item_fields = frappe.meta.docfield_map["Delivery Note Item"];
 	var dn_fields_copy = dn_fields;
 	var dn_item_fields_copy = dn_item_fields;
 	if (doc.print_without_amount) {
-		dn_fields['currency'].print_hide = 1;
-		dn_item_fields['rate'].print_hide = 1;
-		dn_item_fields['discount_percentage'].print_hide = 1;
-		dn_item_fields['price_list_rate'].print_hide = 1;
-		dn_item_fields['amount'].print_hide = 1;
-		dn_item_fields['discount_amount'].print_hide = 1;
-		dn_fields['taxes'].print_hide = 1;
+		dn_fields["currency"].print_hide = 1;
+		dn_item_fields["rate"].print_hide = 1;
+		dn_item_fields["discount_percentage"].print_hide = 1;
+		dn_item_fields["price_list_rate"].print_hide = 1;
+		dn_item_fields["amount"].print_hide = 1;
+		dn_item_fields["discount_amount"].print_hide = 1;
+		dn_fields["taxes"].print_hide = 1;
 	} else {
-		if (dn_fields_copy['currency'].print_hide != 1)
-			dn_fields['currency'].print_hide = 0;
-		if (dn_item_fields_copy['rate'].print_hide != 1)
-			dn_item_fields['rate'].print_hide = 0;
-		if (dn_item_fields_copy['amount'].print_hide != 1)
-			dn_item_fields['amount'].print_hide = 0;
-		if (dn_item_fields_copy['discount_amount'].print_hide != 1)
-			dn_item_fields['discount_amount'].print_hide = 0;
-		if (dn_fields_copy['taxes'].print_hide != 1)
-			dn_fields['taxes'].print_hide = 0;
+		if (dn_fields_copy["currency"].print_hide != 1) dn_fields["currency"].print_hide = 0;
+		if (dn_item_fields_copy["rate"].print_hide != 1) dn_item_fields["rate"].print_hide = 0;
+		if (dn_item_fields_copy["amount"].print_hide != 1) dn_item_fields["amount"].print_hide = 0;
+		if (dn_item_fields_copy["discount_amount"].print_hide != 1)
+			dn_item_fields["discount_amount"].print_hide = 0;
+		if (dn_fields_copy["taxes"].print_hide != 1) dn_fields["taxes"].print_hide = 0;
 	}
-}
+};
 
-
-frappe.tour['Delivery Note'] = [
+frappe.tour["Delivery Note"] = [
 	{
 		fieldname: "customer",
 		title: __("Customer"),
-		description: __("This field is used to set the 'Customer'.")
+		description: __("This field is used to set the 'Customer'."),
 	},
 	{
 		fieldname: "items",
 		title: __("Items"),
-		description: __("This table is used to set details about the 'Item', 'Qty', 'Basic Rate', etc.") + " " +
-		__("Different 'Source Warehouse' and 'Target Warehouse' can be set for each row.")
+		description:
+			__("This table is used to set details about the 'Item', 'Qty', 'Basic Rate', etc.") +
+			" " +
+			__("Different 'Source Warehouse' and 'Target Warehouse' can be set for each row."),
 	},
 	{
 		fieldname: "set_posting_time",
 		title: __("Edit Posting Date and Time"),
-		description: __("This option can be checked to edit the 'Posting Date' and 'Posting Time' fields.")
-	}
-]
+		description: __("This option can be checked to edit the 'Posting Date' and 'Posting Time' fields."),
+	},
+];
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note_list.js b/erpnext/stock/doctype/delivery_note/delivery_note_list.js
index 51a899b..c6b98c4 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note_list.js
+++ b/erpnext/stock/doctype/delivery_note/delivery_note_list.js
@@ -1,8 +1,18 @@
-frappe.listview_settings['Delivery Note'] = {
-	add_fields: ["customer", "customer_name", "base_grand_total", "per_installed", "per_billed",
-		"transporter_name", "grand_total", "is_return", "status", "currency"],
-	get_indicator: function(doc) {
-		if(cint(doc.is_return)==1) {
+frappe.listview_settings["Delivery Note"] = {
+	add_fields: [
+		"customer",
+		"customer_name",
+		"base_grand_total",
+		"per_installed",
+		"per_billed",
+		"transporter_name",
+		"grand_total",
+		"is_return",
+		"status",
+		"currency",
+	],
+	get_indicator: function (doc) {
+		if (cint(doc.is_return) == 1) {
 			return [__("Return"), "gray", "is_return,=,Yes"];
 		} else if (doc.status === "Closed") {
 			return [__("Closed"), "green", "status,=,Closed"];
@@ -26,44 +36,43 @@
 					}
 				}
 
-				frappe.new_doc("Delivery Trip")
-					.then(() => {
-						// Empty out the child table before inserting new ones
-						cur_frm.set_value("delivery_stops", []);
+				frappe.new_doc("Delivery Trip").then(() => {
+					// Empty out the child table before inserting new ones
+					cur_frm.set_value("delivery_stops", []);
 
-						// We don't want to use `map_current_doc` since it brings up
-						// the dialog to select more items. We just want the mapper
-						// function to be called.
-						frappe.call({
-							type: "POST",
-							method: "frappe.model.mapper.map_docs",
-							args: {
-								"method": "erpnext.stock.doctype.delivery_note.delivery_note.make_delivery_trip",
-								"source_names": docnames,
-								"target_doc": cur_frm.doc
-							},
-							callback: function (r) {
-								if (!r.exc) {
-									frappe.model.sync(r.message);
-									cur_frm.dirty();
-									cur_frm.refresh();
-								}
+					// We don't want to use `map_current_doc` since it brings up
+					// the dialog to select more items. We just want the mapper
+					// function to be called.
+					frappe.call({
+						type: "POST",
+						method: "frappe.model.mapper.map_docs",
+						args: {
+							method: "erpnext.stock.doctype.delivery_note.delivery_note.make_delivery_trip",
+							source_names: docnames,
+							target_doc: cur_frm.doc,
+						},
+						callback: function (r) {
+							if (!r.exc) {
+								frappe.model.sync(r.message);
+								cur_frm.dirty();
+								cur_frm.refresh();
 							}
-						});
-					})
+						},
+					});
+				});
 			}
 		};
 
 		// doclist.page.add_actions_menu_item(__('Create Delivery Trip'), action, false);
 
-		doclist.page.add_action_item(__('Create Delivery Trip'), action);
+		doclist.page.add_action_item(__("Create Delivery Trip"), action);
 
-		doclist.page.add_action_item(__("Sales Invoice"), ()=>{
+		doclist.page.add_action_item(__("Sales Invoice"), () => {
 			erpnext.bulk_transaction_processing.create(doclist, "Delivery Note", "Sales Invoice");
 		});
 
-		doclist.page.add_action_item(__("Packaging Slip From Delivery Note"), ()=>{
+		doclist.page.add_action_item(__("Packaging Slip From Delivery Note"), () => {
 			erpnext.bulk_transaction_processing.create(doclist, "Delivery Note", "Packing Slip");
 		});
-	}
-}
+	},
+};
diff --git a/erpnext/stock/doctype/delivery_settings/delivery_settings.js b/erpnext/stock/doctype/delivery_settings/delivery_settings.js
index 03aa192..4328158 100644
--- a/erpnext/stock/doctype/delivery_settings/delivery_settings.js
+++ b/erpnext/stock/doctype/delivery_settings/delivery_settings.js
@@ -1,8 +1,6 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Delivery Settings', {
-	refresh: function(frm) {
-
-	}
+frappe.ui.form.on("Delivery Settings", {
+	refresh: function (frm) {},
 });
diff --git a/erpnext/stock/doctype/delivery_trip/delivery_trip.js b/erpnext/stock/doctype/delivery_trip/delivery_trip.js
index 158bd0c..4f8649c 100755
--- a/erpnext/stock/doctype/delivery_trip/delivery_trip.js
+++ b/erpnext/stock/doctype/delivery_trip/delivery_trip.js
@@ -1,15 +1,15 @@
 // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Delivery Trip', {
+frappe.ui.form.on("Delivery Trip", {
 	setup: function (frm) {
-		frm.set_indicator_formatter('customer', (stop) => (stop.visited) ? "green" : "orange");
+		frm.set_indicator_formatter("customer", (stop) => (stop.visited ? "green" : "orange"));
 
 		frm.set_query("driver", function () {
 			return {
 				filters: {
-					"status": "Active"
-				}
+					status: "Active",
+				},
 			};
 		});
 
@@ -17,58 +17,71 @@
 			var row = locals[cdt][cdn];
 			if (row.customer) {
 				return {
-					query: 'frappe.contacts.doctype.address.address.address_query',
+					query: "frappe.contacts.doctype.address.address.address_query",
 					filters: {
 						link_doctype: "Customer",
-						link_name: row.customer
-					}
+						link_name: row.customer,
+					},
 				};
 			}
-		})
+		});
 
 		frm.set_query("contact", "delivery_stops", function (doc, cdt, cdn) {
 			var row = locals[cdt][cdn];
 			if (row.customer) {
 				return {
-					query: 'frappe.contacts.doctype.contact.contact.contact_query',
+					query: "frappe.contacts.doctype.contact.contact.contact_query",
 					filters: {
 						link_doctype: "Customer",
-						link_name: row.customer
-					}
+						link_name: row.customer,
+					},
 				};
 			}
-		})
+		});
 	},
 
 	refresh: function (frm) {
 		if (frm.doc.docstatus == 1 && frm.doc.delivery_stops.length > 0) {
 			frm.add_custom_button(__("Notify Customers via Email"), function () {
-				frm.trigger('notify_customers');
+				frm.trigger("notify_customers");
 			});
 		}
 
 		if (frm.doc.docstatus === 0) {
-			frm.add_custom_button(__('Delivery Note'), () => {
-				erpnext.utils.map_current_doc({
-					method: "erpnext.stock.doctype.delivery_note.delivery_note.make_delivery_trip",
-					source_doctype: "Delivery Note",
-					target: frm,
-					date_field: "posting_date",
-					setters: {
-						company: frm.doc.company,
-					},
-					get_query_filters: {
-						docstatus: 1,
-						company: frm.doc.company,
-					}
-				})
-			}, __("Get stops from"));
-		}
-		frm.add_custom_button(__("Delivery Notes"), function () {
-			frappe.set_route("List", "Delivery Note",
-					{'name': ["in", frm.doc.delivery_stops.map((stop) => {return stop.delivery_note;})]}
+			frm.add_custom_button(
+				__("Delivery Note"),
+				() => {
+					erpnext.utils.map_current_doc({
+						method: "erpnext.stock.doctype.delivery_note.delivery_note.make_delivery_trip",
+						source_doctype: "Delivery Note",
+						target: frm,
+						date_field: "posting_date",
+						setters: {
+							company: frm.doc.company,
+						},
+						get_query_filters: {
+							docstatus: 1,
+							company: frm.doc.company,
+						},
+					});
+				},
+				__("Get stops from")
 			);
-		}, __("View"));
+		}
+		frm.add_custom_button(
+			__("Delivery Notes"),
+			function () {
+				frappe.set_route("List", "Delivery Note", {
+					name: [
+						"in",
+						frm.doc.delivery_stops.map((stop) => {
+							return stop.delivery_note;
+						}),
+					],
+				});
+			},
+			__("View")
+		);
 	},
 
 	calculate_arrival_time: function (frm) {
@@ -77,13 +90,17 @@
 		}
 		frappe.show_alert({
 			message: "Calculating Arrival Times",
-			indicator: 'orange'
+			indicator: "orange",
 		});
-		frm.call("process_route", {
-			optimize: false,
-		}, () => {
-			frm.reload_doc();
-		});
+		frm.call(
+			"process_route",
+			{
+				optimize: false,
+			},
+			() => {
+				frm.reload_doc();
+			}
+		);
 	},
 
 	driver: function (frm) {
@@ -91,11 +108,11 @@
 			frappe.call({
 				method: "erpnext.stock.doctype.delivery_trip.delivery_trip.get_driver_email",
 				args: {
-					driver: frm.doc.driver
+					driver: frm.doc.driver,
 				},
 				callback: (data) => {
 					frm.set_value("driver_email", data.message.email);
-				}
+				},
 			});
 		}
 	},
@@ -106,23 +123,27 @@
 		}
 		frappe.show_alert({
 			message: "Optimizing Route",
-			indicator: 'orange'
+			indicator: "orange",
 		});
-		frm.call("process_route", {
-			optimize: true,
-		}, () => {
-			frm.reload_doc();
-		});
+		frm.call(
+			"process_route",
+			{
+				optimize: true,
+			},
+			() => {
+				frm.reload_doc();
+			}
+		);
 	},
 
 	notify_customers: function (frm) {
 		$.each(frm.doc.delivery_stops || [], function (i, delivery_stop) {
 			if (!delivery_stop.delivery_note) {
 				frappe.msgprint({
-					"message": __("No Delivery Note selected for Customer {}", [delivery_stop.customer]),
-					"title": __("Warning"),
-					"indicator": "orange",
-					"alert": 1
+					message: __("No Delivery Note selected for Customer {}", [delivery_stop.customer]),
+					title: __("Warning"),
+					indicator: "orange",
+					alert: 1,
 				});
 			}
 		});
@@ -135,48 +156,45 @@
 					frappe.call({
 						method: "erpnext.stock.doctype.delivery_trip.delivery_trip.notify_customers",
 						args: {
-							"delivery_trip": frm.doc.name
+							delivery_trip: frm.doc.name,
 						},
 						callback: function (r) {
 							if (!r.exc) {
 								frm.doc.email_notification_sent = true;
-								frm.refresh_field('email_notification_sent');
+								frm.refresh_field("email_notification_sent");
 							}
-						}
+						},
 					});
 				});
 			}
 		});
-	}
+	},
 });
 
-frappe.ui.form.on('Delivery Stop', {
+frappe.ui.form.on("Delivery Stop", {
 	customer: function (frm, cdt, cdn) {
 		var row = locals[cdt][cdn];
 		if (row.customer) {
 			frappe.call({
 				method: "erpnext.stock.doctype.delivery_trip.delivery_trip.get_contact_and_address",
-				args: { "name": row.customer },
+				args: { name: row.customer },
 				callback: function (r) {
 					if (r.message) {
 						if (r.message["shipping_address"]) {
 							frappe.model.set_value(cdt, cdn, "address", r.message["shipping_address"].parent);
-						}
-						else {
-							frappe.model.set_value(cdt, cdn, "address", '');
+						} else {
+							frappe.model.set_value(cdt, cdn, "address", "");
 						}
 						if (r.message["contact_person"]) {
 							frappe.model.set_value(cdt, cdn, "contact", r.message["contact_person"].parent);
+						} else {
+							frappe.model.set_value(cdt, cdn, "contact", "");
 						}
-						else {
-							frappe.model.set_value(cdt, cdn, "contact", '');
-						}
+					} else {
+						frappe.model.set_value(cdt, cdn, "address", "");
+						frappe.model.set_value(cdt, cdn, "contact", "");
 					}
-					else {
-						frappe.model.set_value(cdt, cdn, "address", '');
-						frappe.model.set_value(cdt, cdn, "contact", '');
-					}
-				}
+				},
 			});
 		}
 	},
@@ -186,12 +204,12 @@
 		if (row.address) {
 			frappe.call({
 				method: "frappe.contacts.doctype.address.address.get_address_display",
-				args: { "address_dict": row.address },
+				args: { address_dict: row.address },
 				callback: function (r) {
 					if (r.message) {
 						frappe.model.set_value(cdt, cdn, "customer_address", r.message);
 					}
-				}
+				},
 			});
 		} else {
 			frappe.model.set_value(cdt, cdn, "customer_address", "");
@@ -203,15 +221,15 @@
 		if (row.contact) {
 			frappe.call({
 				method: "erpnext.stock.doctype.delivery_trip.delivery_trip.get_contact_display",
-				args: { "contact": row.contact },
+				args: { contact: row.contact },
 				callback: function (r) {
 					if (r.message) {
 						frappe.model.set_value(cdt, cdn, "customer_contact", r.message);
 					}
-				}
+				},
 			});
 		} else {
 			frappe.model.set_value(cdt, cdn, "customer_contact", "");
 		}
-	}
+	},
 });
diff --git a/erpnext/stock/doctype/delivery_trip/delivery_trip_list.js b/erpnext/stock/doctype/delivery_trip/delivery_trip_list.js
index 1d198b7..230107c 100644
--- a/erpnext/stock/doctype/delivery_trip/delivery_trip_list.js
+++ b/erpnext/stock/doctype/delivery_trip/delivery_trip_list.js
@@ -1,4 +1,4 @@
-frappe.listview_settings['Delivery Trip'] = {
+frappe.listview_settings["Delivery Trip"] = {
 	add_fields: ["status"],
 	get_indicator: function (doc) {
 		if (in_list(["Cancelled", "Draft"], doc.status)) {
@@ -8,5 +8,5 @@
 		} else if (doc.status === "Completed") {
 			return [__(doc.status), "green", "status,=," + doc.status];
 		}
-	}
+	},
 };
diff --git a/erpnext/stock/doctype/inventory_dimension/inventory_dimension.js b/erpnext/stock/doctype/inventory_dimension/inventory_dimension.js
index 35d1c02..c819d17 100644
--- a/erpnext/stock/doctype/inventory_dimension/inventory_dimension.js
+++ b/erpnext/stock/doctype/inventory_dimension/inventory_dimension.js
@@ -1,43 +1,59 @@
 // Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Inventory Dimension', {
+frappe.ui.form.on("Inventory Dimension", {
 	setup(frm) {
-		frm.trigger('set_query_on_fields');
+		frm.trigger("set_query_on_fields");
 	},
 
 	set_query_on_fields(frm) {
-		frm.set_query('reference_document', () => {
+		frm.set_query("reference_document", () => {
 			let invalid_doctypes = frappe.model.core_doctypes_list;
-			invalid_doctypes.push('Batch', 'Serial No', 'Warehouse', 'Item', 'Inventory Dimension',
-				'Accounting Dimension', 'Accounting Dimension Filter');
+			invalid_doctypes.push(
+				"Batch",
+				"Serial No",
+				"Warehouse",
+				"Item",
+				"Inventory Dimension",
+				"Accounting Dimension",
+				"Accounting Dimension Filter"
+			);
 
 			return {
 				filters: {
-					'istable': 0,
-					'issingle': 0,
-					'name': ['not in', invalid_doctypes]
-				}
+					istable: 0,
+					issingle: 0,
+					name: ["not in", invalid_doctypes],
+				},
 			};
 		});
 
-		frm.set_query('document_type', () => {
+		frm.set_query("document_type", () => {
 			return {
-				query: 'erpnext.stock.doctype.inventory_dimension.inventory_dimension.get_inventory_documents',
+				query: "erpnext.stock.doctype.inventory_dimension.inventory_dimension.get_inventory_documents",
 			};
 		});
 	},
 
 	onload(frm) {
-		frm.trigger('render_traget_field');
+		frm.trigger("render_traget_field");
 		frm.trigger("set_parent_fields");
 	},
 
 	refresh(frm) {
-		if (frm.doc.__onload && frm.doc.__onload.has_stock_ledger
-			&& frm.doc.__onload.has_stock_ledger.length) {
-			let allow_to_edit_fields = ['disabled', 'fetch_from_parent',
-				'type_of_transaction', 'condition', 'mandatory_depends_on', 'validate_negative_stock'];
+		if (
+			frm.doc.__onload &&
+			frm.doc.__onload.has_stock_ledger &&
+			frm.doc.__onload.has_stock_ledger.length
+		) {
+			let allow_to_edit_fields = [
+				"disabled",
+				"fetch_from_parent",
+				"type_of_transaction",
+				"condition",
+				"mandatory_depends_on",
+				"validate_negative_stock",
+			];
 
 			frm.fields.forEach((field) => {
 				if (!in_list(allow_to_edit_fields, field.df.fieldname)) {
@@ -47,8 +63,8 @@
 		}
 
 		if (!frm.is_new()) {
-			frm.add_custom_button(__('Delete Dimension'), () => {
-				frm.trigger('delete_dimension');
+			frm.add_custom_button(__("Delete Dimension"), () => {
+				frm.trigger("delete_dimension");
 			});
 		}
 	},
@@ -62,39 +78,38 @@
 			frm.set_df_property("fetch_from_parent", "options", frm.doc.reference_document);
 		} else if (frm.doc.document_type && frm.doc.istable) {
 			frappe.call({
-				method: 'erpnext.stock.doctype.inventory_dimension.inventory_dimension.get_parent_fields',
+				method: "erpnext.stock.doctype.inventory_dimension.inventory_dimension.get_parent_fields",
 				args: {
 					child_doctype: frm.doc.document_type,
-					dimension_name: frm.doc.reference_document
+					dimension_name: frm.doc.reference_document,
 				},
 				callback: (r) => {
 					if (r.message && r.message.length) {
-						frm.set_df_property("fetch_from_parent", "options",
-							[""].concat(r.message));
+						frm.set_df_property("fetch_from_parent", "options", [""].concat(r.message));
 					} else {
 						frm.set_df_property("fetch_from_parent", "hidden", 1);
 					}
-				}
+				},
 			});
 		}
 	},
 
 	delete_dimension(frm) {
-		let msg = (`
+		let msg = `
 			Custom fields related to this dimension will be deleted on deletion of dimension.
 			<br> Do you want to delete {0} dimension?
-		`);
+		`;
 
 		frappe.confirm(__(msg, [frm.doc.name.bold()]), () => {
 			frappe.call({
-				method: 'erpnext.stock.doctype.inventory_dimension.inventory_dimension.delete_dimension',
+				method: "erpnext.stock.doctype.inventory_dimension.inventory_dimension.delete_dimension",
 				args: {
-					dimension: frm.doc.name
+					dimension: frm.doc.name,
 				},
-				callback: function() {
-					frappe.set_route('List', 'Inventory Dimension');
-				}
+				callback: function () {
+					frappe.set_route("List", "Inventory Dimension");
+				},
 			});
 		});
-	}
+	},
 });
diff --git a/erpnext/stock/doctype/item/item.js b/erpnext/stock/doctype/item/item.js
index b964c84..7a38024 100644
--- a/erpnext/stock/doctype/item/item.js
+++ b/erpnext/stock/doctype/item/item.js
@@ -3,48 +3,47 @@
 
 frappe.provide("erpnext.item");
 
-const SALES_DOCTYPES = ['Quotation', 'Sales Order', 'Delivery Note', 'Sales Invoice'];
-const PURCHASE_DOCTYPES = ['Purchase Order', 'Purchase Receipt', 'Purchase Invoice'];
+const SALES_DOCTYPES = ["Quotation", "Sales Order", "Delivery Note", "Sales Invoice"];
+const PURCHASE_DOCTYPES = ["Purchase Order", "Purchase Receipt", "Purchase Invoice"];
 
 frappe.ui.form.on("Item", {
-	setup: function(frm) {
-		frm.add_fetch('attribute', 'numeric_values', 'numeric_values');
-		frm.add_fetch('attribute', 'from_range', 'from_range');
-		frm.add_fetch('attribute', 'to_range', 'to_range');
-		frm.add_fetch('attribute', 'increment', 'increment');
-		frm.add_fetch('tax_type', 'tax_rate', 'tax_rate');
+	setup: function (frm) {
+		frm.add_fetch("attribute", "numeric_values", "numeric_values");
+		frm.add_fetch("attribute", "from_range", "from_range");
+		frm.add_fetch("attribute", "to_range", "to_range");
+		frm.add_fetch("attribute", "increment", "increment");
+		frm.add_fetch("tax_type", "tax_rate", "tax_rate");
 
 		frm.make_methods = {
-			'Sales Order': () => {
+			"Sales Order": () => {
 				open_form(frm, "Sales Order", "Sales Order Item", "items");
 			},
-			'Delivery Note': () => {
+			"Delivery Note": () => {
 				open_form(frm, "Delivery Note", "Delivery Note Item", "items");
 			},
-			'Sales Invoice': () => {
+			"Sales Invoice": () => {
 				open_form(frm, "Sales Invoice", "Sales Invoice Item", "items");
 			},
-			'Purchase Order': () => {
+			"Purchase Order": () => {
 				open_form(frm, "Purchase Order", "Purchase Order Item", "items");
 			},
-			'Purchase Receipt': () => {
+			"Purchase Receipt": () => {
 				open_form(frm, "Purchase Receipt", "Purchase Receipt Item", "items");
 			},
-			'Purchase Invoice': () => {
+			"Purchase Invoice": () => {
 				open_form(frm, "Purchase Invoice", "Purchase Invoice Item", "items");
 			},
-			'Material Request': () => {
+			"Material Request": () => {
 				open_form(frm, "Material Request", "Material Request Item", "items");
 			},
-			'Stock Entry': () => {
+			"Stock Entry": () => {
 				open_form(frm, "Stock Entry", "Stock Entry Detail", "items");
 			},
 		};
-
 	},
-	onload: function(frm) {
+	onload: function (frm) {
 		erpnext.item.setup_queries(frm);
-		if (frm.doc.variant_of){
+		if (frm.doc.variant_of) {
 			frm.fields_dict["attributes"].grid.set_column_disp("attribute_value", true);
 		}
 
@@ -53,73 +52,117 @@
 		}
 	},
 
-	refresh: function(frm) {
+	refresh: function (frm) {
 		if (frm.doc.is_stock_item) {
-			frm.add_custom_button(__("Stock Balance"), function() {
-				frappe.route_options = {
-					"item_code": frm.doc.name
-				}
-				frappe.set_route("query-report", "Stock Balance");
-			}, __("View"));
-			frm.add_custom_button(__("Stock Ledger"), function() {
-				frappe.route_options = {
-					"item_code": frm.doc.name
-				}
-				frappe.set_route("query-report", "Stock Ledger");
-			}, __("View"));
-			frm.add_custom_button(__("Stock Projected Qty"), function() {
-				frappe.route_options = {
-					"item_code": frm.doc.name
-				}
-				frappe.set_route("query-report", "Stock Projected Qty");
-			}, __("View"));
+			frm.add_custom_button(
+				__("Stock Balance"),
+				function () {
+					frappe.route_options = {
+						item_code: frm.doc.name,
+					};
+					frappe.set_route("query-report", "Stock Balance");
+				},
+				__("View")
+			);
+			frm.add_custom_button(
+				__("Stock Ledger"),
+				function () {
+					frappe.route_options = {
+						item_code: frm.doc.name,
+					};
+					frappe.set_route("query-report", "Stock Ledger");
+				},
+				__("View")
+			);
+			frm.add_custom_button(
+				__("Stock Projected Qty"),
+				function () {
+					frappe.route_options = {
+						item_code: frm.doc.name,
+					};
+					frappe.set_route("query-report", "Stock Projected Qty");
+				},
+				__("View")
+			);
 		}
 
-
 		if (frm.doc.is_fixed_asset) {
-			frm.trigger('is_fixed_asset');
-			frm.trigger('auto_create_assets');
+			frm.trigger("is_fixed_asset");
+			frm.trigger("auto_create_assets");
 		}
 
 		// clear intro
 		frm.set_intro();
 
 		if (frm.doc.has_variants) {
-			frm.set_intro(__("This Item is a Template and cannot be used in transactions. Item attributes will be copied over into the variants unless 'No Copy' is set"), true);
+			frm.set_intro(
+				__(
+					"This Item is a Template and cannot be used in transactions. Item attributes will be copied over into the variants unless 'No Copy' is set"
+				),
+				true
+			);
 
-			frm.add_custom_button(__("Show Variants"), function() {
-				frappe.set_route("List", "Item", {"variant_of": frm.doc.name});
-			}, __("View"));
+			frm.add_custom_button(
+				__("Show Variants"),
+				function () {
+					frappe.set_route("List", "Item", { variant_of: frm.doc.name });
+				},
+				__("View")
+			);
 
-			frm.add_custom_button(__("Item Variant Settings"), function() {
-				frappe.set_route("Form", "Item Variant Settings");
-			}, __("View"));
+			frm.add_custom_button(
+				__("Item Variant Settings"),
+				function () {
+					frappe.set_route("Form", "Item Variant Settings");
+				},
+				__("View")
+			);
 
-			frm.add_custom_button(__("Variant Details Report"), function() {
-				frappe.set_route("query-report", "Item Variant Details", {"item": frm.doc.name});
-			}, __("View"));
+			frm.add_custom_button(
+				__("Variant Details Report"),
+				function () {
+					frappe.set_route("query-report", "Item Variant Details", { item: frm.doc.name });
+				},
+				__("View")
+			);
 
-			if(frm.doc.variant_based_on==="Item Attribute") {
-				frm.add_custom_button(__("Single Variant"), function() {
-					erpnext.item.show_single_variant_dialog(frm);
-				}, __('Create'));
-				frm.add_custom_button(__("Multiple Variants"), function() {
-					erpnext.item.show_multiple_variants_dialog(frm);
-				}, __('Create'));
+			if (frm.doc.variant_based_on === "Item Attribute") {
+				frm.add_custom_button(
+					__("Single Variant"),
+					function () {
+						erpnext.item.show_single_variant_dialog(frm);
+					},
+					__("Create")
+				);
+				frm.add_custom_button(
+					__("Multiple Variants"),
+					function () {
+						erpnext.item.show_multiple_variants_dialog(frm);
+					},
+					__("Create")
+				);
 			} else {
-				frm.add_custom_button(__("Variant"), function() {
-					erpnext.item.show_modal_for_manufacturers(frm);
-				}, __('Create'));
+				frm.add_custom_button(
+					__("Variant"),
+					function () {
+						erpnext.item.show_modal_for_manufacturers(frm);
+					},
+					__("Create")
+				);
 			}
 
 			// frm.page.set_inner_btn_group_as_primary(__('Create'));
 		}
 		if (frm.doc.variant_of) {
-			frm.set_intro(__('This Item is a Variant of {0} (Template).',
-				[`<a href="/app/item/${frm.doc.variant_of}" onclick="location.reload()">${frm.doc.variant_of}</a>`]), true);
+			frm.set_intro(
+				__("This Item is a Variant of {0} (Template).", [
+					`<a href="/app/item/${frm.doc.variant_of}" onclick="location.reload()">${frm.doc.variant_of}</a>`,
+				]),
+				true
+			);
 		}
 
-		if (frappe.defaults.get_default("item_naming_by")!="Naming Series" || frm.doc.variant_of) {
+		if (frappe.defaults.get_default("item_naming_by") != "Naming Series" || frm.doc.variant_of) {
 			frm.toggle_display("naming_series", false);
 		} else {
 			erpnext.toggle_naming_series();
@@ -132,341 +175,374 @@
 			erpnext.item.make_dashboard(frm);
 		}
 
-		frm.add_custom_button(__('Duplicate'), function() {
+		frm.add_custom_button(__("Duplicate"), function () {
 			var new_item = frappe.model.copy_doc(frm.doc);
 			// Duplicate item could have different name, causing "copy paste" error.
-			if (new_item.item_name===new_item.item_code) {
+			if (new_item.item_name === new_item.item_code) {
 				new_item.item_name = null;
 			}
-			if (new_item.item_code===new_item.description || new_item.item_code===new_item.description) {
+			if (new_item.item_code === new_item.description || new_item.item_code === new_item.description) {
 				new_item.description = null;
 			}
-			frappe.set_route('Form', 'Item', new_item.name);
+			frappe.set_route("Form", "Item", new_item.name);
 		});
 
-		const stock_exists = (frm.doc.__onload
-			&& frm.doc.__onload.stock_exists) ? 1 : 0;
+		const stock_exists = frm.doc.__onload && frm.doc.__onload.stock_exists ? 1 : 0;
 
-		['is_stock_item', 'has_serial_no', 'has_batch_no', 'has_variants'].forEach((fieldname) => {
-			frm.set_df_property(fieldname, 'read_only', stock_exists);
+		["is_stock_item", "has_serial_no", "has_batch_no", "has_variants"].forEach((fieldname) => {
+			frm.set_df_property(fieldname, "read_only", stock_exists);
 		});
 
-		frm.toggle_reqd('customer', frm.doc.is_customer_provided_item ? 1:0);
+		frm.toggle_reqd("customer", frm.doc.is_customer_provided_item ? 1 : 0);
 	},
 
-	validate: function(frm){
+	validate: function (frm) {
 		erpnext.item.weight_to_validate(frm);
 	},
 
-	image: function() {
+	image: function () {
 		refresh_field("image_view");
 	},
 
-	is_customer_provided_item: function(frm) {
-		frm.toggle_reqd('customer', frm.doc.is_customer_provided_item ? 1:0);
+	is_customer_provided_item: function (frm) {
+		frm.toggle_reqd("customer", frm.doc.is_customer_provided_item ? 1 : 0);
 	},
 
-	is_fixed_asset: function(frm) {
+	is_fixed_asset: function (frm) {
 		// set serial no to false & toggles its visibility
-		frm.set_value('has_serial_no', 0);
-		frm.set_value('has_batch_no', 0);
-		frm.toggle_enable(['has_serial_no', 'serial_no_series'], !frm.doc.is_fixed_asset);
+		frm.set_value("has_serial_no", 0);
+		frm.set_value("has_batch_no", 0);
+		frm.toggle_enable(["has_serial_no", "serial_no_series"], !frm.doc.is_fixed_asset);
 
 		frappe.call({
 			method: "erpnext.stock.doctype.item.item.get_asset_naming_series",
-			callback: function(r) {
+			callback: function (r) {
 				frm.set_value("is_stock_item", frm.doc.is_fixed_asset ? 0 : 1);
 				frm.events.set_asset_naming_series(frm, r.message);
-			}
+			},
 		});
 
-		frm.trigger('auto_create_assets');
+		frm.trigger("auto_create_assets");
 	},
 
-	set_asset_naming_series: function(frm, asset_naming_series) {
+	set_asset_naming_series: function (frm, asset_naming_series) {
 		if ((frm.doc.__onload && frm.doc.__onload.asset_naming_series) || asset_naming_series) {
-			let naming_series = (frm.doc.__onload && frm.doc.__onload.asset_naming_series) || asset_naming_series;
+			let naming_series =
+				(frm.doc.__onload && frm.doc.__onload.asset_naming_series) || asset_naming_series;
 			frm.set_df_property("asset_naming_series", "options", naming_series);
 		}
 	},
 
-	auto_create_assets: function(frm) {
-		frm.toggle_reqd(['asset_naming_series'], frm.doc.auto_create_assets);
-		frm.toggle_display(['asset_naming_series'], frm.doc.auto_create_assets);
+	auto_create_assets: function (frm) {
+		frm.toggle_reqd(["asset_naming_series"], frm.doc.auto_create_assets);
+		frm.toggle_display(["asset_naming_series"], frm.doc.auto_create_assets);
 	},
 
 	page_name: frappe.utils.warn_page_name_change,
 
-	item_code: function(frm) {
-		if(!frm.doc.item_name)
-			frm.set_value("item_name", frm.doc.item_code);
+	item_code: function (frm) {
+		if (!frm.doc.item_name) frm.set_value("item_name", frm.doc.item_code);
 	},
 
-	is_stock_item: function(frm) {
-		if(!frm.doc.is_stock_item) {
+	is_stock_item: function (frm) {
+		if (!frm.doc.is_stock_item) {
 			frm.set_value("has_batch_no", 0);
 			frm.set_value("create_new_batch", 0);
 			frm.set_value("has_serial_no", 0);
 		}
 	},
 
-	has_variants: function(frm) {
+	has_variants: function (frm) {
 		erpnext.item.toggle_attributes(frm);
-	}
+	},
 });
 
-frappe.ui.form.on('Item Reorder', {
-	reorder_levels_add: function(frm, cdt, cdn) {
+frappe.ui.form.on("Item Reorder", {
+	reorder_levels_add: function (frm, cdt, cdn) {
 		var row = frappe.get_doc(cdt, cdn);
-		var type = frm.doc.default_material_request_type
-		row.material_request_type = (type == 'Material Transfer')? 'Transfer' : type;
-	}
-})
-
-frappe.ui.form.on('Item Customer Detail', {
-	customer_items_add: function(frm, cdt, cdn) {
-		frappe.model.set_value(cdt, cdn, 'customer_group', "");
+		var type = frm.doc.default_material_request_type;
+		row.material_request_type = type == "Material Transfer" ? "Transfer" : type;
 	},
-	customer_name: function(frm, cdt, cdn) {
+});
+
+frappe.ui.form.on("Item Customer Detail", {
+	customer_items_add: function (frm, cdt, cdn) {
+		frappe.model.set_value(cdt, cdn, "customer_group", "");
+	},
+	customer_name: function (frm, cdt, cdn) {
 		set_customer_group(frm, cdt, cdn);
 	},
-	customer_group: function(frm, cdt, cdn) {
-		if(set_customer_group(frm, cdt, cdn)){
+	customer_group: function (frm, cdt, cdn) {
+		if (set_customer_group(frm, cdt, cdn)) {
 			frappe.msgprint(__("Changing Customer Group for the selected Customer is not allowed."));
 		}
-	}
+	},
 });
 
-var set_customer_group = function(frm, cdt, cdn) {
+var set_customer_group = function (frm, cdt, cdn) {
 	var row = frappe.get_doc(cdt, cdn);
 
 	if (!row.customer_name) {
 		return false;
 	}
 
-	frappe.model.with_doc("Customer", row.customer_name, function() {
+	frappe.model.with_doc("Customer", row.customer_name, function () {
 		var customer = frappe.model.get_doc("Customer", row.customer_name);
 		row.customer_group = customer.customer_group;
 		refresh_field("customer_group", cdn, "customer_items");
 	});
 	return true;
-}
+};
 
 $.extend(erpnext.item, {
-	setup_queries: function(frm) {
-		frm.fields_dict["item_defaults"].grid.get_field("expense_account").get_query = function(doc, cdt, cdn) {
+	setup_queries: function (frm) {
+		frm.fields_dict["item_defaults"].grid.get_field("expense_account").get_query = function (
+			doc,
+			cdt,
+			cdn
+		) {
 			const row = locals[cdt][cdn];
 			return {
 				query: "erpnext.controllers.queries.get_expense_account",
-				filters: { company: row.company }
-			}
-		}
-
-		frm.fields_dict["item_defaults"].grid.get_field("income_account").get_query = function(doc, cdt, cdn) {
-			const row = locals[cdt][cdn];
-			return {
-				query: "erpnext.controllers.queries.get_income_account",
-				filters: { company: row.company }
-			}
-		}
-
-		frm.fields_dict["item_defaults"].grid.get_field("default_discount_account").get_query = function(doc, cdt, cdn) {
-			const row = locals[cdt][cdn];
-			return {
-				filters: {
-					'report_type': 'Profit and Loss',
-					'company': row.company,
-					"is_group": 0
-				}
+				filters: { company: row.company },
 			};
 		};
 
-		frm.fields_dict["item_defaults"].grid.get_field("buying_cost_center").get_query = function(doc, cdt, cdn) {
+		frm.fields_dict["item_defaults"].grid.get_field("income_account").get_query = function (
+			doc,
+			cdt,
+			cdn
+		) {
+			const row = locals[cdt][cdn];
+			return {
+				query: "erpnext.controllers.queries.get_income_account",
+				filters: { company: row.company },
+			};
+		};
+
+		frm.fields_dict["item_defaults"].grid.get_field("default_discount_account").get_query = function (
+			doc,
+			cdt,
+			cdn
+		) {
 			const row = locals[cdt][cdn];
 			return {
 				filters: {
-					"is_group": 0,
-					"company": row.company
-				}
-			}
-		}
+					report_type: "Profit and Loss",
+					company: row.company,
+					is_group: 0,
+				},
+			};
+		};
 
-		frm.fields_dict["item_defaults"].grid.get_field("selling_cost_center").get_query = function(doc, cdt, cdn) {
+		frm.fields_dict["item_defaults"].grid.get_field("buying_cost_center").get_query = function (
+			doc,
+			cdt,
+			cdn
+		) {
 			const row = locals[cdt][cdn];
 			return {
 				filters: {
-					"is_group": 0,
-					"company": row.company
-				}
-			}
-		}
+					is_group: 0,
+					company: row.company,
+				},
+			};
+		};
 
+		frm.fields_dict["item_defaults"].grid.get_field("selling_cost_center").get_query = function (
+			doc,
+			cdt,
+			cdn
+		) {
+			const row = locals[cdt][cdn];
+			return {
+				filters: {
+					is_group: 0,
+					company: row.company,
+				},
+			};
+		};
 
-		frm.fields_dict['taxes'].grid.get_field("tax_type").get_query = function(doc, cdt, cdn) {
+		frm.fields_dict["taxes"].grid.get_field("tax_type").get_query = function (doc, cdt, cdn) {
 			return {
 				filters: [
-					['Account', 'account_type', 'in',
-						'Tax, Chargeable, Income Account, Expense Account'],
-					['Account', 'docstatus', '!=', 2]
-				]
-			}
-		}
+					["Account", "account_type", "in", "Tax, Chargeable, Income Account, Expense Account"],
+					["Account", "docstatus", "!=", 2],
+				],
+			};
+		};
 
-		frm.fields_dict['item_group'].get_query = function(doc, cdt, cdn) {
+		frm.fields_dict["item_group"].get_query = function (doc, cdt, cdn) {
 			return {
-				filters: [
-					['Item Group', 'docstatus', '!=', 2]
-				]
-			}
-		}
+				filters: [["Item Group", "docstatus", "!=", 2]],
+			};
+		};
 
-		frm.fields_dict["item_defaults"].grid.get_field("deferred_revenue_account").get_query = function(doc, cdt, cdn) {
+		frm.fields_dict["item_defaults"].grid.get_field("deferred_revenue_account").get_query = function (
+			doc,
+			cdt,
+			cdn
+		) {
 			return {
 				filters: {
-					"company": locals[cdt][cdn].company,
-					'root_type': 'Liability',
-					"is_group": 0
-				}
-			}
-		}
+					company: locals[cdt][cdn].company,
+					root_type: "Liability",
+					is_group: 0,
+				},
+			};
+		};
 
-		frm.fields_dict["item_defaults"].grid.get_field("deferred_expense_account").get_query = function(doc, cdt, cdn) {
+		frm.fields_dict["item_defaults"].grid.get_field("deferred_expense_account").get_query = function (
+			doc,
+			cdt,
+			cdn
+		) {
 			return {
 				filters: {
-					"company": locals[cdt][cdn].company,
-					'root_type': 'Asset',
-					"is_group": 0
-				}
-			}
-		}
+					company: locals[cdt][cdn].company,
+					root_type: "Asset",
+					is_group: 0,
+				},
+			};
+		};
 
-		frm.fields_dict.customer_items.grid.get_field("customer_name").get_query = function(doc, cdt, cdn) {
-			return { query: "erpnext.controllers.queries.customer_query" }
-		}
+		frm.fields_dict.customer_items.grid.get_field("customer_name").get_query = function (doc, cdt, cdn) {
+			return { query: "erpnext.controllers.queries.customer_query" };
+		};
 
-		frm.fields_dict.supplier_items.grid.get_field("supplier").get_query = function(doc, cdt, cdn) {
-			return { query: "erpnext.controllers.queries.supplier_query" }
-		}
+		frm.fields_dict.supplier_items.grid.get_field("supplier").get_query = function (doc, cdt, cdn) {
+			return { query: "erpnext.controllers.queries.supplier_query" };
+		};
 
-		frm.fields_dict["item_defaults"].grid.get_field("default_warehouse").get_query = function(doc, cdt, cdn) {
+		frm.fields_dict["item_defaults"].grid.get_field("default_warehouse").get_query = function (
+			doc,
+			cdt,
+			cdn
+		) {
 			const row = locals[cdt][cdn];
 			return {
 				filters: {
-					"is_group": 0,
-					"company": row.company
-				}
-			}
-		}
+					is_group: 0,
+					company: row.company,
+				},
+			};
+		};
 
-		frm.fields_dict.reorder_levels.grid.get_field("warehouse_group").get_query = function(doc, cdt, cdn) {
+		frm.fields_dict.reorder_levels.grid.get_field("warehouse_group").get_query = function (
+			doc,
+			cdt,
+			cdn
+		) {
 			return {
-				filters: { "is_group": 1 }
-			}
-		}
+				filters: { is_group: 1 },
+			};
+		};
 
-		frm.fields_dict.reorder_levels.grid.get_field("warehouse").get_query = function(doc, cdt, cdn) {
+		frm.fields_dict.reorder_levels.grid.get_field("warehouse").get_query = function (doc, cdt, cdn) {
 			var d = locals[cdt][cdn];
 
 			var filters = {
-				"is_group": 0
-			}
+				is_group: 0,
+			};
 
 			if (d.parent_warehouse) {
-				filters.extend({"parent_warehouse": d.warehouse_group})
+				filters.extend({ parent_warehouse: d.warehouse_group });
 			}
 
 			return {
-				filters: filters
-			}
-		}
+				filters: filters,
+			};
+		};
 
-		frm.set_query('default_provisional_account', 'item_defaults', (doc, cdt, cdn) => {
+		frm.set_query("default_provisional_account", "item_defaults", (doc, cdt, cdn) => {
 			let row = locals[cdt][cdn];
 			return {
 				filters: {
-					"company": row.company,
-					"root_type": ["in", ["Liability", "Asset"]],
-					"is_group": 0
-				}
+					company: row.company,
+					root_type: ["in", ["Liability", "Asset"]],
+					is_group: 0,
+				},
 			};
 		});
-
 	},
 
-	make_dashboard: function(frm) {
-		if(frm.doc.__islocal)
-			return;
+	make_dashboard: function (frm) {
+		if (frm.doc.__islocal) return;
 
 		// Show Stock Levels only if is_stock_item
 		if (frm.doc.is_stock_item) {
-			frappe.require('item-dashboard.bundle.js', function() {
-				const section = frm.dashboard.add_section('', __("Stock Levels"));
+			frappe.require("item-dashboard.bundle.js", function () {
+				const section = frm.dashboard.add_section("", __("Stock Levels"));
 				erpnext.item.item_dashboard = new erpnext.stock.ItemDashboard({
 					parent: section,
 					item_code: frm.doc.name,
 					page_length: 20,
-					method: 'erpnext.stock.dashboard.item_dashboard.get_data',
-					template: 'item_dashboard_list'
+					method: "erpnext.stock.dashboard.item_dashboard.get_data",
+					template: "item_dashboard_list",
 				});
 				erpnext.item.item_dashboard.refresh();
 			});
 		}
 	},
 
-	edit_prices_button: function(frm) {
-		frm.add_custom_button(__("Add / Edit Prices"), function() {
-			frappe.set_route("List", "Item Price", {"item_code": frm.doc.name});
-		}, __("Actions"));
+	edit_prices_button: function (frm) {
+		frm.add_custom_button(
+			__("Add / Edit Prices"),
+			function () {
+				frappe.set_route("List", "Item Price", { item_code: frm.doc.name });
+			},
+			__("Actions")
+		);
 	},
 
-	weight_to_validate: function(frm) {
+	weight_to_validate: function (frm) {
 		if (frm.doc.weight_per_unit && !frm.doc.weight_uom) {
 			frappe.msgprint({
 				message: __("Please mention 'Weight UOM' along with Weight."),
-				title: __("Note")
+				title: __("Note"),
 			});
 		}
 	},
 
-	show_modal_for_manufacturers: function(frm) {
+	show_modal_for_manufacturers: function (frm) {
 		var dialog = new frappe.ui.Dialog({
 			fields: [
 				{
-					fieldtype: 'Link',
-					fieldname: 'manufacturer',
-					options: 'Manufacturer',
-					label: 'Manufacturer',
+					fieldtype: "Link",
+					fieldname: "manufacturer",
+					options: "Manufacturer",
+					label: "Manufacturer",
 					reqd: 1,
 				},
 				{
-					fieldtype: 'Data',
-					label: 'Manufacturer Part Number',
-					fieldname: 'manufacturer_part_no'
+					fieldtype: "Data",
+					label: "Manufacturer Part Number",
+					fieldname: "manufacturer_part_no",
 				},
-			]
+			],
 		});
 
-		dialog.set_primary_action(__('Create'), function() {
+		dialog.set_primary_action(__("Create"), function () {
 			var data = dialog.get_values();
-			if(!data) return;
+			if (!data) return;
 
 			// call the server to make the variant
 			data.template = frm.doc.name;
 			frappe.call({
 				method: "erpnext.controllers.item_variant.get_variant",
 				args: data,
-				callback: function(r) {
+				callback: function (r) {
 					var doclist = frappe.model.sync(r.message);
 					dialog.hide();
 					frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
-				}
+				},
 			});
-		})
+		});
 
 		dialog.show();
 	},
 
-	show_multiple_variants_dialog: function(frm) {
+	show_multiple_variants_dialog: function (frm) {
 		var me = this;
 
 		let promises = [];
@@ -475,27 +551,26 @@
 		function make_fields_from_attribute_values(attr_dict) {
 			let fields = [];
 			Object.keys(attr_dict).forEach((name, i) => {
-				if(i % 3 === 0){
-					fields.push({fieldtype: 'Section Break'});
+				if (i % 3 === 0) {
+					fields.push({ fieldtype: "Section Break" });
 				}
-				fields.push({fieldtype: 'Column Break', label: name});
-				attr_dict[name].forEach(value => {
+				fields.push({ fieldtype: "Column Break", label: name });
+				attr_dict[name].forEach((value) => {
 					fields.push({
-						fieldtype: 'Check',
+						fieldtype: "Check",
 						label: value,
 						fieldname: value,
 						default: 0,
-						onchange: function() {
+						onchange: function () {
 							let selected_attributes = get_selected_attributes();
 							let lengths = [];
-							Object.keys(selected_attributes).map(key => {
+							Object.keys(selected_attributes).map((key) => {
 								lengths.push(selected_attributes[key].length);
 							});
-							if(lengths.includes(0)) {
-								me.multiple_variant_dialog.get_primary_btn().html(__('Create Variants'));
+							if (lengths.includes(0)) {
+								me.multiple_variant_dialog.get_primary_btn().html(__("Create Variants"));
 								me.multiple_variant_dialog.disable_primary_action();
 							} else {
-
 								let no_of_combinations = lengths.reduce((a, b) => a * b, 1);
 								let msg;
 								if (no_of_combinations === 1) {
@@ -506,7 +581,7 @@
 								me.multiple_variant_dialog.get_primary_btn().html(msg);
 								me.multiple_variant_dialog.enable_primary_action();
 							}
-						}
+						},
 					});
 				});
 			});
@@ -523,38 +598,40 @@
 						options: `<label class="control-label">
 							${__("Select at least one value from each of the attributes.")}
 						</label>`,
-					}
-				].concat(fields)
+					},
+				].concat(fields),
 			});
 
-			me.multiple_variant_dialog.set_primary_action(__('Create Variants'), () => {
+			me.multiple_variant_dialog.set_primary_action(__("Create Variants"), () => {
 				let selected_attributes = get_selected_attributes();
 
 				me.multiple_variant_dialog.hide();
 				frappe.call({
 					method: "erpnext.controllers.item_variant.enqueue_multiple_variant_creation",
 					args: {
-						"item": frm.doc.name,
-						"args": selected_attributes
+						item: frm.doc.name,
+						args: selected_attributes,
 					},
-					callback: function(r) {
-						if (r.message==='queued') {
+					callback: function (r) {
+						if (r.message === "queued") {
 							frappe.show_alert({
 								message: __("Variant creation has been queued."),
-								indicator: 'orange'
+								indicator: "orange",
 							});
 						} else {
 							frappe.show_alert({
 								message: __("{0} variants created.", [r.message]),
-								indicator: 'green'
+								indicator: "green",
 							});
 						}
-					}
+					},
 				});
 			});
 
-			$($(me.multiple_variant_dialog.$wrapper.find('.form-column'))
-				.find('.frappe-control')).css('margin-bottom', '0px');
+			$($(me.multiple_variant_dialog.$wrapper.find(".form-column")).find(".frappe-control")).css(
+				"margin-bottom",
+				"0px"
+			);
 
 			me.multiple_variant_dialog.disable_primary_action();
 			me.multiple_variant_dialog.clear();
@@ -563,14 +640,14 @@
 
 		function get_selected_attributes() {
 			let selected_attributes = {};
-			me.multiple_variant_dialog.$wrapper.find('.form-column').each((i, col) => {
-				if(i===0) return;
-				let attribute_name = $(col).find('.column-label').html().trim();
+			me.multiple_variant_dialog.$wrapper.find(".form-column").each((i, col) => {
+				if (i === 0) return;
+				let attribute_name = $(col).find(".column-label").html().trim();
 				selected_attributes[attribute_name] = [];
-				let checked_opts = $(col).find('.checkbox input');
+				let checked_opts = $(col).find(".checkbox input");
 				checked_opts.each((i, opt) => {
-					if($(opt).is(':checked')) {
-						selected_attributes[attribute_name].push($(opt).attr('data-fieldname'));
+					if ($(opt).is(":checked")) {
+						selected_attributes[attribute_name].push($(opt).attr("data-fieldname"));
 					}
 				});
 			});
@@ -578,30 +655,32 @@
 			return selected_attributes;
 		}
 
-		frm.doc.attributes.forEach(function(d) {
-			let p = new Promise(resolve => {
-				if(!d.numeric_values) {
-					frappe.call({
-						method: "frappe.client.get_list",
-						args: {
-							doctype: "Item Attribute Value",
-							filters: [
-								["parent","=", d.attribute]
-							],
-							fields: ["attribute_value"],
-							limit_page_length: 0,
-							parent: "Item Attribute",
-							order_by: "idx"
-						}
-					}).then((r) => {
-						if(r.message) {
-							attr_val_fields[d.attribute] = r.message.map(function(d) { return d.attribute_value; });
-							resolve();
-						}
-					});
+		frm.doc.attributes.forEach(function (d) {
+			let p = new Promise((resolve) => {
+				if (!d.numeric_values) {
+					frappe
+						.call({
+							method: "frappe.client.get_list",
+							args: {
+								doctype: "Item Attribute Value",
+								filters: [["parent", "=", d.attribute]],
+								fields: ["attribute_value"],
+								limit_page_length: 0,
+								parent: "Item Attribute",
+								order_by: "idx",
+							},
+						})
+						.then((r) => {
+							if (r.message) {
+								attr_val_fields[d.attribute] = r.message.map(function (d) {
+									return d.attribute_value;
+								});
+								resolve();
+							}
+						});
 				} else {
 					let values = [];
-					for(var i = d.from_range; i <= d.to_range; i = flt(i + d.increment, 6)) {
+					for (var i = d.from_range; i <= d.to_range; i = flt(i + d.increment, 6)) {
 						values.push(i);
 					}
 					attr_val_fields[d.attribute] = values;
@@ -610,66 +689,74 @@
 			});
 
 			promises.push(p);
-
 		}, this);
 
 		Promise.all(promises).then(() => {
 			let fields = make_fields_from_attribute_values(attr_val_fields);
 			make_and_show_dialog(fields);
-		})
-
+		});
 	},
 
-	show_single_variant_dialog: function(frm) {
-		var fields = []
+	show_single_variant_dialog: function (frm) {
+		var fields = [];
 
-		for(var i=0;i< frm.doc.attributes.length;i++){
+		for (var i = 0; i < frm.doc.attributes.length; i++) {
 			var fieldtype, desc;
 			var row = frm.doc.attributes[i];
-			if (row.numeric_values){
+			if (row.numeric_values) {
 				fieldtype = "Float";
-				desc = "Min Value: "+ row.from_range +" , Max Value: "+ row.to_range +", in Increments of: "+ row.increment
-			}
-			else {
+				desc =
+					"Min Value: " +
+					row.from_range +
+					" , Max Value: " +
+					row.to_range +
+					", in Increments of: " +
+					row.increment;
+			} else {
 				fieldtype = "Data";
-				desc = ""
+				desc = "";
 			}
 			fields = fields.concat({
-				"label": row.attribute,
-				"fieldname": row.attribute,
-				"fieldtype": fieldtype,
-				"reqd": 0,
-				"description": desc
-			})
+				label: row.attribute,
+				fieldname: row.attribute,
+				fieldtype: fieldtype,
+				reqd: 0,
+				description: desc,
+			});
 		}
 
 		var d = new frappe.ui.Dialog({
-			title: __('Create Variant'),
-			fields: fields
+			title: __("Create Variant"),
+			fields: fields,
 		});
 
-		d.set_primary_action(__('Create'), function() {
+		d.set_primary_action(__("Create"), function () {
 			var args = d.get_values();
-			if(!args) return;
+			if (!args) return;
 			frappe.call({
 				method: "erpnext.controllers.item_variant.get_variant",
 				btn: d.get_primary_btn(),
 				args: {
-					"template": frm.doc.name,
-					"args": d.get_values()
+					template: frm.doc.name,
+					args: d.get_values(),
 				},
-				callback: function(r) {
+				callback: function (r) {
 					// returns variant item
 					if (r.message) {
 						var variant = r.message;
-						frappe.msgprint_dialog = frappe.msgprint(__("Item Variant {0} already exists with same attributes",
-							[repl('<a href="/app/item/%(item_encoded)s" class="strong variant-click">%(item)s</a>', {
-								item_encoded: encodeURIComponent(variant),
-								item: variant
-							})]
-						));
+						frappe.msgprint_dialog = frappe.msgprint(
+							__("Item Variant {0} already exists with same attributes", [
+								repl(
+									'<a href="/app/item/%(item_encoded)s" class="strong variant-click">%(item)s</a>',
+									{
+										item_encoded: encodeURIComponent(variant),
+										item: variant,
+									}
+								),
+							])
+						);
 						frappe.msgprint_dialog.hide_on_page_refresh = true;
-						frappe.msgprint_dialog.$wrapper.find(".variant-click").on("click", function() {
+						frappe.msgprint_dialog.$wrapper.find(".variant-click").on("click", function () {
 							d.hide();
 						});
 					} else {
@@ -677,24 +764,23 @@
 						frappe.call({
 							method: "erpnext.controllers.item_variant.create_variant",
 							args: {
-								"item": frm.doc.name,
-								"args": d.get_values()
+								item: frm.doc.name,
+								args: d.get_values(),
 							},
-							callback: function(r) {
+							callback: function (r) {
 								var doclist = frappe.model.sync(r.message);
 								frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
-							}
+							},
 						});
 					}
-				}
+				},
 			});
 		});
 
 		d.show();
 
-		$.each(d.fields_dict, function(i, field) {
-
-			if(field.df.fieldtype !== "Data") {
+		$.each(d.fields_dict, function (i, field) {
+			if (field.df.fieldtype !== "Data") {
 				return;
 			}
 
@@ -710,26 +796,28 @@
 			input.field = field;
 
 			field.$input
-				.on('input', function(e) {
+				.on("input", function (e) {
 					var term = e.target.value;
 					frappe.call({
 						method: "erpnext.stock.doctype.item.item.get_item_attribute",
 						args: {
 							parent: i,
-							attribute_value: term
+							attribute_value: term,
 						},
-						callback: function(r) {
+						callback: function (r) {
 							if (r.message) {
-								e.target.awesomplete.list = r.message.map(function(d) { return d.attribute_value; });
+								e.target.awesomplete.list = r.message.map(function (d) {
+									return d.attribute_value;
+								});
 							}
-						}
+						},
 					});
 				})
-				.on('focus', function(e) {
-					$(e.target).val('').trigger('input');
+				.on("focus", function (e) {
+					$(e.target).val("").trigger("input");
 				})
 				.on("awesomplete-open", () => {
-					let modal = field.$input.parents('.modal-dialog')[0];
+					let modal = field.$input.parents(".modal-dialog")[0];
 					if (modal) {
 						$(modal).removeClass("modal-dialog-scrollable");
 					}
@@ -737,14 +825,13 @@
 		});
 	},
 
-	toggle_attributes: function(frm) {
-		if((frm.doc.has_variants || frm.doc.variant_of)
-			&& frm.doc.variant_based_on==='Item Attribute') {
+	toggle_attributes: function (frm) {
+		if ((frm.doc.has_variants || frm.doc.variant_of) && frm.doc.variant_based_on === "Item Attribute") {
 			frm.toggle_display("attributes", true);
 
 			var grid = frm.fields_dict.attributes.grid;
 
-			if(frm.doc.variant_of) {
+			if (frm.doc.variant_of) {
 				// variant
 
 				// value column is displayed but not editable
@@ -768,78 +855,87 @@
 				// enable the grid so you can add more attributes
 				grid.toggle_enable("attribute", true);
 			}
-
 		} else {
 			// nothing to do with attributes, hide it
 			frm.toggle_display("attributes", false);
 		}
 		frm.layout.refresh_sections();
-	}
+	},
 });
 
 frappe.ui.form.on("UOM Conversion Detail", {
-	uom: function(frm, cdt, cdn) {
+	uom: function (frm, cdt, cdn) {
 		var row = locals[cdt][cdn];
 		if (row.uom) {
 			frappe.call({
 				method: "erpnext.stock.doctype.item.item.get_uom_conv_factor",
 				args: {
-					"uom": row.uom,
-					"stock_uom": frm.doc.stock_uom
+					uom: row.uom,
+					stock_uom: frm.doc.stock_uom,
 				},
-				callback: function(r) {
+				callback: function (r) {
 					if (!r.exc && r.message) {
 						frappe.model.set_value(cdt, cdn, "conversion_factor", r.message);
 					}
-				}
+				},
 			});
 		}
-	}
+	},
 });
 
-frappe.tour['Item'] = [
+frappe.tour["Item"] = [
 	{
 		fieldname: "item_code",
 		title: "Item Code",
-		description: __("Enter an Item Code, the name will be auto-filled the same as Item Code on clicking inside the Item Name field.")
+		description: __(
+			"Enter an Item Code, the name will be auto-filled the same as Item Code on clicking inside the Item Name field."
+		),
 	},
 	{
 		fieldname: "item_group",
 		title: "Item Group",
-		description: __("Select an Item Group.")
+		description: __("Select an Item Group."),
 	},
 	{
 		fieldname: "is_stock_item",
 		title: "Maintain Stock",
-		description: __("If you are maintaining stock of this Item in your Inventory, ERPNext will make a stock ledger entry for each transaction of this item.")
+		description: __(
+			"If you are maintaining stock of this Item in your Inventory, ERPNext will make a stock ledger entry for each transaction of this item."
+		),
 	},
 	{
 		fieldname: "include_item_in_manufacturing",
 		title: "Include Item in Manufacturing",
-		description: __("This is for raw material Items that'll be used to create finished goods. If the Item is an additional service like 'washing' that'll be used in the BOM, keep this unchecked.")
+		description: __(
+			"This is for raw material Items that'll be used to create finished goods. If the Item is an additional service like 'washing' that'll be used in the BOM, keep this unchecked."
+		),
 	},
 	{
 		fieldname: "opening_stock",
 		title: "Opening Stock",
-		description: __("Enter the opening stock units.")
+		description: __("Enter the opening stock units."),
 	},
 	{
 		fieldname: "valuation_rate",
 		title: "Valuation Rate",
-		description: __("There are two options to maintain valuation of stock. FIFO (first in - first out) and Moving Average. To understand this topic in detail please visit <a href='https://docs.erpnext.com/docs/v13/user/manual/en/stock/articles/item-valuation-fifo-and-moving-average' target='_blank'>Item Valuation, FIFO and Moving Average.</a>")
+		description: __(
+			"There are two options to maintain valuation of stock. FIFO (first in - first out) and Moving Average. To understand this topic in detail please visit <a href='https://docs.erpnext.com/docs/v13/user/manual/en/stock/articles/item-valuation-fifo-and-moving-average' target='_blank'>Item Valuation, FIFO and Moving Average.</a>"
+		),
 	},
 	{
 		fieldname: "standard_rate",
 		title: "Standard Selling Rate",
-		description: __("When creating an Item, entering a value for this field will automatically create an Item Price at the backend.")
+		description: __(
+			"When creating an Item, entering a value for this field will automatically create an Item Price at the backend."
+		),
 	},
 	{
 		fieldname: "item_defaults",
 		title: "Item Defaults",
-		description: __("In this section, you can define Company-wide transaction-related defaults for this Item. Eg. Default Warehouse, Default Price List, Supplier, etc.")
-	}
-
-
+		description: __(
+			"In this section, you can define Company-wide transaction-related defaults for this Item. Eg. Default Warehouse, Default Price List, Supplier, etc."
+		),
+	},
 ];
 
 function open_form(frm, doctype, child_doctype, parentfield) {
@@ -866,7 +962,7 @@
 			() => {
 				frappe.flags.ignore_company_party_validation = true;
 				frappe.model.trigger("item_code", frm.doc.name, new_child_doc);
-			}
-		])
+			},
+		]);
 	});
 }
diff --git a/erpnext/stock/doctype/item/item_list.js b/erpnext/stock/doctype/item/item_list.js
index 67dc86c..e8d886a 100644
--- a/erpnext/stock/doctype/item/item_list.js
+++ b/erpnext/stock/doctype/item/item_list.js
@@ -1,9 +1,17 @@
-frappe.listview_settings['Item'] = {
-	add_fields: ["item_name", "stock_uom", "item_group", "image",
-		"has_variants", "end_of_life", "disabled", "variant_of"],
+frappe.listview_settings["Item"] = {
+	add_fields: [
+		"item_name",
+		"stock_uom",
+		"item_group",
+		"image",
+		"has_variants",
+		"end_of_life",
+		"disabled",
+		"variant_of",
+	],
 	filters: [["disabled", "=", "0"]],
 
-	get_indicator: function(doc) {
+	get_indicator: function (doc) {
 		if (doc.disabled) {
 			return [__("Disabled"), "grey", "disabled,=,Yes"];
 		} else if (doc.end_of_life && doc.end_of_life < frappe.datetime.get_today()) {
@@ -17,23 +25,22 @@
 
 	reports: [
 		{
-			name: 'Stock Summary',
-			route: '/app/stock-balance'
+			name: "Stock Summary",
+			route: "/app/stock-balance",
 		},
 		{
-			name: 'Stock Ledger',
-			report_type: 'Script Report'
+			name: "Stock Ledger",
+			report_type: "Script Report",
 		},
 		{
-			name: 'Stock Balance',
-			report_type: 'Script Report'
+			name: "Stock Balance",
+			report_type: "Script Report",
 		},
 		{
-			name: 'Stock Projected Qty',
-			report_type: 'Script Report'
-		}
-
-	]
+			name: "Stock Projected Qty",
+			report_type: "Script Report",
+		},
+	],
 };
 
 frappe.help.youtube_id["Item"] = "qXaEwld4_Ps";
diff --git a/erpnext/stock/doctype/item_alternative/item_alternative.js b/erpnext/stock/doctype/item_alternative/item_alternative.js
index ef0a88b..e384e57 100644
--- a/erpnext/stock/doctype/item_alternative/item_alternative.js
+++ b/erpnext/stock/doctype/item_alternative/item_alternative.js
@@ -1,14 +1,14 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Item Alternative', {
-	setup: function(frm) {
+frappe.ui.form.on("Item Alternative", {
+	setup: function (frm) {
 		frm.fields_dict.item_code.get_query = () => {
 			return {
 				filters: {
-					'allow_alternative_item': 1
-				}
+					allow_alternative_item: 1,
+				},
 			};
 		};
-	}
+	},
 });
diff --git a/erpnext/stock/doctype/item_attribute/item_attribute.js b/erpnext/stock/doctype/item_attribute/item_attribute.js
index f253e22..22c7978 100644
--- a/erpnext/stock/doctype/item_attribute/item_attribute.js
+++ b/erpnext/stock/doctype/item_attribute/item_attribute.js
@@ -1,6 +1,4 @@
 // Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Item Attribute', {
-
-});
+frappe.ui.form.on("Item Attribute", {});
diff --git a/erpnext/stock/doctype/item_manufacturer/item_manufacturer.js b/erpnext/stock/doctype/item_manufacturer/item_manufacturer.js
index a4df923..2180372 100644
--- a/erpnext/stock/doctype/item_manufacturer/item_manufacturer.js
+++ b/erpnext/stock/doctype/item_manufacturer/item_manufacturer.js
@@ -1,8 +1,7 @@
 // Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Item Manufacturer', {
+frappe.ui.form.on("Item Manufacturer", {
 	// refresh: function(frm) {
-
 	// }
 });
diff --git a/erpnext/stock/doctype/item_price/item_price.js b/erpnext/stock/doctype/item_price/item_price.js
index 8a4b4ee..a5599e3 100644
--- a/erpnext/stock/doctype/item_price/item_price.js
+++ b/erpnext/stock/doctype/item_price/item_price.js
@@ -3,11 +3,11 @@
 
 frappe.ui.form.on("Item Price", {
 	setup(frm) {
-		frm.set_query("item_code", function() {
+		frm.set_query("item_code", function () {
 			return {
 				filters: {
-					"has_variants": 0
-				}
+					has_variants: 0,
+				},
 			};
 		});
 	},
@@ -23,15 +23,18 @@
 		frm.add_fetch("item_code", "description", "item_description");
 		frm.add_fetch("item_code", "stock_uom", "uom");
 
-		frm.set_df_property("bulk_import_help", "options",
-			'<a href="/app/data-import-tool/Item Price">' + __("Import in Bulk") + '</a>');
+		frm.set_df_property(
+			"bulk_import_help",
+			"options",
+			'<a href="/app/data-import-tool/Item Price">' + __("Import in Bulk") + "</a>"
+		);
 
-		frm.set_query('batch_no', function() {
+		frm.set_query("batch_no", function () {
 			return {
 				filters: {
-					'item': frm.doc.item_code
-				}
+					item: frm.doc.item_code,
+				},
 			};
 		});
-	}
+	},
 });
diff --git a/erpnext/stock/doctype/item_price/item_price_list.js b/erpnext/stock/doctype/item_price/item_price_list.js
index 4815839..94c232e 100644
--- a/erpnext/stock/doctype/item_price/item_price_list.js
+++ b/erpnext/stock/doctype/item_price/item_price_list.js
@@ -1,3 +1,3 @@
-frappe.listview_settings['Item Price'] = {
+frappe.listview_settings["Item Price"] = {
 	hide_name_column: true,
 };
diff --git a/erpnext/stock/doctype/item_variant_settings/item_variant_settings.js b/erpnext/stock/doctype/item_variant_settings/item_variant_settings.js
index 457e48f..d906b85 100644
--- a/erpnext/stock/doctype/item_variant_settings/item_variant_settings.js
+++ b/erpnext/stock/doctype/item_variant_settings/item_variant_settings.js
@@ -1,24 +1,39 @@
 // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Item Variant Settings', {
-	refresh: function(frm) {
+frappe.ui.form.on("Item Variant Settings", {
+	refresh: function (frm) {
 		const allow_fields = [];
 
-		const existing_fields = frm.doc.fields.map(row => row.field_name);
-		const exclude_fields = [...existing_fields, "naming_series", "item_code", "item_name",
-			"published_in_website", "standard_rate", "opening_stock", "image",
-			"variant_of", "valuation_rate", "barcodes", "has_variants", "attributes"];
+		const existing_fields = frm.doc.fields.map((row) => row.field_name);
+		const exclude_fields = [
+			...existing_fields,
+			"naming_series",
+			"item_code",
+			"item_name",
+			"published_in_website",
+			"standard_rate",
+			"opening_stock",
+			"image",
+			"variant_of",
+			"valuation_rate",
+			"barcodes",
+			"has_variants",
+			"attributes",
+		];
 
-		const exclude_field_types = ['HTML', 'Section Break', 'Column Break', 'Button', 'Read Only'];
+		const exclude_field_types = ["HTML", "Section Break", "Column Break", "Button", "Read Only"];
 
-		frappe.model.with_doctype('Item', () => {
+		frappe.model.with_doctype("Item", () => {
 			const field_label_map = {};
-			frappe.get_meta('Item').fields.forEach(d => {
+			frappe.get_meta("Item").fields.forEach((d) => {
 				field_label_map[d.fieldname] = __(d.label, null, d.parent) + ` (${d.fieldname})`;
 
-				if (!in_list(exclude_field_types, d.fieldtype)
-					&& !d.no_copy && !in_list(exclude_fields, d.fieldname)) {
+				if (
+					!in_list(exclude_field_types, d.fieldtype) &&
+					!d.no_copy &&
+					!in_list(exclude_fields, d.fieldname)
+				) {
 					allow_fields.push({
 						label: field_label_map[d.fieldname],
 						value: d.fieldname,
@@ -33,9 +48,7 @@
 				});
 			}
 
-			frm.fields_dict.fields.grid.update_docfield_property(
-				'field_name', 'options', allow_fields
-			);
+			frm.fields_dict.fields.grid.update_docfield_property("field_name", "options", allow_fields);
 		});
-	}
+	},
 });
diff --git a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js
index 8215efc..0ecb9f2 100644
--- a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js
+++ b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js
@@ -7,24 +7,27 @@
 erpnext.stock.LandedCostVoucher = class LandedCostVoucher extends erpnext.stock.StockController {
 	setup() {
 		var me = this;
-		this.frm.fields_dict.purchase_receipts.grid.get_field('receipt_document').get_query =
-			function (doc, cdt, cdn) {
-				var d = locals[cdt][cdn]
+		this.frm.fields_dict.purchase_receipts.grid.get_field("receipt_document").get_query = function (
+			doc,
+			cdt,
+			cdn
+		) {
+			var d = locals[cdt][cdn];
 
-				var filters = [
-					[d.receipt_document_type, 'docstatus', '=', '1'],
-					[d.receipt_document_type, 'company', '=', me.frm.doc.company],
-				]
+			var filters = [
+				[d.receipt_document_type, "docstatus", "=", "1"],
+				[d.receipt_document_type, "company", "=", me.frm.doc.company],
+			];
 
-				if (d.receipt_document_type == "Purchase Invoice") {
-					filters.push(["Purchase Invoice", "update_stock", "=", "1"])
-				}
+			if (d.receipt_document_type == "Purchase Invoice") {
+				filters.push(["Purchase Invoice", "update_stock", "=", "1"]);
+			}
 
-				if (!me.frm.doc.company) frappe.msgprint(__("Please enter company first"));
-				return {
-					filters: filters
-				}
+			if (!me.frm.doc.company) frappe.msgprint(__("Please enter company first"));
+			return {
+				filters: filters,
 			};
+		};
 
 		this.frm.add_fetch("receipt_document", "supplier", "supplier");
 		this.frm.add_fetch("receipt_document", "posting_date", "posting_date");
@@ -32,8 +35,7 @@
 	}
 
 	refresh() {
-		var help_content =
-			`<br><br>
+		var help_content = `<br><br>
 			<table class="table table-bordered" style="background-color: var(--scrollbar-track-color);">
 				<tr><td>
 					<h4>
@@ -70,15 +72,15 @@
 
 	get_items_from_purchase_receipts() {
 		var me = this;
-		if(!this.frm.doc.purchase_receipts.length) {
+		if (!this.frm.doc.purchase_receipts.length) {
 			frappe.msgprint(__("Please enter Purchase Receipt first"));
 		} else {
 			return this.frm.call({
 				doc: me.frm.doc,
 				method: "get_items_from_purchase_receipts",
-				callback: function(r, rt) {
+				callback: function (r, rt) {
 					me.set_applicable_charges_for_item();
-				}
+				},
 			});
 		}
 	}
@@ -90,7 +92,7 @@
 
 	set_total_taxes_and_charges() {
 		var total_taxes_and_charges = 0.0;
-		$.each(this.frm.doc.taxes || [], function(i, d) {
+		$.each(this.frm.doc.taxes || [], function (i, d) {
 			total_taxes_and_charges += flt(d.base_amount);
 		});
 		this.frm.set_value("total_taxes_and_charges", total_taxes_and_charges);
@@ -99,47 +101,52 @@
 	set_applicable_charges_for_item() {
 		var me = this;
 
-		if(this.frm.doc.taxes.length) {
+		if (this.frm.doc.taxes.length) {
 			var total_item_cost = 0.0;
 			var based_on = this.frm.doc.distribute_charges_based_on.toLowerCase();
 
-			if (based_on != 'distribute manually') {
-				$.each(this.frm.doc.items || [], function(i, d) {
-					total_item_cost += flt(d[based_on])
+			if (based_on != "distribute manually") {
+				$.each(this.frm.doc.items || [], function (i, d) {
+					total_item_cost += flt(d[based_on]);
 				});
 
 				var total_charges = 0.0;
-				$.each(this.frm.doc.items || [], function(i, item) {
-					item.applicable_charges = flt(item[based_on]) * flt(me.frm.doc.total_taxes_and_charges) / flt(total_item_cost)
-					item.applicable_charges = flt(item.applicable_charges, precision("applicable_charges", item))
-					total_charges += item.applicable_charges
+				$.each(this.frm.doc.items || [], function (i, item) {
+					item.applicable_charges =
+						(flt(item[based_on]) * flt(me.frm.doc.total_taxes_and_charges)) /
+						flt(total_item_cost);
+					item.applicable_charges = flt(
+						item.applicable_charges,
+						precision("applicable_charges", item)
+					);
+					total_charges += item.applicable_charges;
 				});
 
-				if (total_charges != this.frm.doc.total_taxes_and_charges){
-					var diff = this.frm.doc.total_taxes_and_charges - flt(total_charges)
-					this.frm.doc.items.slice(-1)[0].applicable_charges += diff
+				if (total_charges != this.frm.doc.total_taxes_and_charges) {
+					var diff = this.frm.doc.total_taxes_and_charges - flt(total_charges);
+					this.frm.doc.items.slice(-1)[0].applicable_charges += diff;
 				}
 				refresh_field("items");
 			}
 		}
 	}
-	distribute_charges_based_on (frm) {
+	distribute_charges_based_on(frm) {
 		this.set_applicable_charges_for_item();
 	}
 
 	items_remove() {
-		this.trigger('set_applicable_charges_for_item');
+		this.trigger("set_applicable_charges_for_item");
 	}
 };
 
 cur_frm.script_manager.make(erpnext.stock.LandedCostVoucher);
 
-frappe.ui.form.on('Landed Cost Taxes and Charges', {
-	expense_account: function(frm, cdt, cdn) {
+frappe.ui.form.on("Landed Cost Taxes and Charges", {
+	expense_account: function (frm, cdt, cdn) {
 		frm.events.set_account_currency(frm, cdt, cdn);
 	},
 
-	amount: function(frm, cdt, cdn) {
+	amount: function (frm, cdt, cdn) {
 		frm.events.set_base_amount(frm, cdt, cdn);
-	}
+	},
 });
diff --git a/erpnext/stock/doctype/manufacturer/manufacturer.js b/erpnext/stock/doctype/manufacturer/manufacturer.js
index 5b4990f..e316543 100644
--- a/erpnext/stock/doctype/manufacturer/manufacturer.js
+++ b/erpnext/stock/doctype/manufacturer/manufacturer.js
@@ -1,15 +1,14 @@
 // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Manufacturer', {
-	refresh: function(frm) {
+frappe.ui.form.on("Manufacturer", {
+	refresh: function (frm) {
 		if (frm.doc.__islocal) {
-			hide_field(['address_html','contact_html']);
+			hide_field(["address_html", "contact_html"]);
 			frappe.contacts.clear_address_and_contact(frm);
-		}
-		else {
-			unhide_field(['address_html','contact_html']);
+		} else {
+			unhide_field(["address_html", "contact_html"]);
 			frappe.contacts.render_address_and_contact(frm);
 		}
-	}
+	},
 });
diff --git a/erpnext/stock/doctype/material_request/material_request.js b/erpnext/stock/doctype/material_request/material_request.js
index a913e28..f04acc8 100644
--- a/erpnext/stock/doctype/material_request/material_request.js
+++ b/erpnext/stock/doctype/material_request/material_request.js
@@ -5,181 +5,212 @@
 frappe.provide("erpnext.accounts.dimensions");
 erpnext.buying.setup_buying_controller();
 
-frappe.ui.form.on('Material Request', {
-	setup: function(frm) {
+frappe.ui.form.on("Material Request", {
+	setup: function (frm) {
 		frm.custom_make_buttons = {
-			'Stock Entry': 'Issue Material',
-			'Pick List': 'Pick List',
-			'Purchase Order': 'Purchase Order',
-			'Request for Quotation': 'Request for Quotation',
-			'Supplier Quotation': 'Supplier Quotation',
-			'Work Order': 'Work Order',
-			'Purchase Receipt': 'Purchase Receipt'
+			"Stock Entry": "Issue Material",
+			"Pick List": "Pick List",
+			"Purchase Order": "Purchase Order",
+			"Request for Quotation": "Request for Quotation",
+			"Supplier Quotation": "Supplier Quotation",
+			"Work Order": "Work Order",
+			"Purchase Receipt": "Purchase Receipt",
 		};
 
 		// formatter for material request item
-		frm.set_indicator_formatter('item_code',
-			function(doc) { return (doc.stock_qty<=doc.ordered_qty) ? "green" : "orange"; });
+		frm.set_indicator_formatter("item_code", function (doc) {
+			return doc.stock_qty <= doc.ordered_qty ? "green" : "orange";
+		});
 
-		frm.set_query("item_code", "items", function() {
+		frm.set_query("item_code", "items", function () {
 			return {
-				query: "erpnext.controllers.queries.item_query"
+				query: "erpnext.controllers.queries.item_query",
 			};
 		});
 
-		frm.set_query("from_warehouse", "items", function(doc) {
+		frm.set_query("from_warehouse", "items", function (doc) {
 			return {
-				filters: {'company': doc.company}
+				filters: { company: doc.company },
 			};
 		});
 
-		frm.set_query("bom_no", "items", function(doc, cdt, cdn) {
+		frm.set_query("bom_no", "items", function (doc, cdt, cdn) {
 			var row = locals[cdt][cdn];
 			return {
 				filters: {
-					"item": row.item_code
-				}
-			}
+					item: row.item_code,
+				},
+			};
 		});
 	},
 
-	onload: function(frm) {
+	onload: function (frm) {
 		// add item, if previous view was item
 		erpnext.utils.add_item(frm);
 
 		// set schedule_date
 		set_schedule_date(frm);
 
-		frm.set_query("warehouse", "items", function(doc) {
+		frm.set_query("warehouse", "items", function (doc) {
 			return {
-				filters: {'company': doc.company}
+				filters: { company: doc.company },
 			};
 		});
 
-		frm.set_query("set_warehouse", function(doc){
+		frm.set_query("set_warehouse", function (doc) {
 			return {
-				filters: {'company': doc.company}
+				filters: { company: doc.company },
 			};
 		});
 
-		frm.set_query("set_from_warehouse", function(doc){
+		frm.set_query("set_from_warehouse", function (doc) {
 			return {
-				filters: {'company': doc.company}
+				filters: { company: doc.company },
 			};
 		});
 
 		erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype);
 	},
 
-	company: function(frm) {
+	company: function (frm) {
 		erpnext.accounts.dimensions.update_dimension(frm, frm.doctype);
 	},
 
-	onload_post_render: function(frm) {
+	onload_post_render: function (frm) {
 		frm.get_field("items").grid.set_multiple_add("item_code", "qty");
 	},
 
-	refresh: function(frm) {
+	refresh: function (frm) {
 		frm.events.make_custom_buttons(frm);
-		frm.toggle_reqd('customer', frm.doc.material_request_type=="Customer Provided");
+		frm.toggle_reqd("customer", frm.doc.material_request_type == "Customer Provided");
 	},
 
-	set_from_warehouse: function(frm) {
-		if (frm.doc.material_request_type == "Material Transfer"
-			&& frm.doc.set_from_warehouse) {
-			frm.doc.items.forEach(d => {
-				frappe.model.set_value(d.doctype, d.name,
-					"from_warehouse", frm.doc.set_from_warehouse);
-			})
+	set_from_warehouse: function (frm) {
+		if (frm.doc.material_request_type == "Material Transfer" && frm.doc.set_from_warehouse) {
+			frm.doc.items.forEach((d) => {
+				frappe.model.set_value(d.doctype, d.name, "from_warehouse", frm.doc.set_from_warehouse);
+			});
 		}
 	},
 
-	make_custom_buttons: function(frm) {
-		if (frm.doc.docstatus==0) {
-			frm.add_custom_button(__("Bill of Materials"),
-				() => frm.events.get_items_from_bom(frm), __("Get Items From"));
+	make_custom_buttons: function (frm) {
+		if (frm.doc.docstatus == 0) {
+			frm.add_custom_button(
+				__("Bill of Materials"),
+				() => frm.events.get_items_from_bom(frm),
+				__("Get Items From")
+			);
 		}
 
-		if (frm.doc.docstatus == 1 && frm.doc.status != 'Stopped') {
+		if (frm.doc.docstatus == 1 && frm.doc.status != "Stopped") {
 			let precision = frappe.defaults.get_default("float_precision");
 
 			if (flt(frm.doc.per_received, precision) < 100) {
-				frm.add_custom_button(__('Stop'),
-					() => frm.events.update_status(frm, 'Stopped'));
+				frm.add_custom_button(__("Stop"), () => frm.events.update_status(frm, "Stopped"));
 			}
 
 			if (flt(frm.doc.per_ordered, precision) < 100) {
 				let add_create_pick_list_button = () => {
-					frm.add_custom_button(__('Pick List'),
-						() => frm.events.create_pick_list(frm), __('Create'));
-				}
+					frm.add_custom_button(
+						__("Pick List"),
+						() => frm.events.create_pick_list(frm),
+						__("Create")
+					);
+				};
 
 				if (frm.doc.material_request_type === "Material Transfer") {
 					add_create_pick_list_button();
-					frm.add_custom_button(__("Material Transfer"),
-						() => frm.events.make_stock_entry(frm), __('Create'));
+					frm.add_custom_button(
+						__("Material Transfer"),
+						() => frm.events.make_stock_entry(frm),
+						__("Create")
+					);
 
-					frm.add_custom_button(__("Material Transfer (In Transit)"),
-						() => frm.events.make_in_transit_stock_entry(frm), __('Create'));
+					frm.add_custom_button(
+						__("Material Transfer (In Transit)"),
+						() => frm.events.make_in_transit_stock_entry(frm),
+						__("Create")
+					);
 				}
 
 				if (frm.doc.material_request_type === "Material Issue") {
-					frm.add_custom_button(__("Issue Material"),
-						() => frm.events.make_stock_entry(frm), __('Create'));
+					frm.add_custom_button(
+						__("Issue Material"),
+						() => frm.events.make_stock_entry(frm),
+						__("Create")
+					);
 				}
 
 				if (frm.doc.material_request_type === "Customer Provided") {
-					frm.add_custom_button(__("Material Receipt"),
-						() => frm.events.make_stock_entry(frm), __('Create'));
+					frm.add_custom_button(
+						__("Material Receipt"),
+						() => frm.events.make_stock_entry(frm),
+						__("Create")
+					);
 				}
 
 				if (frm.doc.material_request_type === "Purchase") {
-					frm.add_custom_button(__('Purchase Order'),
-						() => frm.events.make_purchase_order(frm), __('Create'));
+					frm.add_custom_button(
+						__("Purchase Order"),
+						() => frm.events.make_purchase_order(frm),
+						__("Create")
+					);
 				}
 
 				if (frm.doc.material_request_type === "Purchase") {
-					frm.add_custom_button(__("Request for Quotation"),
-						() => frm.events.make_request_for_quotation(frm), __('Create'));
+					frm.add_custom_button(
+						__("Request for Quotation"),
+						() => frm.events.make_request_for_quotation(frm),
+						__("Create")
+					);
 				}
 
 				if (frm.doc.material_request_type === "Purchase") {
-					frm.add_custom_button(__("Supplier Quotation"),
-						() => frm.events.make_supplier_quotation(frm), __('Create'));
+					frm.add_custom_button(
+						__("Supplier Quotation"),
+						() => frm.events.make_supplier_quotation(frm),
+						__("Create")
+					);
 				}
 
 				if (frm.doc.material_request_type === "Manufacture") {
-					frm.add_custom_button(__("Work Order"),
-						() => frm.events.raise_work_orders(frm), __('Create'));
+					frm.add_custom_button(
+						__("Work Order"),
+						() => frm.events.raise_work_orders(frm),
+						__("Create")
+					);
 				}
 
-				frm.page.set_inner_btn_group_as_primary(__('Create'));
+				frm.page.set_inner_btn_group_as_primary(__("Create"));
 			}
 		}
 
-		if (frm.doc.docstatus===0) {
-			frm.add_custom_button(__('Sales Order'), () => frm.events.get_items_from_sales_order(frm),
-				__("Get Items From"));
+		if (frm.doc.docstatus === 0) {
+			frm.add_custom_button(
+				__("Sales Order"),
+				() => frm.events.get_items_from_sales_order(frm),
+				__("Get Items From")
+			);
 		}
 
-		if (frm.doc.docstatus == 1 && frm.doc.status == 'Stopped') {
-			frm.add_custom_button(__('Re-open'), () => frm.events.update_status(frm, 'Submitted'));
+		if (frm.doc.docstatus == 1 && frm.doc.status == "Stopped") {
+			frm.add_custom_button(__("Re-open"), () => frm.events.update_status(frm, "Submitted"));
 		}
 	},
 
-	update_status: function(frm, stop_status) {
+	update_status: function (frm, stop_status) {
 		frappe.call({
-			method: 'erpnext.stock.doctype.material_request.material_request.update_status',
+			method: "erpnext.stock.doctype.material_request.material_request.update_status",
 			args: { name: frm.doc.name, status: stop_status },
 			callback(r) {
 				if (!r.exc) {
 					frm.reload_doc();
 				}
-			}
+			},
 		});
 	},
 
-	get_items_from_sales_order: function(frm) {
+	get_items_from_sales_order: function (frm) {
 		erpnext.utils.map_current_doc({
 			method: "erpnext.selling.doctype.sales_order.sales_order.make_material_request",
 			source_doctype: "Sales Order",
@@ -192,13 +223,15 @@
 				docstatus: 1,
 				status: ["not in", ["Closed", "On Hold"]],
 				per_delivered: ["<", 99.99],
-				company: frm.doc.company
-			}
+				company: frm.doc.company,
+			},
 		});
 	},
 
-	get_item_data: function(frm, item, overwrite_warehouse=false) {
-		if (item && !item.item_code) { return; }
+	get_item_data: function (frm, item, overwrite_warehouse = false) {
+		if (item && !item.item_code) {
+			return;
+		}
 
 		frappe.call({
 			method: "erpnext.stock.get_item_details.get_item_details",
@@ -208,8 +241,8 @@
 					from_warehouse: item.from_warehouse,
 					warehouse: item.warehouse,
 					doctype: frm.doc.doctype,
-					buying_price_list: frappe.defaults.get_default('buying_price_list'),
-					currency: frappe.defaults.get_default('Currency'),
+					buying_price_list: frappe.defaults.get_default("buying_price_list"),
+					currency: frappe.defaults.get_default("Currency"),
 					name: frm.doc.name,
 					qty: item.qty || 1,
 					stock_qty: item.stock_qty,
@@ -222,15 +255,25 @@
 					conversion_factor: item.conversion_factor,
 					project: item.project,
 				},
-				overwrite_warehouse: overwrite_warehouse
+				overwrite_warehouse: overwrite_warehouse,
 			},
-			callback: function(r) {
+			callback: function (r) {
 				const d = item;
-				const allow_to_change_fields = ['actual_qty', 'projected_qty', 'min_order_qty', 'item_name', 'description', 'stock_uom', 'uom', 'conversion_factor', 'stock_qty'];
+				const allow_to_change_fields = [
+					"actual_qty",
+					"projected_qty",
+					"min_order_qty",
+					"item_name",
+					"description",
+					"stock_uom",
+					"uom",
+					"conversion_factor",
+					"stock_qty",
+				];
 
-				if(!r.exc) {
-					$.each(r.message, function(key, value) {
-						if(!d[key] || allow_to_change_fields.includes(key)) {
+				if (!r.exc) {
+					$.each(r.message, function (key, value) {
+						if (!d[key] || allow_to_change_fields.includes(key)) {
 							d[key] = value;
 						}
 					});
@@ -243,39 +286,53 @@
 
 					refresh_field("items");
 				}
-			}
+			},
 		});
 	},
 
-	get_items_from_bom: function(frm) {
+	get_items_from_bom: function (frm) {
 		var d = new frappe.ui.Dialog({
 			title: __("Get Items from BOM"),
 			fields: [
-				{"fieldname":"bom", "fieldtype":"Link", "label":__("BOM"),
-					options:"BOM", reqd: 1, get_query: function() {
-						return {filters: { docstatus:1, "is_active": 1 }};
-					}},
-				{"fieldname":"warehouse", "fieldtype":"Link", "label":__("For Warehouse"),
-					options:"Warehouse", reqd: 1},
-				{"fieldname":"qty", "fieldtype":"Float", "label":__("Quantity"),
-					reqd: 1, "default": 1},
-				{"fieldname":"fetch_exploded", "fieldtype":"Check",
-					"label":__("Fetch exploded BOM (including sub-assemblies)"), "default":1}
+				{
+					fieldname: "bom",
+					fieldtype: "Link",
+					label: __("BOM"),
+					options: "BOM",
+					reqd: 1,
+					get_query: function () {
+						return { filters: { docstatus: 1, is_active: 1 } };
+					},
+				},
+				{
+					fieldname: "warehouse",
+					fieldtype: "Link",
+					label: __("For Warehouse"),
+					options: "Warehouse",
+					reqd: 1,
+				},
+				{ fieldname: "qty", fieldtype: "Float", label: __("Quantity"), reqd: 1, default: 1 },
+				{
+					fieldname: "fetch_exploded",
+					fieldtype: "Check",
+					label: __("Fetch exploded BOM (including sub-assemblies)"),
+					default: 1,
+				},
 			],
-			primary_action_label: 'Get Items',
+			primary_action_label: "Get Items",
 			primary_action(values) {
-				if(!values) return;
+				if (!values) return;
 				values["company"] = frm.doc.company;
-				if(!frm.doc.company) frappe.throw(__("Company field is required"));
+				if (!frm.doc.company) frappe.throw(__("Company field is required"));
 				frappe.call({
 					method: "erpnext.manufacturing.doctype.bom.bom.get_bom_items",
 					args: values,
-					callback: function(r) {
+					callback: function (r) {
 						if (!r.message) {
 							frappe.throw(__("BOM does not contain any stock item"));
 						} else {
 							erpnext.utils.remove_empty_first_row(frm, "items");
-							$.each(r.message, function(i, item) {
+							$.each(r.message, function (i, item) {
 								var d = frappe.model.add_child(cur_frm.doc, "Material Request Item", "items");
 								d.item_code = item.item_code;
 								d.item_name = item.item_name;
@@ -290,61 +347,63 @@
 						}
 						d.hide();
 						refresh_field("items");
-					}
+					},
 				});
-			}
+			},
 		});
 
 		d.show();
 	},
 
-	make_purchase_order: function(frm) {
+	make_purchase_order: function (frm) {
 		frappe.prompt(
 			{
-				label: __('For Default Supplier (Optional)'),
-				fieldname:'default_supplier',
-				fieldtype: 'Link',
-				options: 'Supplier',
-				description: __('Select a Supplier from the Default Suppliers of the items below. On selection, a Purchase Order will be made against items belonging to the selected Supplier only.'),
+				label: __("For Default Supplier (Optional)"),
+				fieldname: "default_supplier",
+				fieldtype: "Link",
+				options: "Supplier",
+				description: __(
+					"Select a Supplier from the Default Suppliers of the items below. On selection, a Purchase Order will be made against items belonging to the selected Supplier only."
+				),
 				get_query: () => {
-					return{
+					return {
 						query: "erpnext.stock.doctype.material_request.material_request.get_default_supplier_query",
-						filters: {'doc': frm.doc.name}
-					}
-				}
+						filters: { doc: frm.doc.name },
+					};
+				},
 			},
 			(values) => {
 				frappe.model.open_mapped_doc({
 					method: "erpnext.stock.doctype.material_request.material_request.make_purchase_order",
 					frm: frm,
 					args: { default_supplier: values.default_supplier },
-					run_link_triggers: true
+					run_link_triggers: true,
 				});
 			},
-			__('Enter Supplier'),
-			__('Create')
-		)
+			__("Enter Supplier"),
+			__("Create")
+		);
 	},
 
-	make_request_for_quotation: function(frm) {
+	make_request_for_quotation: function (frm) {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.stock.doctype.material_request.material_request.make_request_for_quotation",
 			frm: frm,
-			run_link_triggers: true
+			run_link_triggers: true,
 		});
 	},
 
-	make_supplier_quotation: function(frm) {
+	make_supplier_quotation: function (frm) {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.stock.doctype.material_request.material_request.make_supplier_quotation",
-			frm: frm
+			frm: frm,
 		});
 	},
 
-	make_stock_entry: function(frm) {
+	make_stock_entry: function (frm) {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.stock.doctype.material_request.material_request.make_stock_entry",
-			frm: frm
+			frm: frm,
 		});
 	},
 
@@ -352,71 +411,70 @@
 		frappe.prompt(
 			[
 				{
-					label: __('In Transit Warehouse'),
-					fieldname: 'in_transit_warehouse',
-					fieldtype: 'Link',
-					options: 'Warehouse',
+					label: __("In Transit Warehouse"),
+					fieldname: "in_transit_warehouse",
+					fieldtype: "Link",
+					options: "Warehouse",
 					reqd: 1,
 					get_query: () => {
-						return{
+						return {
 							filters: {
-								'company': frm.doc.company,
-								'is_group': 0,
-								'warehouse_type': 'Transit'
-							}
-						}
-					}
-				}
+								company: frm.doc.company,
+								is_group: 0,
+								warehouse_type: "Transit",
+							},
+						};
+					},
+				},
 			],
 			(values) => {
 				frappe.call({
 					method: "erpnext.stock.doctype.material_request.material_request.make_in_transit_stock_entry",
 					args: {
 						source_name: frm.doc.name,
-						in_transit_warehouse: values.in_transit_warehouse
+						in_transit_warehouse: values.in_transit_warehouse,
 					},
-					callback: function(r) {
+					callback: function (r) {
 						if (r.message) {
 							let doc = frappe.model.sync(r.message);
-							frappe.set_route('Form', doc[0].doctype, doc[0].name);
+							frappe.set_route("Form", doc[0].doctype, doc[0].name);
 						}
-					}
-				})
+					},
+				});
 			},
-			__('In Transit Transfer'),
+			__("In Transit Transfer"),
 			__("Create Stock Entry")
-		)
+		);
 	},
 
 	create_pick_list: (frm) => {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.stock.doctype.material_request.material_request.create_pick_list",
-			frm: frm
+			frm: frm,
 		});
 	},
 
-	raise_work_orders: function(frm) {
+	raise_work_orders: function (frm) {
 		frappe.call({
-			method:"erpnext.stock.doctype.material_request.material_request.raise_work_orders",
+			method: "erpnext.stock.doctype.material_request.material_request.raise_work_orders",
 			args: {
-				"material_request": frm.doc.name
+				material_request: frm.doc.name,
 			},
 			freeze: true,
-			callback: function(r) {
-				if(r.message.length) {
+			callback: function (r) {
+				if (r.message.length) {
 					frm.reload_doc();
 				}
-			}
+			},
 		});
 	},
-	material_request_type: function(frm) {
-		frm.toggle_reqd('customer', frm.doc.material_request_type=="Customer Provided");
+	material_request_type: function (frm) {
+		frm.toggle_reqd("customer", frm.doc.material_request_type == "Customer Provided");
 
-		if (frm.doc.material_request_type !== 'Material Transfer' && frm.doc.set_from_warehouse) {
-			frm.set_value('set_from_warehouse', '');
+		if (frm.doc.material_request_type !== "Material Transfer" && frm.doc.set_from_warehouse) {
+			frm.set_value("set_from_warehouse", "");
 		}
 	},
-
 });
 
 frappe.ui.form.on("Material Request Item", {
@@ -428,12 +486,12 @@
 		frm.events.get_item_data(frm, item, false);
 	},
 
-	from_warehouse: function(frm, doctype, name) {
+	from_warehouse: function (frm, doctype, name) {
 		const item = locals[doctype][name];
 		frm.events.get_item_data(frm, item, false);
 	},
 
-	warehouse: function(frm, doctype, name) {
+	warehouse: function (frm, doctype, name) {
 		const item = locals[doctype][name];
 		frm.events.get_item_data(frm, item, false);
 	},
@@ -445,18 +503,18 @@
 		refresh_field("amount", item.name, item.parentfield);
 	},
 
-	item_code: function(frm, doctype, name) {
+	item_code: function (frm, doctype, name) {
 		const item = locals[doctype][name];
 		item.rate = 0;
-		item.uom = '';
+		item.uom = "";
 		set_schedule_date(frm);
 		frm.events.get_item_data(frm, item, true);
 	},
 
-	schedule_date: function(frm, cdt, cdn) {
+	schedule_date: function (frm, cdt, cdn) {
 		var row = locals[cdt][cdn];
 		if (row.schedule_date) {
-			if(!frm.doc.schedule_date) {
+			if (!frm.doc.schedule_date) {
 				erpnext.utils.copy_value_in_all_rows(frm.doc, cdt, cdn, "items", "schedule_date");
 			} else {
 				set_schedule_date(frm);
@@ -464,13 +522,15 @@
 		}
 	},
 
-	conversion_factor: function(frm, doctype, name) {
+	conversion_factor: function (frm, doctype, name) {
 		const item = locals[doctype][name];
 		frm.events.get_item_data(frm, item, false);
 	},
 });
 
-erpnext.buying.MaterialRequestController = class MaterialRequestController extends erpnext.buying.BuyingController {
+erpnext.buying.MaterialRequestController = class MaterialRequestController extends (
+	erpnext.buying.BuyingController
+) {
 	tc_name() {
 		this.get_terms();
 	}
@@ -492,32 +552,32 @@
 	}
 
 	onload() {
-		this.frm.set_query("item_code", "items", function(doc, cdt, cdn) {
+		this.frm.set_query("item_code", "items", function (doc, cdt, cdn) {
 			if (doc.material_request_type == "Customer Provided") {
-				return{
+				return {
 					query: "erpnext.controllers.queries.item_query",
-					filters:{
-						'customer': doc.customer,
-						'is_stock_item':1
-					}
-				}
+					filters: {
+						customer: doc.customer,
+						is_stock_item: 1,
+					},
+				};
 			} else if (doc.material_request_type == "Purchase") {
-				return{
+				return {
 					query: "erpnext.controllers.queries.item_query",
-					filters: {'is_purchase_item': 1}
-				}
+					filters: { is_purchase_item: 1 },
+				};
 			} else {
-				return{
+				return {
 					query: "erpnext.controllers.queries.item_query",
-					filters: {'is_stock_item': 1}
-				}
+					filters: { is_stock_item: 1 },
+				};
 			}
 		});
 	}
 
 	items_add(doc, cdt, cdn) {
 		var row = frappe.get_doc(cdt, cdn);
-		if(doc.schedule_date) {
+		if (doc.schedule_date) {
 			row.schedule_date = doc.schedule_date;
 			refresh_field("schedule_date", cdn, "items");
 		} else {
@@ -542,10 +602,16 @@
 };
 
 // for backward compatibility: combine new and previous states
-extend_cscript(cur_frm.cscript, new erpnext.buying.MaterialRequestController({frm: cur_frm}));
+extend_cscript(cur_frm.cscript, new erpnext.buying.MaterialRequestController({ frm: cur_frm }));
 
 function set_schedule_date(frm) {
-	if(frm.doc.schedule_date){
-		erpnext.utils.copy_value_in_all_rows(frm.doc, frm.doc.doctype, frm.doc.name, "items", "schedule_date");
+	if (frm.doc.schedule_date) {
+		erpnext.utils.copy_value_in_all_rows(
+			frm.doc,
+			frm.doc.doctype,
+			frm.doc.name,
+			"items",
+			"schedule_date"
+		);
 	}
 }
diff --git a/erpnext/stock/doctype/material_request/material_request_list.js b/erpnext/stock/doctype/material_request/material_request_list.js
index c85bd71..8a8cfd4 100644
--- a/erpnext/stock/doctype/material_request/material_request_list.js
+++ b/erpnext/stock/doctype/material_request/material_request_list.js
@@ -1,8 +1,8 @@
-frappe.listview_settings['Material Request'] = {
+frappe.listview_settings["Material Request"] = {
 	add_fields: ["material_request_type", "status", "per_ordered", "per_received", "transfer_status"],
-	get_indicator: function(doc) {
+	get_indicator: function (doc) {
 		var precision = frappe.defaults.get_default("float_precision");
-		if (doc.status=="Stopped") {
+		if (doc.status == "Stopped") {
 			return [__("Stopped"), "red", "status,=,Stopped"];
 		} else if (doc.transfer_status && doc.docstatus != 2) {
 			if (doc.transfer_status == "Not Started") {
@@ -12,12 +12,16 @@
 			} else if (doc.transfer_status == "Completed") {
 				return [__("Completed"), "green"];
 			}
-		} else if (doc.docstatus==1 && flt(doc.per_ordered, precision) == 0) {
+		} else if (doc.docstatus == 1 && flt(doc.per_ordered, precision) == 0) {
 			return [__("Pending"), "orange", "per_ordered,=,0"];
-		}  else if (doc.docstatus==1 && flt(doc.per_ordered, precision) < 100) {
+		} else if (doc.docstatus == 1 && flt(doc.per_ordered, precision) < 100) {
 			return [__("Partially ordered"), "yellow", "per_ordered,<,100"];
-		} else if (doc.docstatus==1 && flt(doc.per_ordered, precision) == 100) {
-			if (doc.material_request_type == "Purchase" && flt(doc.per_received, precision) < 100 && flt(doc.per_received, precision) > 0) {
+		} else if (doc.docstatus == 1 && flt(doc.per_ordered, precision) == 100) {
+			if (
+				doc.material_request_type == "Purchase" &&
+				flt(doc.per_received, precision) < 100 &&
+				flt(doc.per_received, precision) > 0
+			) {
 				return [__("Partially Received"), "yellow", "per_received,<,100"];
 			} else if (doc.material_request_type == "Purchase" && flt(doc.per_received, precision) == 100) {
 				return [__("Received"), "green", "per_received,=,100"];
@@ -33,5 +37,5 @@
 				return [__("Manufactured"), "green", "per_ordered,=,100"];
 			}
 		}
-	}
+	},
 };
diff --git a/erpnext/stock/doctype/packing_slip/packing_slip.js b/erpnext/stock/doctype/packing_slip/packing_slip.js
index 95e5ea3..682631f 100644
--- a/erpnext/stock/doctype/packing_slip/packing_slip.js
+++ b/erpnext/stock/doctype/packing_slip/packing_slip.js
@@ -1,45 +1,45 @@
 // Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Packing Slip', {
-    setup: (frm) => {
-        frm.set_query('delivery_note', () => {
-            return {
-                filters: {
-                    docstatus: 0,
-                }
-            }
-        });
+frappe.ui.form.on("Packing Slip", {
+	setup: (frm) => {
+		frm.set_query("delivery_note", () => {
+			return {
+				filters: {
+					docstatus: 0,
+				},
+			};
+		});
 
-        frm.set_query('item_code', 'items', (doc, cdt, cdn) => {
-            if (!doc.delivery_note) {
-                frappe.throw(__('Please select a Delivery Note'));
-            } else {
-                let d = locals[cdt][cdn];
-                return {
-                    query: 'erpnext.stock.doctype.packing_slip.packing_slip.item_details',
-                    filters: {
-                        delivery_note: doc.delivery_note,
-                    }
-                }
-            }
-        });
+		frm.set_query("item_code", "items", (doc, cdt, cdn) => {
+			if (!doc.delivery_note) {
+				frappe.throw(__("Please select a Delivery Note"));
+			} else {
+				let d = locals[cdt][cdn];
+				return {
+					query: "erpnext.stock.doctype.packing_slip.packing_slip.item_details",
+					filters: {
+						delivery_note: doc.delivery_note,
+					},
+				};
+			}
+		});
 	},
 
 	refresh: (frm) => {
-		frm.toggle_display('misc_details', frm.doc.amended_from);
+		frm.toggle_display("misc_details", frm.doc.amended_from);
 	},
 
 	delivery_note: (frm) => {
-		frm.set_value('items', null);
+		frm.set_value("items", null);
 
 		if (frm.doc.delivery_note) {
 			erpnext.utils.map_current_doc({
-				method: 'erpnext.stock.doctype.delivery_note.delivery_note.make_packing_slip',
+				method: "erpnext.stock.doctype.delivery_note.delivery_note.make_packing_slip",
 				source_name: frm.doc.delivery_note,
 				target_doc: frm,
 				freeze: true,
-				freeze_message: __('Creating Packing Slip ...'),
+				freeze_message: __("Creating Packing Slip ..."),
 			});
 		}
 	},
diff --git a/erpnext/stock/doctype/pick_list/pick_list.js b/erpnext/stock/doctype/pick_list/pick_list.js
index 3a5daa1..43519e7 100644
--- a/erpnext/stock/doctype/pick_list/pick_list.js
+++ b/erpnext/stock/doctype/pick_list/pick_list.js
@@ -1,54 +1,55 @@
 // Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Pick List', {
+frappe.ui.form.on("Pick List", {
 	setup: (frm) => {
 		frm.ignore_doctypes_on_cancel_all = ["Serial and Batch Bundle"];
 
-		frm.set_indicator_formatter('item_code',
-			function(doc) { return (doc.stock_qty === 0) ? "red" : "green"; });
+		frm.set_indicator_formatter("item_code", function (doc) {
+			return doc.stock_qty === 0 ? "red" : "green";
+		});
 
 		frm.custom_make_buttons = {
-			'Delivery Note': 'Delivery Note',
-			'Stock Entry': 'Stock Entry',
+			"Delivery Note": "Delivery Note",
+			"Stock Entry": "Stock Entry",
 		};
 
-		frm.set_query('parent_warehouse', () => {
+		frm.set_query("parent_warehouse", () => {
 			return {
 				filters: {
-					'company': frm.doc.company
-				}
+					company: frm.doc.company,
+				},
 			};
 		});
 
-		frm.set_query('work_order', () => {
+		frm.set_query("work_order", () => {
 			return {
-				query: 'erpnext.stock.doctype.pick_list.pick_list.get_pending_work_orders',
+				query: "erpnext.stock.doctype.pick_list.pick_list.get_pending_work_orders",
 				filters: {
-					'company': frm.doc.company
-				}
+					company: frm.doc.company,
+				},
 			};
 		});
 
-		frm.set_query('material_request', () => {
+		frm.set_query("material_request", () => {
 			return {
 				filters: {
-					'material_request_type': ['=', frm.doc.purpose]
-				}
+					material_request_type: ["=", frm.doc.purpose],
+				},
 			};
 		});
 
-		frm.set_query('item_code', 'locations', () => {
-			return erpnext.queries.item({ "is_stock_item": 1 });
+		frm.set_query("item_code", "locations", () => {
+			return erpnext.queries.item({ is_stock_item: 1 });
 		});
 
-		frm.set_query('batch_no', 'locations', (frm, cdt, cdn) => {
+		frm.set_query("batch_no", "locations", (frm, cdt, cdn) => {
 			const row = locals[cdt][cdn];
 			return {
-				query: 'erpnext.controllers.queries.get_batch_no',
+				query: "erpnext.controllers.queries.get_batch_no",
 				filters: {
 					item_code: row.item_code,
-					warehouse: row.warehouse
+					warehouse: row.warehouse,
 				},
 			};
 		});
@@ -57,29 +58,29 @@
 			let row = locals[cdt][cdn];
 			return {
 				filters: {
-					'item_code': row.item_code,
-					'voucher_type': doc.doctype,
-					'voucher_no': ["in", [doc.name, ""]],
-					'is_cancelled': 0,
-				}
-			}
+					item_code: row.item_code,
+					voucher_type: doc.doctype,
+					voucher_no: ["in", [doc.name, ""]],
+					is_cancelled: 0,
+				},
+			};
 		});
 	},
-	set_item_locations:(frm, save) => {
+	set_item_locations: (frm, save) => {
 		if (!(frm.doc.locations && frm.doc.locations.length)) {
-			frappe.msgprint(__('Add items in the Item Locations table'));
+			frappe.msgprint(__("Add items in the Item Locations table"));
 		} else {
 			frappe.call({
 				method: "set_item_locations",
 				doc: frm.doc,
 				args: {
-					"save": save,
+					save: save,
 				},
 				freeze: 1,
 				freeze_message: __("Setting Item Locations..."),
 				callback(r) {
 					refresh_field("locations");
-				}
+				},
 			});
 		}
 	},
@@ -88,142 +89,173 @@
 		frm.events.set_item_locations(frm, false);
 	},
 	refresh: (frm) => {
-		frm.trigger('add_get_items_button');
+		frm.trigger("add_get_items_button");
 		if (frm.doc.docstatus === 1) {
-			frappe.xcall('erpnext.stock.doctype.pick_list.pick_list.target_document_exists', {
-				'pick_list_name': frm.doc.name,
-				'purpose': frm.doc.purpose
-			}).then(target_document_exists => {
-				frm.set_df_property("locations", "allow_on_submit", target_document_exists ? 0 : 1);
+			frappe
+				.xcall("erpnext.stock.doctype.pick_list.pick_list.target_document_exists", {
+					pick_list_name: frm.doc.name,
+					purpose: frm.doc.purpose,
+				})
+				.then((target_document_exists) => {
+					frm.set_df_property("locations", "allow_on_submit", target_document_exists ? 0 : 1);
 
-				if (target_document_exists) return;
+					if (target_document_exists) return;
 
-				frm.add_custom_button(__('Update Current Stock'), () => frm.trigger('update_pick_list_stock'));
+					frm.add_custom_button(__("Update Current Stock"), () =>
+						frm.trigger("update_pick_list_stock")
+					);
 
-				if (frm.doc.purpose === 'Delivery') {
-					frm.add_custom_button(__('Delivery Note'), () => frm.trigger('create_delivery_note'), __('Create'));
-				} else {
-					frm.add_custom_button(__('Stock Entry'), () => frm.trigger('create_stock_entry'), __('Create'));
-				}
-			});
+					if (frm.doc.purpose === "Delivery") {
+						frm.add_custom_button(
+							__("Delivery Note"),
+							() => frm.trigger("create_delivery_note"),
+							__("Create")
+						);
+					} else {
+						frm.add_custom_button(
+							__("Stock Entry"),
+							() => frm.trigger("create_stock_entry"),
+							__("Create")
+						);
+					}
+				});
 
-			if (frm.doc.purpose === 'Delivery' && frm.doc.status === 'Open') {
+			if (frm.doc.purpose === "Delivery" && frm.doc.status === "Open") {
 				if (frm.doc.__onload && frm.doc.__onload.has_unreserved_stock) {
-					frm.add_custom_button(__('Reserve'), () => frm.events.create_stock_reservation_entries(frm), __('Stock Reservation'));
+					frm.add_custom_button(
+						__("Reserve"),
+						() => frm.events.create_stock_reservation_entries(frm),
+						__("Stock Reservation")
+					);
 				}
 
 				if (frm.doc.__onload && frm.doc.__onload.has_reserved_stock) {
-					frm.add_custom_button(__('Unreserve'), () => {
-						frappe.confirm(
-							__('The reserved stock will be released. Are you certain you wish to proceed?'),
-							() => frm.events.cancel_stock_reservation_entries(frm)
-						)
-					}, __('Stock Reservation'));
-					frm.add_custom_button(__('Reserved Stock'), () => frm.events.show_reserved_stock(frm), __('Stock Reservation'));
+					frm.add_custom_button(
+						__("Unreserve"),
+						() => {
+							frappe.confirm(
+								__(
+									"The reserved stock will be released. Are you certain you wish to proceed?"
+								),
+								() => frm.events.cancel_stock_reservation_entries(frm)
+							);
+						},
+						__("Stock Reservation")
+					);
+					frm.add_custom_button(
+						__("Reserved Stock"),
+						() => frm.events.show_reserved_stock(frm),
+						__("Stock Reservation")
+					);
 				}
 			}
 		}
 
-		let sbb_field = frm.get_docfield('locations', 'serial_and_batch_bundle');
+		let sbb_field = frm.get_docfield("locations", "serial_and_batch_bundle");
 		if (sbb_field) {
 			sbb_field.get_route_options_for_new_doc = (row) => {
 				return {
-					'item_code': row.doc.item_code,
-					'warehouse': row.doc.warehouse,
-					'voucher_type': frm.doc.doctype,
-				}
+					item_code: row.doc.item_code,
+					warehouse: row.doc.warehouse,
+					voucher_type: frm.doc.doctype,
+				};
 			};
 		}
 	},
 	work_order: (frm) => {
-		frappe.db.get_value('Work Order',
-			frm.doc.work_order,
-			['qty', 'material_transferred_for_manufacturing']
-		).then(data => {
-			let qty_data = data.message;
-			let max = qty_data.qty - qty_data.material_transferred_for_manufacturing;
-			frappe.prompt({
-				fieldtype: 'Float',
-				label: __('Qty of Finished Goods Item'),
-				fieldname: 'qty',
-				description: __('Max: {0}', [max]),
-				default: max
-			}, (data) => {
-				frm.set_value('for_qty', data.qty);
-				if (data.qty > max) {
-					frappe.msgprint(__('Quantity must not be more than {0}', [max]));
-					return;
-				}
-				frm.clear_table('locations');
-				erpnext.utils.map_current_doc({
-					method: 'erpnext.manufacturing.doctype.work_order.work_order.create_pick_list',
-					target: frm,
-					source_name: frm.doc.work_order
-				});
-			}, __('Select Quantity'), __('Get Items'));
-		});
+		frappe.db
+			.get_value("Work Order", frm.doc.work_order, ["qty", "material_transferred_for_manufacturing"])
+			.then((data) => {
+				let qty_data = data.message;
+				let max = qty_data.qty - qty_data.material_transferred_for_manufacturing;
+				frappe.prompt(
+					{
+						fieldtype: "Float",
+						label: __("Qty of Finished Goods Item"),
+						fieldname: "qty",
+						description: __("Max: {0}", [max]),
+						default: max,
+					},
+					(data) => {
+						frm.set_value("for_qty", data.qty);
+						if (data.qty > max) {
+							frappe.msgprint(__("Quantity must not be more than {0}", [max]));
+							return;
+						}
+						frm.clear_table("locations");
+						erpnext.utils.map_current_doc({
+							method: "erpnext.manufacturing.doctype.work_order.work_order.create_pick_list",
+							target: frm,
+							source_name: frm.doc.work_order,
+						});
+					},
+					__("Select Quantity"),
+					__("Get Items")
+				);
+			});
 	},
 	material_request: (frm) => {
 		erpnext.utils.map_current_doc({
-			method: 'erpnext.stock.doctype.material_request.material_request.create_pick_list',
+			method: "erpnext.stock.doctype.material_request.material_request.create_pick_list",
 			target: frm,
-			source_name: frm.doc.material_request
+			source_name: frm.doc.material_request,
 		});
 	},
 	purpose: (frm) => {
-		frm.clear_table('locations');
-		frm.trigger('add_get_items_button');
+		frm.clear_table("locations");
+		frm.trigger("add_get_items_button");
 	},
 	create_delivery_note: (frm) => {
 		frappe.model.open_mapped_doc({
-			method: 'erpnext.stock.doctype.pick_list.pick_list.create_delivery_note',
-			frm: frm
+			method: "erpnext.stock.doctype.pick_list.pick_list.create_delivery_note",
+			frm: frm,
 		});
-
 	},
 	create_stock_entry: (frm) => {
-		frappe.xcall('erpnext.stock.doctype.pick_list.pick_list.create_stock_entry', {
-			'pick_list': frm.doc,
-		}).then(stock_entry => {
-			frappe.model.sync(stock_entry);
-			frappe.set_route("Form", 'Stock Entry', stock_entry.name);
-		});
+		frappe
+			.xcall("erpnext.stock.doctype.pick_list.pick_list.create_stock_entry", {
+				pick_list: frm.doc,
+			})
+			.then((stock_entry) => {
+				frappe.model.sync(stock_entry);
+				frappe.set_route("Form", "Stock Entry", stock_entry.name);
+			});
 	},
 	update_pick_list_stock: (frm) => {
 		frm.events.set_item_locations(frm, true);
 	},
 	add_get_items_button: (frm) => {
 		let purpose = frm.doc.purpose;
-		if (purpose != 'Delivery' || frm.doc.docstatus !== 0) return;
+		if (purpose != "Delivery" || frm.doc.docstatus !== 0) return;
 		let get_query_filters = {
 			docstatus: 1,
-			per_delivered: ['<', 100],
-			status: ['!=', ''],
-			customer: frm.doc.customer
+			per_delivered: ["<", 100],
+			status: ["!=", ""],
+			customer: frm.doc.customer,
 		};
-		frm.get_items_btn = frm.add_custom_button(__('Get Items'), () => {
+		frm.get_items_btn = frm.add_custom_button(__("Get Items"), () => {
 			erpnext.utils.map_current_doc({
-				method: 'erpnext.selling.doctype.sales_order.sales_order.create_pick_list',
-				source_doctype: 'Sales Order',
+				method: "erpnext.selling.doctype.sales_order.sales_order.create_pick_list",
+				source_doctype: "Sales Order",
 				target: frm,
 				setters: {
 					company: frm.doc.company,
-					customer: frm.doc.customer
+					customer: frm.doc.customer,
 				},
-				date_field: 'transaction_date',
-				get_query_filters: get_query_filters
+				date_field: "transaction_date",
+				get_query_filters: get_query_filters,
 			});
 		});
 	},
 	scan_barcode: (frm) => {
 		const opts = {
 			frm,
-			items_table_name: 'locations',
-			qty_field: 'picked_qty',
-			max_qty_field: 'qty',
+			items_table_name: "locations",
+			qty_field: "picked_qty",
+			max_qty_field: "qty",
 			dont_allow_new_row: true,
 			prompt_qty: frm.doc.prompt_qty,
-			serial_no_field: "not_supported",  // doesn't make sense for picklist without a separate field.
+			serial_no_field: "not_supported", // doesn't make sense for picklist without a separate field.
 		};
 		const barcode_scanner = new erpnext.utils.BarcodeScanner(opts);
 		barcode_scanner.process_scan();
@@ -233,14 +265,14 @@
 			doc: frm.doc,
 			method: "create_stock_reservation_entries",
 			args: {
-				notify: true
+				notify: true,
 			},
 			freeze: true,
 			freeze_message: __("Reserving Stock..."),
 			callback: (r) => {
 				frm.doc.__onload.has_unreserved_stock = false;
 				frm.reload_doc();
-			}
+			},
 		});
 	},
 	cancel_stock_reservation_entries: (frm) => {
@@ -248,40 +280,42 @@
 			doc: frm.doc,
 			method: "cancel_stock_reservation_entries",
 			args: {
-				notify: true
+				notify: true,
 			},
 			freeze: true,
-			freeze_message: __('Unreserving Stock...'),
+			freeze_message: __("Unreserving Stock..."),
 			callback: (r) => {
 				frm.doc.__onload.has_reserved_stock = false;
 				frm.reload_doc();
-			}
+			},
 		});
 	},
 	show_reserved_stock(frm) {
 		// Get the latest modified date from the locations table.
-		var to_date = moment(new Date(Math.max(...frm.doc.locations.map(e => new Date(e.modified))))).format('YYYY-MM-DD');
+		var to_date = moment(
+			new Date(Math.max(...frm.doc.locations.map((e) => new Date(e.modified))))
+		).format("YYYY-MM-DD");
 
 		frappe.route_options = {
 			company: frm.doc.company,
-			from_date: moment(frm.doc.creation).format('YYYY-MM-DD'),
+			from_date: moment(frm.doc.creation).format("YYYY-MM-DD"),
 			to_date: to_date,
 			voucher_type: "Sales Order",
 			from_voucher_type: "Pick List",
 			from_voucher_no: frm.doc.name,
-		}
+		};
 		frappe.set_route("query-report", "Reserved Stock");
-	}
+	},
 });
 
-frappe.ui.form.on('Pick List Item', {
+frappe.ui.form.on("Pick List Item", {
 	item_code: (frm, cdt, cdn) => {
 		let row = frappe.get_doc(cdt, cdn);
 		if (row.item_code) {
-			get_item_details(row.item_code).then(data => {
-				frappe.model.set_value(cdt, cdn, 'uom', data.stock_uom);
-				frappe.model.set_value(cdt, cdn, 'stock_uom', data.stock_uom);
-				frappe.model.set_value(cdt, cdn, 'conversion_factor', 1);
+			get_item_details(row.item_code).then((data) => {
+				frappe.model.set_value(cdt, cdn, "uom", data.stock_uom);
+				frappe.model.set_value(cdt, cdn, "stock_uom", data.stock_uom);
+				frappe.model.set_value(cdt, cdn, "conversion_factor", 1);
 			});
 		}
 	},
@@ -289,64 +323,62 @@
 	uom: (frm, cdt, cdn) => {
 		let row = frappe.get_doc(cdt, cdn);
 		if (row.uom) {
-			get_item_details(row.item_code, row.uom).then(data => {
-				frappe.model.set_value(cdt, cdn, 'conversion_factor', data.conversion_factor);
+			get_item_details(row.item_code, row.uom).then((data) => {
+				frappe.model.set_value(cdt, cdn, "conversion_factor", data.conversion_factor);
 			});
 		}
 	},
 
 	qty: (frm, cdt, cdn) => {
 		let row = frappe.get_doc(cdt, cdn);
-		frappe.model.set_value(cdt, cdn, 'stock_qty', row.qty * row.conversion_factor);
+		frappe.model.set_value(cdt, cdn, "stock_qty", row.qty * row.conversion_factor);
 	},
 
 	conversion_factor: (frm, cdt, cdn) => {
 		let row = frappe.get_doc(cdt, cdn);
-		frappe.model.set_value(cdt, cdn, 'stock_qty', row.qty * row.conversion_factor);
+		frappe.model.set_value(cdt, cdn, "stock_qty", row.qty * row.conversion_factor);
 	},
 
 	pick_serial_and_batch(frm, cdt, cdn) {
 		let item = locals[cdt][cdn];
 		let path = "assets/erpnext/js/utils/serial_no_batch_selector.js";
 
-		frappe.db.get_value("Item", item.item_code, ["has_batch_no", "has_serial_no"])
-			.then((r) => {
-				if (r.message && (r.message.has_batch_no || r.message.has_serial_no)) {
-					item.has_serial_no = r.message.has_serial_no;
-					item.has_batch_no = r.message.has_batch_no;
-					item.type_of_transaction = item.qty > 0 ? "Outward":"Inward";
+		frappe.db.get_value("Item", item.item_code, ["has_batch_no", "has_serial_no"]).then((r) => {
+			if (r.message && (r.message.has_batch_no || r.message.has_serial_no)) {
+				item.has_serial_no = r.message.has_serial_no;
+				item.has_batch_no = r.message.has_batch_no;
+				item.type_of_transaction = item.qty > 0 ? "Outward" : "Inward";
 
-					item.title = item.has_serial_no ?
-						__("Select Serial No") : __("Select Batch No");
+				item.title = item.has_serial_no ? __("Select Serial No") : __("Select Batch No");
 
-					if (item.has_serial_no && item.has_batch_no) {
-						item.title = __("Select Serial and Batch");
-					}
-
-					frappe.require(path, function() {
-						new erpnext.SerialBatchPackageSelector(
-							frm, item, (r) => {
-								if (r) {
-									let qty = Math.abs(r.total_qty);
-									frappe.model.set_value(item.doctype, item.name, {
-										"serial_and_batch_bundle": r.name,
-										"use_serial_batch_fields": 0,
-										"qty": qty / flt(item.conversion_factor || 1, precision("conversion_factor", item))
-									});
-								}
-							}
-						);
-					});
+				if (item.has_serial_no && item.has_batch_no) {
+					item.title = __("Select Serial and Batch");
 				}
-			});
-	}
+
+				frappe.require(path, function () {
+					new erpnext.SerialBatchPackageSelector(frm, item, (r) => {
+						if (r) {
+							let qty = Math.abs(r.total_qty);
+							frappe.model.set_value(item.doctype, item.name, {
+								serial_and_batch_bundle: r.name,
+								use_serial_batch_fields: 0,
+								qty:
+									qty /
+									flt(item.conversion_factor || 1, precision("conversion_factor", item)),
+							});
+						}
+					});
+				});
+			}
+		});
+	},
 });
 
-function get_item_details(item_code, uom=null) {
+function get_item_details(item_code, uom = null) {
 	if (item_code) {
-		return frappe.xcall('erpnext.stock.doctype.pick_list.pick_list.get_item_details', {
+		return frappe.xcall("erpnext.stock.doctype.pick_list.pick_list.get_item_details", {
 			item_code,
-			uom
+			uom,
 		});
 	}
 }
diff --git a/erpnext/stock/doctype/pick_list/pick_list_list.js b/erpnext/stock/doctype/pick_list/pick_list_list.js
index ad88b0a..9cdbfe1 100644
--- a/erpnext/stock/doctype/pick_list/pick_list_list.js
+++ b/erpnext/stock/doctype/pick_list/pick_list_list.js
@@ -1,14 +1,14 @@
 // Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.listview_settings['Pick List'] = {
+frappe.listview_settings["Pick List"] = {
 	get_indicator: function (doc) {
 		const status_colors = {
-			"Draft": "grey",
-			"Open": "orange",
-			"Completed": "green",
-			"Cancelled": "red",
+			Draft: "grey",
+			Open: "orange",
+			Completed: "green",
+			Cancelled: "red",
 		};
 		return [__(doc.status), status_colors[doc.status], "status,=," + doc.status];
 	},
-};
\ No newline at end of file
+};
diff --git a/erpnext/stock/doctype/price_list/price_list.js b/erpnext/stock/doctype/price_list/price_list.js
index 9291498..85a3a39 100644
--- a/erpnext/stock/doctype/price_list/price_list.js
+++ b/erpnext/stock/doctype/price_list/price_list.js
@@ -2,13 +2,17 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.ui.form.on("Price List", {
-	refresh: function(frm) {
+	refresh: function (frm) {
 		let me = this;
-		frm.add_custom_button(__("Add / Edit Prices"), function() {
-			frappe.route_options = {
-				"price_list": frm.doc.name
-			};
-			frappe.set_route("Report", "Item Price");
-		}, "fa fa-money");
-	}
+		frm.add_custom_button(
+			__("Add / Edit Prices"),
+			function () {
+				frappe.route_options = {
+					price_list: frm.doc.name,
+				};
+				frappe.set_route("Report", "Item Price");
+			},
+			"fa fa-money"
+		);
+	},
 });
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
index 2cbccb0..997cdd0 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
@@ -10,12 +10,12 @@
 frappe.ui.form.on("Purchase Receipt", {
 	setup: (frm) => {
 		frm.make_methods = {
-			'Landed Cost Voucher': () => {
-				let lcv = frappe.model.get_new_doc('Landed Cost Voucher');
+			"Landed Cost Voucher": () => {
+				let lcv = frappe.model.get_new_doc("Landed Cost Voucher");
 				lcv.company = frm.doc.company;
 
-				let lcv_receipt = frappe.model.get_new_doc('Landed Cost Purchase Receipt');
-				lcv_receipt.receipt_document_type = 'Purchase Receipt';
+				let lcv_receipt = frappe.model.get_new_doc("Landed Cost Purchase Receipt");
+				lcv_receipt.receipt_document_type = "Purchase Receipt";
 				lcv_receipt.receipt_document = frm.doc.name;
 				lcv_receipt.supplier = frm.doc.supplier;
 				lcv_receipt.grand_total = frm.doc.grand_total;
@@ -23,69 +23,77 @@
 
 				frappe.set_route("Form", lcv.doctype, lcv.name);
 			},
-		}
-
-		frm.custom_make_buttons = {
-			'Stock Entry': 'Return',
-			'Purchase Invoice': 'Purchase Invoice'
 		};
 
-		frm.set_query("expense_account", "items", function() {
+		frm.custom_make_buttons = {
+			"Stock Entry": "Return",
+			"Purchase Invoice": "Purchase Invoice",
+		};
+
+		frm.set_query("expense_account", "items", function () {
 			return {
 				query: "erpnext.controllers.queries.get_expense_account",
-				filters: {'company': frm.doc.company }
-			}
+				filters: { company: frm.doc.company },
+			};
 		});
 
-		frm.set_query("wip_composite_asset", "items", function() {
+		frm.set_query("wip_composite_asset", "items", function () {
 			return {
-				filters: {'is_composite_asset': 1, 'docstatus': 0 }
-			}
+				filters: { is_composite_asset: 1, docstatus: 0 },
+			};
 		});
 
-		frm.set_query("taxes_and_charges", function() {
+		frm.set_query("taxes_and_charges", function () {
 			return {
-				filters: {'company': frm.doc.company }
-			}
+				filters: { company: frm.doc.company },
+			};
 		});
 
-		frm.set_query("subcontracting_receipt", function() {
+		frm.set_query("subcontracting_receipt", function () {
 			return {
 				filters: {
-					'docstatus': 1,
-					'supplier': frm.doc.supplier,
-				}
-			}
+					docstatus: 1,
+					supplier: frm.doc.supplier,
+				},
+			};
 		});
 	},
-	onload: function(frm) {
-		erpnext.queries.setup_queries(frm, "Warehouse", function() {
+	onload: function (frm) {
+		erpnext.queries.setup_queries(frm, "Warehouse", function () {
 			return erpnext.queries.warehouse(frm.doc);
 		});
 	},
 
-	refresh: function(frm) {
-		if(frm.doc.company) {
+	refresh: function (frm) {
+		if (frm.doc.company) {
 			frm.trigger("toggle_display_account_head");
 		}
 
 		if (frm.doc.docstatus === 1 && frm.doc.is_return === 1 && frm.doc.per_billed !== 100) {
-			frm.add_custom_button(__('Debit Note'), function() {
-				frappe.model.open_mapped_doc({
-					method: "erpnext.stock.doctype.purchase_receipt.purchase_receipt.make_purchase_invoice",
-					frm: cur_frm,
-				})
-			}, __('Create'));
-			frm.page.set_inner_btn_group_as_primary(__('Create'));
+			frm.add_custom_button(
+				__("Debit Note"),
+				function () {
+					frappe.model.open_mapped_doc({
+						method: "erpnext.stock.doctype.purchase_receipt.purchase_receipt.make_purchase_invoice",
+						frm: cur_frm,
+					});
+				},
+				__("Create")
+			);
+			frm.page.set_inner_btn_group_as_primary(__("Create"));
 		}
 
 		if (frm.doc.docstatus === 1 && frm.doc.is_internal_supplier && !frm.doc.inter_company_reference) {
-			frm.add_custom_button(__('Delivery Note'), function() {
-				frappe.model.open_mapped_doc({
-					method: 'erpnext.stock.doctype.purchase_receipt.purchase_receipt.make_inter_company_delivery_note',
-					frm: cur_frm,
-				})
-			}, __('Create'));
+			frm.add_custom_button(
+				__("Delivery Note"),
+				function () {
+					frappe.model.open_mapped_doc({
+						method: "erpnext.stock.doctype.purchase_receipt.purchase_receipt.make_inter_company_delivery_note",
+						frm: cur_frm,
+					});
+				},
+				__("Create")
+			);
 		}
 
 		if (frm.doc.docstatus === 0) {
@@ -94,7 +102,9 @@
 					if (value) {
 						frm.doc.items.forEach((item) => {
 							frm.fields_dict.items.grid.update_docfield_property(
-								"rate", "read_only", (item.purchase_order && item.purchase_order_item)
+								"rate",
+								"read_only",
+								item.purchase_order && item.purchase_order_item
 							);
 						});
 					}
@@ -105,58 +115,68 @@
 		frm.events.add_custom_buttons(frm);
 	},
 
-	add_custom_buttons: function(frm) {
+	add_custom_buttons: function (frm) {
 		if (frm.doc.docstatus == 0) {
-			frm.add_custom_button(__('Purchase Invoice'), function () {
-				if (!frm.doc.supplier) {
-					frappe.throw({
-						title: __("Mandatory"),
-						message: __("Please Select a Supplier")
-					});
-				}
-				erpnext.utils.map_current_doc({
-					method: "erpnext.accounts.doctype.purchase_invoice.purchase_invoice.make_purchase_receipt",
-					source_doctype: "Purchase Invoice",
-					target: frm,
-					setters: {
-						supplier: frm.doc.supplier,
-					},
-					get_query_filters: {
-						docstatus: 1,
-						per_received: ["<", 100],
-						company: frm.doc.company
+			frm.add_custom_button(
+				__("Purchase Invoice"),
+				function () {
+					if (!frm.doc.supplier) {
+						frappe.throw({
+							title: __("Mandatory"),
+							message: __("Please Select a Supplier"),
+						});
 					}
-				})
-			}, __("Get Items From"));
+					erpnext.utils.map_current_doc({
+						method: "erpnext.accounts.doctype.purchase_invoice.purchase_invoice.make_purchase_receipt",
+						source_doctype: "Purchase Invoice",
+						target: frm,
+						setters: {
+							supplier: frm.doc.supplier,
+						},
+						get_query_filters: {
+							docstatus: 1,
+							per_received: ["<", 100],
+							company: frm.doc.company,
+						},
+					});
+				},
+				__("Get Items From")
+			);
 		}
 	},
 
-	company: function(frm) {
+	company: function (frm) {
 		frm.trigger("toggle_display_account_head");
 		erpnext.accounts.dimensions.update_dimension(frm, frm.doctype);
 	},
 
 	subcontracting_receipt: (frm) => {
-		if (frm.doc.is_subcontracted === 1 && frm.doc.is_old_subcontracting_flow === 0 && frm.doc.subcontracting_receipt) {
-			frm.set_value('items', null);
+		if (
+			frm.doc.is_subcontracted === 1 &&
+			frm.doc.is_old_subcontracting_flow === 0 &&
+			frm.doc.subcontracting_receipt
+		) {
+			frm.set_value("items", null);
 
 			erpnext.utils.map_current_doc({
-				method: 'erpnext.subcontracting.doctype.subcontracting_receipt.subcontracting_receipt.make_purchase_receipt',
+				method: "erpnext.subcontracting.doctype.subcontracting_receipt.subcontracting_receipt.make_purchase_receipt",
 				source_name: frm.doc.subcontracting_receipt,
 				target_doc: frm,
 				freeze: true,
-				freeze_message: __('Mapping Purchase Receipt ...'),
+				freeze_message: __("Mapping Purchase Receipt ..."),
 			});
 		}
 	},
 
-	toggle_display_account_head: function(frm) {
-		var enabled = erpnext.is_perpetual_inventory_enabled(frm.doc.company)
+	toggle_display_account_head: function (frm) {
+		var enabled = erpnext.is_perpetual_inventory_enabled(frm.doc.company);
 		frm.fields_dict["items"].grid.set_column_disp(["cost_center"], enabled);
-	}
+	},
 });
 
-erpnext.stock.PurchaseReceiptController = class PurchaseReceiptController extends erpnext.buying.BuyingController {
+erpnext.stock.PurchaseReceiptController = class PurchaseReceiptController extends (
+	erpnext.buying.BuyingController
+) {
 	setup(doc) {
 		this.setup_posting_date_time_check();
 		super.setup(doc);
@@ -169,34 +189,43 @@
 		erpnext.accounts.ledger_preview.show_accounting_ledger_preview(this.frm);
 		erpnext.accounts.ledger_preview.show_stock_ledger_preview(this.frm);
 
-		if(this.frm.doc.docstatus > 0) {
+		if (this.frm.doc.docstatus > 0) {
 			this.show_stock_ledger();
 			//removed for temporary
 			this.show_general_ledger();
 
-			this.frm.add_custom_button(__('Asset'), function() {
-				frappe.route_options = {
-					purchase_receipt: me.frm.doc.name,
-				};
-				frappe.set_route("List", "Asset");
-			}, __("View"));
+			this.frm.add_custom_button(
+				__("Asset"),
+				function () {
+					frappe.route_options = {
+						purchase_receipt: me.frm.doc.name,
+					};
+					frappe.set_route("List", "Asset");
+				},
+				__("View")
+			);
 
-			this.frm.add_custom_button(__('Asset Movement'), function() {
-				frappe.route_options = {
-					reference_name: me.frm.doc.name,
-				};
-				frappe.set_route("List", "Asset Movement");
-			}, __("View"));
+			this.frm.add_custom_button(
+				__("Asset Movement"),
+				function () {
+					frappe.route_options = {
+						reference_name: me.frm.doc.name,
+					};
+					frappe.set_route("List", "Asset Movement");
+				},
+				__("View")
+			);
 		}
 
-		if(!this.frm.doc.is_return && this.frm.doc.status!="Closed") {
+		if (!this.frm.doc.is_return && this.frm.doc.status != "Closed") {
 			if (this.frm.doc.docstatus == 0) {
-				this.frm.add_custom_button(__('Purchase Order'),
+				this.frm.add_custom_button(
+					__("Purchase Order"),
 					function () {
 						if (!me.frm.doc.supplier) {
 							frappe.throw({
 								title: __("Mandatory"),
-								message: __("Please Select a Supplier")
+								message: __("Please Select a Supplier"),
 							});
 						}
 						erpnext.utils.map_current_doc({
@@ -205,39 +234,52 @@
 							target: me.frm,
 							setters: {
 								supplier: me.frm.doc.supplier,
-								schedule_date: undefined
+								schedule_date: undefined,
 							},
 							get_query_filters: {
 								docstatus: 1,
 								status: ["not in", ["Closed", "On Hold"]],
 								per_received: ["<", 99.99],
-								company: me.frm.doc.company
-							}
-						})
-					}, __("Get Items From"));
+								company: me.frm.doc.company,
+							},
+						});
+					},
+					__("Get Items From")
+				);
 			}
 
-			if(this.frm.doc.docstatus == 1 && this.frm.doc.status!="Closed") {
+			if (this.frm.doc.docstatus == 1 && this.frm.doc.status != "Closed") {
 				if (this.frm.has_perm("submit")) {
-					cur_frm.add_custom_button(__("Close"), this.close_purchase_receipt, __("Status"))
+					cur_frm.add_custom_button(__("Close"), this.close_purchase_receipt, __("Status"));
 				}
 
-				cur_frm.add_custom_button(__('Purchase Return'), this.make_purchase_return, __('Create'));
+				cur_frm.add_custom_button(__("Purchase Return"), this.make_purchase_return, __("Create"));
 
-				cur_frm.add_custom_button(__('Make Stock Entry'), cur_frm.cscript['Make Stock Entry'], __('Create'));
+				cur_frm.add_custom_button(
+					__("Make Stock Entry"),
+					cur_frm.cscript["Make Stock Entry"],
+					__("Create")
+				);
 
-				if(flt(this.frm.doc.per_billed) < 100) {
-					cur_frm.add_custom_button(__('Purchase Invoice'), this.make_purchase_invoice, __('Create'));
+				if (flt(this.frm.doc.per_billed) < 100) {
+					cur_frm.add_custom_button(
+						__("Purchase Invoice"),
+						this.make_purchase_invoice,
+						__("Create")
+					);
 				}
-				cur_frm.add_custom_button(__('Retention Stock Entry'), this.make_retention_stock_entry, __('Create'));
+				cur_frm.add_custom_button(
+					__("Retention Stock Entry"),
+					this.make_retention_stock_entry,
+					__("Create")
+				);
 
-				cur_frm.page.set_inner_btn_group_as_primary(__('Create'));
+				cur_frm.page.set_inner_btn_group_as_primary(__("Create"));
 			}
 		}
 
-
-		if(this.frm.doc.docstatus==1 && this.frm.doc.status === "Closed" && this.frm.has_perm("submit")) {
-			cur_frm.add_custom_button(__('Reopen'), this.reopen_purchase_receipt, __("Status"))
+		if (this.frm.doc.docstatus == 1 && this.frm.doc.status === "Closed" && this.frm.has_perm("submit")) {
+			cur_frm.add_custom_button(__("Reopen"), this.reopen_purchase_receipt, __("Status"));
 		}
 
 		this.frm.toggle_reqd("supplier_warehouse", this.frm.doc.is_old_subcontracting_flow);
@@ -246,8 +288,8 @@
 	make_purchase_invoice() {
 		frappe.model.open_mapped_doc({
 			method: "erpnext.stock.doctype.purchase_receipt.purchase_receipt.make_purchase_invoice",
-			frm: cur_frm
-		})
+			frm: cur_frm,
+		});
 	}
 
 	make_purchase_return() {
@@ -257,34 +299,39 @@
 			if (item.rejected_qty > 0) {
 				return true;
 			}
-		})
+		});
 
 		if (has_rejected_items && has_rejected_items.length > 0) {
-			frappe.prompt([
-				{
-					label: __("Return Qty from Rejected Warehouse"),
-					fieldtype: "Check",
-					fieldname: "return_for_rejected_warehouse",
-					default: 1
+			frappe.prompt(
+				[
+					{
+						label: __("Return Qty from Rejected Warehouse"),
+						fieldtype: "Check",
+						fieldname: "return_for_rejected_warehouse",
+						default: 1,
+					},
+				],
+				function (values) {
+					if (values.return_for_rejected_warehouse) {
+						frappe.call({
+							method: "erpnext.stock.doctype.purchase_receipt.purchase_receipt.make_purchase_return_against_rejected_warehouse",
+							args: {
+								source_name: cur_frm.doc.name,
+							},
+							callback: function (r) {
+								if (r.message) {
+									frappe.model.sync(r.message);
+									frappe.set_route("Form", r.message.doctype, r.message.name);
+								}
+							},
+						});
+					} else {
+						cur_frm.cscript._make_purchase_return();
+					}
 				},
-			], function(values){
-				if (values.return_for_rejected_warehouse) {
-					frappe.call({
-						method: "erpnext.stock.doctype.purchase_receipt.purchase_receipt.make_purchase_return_against_rejected_warehouse",
-						args: {
-							source_name: cur_frm.doc.name
-						},
-						callback: function(r) {
-							if(r.message) {
-								frappe.model.sync(r.message);
-								frappe.set_route("Form", r.message.doctype, r.message.name);
-							}
-						}
-					})
-				} else {
-					cur_frm.cscript._make_purchase_return();
-				}
-			}, __("Return Qty"), __("Make Return Entry"));
+				__("Return Qty"),
+				__("Make Return Entry")
+			);
 		} else {
 			cur_frm.cscript._make_purchase_return();
 		}
@@ -301,76 +348,71 @@
 	make_retention_stock_entry() {
 		frappe.call({
 			method: "erpnext.stock.doctype.stock_entry.stock_entry.move_sample_to_retention_warehouse",
-			args:{
-				"company": cur_frm.doc.company,
-				"items": cur_frm.doc.items
+			args: {
+				company: cur_frm.doc.company,
+				items: cur_frm.doc.items,
 			},
 			callback: function (r) {
 				if (r.message) {
 					var doc = frappe.model.sync(r.message)[0];
 					frappe.set_route("Form", doc.doctype, doc.name);
+				} else {
+					frappe.msgprint(
+						__("Purchase Receipt doesn't have any Item for which Retain Sample is enabled.")
+					);
 				}
-				else {
-					frappe.msgprint(__("Purchase Receipt doesn't have any Item for which Retain Sample is enabled."));
-				}
-			}
+			},
 		});
 	}
 
 	apply_putaway_rule() {
 		if (this.frm.doc.apply_putaway_rule) erpnext.apply_putaway_rule(this.frm);
 	}
-
 };
 
 // for backward compatibility: combine new and previous states
-extend_cscript(cur_frm.cscript, new erpnext.stock.PurchaseReceiptController({frm: cur_frm}));
+extend_cscript(cur_frm.cscript, new erpnext.stock.PurchaseReceiptController({ frm: cur_frm }));
 
-cur_frm.cscript.update_status = function(status) {
+cur_frm.cscript.update_status = function (status) {
 	frappe.ui.form.is_saving = true;
 	frappe.call({
-		method:"erpnext.stock.doctype.purchase_receipt.purchase_receipt.update_purchase_receipt_status",
-		args: {docname: cur_frm.doc.name, status: status},
-		callback: function(r){
-			if(!r.exc)
-				cur_frm.reload_doc();
+		method: "erpnext.stock.doctype.purchase_receipt.purchase_receipt.update_purchase_receipt_status",
+		args: { docname: cur_frm.doc.name, status: status },
+		callback: function (r) {
+			if (!r.exc) cur_frm.reload_doc();
 		},
-		always: function(){
+		always: function () {
 			frappe.ui.form.is_saving = false;
-		}
-	})
-}
+		},
+	});
+};
 
-cur_frm.fields_dict['items'].grid.get_field('project').get_query = function(doc, cdt, cdn) {
+cur_frm.fields_dict["items"].grid.get_field("project").get_query = function (doc, cdt, cdn) {
+	return {
+		filters: [["Project", "status", "not in", "Completed, Cancelled"]],
+	};
+};
+
+cur_frm.fields_dict["select_print_heading"].get_query = function (doc, cdt, cdn) {
+	return {
+		filters: [["Print Heading", "docstatus", "!=", "2"]],
+	};
+};
+
+cur_frm.fields_dict["items"].grid.get_field("bom").get_query = function (doc, cdt, cdn) {
+	var d = locals[cdt][cdn];
 	return {
 		filters: [
-			['Project', 'status', 'not in', 'Completed, Cancelled']
-		]
-	}
-}
-
-cur_frm.fields_dict['select_print_heading'].get_query = function(doc, cdt, cdn) {
-	return {
-		filters: [
-			['Print Heading', 'docstatus', '!=', '2']
-		]
-	}
-}
-
-cur_frm.fields_dict['items'].grid.get_field('bom').get_query = function(doc, cdt, cdn) {
-	var d = locals[cdt][cdn]
-	return {
-		filters: [
-			['BOM', 'item', '=', d.item_code],
-			['BOM', 'is_active', '=', '1'],
-			['BOM', 'docstatus', '=', '1']
-		]
-	}
-}
+			["BOM", "item", "=", d.item_code],
+			["BOM", "is_active", "=", "1"],
+			["BOM", "docstatus", "=", "1"],
+		],
+	};
+};
 
 frappe.provide("erpnext.buying");
 
-frappe.ui.form.on("Purchase Receipt", "is_subcontracted", function(frm) {
+frappe.ui.form.on("Purchase Receipt", "is_subcontracted", function (frm) {
 	if (frm.doc.is_old_subcontracting_flow) {
 		erpnext.buying.get_default_bom(frm);
 	}
@@ -378,53 +420,53 @@
 	frm.toggle_reqd("supplier_warehouse", frm.doc.is_old_subcontracting_flow);
 });
 
-frappe.ui.form.on('Purchase Receipt Item', {
-	item_code: function(frm, cdt, cdn) {
+frappe.ui.form.on("Purchase Receipt Item", {
+	item_code: function (frm, cdt, cdn) {
 		var d = locals[cdt][cdn];
-		frappe.db.get_value('Item', {name: d.item_code}, 'sample_quantity', (r) => {
+		frappe.db.get_value("Item", { name: d.item_code }, "sample_quantity", (r) => {
 			frappe.model.set_value(cdt, cdn, "sample_quantity", r.sample_quantity);
 			validate_sample_quantity(frm, cdt, cdn);
 		});
 	},
-	qty: function(frm, cdt, cdn) {
+	qty: function (frm, cdt, cdn) {
 		validate_sample_quantity(frm, cdt, cdn);
 	},
-	sample_quantity: function(frm, cdt, cdn) {
+	sample_quantity: function (frm, cdt, cdn) {
 		validate_sample_quantity(frm, cdt, cdn);
 	},
-	batch_no: function(frm, cdt, cdn) {
+	batch_no: function (frm, cdt, cdn) {
 		validate_sample_quantity(frm, cdt, cdn);
 	},
 });
 
-cur_frm.cscript._make_purchase_return = function() {
+cur_frm.cscript._make_purchase_return = function () {
 	frappe.model.open_mapped_doc({
 		method: "erpnext.stock.doctype.purchase_receipt.purchase_receipt.make_purchase_return",
-		frm: cur_frm
+		frm: cur_frm,
 	});
-}
+};
 
-cur_frm.cscript['Make Stock Entry'] = function() {
+cur_frm.cscript["Make Stock Entry"] = function () {
 	frappe.model.open_mapped_doc({
 		method: "erpnext.stock.doctype.purchase_receipt.purchase_receipt.make_stock_entry",
 		frm: cur_frm,
-	})
-}
+	});
+};
 
-var validate_sample_quantity = function(frm, cdt, cdn) {
+var validate_sample_quantity = function (frm, cdt, cdn) {
 	var d = locals[cdt][cdn];
 	if (d.sample_quantity && d.qty) {
 		frappe.call({
-			method: 'erpnext.stock.doctype.stock_entry.stock_entry.validate_sample_quantity',
+			method: "erpnext.stock.doctype.stock_entry.stock_entry.validate_sample_quantity",
 			args: {
 				batch_no: d.batch_no,
 				item_code: d.item_code,
 				sample_quantity: d.sample_quantity,
-				qty: d.qty
+				qty: d.qty,
 			},
 			callback: (r) => {
 				frappe.model.set_value(cdt, cdn, "sample_quantity", r.message);
-			}
+			},
 		});
 	}
 };
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt_list.js b/erpnext/stock/doctype/purchase_receipt/purchase_receipt_list.js
index f19f1ff..fc4aabd 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt_list.js
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt_list.js
@@ -1,8 +1,17 @@
-frappe.listview_settings['Purchase Receipt'] = {
-	add_fields: ["supplier", "supplier_name", "base_grand_total", "is_subcontracted",
-		"transporter_name", "is_return", "status", "per_billed", "currency"],
-	get_indicator: function(doc) {
-		if(cint(doc.is_return)==1) {
+frappe.listview_settings["Purchase Receipt"] = {
+	add_fields: [
+		"supplier",
+		"supplier_name",
+		"base_grand_total",
+		"is_subcontracted",
+		"transporter_name",
+		"is_return",
+		"status",
+		"per_billed",
+		"currency",
+	],
+	get_indicator: function (doc) {
+		if (cint(doc.is_return) == 1) {
 			return [__("Return"), "gray", "is_return,=,Yes"];
 		} else if (doc.status === "Closed") {
 			return [__("Closed"), "green", "status,=,Closed"];
@@ -17,11 +26,9 @@
 		}
 	},
 
-	onload: function(listview) {
-
-		listview.page.add_action_item(__("Purchase Invoice"), ()=>{
+	onload: function (listview) {
+		listview.page.add_action_item(__("Purchase Invoice"), () => {
 			erpnext.bulk_transaction_processing.create(listview, "Purchase Receipt", "Purchase Invoice");
 		});
-	}
-
+	},
 };
diff --git a/erpnext/stock/doctype/putaway_rule/putaway_rule.js b/erpnext/stock/doctype/putaway_rule/putaway_rule.js
index e056920..351be16 100644
--- a/erpnext/stock/doctype/putaway_rule/putaway_rule.js
+++ b/erpnext/stock/doctype/putaway_rule/putaway_rule.js
@@ -1,41 +1,41 @@
 // Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Putaway Rule', {
-	setup: function(frm) {
-		frm.set_query("warehouse", function() {
+frappe.ui.form.on("Putaway Rule", {
+	setup: function (frm) {
+		frm.set_query("warehouse", function () {
 			return {
-				"filters": {
-					"company": frm.doc.company,
-					"is_group": 0
-				}
+				filters: {
+					company: frm.doc.company,
+					is_group: 0,
+				},
 			};
 		});
 	},
 
-	uom: function(frm) {
+	uom: function (frm) {
 		if (frm.doc.item_code && frm.doc.uom) {
 			return frm.call({
 				method: "erpnext.stock.get_item_details.get_conversion_factor",
 				args: {
 					item_code: frm.doc.item_code,
-					uom: frm.doc.uom
+					uom: frm.doc.uom,
 				},
-				callback: function(r) {
+				callback: function (r) {
 					if (!r.exc) {
 						let stock_capacity = flt(frm.doc.capacity) * flt(r.message.conversion_factor);
-						frm.set_value('conversion_factor', r.message.conversion_factor);
-						frm.set_value('stock_capacity', stock_capacity);
+						frm.set_value("conversion_factor", r.message.conversion_factor);
+						frm.set_value("stock_capacity", stock_capacity);
 					}
-				}
+				},
 			});
 		}
 	},
 
-	capacity: function(frm) {
+	capacity: function (frm) {
 		let stock_capacity = flt(frm.doc.capacity) * flt(frm.doc.conversion_factor);
-		frm.set_value('stock_capacity', stock_capacity);
-	}
+		frm.set_value("stock_capacity", stock_capacity);
+	},
 
 	// refresh: function(frm) {
 
diff --git a/erpnext/stock/doctype/putaway_rule/putaway_rule_list.js b/erpnext/stock/doctype/putaway_rule/putaway_rule_list.js
index 753569c..0b8c9ec 100644
--- a/erpnext/stock/doctype/putaway_rule/putaway_rule_list.js
+++ b/erpnext/stock/doctype/putaway_rule/putaway_rule_list.js
@@ -1,4 +1,4 @@
-frappe.listview_settings['Putaway Rule'] = {
+frappe.listview_settings["Putaway Rule"] = {
 	add_fields: ["disable"],
 	get_indicator: (doc) => {
 		if (doc.disable) {
@@ -10,8 +10,8 @@
 
 	reports: [
 		{
-			name: 'Warehouse Capacity Summary',
-			route: '/app/warehouse-capacity-summary'
-		}
-	]
+			name: "Warehouse Capacity Summary",
+			route: "/app/warehouse-capacity-summary",
+		},
+	],
 };
diff --git a/erpnext/stock/doctype/quality_inspection/quality_inspection.js b/erpnext/stock/doctype/quality_inspection/quality_inspection.js
index 05fa232..fc48751 100644
--- a/erpnext/stock/doctype/quality_inspection/quality_inspection.js
+++ b/erpnext/stock/doctype/quality_inspection/quality_inspection.js
@@ -4,88 +4,85 @@
 cur_frm.cscript.refresh = cur_frm.cscript.inspection_type;
 
 frappe.ui.form.on("Quality Inspection", {
-
-	setup: function(frm) {
-		frm.set_query("reference_name", function() {
+	setup: function (frm) {
+		frm.set_query("reference_name", function () {
 			return {
 				filters: {
-					"docstatus": ["!=", 2],
-				}
-			}
+					docstatus: ["!=", 2],
+				},
+			};
 		});
 
-		frm.set_query("batch_no", function() {
+		frm.set_query("batch_no", function () {
 			return {
 				filters: {
-					"item": frm.doc.item_code
-				}
+					item: frm.doc.item_code,
+				},
 			};
 		});
 
 		// Serial No based on item_code
-		frm.set_query("item_serial_no", function() {
+		frm.set_query("item_serial_no", function () {
 			let filters = {};
 			if (frm.doc.item_code) {
 				filters = {
-					'item_code': frm.doc.item_code
+					item_code: frm.doc.item_code,
 				};
 			}
 			return { filters: filters };
 		});
 
 		// item code based on GRN/DN
-		frm.set_query("item_code", function(doc) {
+		frm.set_query("item_code", function (doc) {
 			let doctype = doc.reference_type;
 
 			if (doc.reference_type !== "Job Card") {
-				doctype = (doc.reference_type == "Stock Entry") ?
-					"Stock Entry Detail" : doc.reference_type + " Item";
+				doctype =
+					doc.reference_type == "Stock Entry" ? "Stock Entry Detail" : doc.reference_type + " Item";
 			}
 
 			if (doc.reference_type && doc.reference_name) {
 				let filters = {
-					"from": doctype,
-					"inspection_type": doc.inspection_type
+					from: doctype,
+					inspection_type: doc.inspection_type,
 				};
 
-				if (doc.reference_type == doctype)
-					filters["reference_name"] = doc.reference_name;
-				else
-					filters["parent"] = doc.reference_name;
+				if (doc.reference_type == doctype) filters["reference_name"] = doc.reference_name;
+				else filters["parent"] = doc.reference_name;
 
 				return {
 					query: "erpnext.stock.doctype.quality_inspection.quality_inspection.item_query",
-					filters: filters
+					filters: filters,
 				};
 			}
 		});
 	},
 
-	refresh: function(frm) {
+	refresh: function (frm) {
 		// Ignore cancellation of reference doctype on cancel all.
 		frm.ignore_doctypes_on_cancel_all = [frm.doc.reference_type];
 	},
 
-	item_code: function(frm) {
+	item_code: function (frm) {
 		if (frm.doc.item_code && !frm.doc.quality_inspection_template) {
 			return frm.call({
 				method: "get_quality_inspection_template",
 				doc: frm.doc,
-				callback: function() {
-					refresh_field(['quality_inspection_template', 'readings']);
-				}
+				callback: function () {
+					refresh_field(["quality_inspection_template", "readings"]);
+				},
 			});
 		}
 	},
 
-	quality_inspection_template: function(frm) {
+	quality_inspection_template: function (frm) {
 		if (frm.doc.quality_inspection_template) {
 			return frm.call({
 				method: "get_item_specification_details",
 				doc: frm.doc,
-				callback: function() {
-					refresh_field('readings');
-				}
+				callback: function () {
+					refresh_field("readings");
+				},
 			});
 		}
 	},
diff --git a/erpnext/stock/doctype/quality_inspection_parameter/quality_inspection_parameter.js b/erpnext/stock/doctype/quality_inspection_parameter/quality_inspection_parameter.js
index 47c7e11..ecf84c9 100644
--- a/erpnext/stock/doctype/quality_inspection_parameter/quality_inspection_parameter.js
+++ b/erpnext/stock/doctype/quality_inspection_parameter/quality_inspection_parameter.js
@@ -1,8 +1,7 @@
 // Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Quality Inspection Parameter', {
+frappe.ui.form.on("Quality Inspection Parameter", {
 	// refresh: function(frm) {
-
 	// }
 });
diff --git a/erpnext/stock/doctype/quality_inspection_parameter_group/quality_inspection_parameter_group.js b/erpnext/stock/doctype/quality_inspection_parameter_group/quality_inspection_parameter_group.js
index 8716a29..796ab89 100644
--- a/erpnext/stock/doctype/quality_inspection_parameter_group/quality_inspection_parameter_group.js
+++ b/erpnext/stock/doctype/quality_inspection_parameter_group/quality_inspection_parameter_group.js
@@ -1,8 +1,7 @@
 // Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Quality Inspection Parameter Group', {
+frappe.ui.form.on("Quality Inspection Parameter Group", {
 	// refresh: function(frm) {
-
 	// }
 });
diff --git a/erpnext/stock/doctype/quality_inspection_template/quality_inspection_template.js b/erpnext/stock/doctype/quality_inspection_template/quality_inspection_template.js
index fa57a3d..053809d 100644
--- a/erpnext/stock/doctype/quality_inspection_template/quality_inspection_template.js
+++ b/erpnext/stock/doctype/quality_inspection_template/quality_inspection_template.js
@@ -1,8 +1,6 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Quality Inspection Template', {
-	refresh: function() {
-
-	}
+frappe.ui.form.on("Quality Inspection Template", {
+	refresh: function () {},
 });
diff --git a/erpnext/stock/doctype/quick_stock_balance/quick_stock_balance.js b/erpnext/stock/doctype/quick_stock_balance/quick_stock_balance.js
index f261fd9..5cfd1f5 100644
--- a/erpnext/stock/doctype/quick_stock_balance/quick_stock_balance.js
+++ b/erpnext/stock/doctype/quick_stock_balance/quick_stock_balance.js
@@ -1,91 +1,90 @@
 // Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Quick Stock Balance', {
-
+frappe.ui.form.on("Quick Stock Balance", {
 	setup: (frm) => {
-		frm.set_query('item', () => {
+		frm.set_query("item", () => {
 			if (!(frm.doc.warehouse && frm.doc.date)) {
-				frm.trigger('check_warehouse_and_date');
+				frm.trigger("check_warehouse_and_date");
 			}
 		});
 	},
 
 	make_custom_stock_report_button: (frm) => {
 		if (frm.doc.item) {
-			frm.add_custom_button(__('Stock Balance Report'), () => {
-				frappe.set_route('query-report', 'Stock Balance',
-					{ 'item_code': frm.doc.item, 'warehouse': frm.doc.warehouse });
+			frm.add_custom_button(__("Stock Balance Report"), () => {
+				frappe.set_route("query-report", "Stock Balance", {
+					item_code: frm.doc.item,
+					warehouse: frm.doc.warehouse,
+				});
 			});
 		}
 	},
 
 	refresh: (frm) => {
 		frm.disable_save();
-		frm.trigger('make_custom_stock_report_button');
+		frm.trigger("make_custom_stock_report_button");
 	},
 
 	check_warehouse_and_date: (frm) => {
-		frappe.msgprint(__('Please enter Warehouse and Date'));
-		frm.doc.item = '';
+		frappe.msgprint(__("Please enter Warehouse and Date"));
+		frm.doc.item = "";
 		frm.refresh();
 	},
 
 	warehouse: (frm) => {
 		if (frm.doc.item || frm.doc.item_barcode) {
-			frm.trigger('get_stock_and_item_details');
+			frm.trigger("get_stock_and_item_details");
 		}
 	},
 
 	date: (frm) => {
 		if (frm.doc.item || frm.doc.item_barcode) {
-			frm.trigger('get_stock_and_item_details');
+			frm.trigger("get_stock_and_item_details");
 		}
 	},
 
 	item: (frm) => {
-		frappe.flags.last_updated_element = 'item';
-		frm.trigger('get_stock_and_item_details');
-		frm.trigger('make_custom_stock_report_button');
+		frappe.flags.last_updated_element = "item";
+		frm.trigger("get_stock_and_item_details");
+		frm.trigger("make_custom_stock_report_button");
 	},
 
 	item_barcode: (frm) => {
-		frappe.flags.last_updated_element = 'item_barcode';
-		frm.trigger('get_stock_and_item_details');
-		frm.trigger('make_custom_stock_report_button');
+		frappe.flags.last_updated_element = "item_barcode";
+		frm.trigger("get_stock_and_item_details");
+		frm.trigger("make_custom_stock_report_button");
 	},
 
 	get_stock_and_item_details: (frm) => {
 		if (!(frm.doc.warehouse && frm.doc.date)) {
-			frm.trigger('check_warehouse_and_date');
-		}
-		else if (frm.doc.item || frm.doc.item_barcode) {
+			frm.trigger("check_warehouse_and_date");
+		} else if (frm.doc.item || frm.doc.item_barcode) {
 			let filters = {
 				warehouse: frm.doc.warehouse,
 				date: frm.doc.date,
 			};
-			if (frappe.flags.last_updated_element === 'item') {
-				filters = { ...filters, ...{ item: frm.doc.item }};
-			}
-			else {
-				filters = { ...filters, ...{ barcode: frm.doc.item_barcode }};
+			if (frappe.flags.last_updated_element === "item") {
+				filters = { ...filters, ...{ item: frm.doc.item } };
+			} else {
+				filters = { ...filters, ...{ barcode: frm.doc.item_barcode } };
 			}
 			frappe.call({
-				method: 'erpnext.stock.doctype.quick_stock_balance.quick_stock_balance.get_stock_item_details',
+				method: "erpnext.stock.doctype.quick_stock_balance.quick_stock_balance.get_stock_item_details",
 				args: filters,
 				callback: (r) => {
 					if (r.message) {
-						let fields = ['item', 'qty', 'value', 'image'];
-						if (!r.message['barcodes'].includes(frm.doc.item_barcode)) {
-							frm.doc.item_barcode = '';
+						let fields = ["item", "qty", "value", "image"];
+						if (!r.message["barcodes"].includes(frm.doc.item_barcode)) {
+							frm.doc.item_barcode = "";
 							frm.refresh();
 						}
 						fields.forEach(function (field) {
 							frm.set_value(field, r.message[field]);
 						});
 					}
-				}
+				},
 			});
 		}
-	}
+	},
 });
diff --git a/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.js b/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.js
index 40748ce..f0506ab 100644
--- a/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.js
+++ b/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.js
@@ -1,22 +1,32 @@
 // Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Repost Item Valuation', {
-	setup: function(frm) {
+frappe.ui.form.on("Repost Item Valuation", {
+	setup: function (frm) {
 		frm.set_query("warehouse", () => {
 			let filters = {
-				'is_group': 0
+				is_group: 0,
 			};
-			if (frm.doc.company) filters['company'] = frm.doc.company;
-			return {filters: filters};
+			if (frm.doc.company) filters["company"] = frm.doc.company;
+			return { filters: filters };
 		});
 
 		frm.set_query("voucher_type", () => {
 			return {
 				filters: {
-					name: ['in', ['Purchase Receipt', 'Purchase Invoice', 'Delivery Note',
-						'Sales Invoice', 'Stock Entry', 'Stock Reconciliation', 'Subcontracting Receipt']]
-				}
+					name: [
+						"in",
+						[
+							"Purchase Receipt",
+							"Purchase Invoice",
+							"Delivery Note",
+							"Sales Invoice",
+							"Stock Entry",
+							"Stock Reconciliation",
+							"Subcontracting Receipt",
+						],
+					],
+				},
 			};
 		});
 
@@ -25,74 +35,74 @@
 				return {
 					filters: {
 						company: frm.doc.company,
-						docstatus: 1
-					}
+						docstatus: 1,
+					},
 				};
 			});
 		}
 
-		frm.trigger('setup_realtime_progress');
+		frm.trigger("setup_realtime_progress");
 	},
 
-	based_on: function(frm) {
+	based_on: function (frm) {
 		var fields_to_reset = [];
 
-		if (frm.doc.based_on == 'Transaction') {
-			fields_to_reset = ['item_code', 'warehouse'];
-		} else if (frm.doc.based_on == 'Item and Warehouse') {
-			fields_to_reset = ['voucher_type', 'voucher_no'];
+		if (frm.doc.based_on == "Transaction") {
+			fields_to_reset = ["item_code", "warehouse"];
+		} else if (frm.doc.based_on == "Item and Warehouse") {
+			fields_to_reset = ["voucher_type", "voucher_no"];
 		}
 
 		if (fields_to_reset) {
-			fields_to_reset.forEach(field => {
+			fields_to_reset.forEach((field) => {
 				frm.set_value(field, undefined);
 			});
 		}
 	},
 
-	setup_realtime_progress: function(frm) {
-		frappe.realtime.on('item_reposting_progress', data => {
+	setup_realtime_progress: function (frm) {
+		frappe.realtime.on("item_reposting_progress", (data) => {
 			if (frm.doc.name !== data.name) {
 				return;
 			}
 
-			if (frm.doc.status == 'In Progress') {
+			if (frm.doc.status == "In Progress") {
 				frm.doc.current_index = data.current_index;
 				frm.doc.items_to_be_repost = data.items_to_be_repost;
 				frm.doc.total_reposting_count = data.total_reposting_count;
 
 				frm.dashboard.reset();
-				frm.trigger('show_reposting_progress');
+				frm.trigger("show_reposting_progress");
 			}
 		});
 	},
 
-	refresh: function(frm) {
-		if (frm.doc.status == "Failed" && frm.doc.docstatus==1) {
-			frm.add_custom_button(__('Restart'), function () {
+	refresh: function (frm) {
+		if (frm.doc.status == "Failed" && frm.doc.docstatus == 1) {
+			frm.add_custom_button(__("Restart"), function () {
 				frm.trigger("restart_reposting");
 			}).addClass("btn-primary");
 		}
 
-		frm.trigger('show_reposting_progress');
+		frm.trigger("show_reposting_progress");
 
-		if (frm.doc.status === 'Queued' && frm.doc.docstatus === 1) {
-			frm.trigger('execute_reposting');
+		if (frm.doc.status === "Queued" && frm.doc.docstatus === 1) {
+			frm.trigger("execute_reposting");
 		}
 	},
 
 	execute_reposting(frm) {
 		frm.add_custom_button(__("Start Reposting"), () => {
 			frappe.call({
-				method: 'erpnext.stock.doctype.repost_item_valuation.repost_item_valuation.execute_repost_item_valuation',
-				callback: function() {
-					frappe.msgprint(__('Reposting has been started in the background.'));
-				}
+				method: "erpnext.stock.doctype.repost_item_valuation.repost_item_valuation.execute_repost_item_valuation",
+				callback: function () {
+					frappe.msgprint(__("Reposting has been started in the background."));
+				},
 			});
 		});
 	},
 
-	show_reposting_progress: function(frm) {
+	show_reposting_progress: function (frm) {
 		var bars = [];
 
 		let total_count = frm.doc.items_to_be_repost ? JSON.parse(frm.doc.items_to_be_repost).length : 0;
@@ -101,27 +111,27 @@
 			total_count = frm.doc.total_reposting_count;
 		}
 
-		let progress = flt(cint(frm.doc.current_index) / total_count * 100, 2) || 0.5;
-		var title = __('Reposting Completed {0}%', [progress]);
+		let progress = flt((cint(frm.doc.current_index) / total_count) * 100, 2) || 0.5;
+		var title = __("Reposting Completed {0}%", [progress]);
 
 		bars.push({
-			'title': title,
-			'width': progress + '%',
-			'progress_class': 'progress-bar-success'
+			title: title,
+			width: progress + "%",
+			progress_class: "progress-bar-success",
 		});
 
-		frm.dashboard.add_progress(__('Reposting Progress'), bars);
+		frm.dashboard.add_progress(__("Reposting Progress"), bars);
 	},
 
-	restart_reposting: function(frm) {
+	restart_reposting: function (frm) {
 		frappe.call({
 			method: "restart_reposting",
 			doc: frm.doc,
-			callback: function(r) {
+			callback: function (r) {
 				if (!r.exc) {
 					frm.refresh();
 				}
-			}
+			},
 		});
-	}
+	},
 });
diff --git a/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.js b/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.js
index 1f7bb4d..21f0784 100644
--- a/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.js
+++ b/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.js
@@ -1,24 +1,24 @@
 // Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Serial and Batch Bundle', {
+frappe.ui.form.on("Serial and Batch Bundle", {
 	setup(frm) {
-		frm.trigger('set_queries');
+		frm.trigger("set_queries");
 	},
 
 	refresh(frm) {
-		frm.trigger('toggle_fields');
-		frm.trigger('prepare_serial_batch_prompt');
+		frm.trigger("toggle_fields");
+		frm.trigger("prepare_serial_batch_prompt");
 	},
 
 	item_code(frm) {
 		frm.clear_custom_buttons();
-		frm.trigger('prepare_serial_batch_prompt');
+		frm.trigger("prepare_serial_batch_prompt");
 	},
 
 	type_of_transaction(frm) {
 		frm.clear_custom_buttons();
-		frm.trigger('prepare_serial_batch_prompt');
+		frm.trigger("prepare_serial_batch_prompt");
 	},
 
 	warehouse(frm) {
@@ -28,74 +28,77 @@
 				doc: frm.doc,
 				callback(r) {
 					refresh_field("entries");
-				}
-			})
+				},
+			});
 		}
 	},
 
 	has_serial_no(frm) {
-		frm.trigger('toggle_fields');
+		frm.trigger("toggle_fields");
 	},
 
 	has_batch_no(frm) {
-		frm.trigger('toggle_fields');
+		frm.trigger("toggle_fields");
 	},
 
 	prepare_serial_batch_prompt(frm) {
-		if (frm.doc.docstatus === 0 && frm.doc.item_code
-			&& frm.doc.type_of_transaction === "Inward") {
-			let label = frm.doc?.has_serial_no === 1
-				? __('Serial Nos') : __('Batch Nos');
+		if (frm.doc.docstatus === 0 && frm.doc.item_code && frm.doc.type_of_transaction === "Inward") {
+			let label = frm.doc?.has_serial_no === 1 ? __("Serial Nos") : __("Batch Nos");
 
 			if (frm.doc?.has_serial_no === 1 && frm.doc?.has_batch_no === 1) {
-				label = __('Serial and Batch Nos');
+				label = __("Serial and Batch Nos");
 			}
 
 			let fields = frm.events.get_prompt_fields(frm);
 
 			frm.add_custom_button(__("Make " + label), () => {
-				frappe.prompt(fields, (data) => {
-					frm.events.add_serial_batch(frm, data);
-				}, "Add " + label, "Make " + label);
+				frappe.prompt(
+					fields,
+					(data) => {
+						frm.events.add_serial_batch(frm, data);
+					},
+					"Add " + label,
+					"Make " + label
+				);
 			});
 		}
 	},
 
 	get_prompt_fields(frm) {
 		let attach_field = {
-			"label": __("Attach CSV File"),
-			"fieldname": "csv_file",
-			"fieldtype": "Attach"
-		}
+			label: __("Attach CSV File"),
+			fieldname: "csv_file",
+			fieldtype: "Attach",
+		};
 
 		if (!frm.doc.has_batch_no) {
-			attach_field.depends_on = "eval:doc.using_csv_file === 1"
+			attach_field.depends_on = "eval:doc.using_csv_file === 1";
 		}
 
 		let fields = [
 			{
-				"label": __("Import Using CSV file"),
-				"fieldname": "using_csv_file",
-				"default": 1,
-				"fieldtype": "Check",
+				label: __("Import Using CSV file"),
+				fieldname: "using_csv_file",
+				default: 1,
+				fieldtype: "Check",
 			},
 			attach_field,
 			{
-				"fieldtype": "Section Break",
-			}
-		]
+				fieldtype: "Section Break",
+			},
+		];
 
 		if (frm.doc.has_serial_no) {
 			fields.push({
-				"label": "Serial Nos",
-				"fieldname": "serial_nos",
-				"fieldtype": "Small Text",
-				"depends_on": "eval:doc.using_csv_file === 0"
-			})
+				label: "Serial Nos",
+				fieldname: "serial_nos",
+				fieldtype: "Small Text",
+				depends_on: "eval:doc.using_csv_file === 0",
+			});
 		}
 
 		if (frm.doc.has_batch_no) {
-			fields = attach_field
+			fields = attach_field;
 		}
 
 		return fields;
@@ -108,11 +111,11 @@
 			method: "add_serial_batch",
 			doc: frm.doc,
 			args: {
-				"data": prompt_data,
+				data: prompt_data,
 			},
 			callback(r) {
 				refresh_field("entries");
-			}
+			},
 		});
 	},
 
@@ -128,120 +131,119 @@
 
 	toggle_fields(frm) {
 		if (frm.doc.has_serial_no) {
-			frm.doc.entries.forEach(row => {
+			frm.doc.entries.forEach((row) => {
 				if (Math.abs(row.qty) !== 1) {
 					frappe.model.set_value(row.doctype, row.name, "qty", 1);
 				}
-			})
+			});
 		}
 
 		frm.fields_dict.entries.grid.update_docfield_property(
-			'serial_no', 'read_only', !frm.doc.has_serial_no
+			"serial_no",
+			"read_only",
+			!frm.doc.has_serial_no
 		);
 
-		frm.fields_dict.entries.grid.update_docfield_property(
-			'batch_no', 'read_only', !frm.doc.has_batch_no
-		);
+		frm.fields_dict.entries.grid.update_docfield_property("batch_no", "read_only", !frm.doc.has_batch_no);
 
-		frm.fields_dict.entries.grid.update_docfield_property(
-			'qty', 'read_only', frm.doc.has_serial_no
-		);
+		frm.fields_dict.entries.grid.update_docfield_property("qty", "read_only", frm.doc.has_serial_no);
 	},
 
 	set_queries(frm) {
-		frm.set_query('item_code', () => {
+		frm.set_query("item_code", () => {
 			return {
-				query: 'erpnext.stock.doctype.serial_and_batch_bundle.serial_and_batch_bundle.item_query',
+				query: "erpnext.stock.doctype.serial_and_batch_bundle.serial_and_batch_bundle.item_query",
 			};
 		});
 
-		frm.set_query('voucher_type', () => {
+		frm.set_query("voucher_type", () => {
 			return {
 				filters: {
-					'istable': 0,
-					'issingle': 0,
-					'is_submittable': 1,
-					'name': ['in', [
-						"Asset Capitalization",
-						"Asset Repair",
-						"Delivery Note",
-						"Installation Note",
-						"Job Card",
-						"Maintenance Schedule",
-						"POS Invoice",
-						"Pick List",
-						"Purchase Invoice",
-						"Purchase Receipt",
-						"Quotation",
-						"Sales Invoice",
-						"Stock Entry",
-						"Stock Reconciliation",
-						"Subcontracting Receipt",
-					]],
-				}
+					istable: 0,
+					issingle: 0,
+					is_submittable: 1,
+					name: [
+						"in",
+						[
+							"Asset Capitalization",
+							"Asset Repair",
+							"Delivery Note",
+							"Installation Note",
+							"Job Card",
+							"Maintenance Schedule",
+							"POS Invoice",
+							"Pick List",
+							"Purchase Invoice",
+							"Purchase Receipt",
+							"Quotation",
+							"Sales Invoice",
+							"Stock Entry",
+							"Stock Reconciliation",
+							"Subcontracting Receipt",
+						],
+					],
+				},
 			};
 		});
 
-		frm.set_query('voucher_no', () => {
+		frm.set_query("voucher_no", () => {
 			return {
 				filters: {
-					'docstatus': ["!=", 2],
-				}
+					docstatus: ["!=", 2],
+				},
 			};
 		});
 
-		frm.set_query('warehouse', () => {
+		frm.set_query("warehouse", () => {
 			return {
 				filters: {
-					'is_group': 0,
-					'company': frm.doc.company,
-				}
+					is_group: 0,
+					company: frm.doc.company,
+				},
 			};
 		});
 
-		frm.set_query('serial_no', 'entries', () => {
+		frm.set_query("serial_no", "entries", () => {
 			return {
 				filters: {
 					item_code: frm.doc.item_code,
-				}
+				},
 			};
 		});
 
-		frm.set_query('batch_no', 'entries', (doc) => {
-
-			if (doc.type_of_transaction ==="Outward") {
+		frm.set_query("batch_no", "entries", (doc) => {
+			if (doc.type_of_transaction === "Outward") {
 				return {
-					query : "erpnext.controllers.queries.get_batch_no",
+					query: "erpnext.controllers.queries.get_batch_no",
 					filters: {
 						item_code: doc.item_code,
 						warehouse: doc.warehouse,
-					}
-				}
+					},
+				};
 			} else {
 				return {
 					filters: {
 						item: doc.item_code,
 						disabled: 0,
-					}
+					},
 				};
 			}
 		});
 
-		frm.set_query('warehouse', 'entries', () => {
+		frm.set_query("warehouse", "entries", () => {
 			return {
 				filters: {
 					company: frm.doc.company,
-				}
+				},
 			};
 		});
-	}
+	},
 });
 
-
 frappe.ui.form.on("Serial and Batch Entry", {
 	entries_add(frm, cdt, cdn) {
 		if (frm.doc.warehouse) {
-			frappe.model.set_value(cdt, cdn, 'warehouse', frm.doc.warehouse);
+			frappe.model.set_value(cdt, cdn, "warehouse", frm.doc.warehouse);
 		}
 	},
-})
\ No newline at end of file
+});
diff --git a/erpnext/stock/doctype/serial_no/serial_no.js b/erpnext/stock/doctype/serial_no/serial_no.js
index 1cb9fd1..338ed61 100644
--- a/erpnext/stock/doctype/serial_no/serial_no.js
+++ b/erpnext/stock/doctype/serial_no/serial_no.js
@@ -1,39 +1,38 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-cur_frm.add_fetch("customer", "customer_name", "customer_name")
-cur_frm.add_fetch("supplier", "supplier_name", "supplier_name")
+cur_frm.add_fetch("customer", "customer_name", "customer_name");
+cur_frm.add_fetch("supplier", "supplier_name", "supplier_name");
 
-cur_frm.add_fetch("item_code", "item_name", "item_name")
-cur_frm.add_fetch("item_code", "description", "description")
-cur_frm.add_fetch("item_code", "item_group", "item_group")
-cur_frm.add_fetch("item_code", "brand", "brand")
+cur_frm.add_fetch("item_code", "item_name", "item_name");
+cur_frm.add_fetch("item_code", "description", "description");
+cur_frm.add_fetch("item_code", "item_group", "item_group");
+cur_frm.add_fetch("item_code", "brand", "brand");
 
-cur_frm.cscript.onload = function() {
-	cur_frm.set_query("item_code", function() {
-		return erpnext.queries.item({"is_stock_item": 1, "has_serial_no": 1})
+cur_frm.cscript.onload = function () {
+	cur_frm.set_query("item_code", function () {
+		return erpnext.queries.item({ is_stock_item: 1, has_serial_no: 1 });
 	});
 };
 
-frappe.ui.form.on("Serial No", "refresh", function(frm) {
+frappe.ui.form.on("Serial No", "refresh", function (frm) {
 	frm.toggle_enable("item_code", frm.doc.__islocal);
 });
 
-
 frappe.ui.form.on("Serial No", {
 	refresh(frm) {
-		frm.trigger("view_ledgers")
+		frm.trigger("view_ledgers");
 	},
 
 	view_ledgers(frm) {
 		frm.add_custom_button(__("View Ledgers"), () => {
 			frappe.route_options = {
-				"item_code": frm.doc.item_code,
-				"serial_no": frm.doc.name,
-				"posting_date": frappe.datetime.now_date(),
-				"posting_time": frappe.datetime.now_time()
+				item_code: frm.doc.item_code,
+				serial_no: frm.doc.name,
+				posting_date: frappe.datetime.now_date(),
+				posting_time: frappe.datetime.now_time(),
 			};
 			frappe.set_route("query-report", "Serial No Ledger");
-		}).addClass('btn-primary');
-	}
-})
\ No newline at end of file
+		}).addClass("btn-primary");
+	},
+});
diff --git a/erpnext/stock/doctype/shipment/shipment.js b/erpnext/stock/doctype/shipment/shipment.js
index 13a17a2..8843d38 100644
--- a/erpnext/stock/doctype/shipment/shipment.js
+++ b/erpnext/stock/doctype/shipment/shipment.js
@@ -1,34 +1,44 @@
 // Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Shipment', {
-	address_query: function(frm, link_doctype, link_name, is_your_company_address) {
+frappe.ui.form.on("Shipment", {
+	address_query: function (frm, link_doctype, link_name, is_your_company_address) {
 		return {
-			query: 'frappe.contacts.doctype.address.address.address_query',
+			query: "frappe.contacts.doctype.address.address.address_query",
 			filters: {
 				link_doctype: link_doctype,
 				link_name: link_name,
-				is_your_company_address: is_your_company_address
-			}
+				is_your_company_address: is_your_company_address,
+			},
 		};
 	},
-	contact_query: function(frm, link_doctype, link_name) {
+	contact_query: function (frm, link_doctype, link_name) {
 		return {
-			query: 'frappe.contacts.doctype.contact.contact.contact_query',
+			query: "frappe.contacts.doctype.contact.contact.contact_query",
 			filters: {
 				link_doctype: link_doctype,
-				link_name: link_name
-			}
+				link_name: link_name,
+			},
 		};
 	},
-	onload: function(frm) {
+	onload: function (frm) {
 		frm.set_query("delivery_address_name", () => {
 			let delivery_to = `delivery_${frappe.model.scrub(frm.doc.delivery_to_type)}`;
-			return frm.events.address_query(frm, frm.doc.delivery_to_type, frm.doc[delivery_to], frm.doc.delivery_to_type === 'Company' ? 1 : 0);
+			return frm.events.address_query(
+				frm,
+				frm.doc.delivery_to_type,
+				frm.doc[delivery_to],
+				frm.doc.delivery_to_type === "Company" ? 1 : 0
+			);
 		});
 		frm.set_query("pickup_address_name", () => {
 			let pickup_from = `pickup_${frappe.model.scrub(frm.doc.pickup_from_type)}`;
-			return frm.events.address_query(frm, frm.doc.pickup_from_type, frm.doc[pickup_from], frm.doc.pickup_from_type === 'Company' ? 1 : 0);
+			return frm.events.address_query(
+				frm,
+				frm.doc.pickup_from_type,
+				frm.doc[pickup_from],
+				frm.doc.pickup_from_type === "Company" ? 1 : 0
+			);
 		});
 		frm.set_query("delivery_contact_name", () => {
 			let delivery_to = `delivery_${frappe.model.scrub(frm.doc.delivery_to_type)}`;
@@ -38,8 +48,8 @@
 			let pickup_from = `pickup_${frappe.model.scrub(frm.doc.pickup_from_type)}`;
 			return frm.events.contact_query(frm, frm.doc.pickup_from_type, frm.doc[pickup_from]);
 		});
-		frm.set_query("delivery_note", "shipment_delivery_note", function() {
-			let customer = '';
+		frm.set_query("delivery_note", "shipment_delivery_note", function () {
+			let customer = "";
 			if (frm.doc.delivery_to_type == "Customer") {
 				customer = frm.doc.delivery_customer;
 			}
@@ -51,305 +61,329 @@
 					filters: {
 						customer: customer,
 						docstatus: 1,
-						status: ["not in", ["Cancelled"]]
-					}
+						status: ["not in", ["Cancelled"]],
+					},
 				};
 			}
 		});
 	},
-	refresh: function() {
-		$('div[data-fieldname=pickup_address] > div > .clearfix').hide();
-		$('div[data-fieldname=pickup_contact] > div > .clearfix').hide();
-		$('div[data-fieldname=delivery_address] > div > .clearfix').hide();
-		$('div[data-fieldname=delivery_contact] > div > .clearfix').hide();
+	refresh: function () {
+		$("div[data-fieldname=pickup_address] > div > .clearfix").hide();
+		$("div[data-fieldname=pickup_contact] > div > .clearfix").hide();
+		$("div[data-fieldname=delivery_address] > div > .clearfix").hide();
+		$("div[data-fieldname=delivery_contact] > div > .clearfix").hide();
 	},
-	before_save: function(frm) {
+	before_save: function (frm) {
 		let delivery_to = `delivery_${frappe.model.scrub(frm.doc.delivery_to_type)}`;
 		frm.set_value("delivery_to", frm.doc[delivery_to]);
 		let pickup_from = `pickup_${frappe.model.scrub(frm.doc.pickup_from_type)}`;
 		frm.set_value("pickup", frm.doc[pickup_from]);
 	},
-	set_pickup_company_address: function(frm) {
-		frappe.db.get_value('Address', {
-			address_title: frm.doc.pickup_company,
-			is_your_company_address: 1
-		}, 'name', (r) => {
-			frm.set_value("pickup_address_name", r.name);
-		});
+	set_pickup_company_address: function (frm) {
+		frappe.db.get_value(
+			"Address",
+			{
+				address_title: frm.doc.pickup_company,
+				is_your_company_address: 1,
+			},
+			"name",
+			(r) => {
+				frm.set_value("pickup_address_name", r.name);
+			}
+		);
 	},
-	set_delivery_company_address: function(frm) {
-		frappe.db.get_value('Address', {
-			address_title: frm.doc.delivery_company,
-			is_your_company_address: 1
-		}, 'name', (r) => {
-			frm.set_value("delivery_address_name", r.name);
-		});
+	set_delivery_company_address: function (frm) {
+		frappe.db.get_value(
+			"Address",
+			{
+				address_title: frm.doc.delivery_company,
+				is_your_company_address: 1,
+			},
+			"name",
+			(r) => {
+				frm.set_value("delivery_address_name", r.name);
+			}
+		);
 	},
-	pickup_from_type: function(frm) {
-		if (frm.doc.pickup_from_type == 'Company') {
-			frm.set_value("pickup_company", frappe.defaults.get_default('company'));
-			frm.set_value("pickup_customer", '');
-			frm.set_value("pickup_supplier", '');
+	pickup_from_type: function (frm) {
+		if (frm.doc.pickup_from_type == "Company") {
+			frm.set_value("pickup_company", frappe.defaults.get_default("company"));
+			frm.set_value("pickup_customer", "");
+			frm.set_value("pickup_supplier", "");
 		} else {
-			frm.trigger('clear_pickup_fields');
+			frm.trigger("clear_pickup_fields");
 		}
-		if (frm.doc.pickup_from_type == 'Customer') {
-			frm.set_value("pickup_company", '');
-			frm.set_value("pickup_supplier", '');
+		if (frm.doc.pickup_from_type == "Customer") {
+			frm.set_value("pickup_company", "");
+			frm.set_value("pickup_supplier", "");
 		}
-		if (frm.doc.pickup_from_type == 'Supplier') {
-			frm.set_value("pickup_customer", '');
-			frm.set_value("pickup_company", '');
+		if (frm.doc.pickup_from_type == "Supplier") {
+			frm.set_value("pickup_customer", "");
+			frm.set_value("pickup_company", "");
 		}
 	},
-	delivery_to_type: function(frm) {
-		if (frm.doc.delivery_to_type == 'Company') {
-			frm.set_value("delivery_company", frappe.defaults.get_default('company'));
-			frm.set_value("delivery_customer", '');
-			frm.set_value("delivery_supplier", '');
+	delivery_to_type: function (frm) {
+		if (frm.doc.delivery_to_type == "Company") {
+			frm.set_value("delivery_company", frappe.defaults.get_default("company"));
+			frm.set_value("delivery_customer", "");
+			frm.set_value("delivery_supplier", "");
 		} else {
-			frm.trigger('clear_delivery_fields');
+			frm.trigger("clear_delivery_fields");
 		}
-		if (frm.doc.delivery_to_type == 'Customer') {
-			frm.set_value("delivery_company", '');
-			frm.set_value("delivery_supplier", '');
+		if (frm.doc.delivery_to_type == "Customer") {
+			frm.set_value("delivery_company", "");
+			frm.set_value("delivery_supplier", "");
 		}
-		if (frm.doc.delivery_to_type == 'Supplier') {
-			frm.set_value("delivery_customer", '');
-			frm.set_value("delivery_company", '');
+		if (frm.doc.delivery_to_type == "Supplier") {
+			frm.set_value("delivery_customer", "");
+			frm.set_value("delivery_company", "");
 			frm.toggle_display("shipment_delivery_note", false);
 		} else {
 			frm.toggle_display("shipment_delivery_note", true);
 		}
 	},
-	delivery_address_name: function(frm) {
-		if (frm.doc.delivery_to_type == 'Company') {
-			erpnext.utils.get_address_display(frm, 'delivery_address_name', 'delivery_address', true);
+	delivery_address_name: function (frm) {
+		if (frm.doc.delivery_to_type == "Company") {
+			erpnext.utils.get_address_display(frm, "delivery_address_name", "delivery_address", true);
 		} else {
-			erpnext.utils.get_address_display(frm, 'delivery_address_name', 'delivery_address', false);
+			erpnext.utils.get_address_display(frm, "delivery_address_name", "delivery_address", false);
 		}
 	},
-	pickup_address_name: function(frm) {
-		if (frm.doc.pickup_from_type == 'Company') {
-			erpnext.utils.get_address_display(frm, 'pickup_address_name', 'pickup_address', true);
+	pickup_address_name: function (frm) {
+		if (frm.doc.pickup_from_type == "Company") {
+			erpnext.utils.get_address_display(frm, "pickup_address_name", "pickup_address", true);
 		} else {
-			erpnext.utils.get_address_display(frm, 'pickup_address_name', 'pickup_address', false);
+			erpnext.utils.get_address_display(frm, "pickup_address_name", "pickup_address", false);
 		}
 	},
-	get_contact_display: function(frm, contact_name, contact_type) {
+	get_contact_display: function (frm, contact_name, contact_type) {
 		frappe.call({
 			method: "frappe.contacts.doctype.contact.contact.get_contact_details",
 			args: { contact: contact_name },
-			callback: function(r) {
+			callback: function (r) {
 				if (r.message) {
 					if (!(r.message.contact_email && (r.message.contact_phone || r.message.contact_mobile))) {
-						if (contact_type == 'Delivery') {
-							frm.set_value('delivery_contact_name', '');
-							frm.set_value('delivery_contact', '');
+						if (contact_type == "Delivery") {
+							frm.set_value("delivery_contact_name", "");
+							frm.set_value("delivery_contact", "");
 						} else {
-							frm.set_value('pickup_contact_name', '');
-							frm.set_value('pickup_contact', '');
+							frm.set_value("pickup_contact_name", "");
+							frm.set_value("pickup_contact", "");
 						}
-						frappe.throw(__("Email or Phone/Mobile of the Contact are mandatory to continue.")
-							+ "</br>" + __("Please set Email/Phone for the contact")
-							+ ` <a href='/app/contact/${contact_name}'>${contact_name}</a>`);
+						frappe.throw(
+							__("Email or Phone/Mobile of the Contact are mandatory to continue.") +
+								"</br>" +
+								__("Please set Email/Phone for the contact") +
+								` <a href='/app/contact/${contact_name}'>${contact_name}</a>`
+						);
 					}
 					let contact_display = r.message.contact_display;
 					if (r.message.contact_email) {
-						contact_display += '<br>' + r.message.contact_email;
+						contact_display += "<br>" + r.message.contact_email;
 					}
 					if (r.message.contact_phone) {
-						contact_display += '<br>' + r.message.contact_phone;
+						contact_display += "<br>" + r.message.contact_phone;
 					}
 					if (r.message.contact_mobile && !r.message.contact_phone) {
-						contact_display += '<br>' + r.message.contact_mobile;
+						contact_display += "<br>" + r.message.contact_mobile;
 					}
-					if (contact_type == 'Delivery') {
-						frm.set_value('delivery_contact', contact_display);
+					if (contact_type == "Delivery") {
+						frm.set_value("delivery_contact", contact_display);
 						if (r.message.contact_email) {
-							frm.set_value('delivery_contact_email', r.message.contact_email);
+							frm.set_value("delivery_contact_email", r.message.contact_email);
 						}
 					} else {
-						frm.set_value('pickup_contact', contact_display);
+						frm.set_value("pickup_contact", contact_display);
 						if (r.message.contact_email) {
-							frm.set_value('pickup_contact_email', r.message.contact_email);
+							frm.set_value("pickup_contact_email", r.message.contact_email);
 						}
 					}
 				}
-			}
+			},
 		});
 	},
-	delivery_contact_name: function(frm) {
+	delivery_contact_name: function (frm) {
 		if (frm.doc.delivery_contact_name) {
-			frm.events.get_contact_display(frm, frm.doc.delivery_contact_name, 'Delivery');
+			frm.events.get_contact_display(frm, frm.doc.delivery_contact_name, "Delivery");
 		}
 	},
-	pickup_contact_name: function(frm) {
+	pickup_contact_name: function (frm) {
 		if (frm.doc.pickup_contact_name) {
-			frm.events.get_contact_display(frm, frm.doc.pickup_contact_name, 'Pickup');
+			frm.events.get_contact_display(frm, frm.doc.pickup_contact_name, "Pickup");
 		}
 	},
-	pickup_contact_person: function(frm) {
+	pickup_contact_person: function (frm) {
 		if (frm.doc.pickup_contact_person) {
 			frappe.call({
 				method: "erpnext.stock.doctype.shipment.shipment.get_company_contact",
 				args: { user: frm.doc.pickup_contact_person },
-				callback: function({ message }) {
+				callback: function ({ message }) {
 					const r = message;
 					let contact_display = `${r.first_name} ${r.last_name}`;
 					if (r.email) {
-						contact_display += `<br>${ r.email }`;
-						frm.set_value('pickup_contact_email', r.email);
+						contact_display += `<br>${r.email}`;
+						frm.set_value("pickup_contact_email", r.email);
 					}
 					if (r.phone) {
-						contact_display += `<br>${ r.phone }`;
+						contact_display += `<br>${r.phone}`;
 					}
 					if (r.mobile_no && !r.phone) {
-						contact_display += `<br>${ r.mobile_no }`;
+						contact_display += `<br>${r.mobile_no}`;
 					}
-					frm.set_value('pickup_contact', contact_display);
-				}
+					frm.set_value("pickup_contact", contact_display);
+				},
 			});
 		} else {
-			if (frm.doc.pickup_from_type === 'Company') {
+			if (frm.doc.pickup_from_type === "Company") {
 				frappe.call({
 					method: "erpnext.stock.doctype.shipment.shipment.get_company_contact",
 					args: { user: frappe.session.user },
-					callback: function({ message }) {
+					callback: function ({ message }) {
 						const r = message;
 						let contact_display = `${r.first_name} ${r.last_name}`;
 						if (r.email) {
-							contact_display += `<br>${ r.email }`;
-							frm.set_value('pickup_contact_email', r.email);
+							contact_display += `<br>${r.email}`;
+							frm.set_value("pickup_contact_email", r.email);
 						}
 						if (r.phone) {
-							contact_display += `<br>${ r.phone }`;
+							contact_display += `<br>${r.phone}`;
 						}
 						if (r.mobile_no && !r.phone) {
-							contact_display += `<br>${ r.mobile_no }`;
+							contact_display += `<br>${r.mobile_no}`;
 						}
-						frm.set_value('pickup_contact', contact_display);
-					}
+						frm.set_value("pickup_contact", contact_display);
+					},
 				});
 			}
 		}
 	},
-	set_company_contact: function(frm, delivery_type) {
-		frappe.db.get_value('User', { name: frappe.session.user }, ['full_name', 'last_name', 'email', 'phone', 'mobile_no'], (r) => {
-			if (!(r.last_name && r.email && (r.phone || r.mobile_no))) {
-				if (delivery_type == 'Delivery') {
-					frm.set_value('delivery_company', '');
-					frm.set_value('delivery_contact', '');
+	set_company_contact: function (frm, delivery_type) {
+		frappe.db.get_value(
+			"User",
+			{ name: frappe.session.user },
+			["full_name", "last_name", "email", "phone", "mobile_no"],
+			(r) => {
+				if (!(r.last_name && r.email && (r.phone || r.mobile_no))) {
+					if (delivery_type == "Delivery") {
+						frm.set_value("delivery_company", "");
+						frm.set_value("delivery_contact", "");
+					} else {
+						frm.set_value("pickup_company", "");
+						frm.set_value("pickup_contact", "");
+					}
+					frappe.throw(
+						__("Last Name, Email or Phone/Mobile of the user are mandatory to continue.") +
+							"</br>" +
+							__("Please first set Last Name, Email and Phone for the user") +
+							` <a href="/app/user/${frappe.session.user}">${frappe.session.user}</a>`
+					);
+				}
+				let contact_display = r.full_name;
+				if (r.email) {
+					contact_display += "<br>" + r.email;
+				}
+				if (r.phone) {
+					contact_display += "<br>" + r.phone;
+				}
+				if (r.mobile_no && !r.phone) {
+					contact_display += "<br>" + r.mobile_no;
+				}
+				if (delivery_type == "Delivery") {
+					frm.set_value("delivery_contact", contact_display);
+					if (r.email) {
+						frm.set_value("delivery_contact_email", r.email);
+					}
 				} else {
-					frm.set_value('pickup_company', '');
-					frm.set_value('pickup_contact', '');
-				}
-				frappe.throw(__("Last Name, Email or Phone/Mobile of the user are mandatory to continue.") + "</br>"
-					+ __("Please first set Last Name, Email and Phone for the user")
-					+ ` <a href="/app/user/${frappe.session.user}">${frappe.session.user}</a>`);
-			}
-			let contact_display = r.full_name;
-			if (r.email) {
-				contact_display += '<br>' + r.email;
-			}
-			if (r.phone) {
-				contact_display += '<br>' + r.phone;
-			}
-			if (r.mobile_no && !r.phone) {
-				contact_display += '<br>' + r.mobile_no;
-			}
-			if (delivery_type == 'Delivery') {
-				frm.set_value('delivery_contact', contact_display);
-				if (r.email) {
-					frm.set_value('delivery_contact_email', r.email);
-				}
-			} else {
-				frm.set_value('pickup_contact', contact_display);
-				if (r.email) {
-					frm.set_value('pickup_contact_email', r.email);
+					frm.set_value("pickup_contact", contact_display);
+					if (r.email) {
+						frm.set_value("pickup_contact_email", r.email);
+					}
 				}
 			}
-		});
-		frm.set_value('pickup_contact_person', frappe.session.user);
+		);
+		frm.set_value("pickup_contact_person", frappe.session.user);
 	},
-	pickup_company: function(frm) {
-		if (frm.doc.pickup_from_type == 'Company'  && frm.doc.pickup_company) {
-			frm.trigger('set_pickup_company_address');
-			frm.events.set_company_contact(frm, 'Pickup');
+	pickup_company: function (frm) {
+		if (frm.doc.pickup_from_type == "Company" && frm.doc.pickup_company) {
+			frm.trigger("set_pickup_company_address");
+			frm.events.set_company_contact(frm, "Pickup");
 		}
 	},
-	delivery_company: function(frm) {
-		if (frm.doc.delivery_to_type == 'Company' && frm.doc.delivery_company) {
-			frm.trigger('set_delivery_company_address');
-			frm.events.set_company_contact(frm, 'Delivery');
+	delivery_company: function (frm) {
+		if (frm.doc.delivery_to_type == "Company" && frm.doc.delivery_company) {
+			frm.trigger("set_delivery_company_address");
+			frm.events.set_company_contact(frm, "Delivery");
 		}
 	},
-	delivery_customer: function(frm) {
-		frm.trigger('clear_delivery_fields');
+	delivery_customer: function (frm) {
+		frm.trigger("clear_delivery_fields");
 		if (frm.doc.delivery_customer) {
-			frm.events.set_address_name(frm, 'Customer', frm.doc.delivery_customer, 'Delivery');
-			frm.events.set_contact_name(frm, 'Customer', frm.doc.delivery_customer, 'Delivery');
+			frm.events.set_address_name(frm, "Customer", frm.doc.delivery_customer, "Delivery");
+			frm.events.set_contact_name(frm, "Customer", frm.doc.delivery_customer, "Delivery");
 		}
 	},
-	delivery_supplier: function(frm) {
-		frm.trigger('clear_delivery_fields');
+	delivery_supplier: function (frm) {
+		frm.trigger("clear_delivery_fields");
 		if (frm.doc.delivery_supplier) {
-			frm.events.set_address_name(frm, 'Supplier', frm.doc.delivery_supplier, 'Delivery');
-			frm.events.set_contact_name(frm, 'Supplier', frm.doc.delivery_supplier, 'Delivery');
+			frm.events.set_address_name(frm, "Supplier", frm.doc.delivery_supplier, "Delivery");
+			frm.events.set_contact_name(frm, "Supplier", frm.doc.delivery_supplier, "Delivery");
 		}
 	},
-	pickup_customer: function(frm) {
+	pickup_customer: function (frm) {
 		if (frm.doc.pickup_customer) {
-			frm.events.set_address_name(frm, 'Customer', frm.doc.pickup_customer, 'Pickup');
-			frm.events.set_contact_name(frm, 'Customer', frm.doc.pickup_customer, 'Pickup');
+			frm.events.set_address_name(frm, "Customer", frm.doc.pickup_customer, "Pickup");
+			frm.events.set_contact_name(frm, "Customer", frm.doc.pickup_customer, "Pickup");
 		}
 	},
-	pickup_supplier: function(frm) {
+	pickup_supplier: function (frm) {
 		if (frm.doc.pickup_supplier) {
-			frm.events.set_address_name(frm, 'Supplier', frm.doc.pickup_supplier, 'Pickup');
-			frm.events.set_contact_name(frm, 'Supplier', frm.doc.pickup_supplier, 'Pickup');
+			frm.events.set_address_name(frm, "Supplier", frm.doc.pickup_supplier, "Pickup");
+			frm.events.set_contact_name(frm, "Supplier", frm.doc.pickup_supplier, "Pickup");
 		}
 	},
-	set_address_name: function(frm, ref_doctype, ref_docname, delivery_type) {
+	set_address_name: function (frm, ref_doctype, ref_docname, delivery_type) {
 		frappe.call({
 			method: "erpnext.stock.doctype.shipment.shipment.get_address_name",
 			args: {
 				ref_doctype: ref_doctype,
-				docname: ref_docname
+				docname: ref_docname,
 			},
-			callback: function(r) {
+			callback: function (r) {
 				if (r.message) {
-					if (delivery_type == 'Delivery') {
-						frm.set_value('delivery_address_name', r.message);
+					if (delivery_type == "Delivery") {
+						frm.set_value("delivery_address_name", r.message);
 					} else {
-						frm.set_value('pickup_address_name', r.message);
+						frm.set_value("pickup_address_name", r.message);
 					}
 				}
-			}
+			},
 		});
 	},
-	set_contact_name: function(frm, ref_doctype, ref_docname, delivery_type) {
+	set_contact_name: function (frm, ref_doctype, ref_docname, delivery_type) {
 		frappe.call({
 			method: "erpnext.stock.doctype.shipment.shipment.get_contact_name",
 			args: {
 				ref_doctype: ref_doctype,
-				docname: ref_docname
+				docname: ref_docname,
 			},
-			callback: function(r) {
+			callback: function (r) {
 				if (r.message) {
-					if (delivery_type == 'Delivery') {
-						frm.set_value('delivery_contact_name', r.message);
+					if (delivery_type == "Delivery") {
+						frm.set_value("delivery_contact_name", r.message);
 					} else {
-						frm.set_value('pickup_contact_name', r.message);
+						frm.set_value("pickup_contact_name", r.message);
 					}
 				}
-			}
+			},
 		});
 	},
-	add_template: function(frm) {
+	add_template: function (frm) {
 		if (frm.doc.parcel_template) {
 			frappe.model.with_doc("Shipment Parcel Template", frm.doc.parcel_template, () => {
-				let parcel_template = frappe.model.get_doc("Shipment Parcel Template", frm.doc.parcel_template);
+				let parcel_template = frappe.model.get_doc(
+					"Shipment Parcel Template",
+					frm.doc.parcel_template
+				);
 				let row = frappe.model.add_child(frm.doc, "Shipment Parcel", "shipment_parcel");
 				row.length = parcel_template.length;
 				row.width = parcel_template.width;
@@ -359,56 +393,71 @@
 			});
 		}
 	},
-	pickup_date: function(frm) {
+	pickup_date: function (frm) {
 		if (frm.doc.pickup_date < frappe.datetime.get_today()) {
 			frappe.throw(__("Pickup Date cannot be before this day"));
 		}
 	},
-	clear_pickup_fields: function(frm) {
-		let fields = ["pickup_address_name", "pickup_contact_name", "pickup_address", "pickup_contact", "pickup_contact_email", "pickup_contact_person"];
+	clear_pickup_fields: function (frm) {
+		let fields = [
+			"pickup_address_name",
+			"pickup_contact_name",
+			"pickup_address",
+			"pickup_contact",
+			"pickup_contact_email",
+			"pickup_contact_person",
+		];
 		for (let field of fields) {
-			frm.set_value(field,  '');
+			frm.set_value(field, "");
 		}
 	},
-	clear_delivery_fields: function(frm) {
-		let fields = ["delivery_address_name", "delivery_contact_name", "delivery_address", "delivery_contact", "delivery_contact_email"];
+	clear_delivery_fields: function (frm) {
+		let fields = [
+			"delivery_address_name",
+			"delivery_contact_name",
+			"delivery_address",
+			"delivery_contact",
+			"delivery_contact_email",
+		];
 		for (let field of fields) {
-			frm.set_value(field,  '');
+			frm.set_value(field, "");
 		}
 	},
-	remove_email_row: function(frm, table, fieldname) {
-		$.each(frm.doc[table] || [], function(i, detail) {
+	remove_email_row: function (frm, table, fieldname) {
+		$.each(frm.doc[table] || [], function (i, detail) {
 			if (detail.email === fieldname) {
 				cur_frm.get_field(table).grid.grid_rows[i].remove();
 			}
 		});
-	}
+	},
 });
 
-frappe.ui.form.on('Shipment Delivery Note', {
-	delivery_note: function(frm, cdt, cdn) {
+frappe.ui.form.on("Shipment Delivery Note", {
+	delivery_note: function (frm, cdt, cdn) {
 		let row = locals[cdt][cdn];
 		if (row.delivery_note) {
 			let row_index = row.idx - 1;
-			if (validate_duplicate(frm, 'shipment_delivery_note', row.delivery_note, row_index)) {
-				frappe.throw(__("You have entered a duplicate Delivery Note on Row") + ` ${row.idx}. ` + __("Please rectify and try again."));
+			if (validate_duplicate(frm, "shipment_delivery_note", row.delivery_note, row_index)) {
+				frappe.throw(
+					__("You have entered a duplicate Delivery Note on Row") +
+						` ${row.idx}. ` +
+						__("Please rectify and try again.")
+				);
 			}
 		}
 	},
-	grand_total: function(frm, cdt, cdn) {
+	grand_total: function (frm, cdt, cdn) {
 		let row = locals[cdt][cdn];
 		if (row.grand_total) {
-			var value_of_goods = parseFloat(frm.doc.value_of_goods)+parseFloat(row.grand_total);
+			var value_of_goods = parseFloat(frm.doc.value_of_goods) + parseFloat(row.grand_total);
 			frm.set_value("value_of_goods", Math.round(value_of_goods));
 			frm.refresh_fields("value_of_goods");
 		}
 	},
 });
 
-var validate_duplicate =  function(frm, table, fieldname, index) {
-	return (
-		table === 'shipment_delivery_note'
-			? frm.doc[table].some((detail, i) => detail.delivery_note === fieldname && !(index === i))
-			: frm.doc[table].some((detail, i) => detail.email === fieldname && !(index === i))
-	);
+var validate_duplicate = function (frm, table, fieldname, index) {
+	return table === "shipment_delivery_note"
+		? frm.doc[table].some((detail, i) => detail.delivery_note === fieldname && !(index === i))
+		: frm.doc[table].some((detail, i) => detail.email === fieldname && !(index === i));
 };
diff --git a/erpnext/stock/doctype/shipment/shipment_list.js b/erpnext/stock/doctype/shipment/shipment_list.js
index ae6a3c1..b333ccc 100644
--- a/erpnext/stock/doctype/shipment/shipment_list.js
+++ b/erpnext/stock/doctype/shipment/shipment_list.js
@@ -1,8 +1,8 @@
-frappe.listview_settings['Shipment'] = {
+frappe.listview_settings["Shipment"] = {
 	add_fields: ["status"],
-	get_indicator: function(doc) {
-		if (doc.status=='Booked') {
+	get_indicator: function (doc) {
+		if (doc.status == "Booked") {
 			return [__("Booked"), "green"];
 		}
-	}
+	},
 };
diff --git a/erpnext/stock/doctype/shipment_parcel_template/shipment_parcel_template.js b/erpnext/stock/doctype/shipment_parcel_template/shipment_parcel_template.js
index 785a3b3..3ef90fa 100644
--- a/erpnext/stock/doctype/shipment_parcel_template/shipment_parcel_template.js
+++ b/erpnext/stock/doctype/shipment_parcel_template/shipment_parcel_template.js
@@ -1,8 +1,7 @@
 // Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Shipment Parcel Template', {
+frappe.ui.form.on("Shipment Parcel Template", {
 	// refresh: function(frm) {
-
 	// }
 });
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js
index 1b7089b..ac2fe58 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.js
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.js
@@ -5,91 +5,106 @@
 
 erpnext.landed_cost_taxes_and_charges.setup_triggers("Stock Entry");
 
-frappe.ui.form.on('Stock Entry', {
-	setup: function(frm) {
-		frm.ignore_doctypes_on_cancel_all = ['Serial and Batch Bundle'];
+frappe.ui.form.on("Stock Entry", {
+	setup: function (frm) {
+		frm.ignore_doctypes_on_cancel_all = ["Serial and Batch Bundle"];
 
-		frm.set_indicator_formatter('item_code', function(doc) {
+		frm.set_indicator_formatter("item_code", function (doc) {
 			if (!doc.s_warehouse) {
-				return 'blue';
+				return "blue";
 			} else {
-				return (doc.qty<=doc.actual_qty) ? 'green' : 'orange';
+				return doc.qty <= doc.actual_qty ? "green" : "orange";
 			}
 		});
 
-		frm.set_query('work_order', function() {
+		frm.set_query("work_order", function () {
 			return {
 				filters: [
-					['Work Order', 'docstatus', '=', 1],
-					['Work Order', 'qty', '>','`tabWork Order`.produced_qty'],
-					['Work Order', 'company', '=', frm.doc.company]
-				]
-			}
+					["Work Order", "docstatus", "=", 1],
+					["Work Order", "qty", ">", "`tabWork Order`.produced_qty"],
+					["Work Order", "company", "=", frm.doc.company],
+				],
+			};
 		});
 
-		frm.set_query('outgoing_stock_entry', function() {
+		frm.set_query("outgoing_stock_entry", function () {
 			return {
 				filters: [
-					['Stock Entry', 'docstatus', '=', 1],
-					['Stock Entry', 'per_transferred', '<','100'],
-				]
-			}
+					["Stock Entry", "docstatus", "=", 1],
+					["Stock Entry", "per_transferred", "<", "100"],
+				],
+			};
 		});
 
-		frm.set_query('source_warehouse_address', function() {
+		frm.set_query("source_warehouse_address", function () {
 			return {
 				filters: {
-					link_doctype: 'Warehouse',
-					link_name: frm.doc.from_warehouse
-				}
-			}
+					link_doctype: "Warehouse",
+					link_name: frm.doc.from_warehouse,
+				},
+			};
 		});
 
-		frm.set_query('target_warehouse_address', function() {
+		frm.set_query("target_warehouse_address", function () {
 			return {
 				filters: {
-					link_doctype: 'Warehouse',
-					link_name: frm.doc.to_warehouse
+					link_doctype: "Warehouse",
+					link_name: frm.doc.to_warehouse,
+				},
+			};
+		});
+
+		frappe.db.get_value(
+			"Stock Settings",
+			{ name: "Stock Settings" },
+			"sample_retention_warehouse",
+			(r) => {
+				if (r.sample_retention_warehouse) {
+					let filters = [
+						["Warehouse", "company", "=", frm.doc.company],
+						["Warehouse", "is_group", "=", 0],
+						["Warehouse", "name", "!=", r.sample_retention_warehouse],
+					];
+					frm.set_query("from_warehouse", function () {
+						return {
+							filters: filters,
+						};
+					});
+					frm.set_query("s_warehouse", "items", function () {
+						return {
+							filters: filters,
+						};
+					});
 				}
 			}
-		});
+		);
 
-		frappe.db.get_value('Stock Settings', {name: 'Stock Settings'}, 'sample_retention_warehouse', (r) => {
-			if (r.sample_retention_warehouse) {
-				let filters = [
-							["Warehouse", 'company', '=', frm.doc.company],
-							["Warehouse", "is_group", "=",0],
-							['Warehouse', 'name', '!=', r.sample_retention_warehouse]
-						]
-				frm.set_query("from_warehouse", function() {
-					return {
-						filters: filters
-					};
-				});
-				frm.set_query("s_warehouse", "items", function() {
-					return {
-						filters: filters
-					};
-				});
-			}
-		});
-
-		frm.set_query('batch_no', 'items', function(doc, cdt, cdn) {
+		frm.set_query("batch_no", "items", function (doc, cdt, cdn) {
 			let item = locals[cdt][cdn];
 			let filters = {};
 
-			if(!item.item_code) {
+			if (!item.item_code) {
 				frappe.throw(__("Please enter Item Code to get Batch Number"));
 			} else {
-				if (in_list(["Material Transfer for Manufacture", "Manufacture", "Repack", "Send to Subcontractor"], doc.purpose)) {
+				if (
+					in_list(
+						[
+							"Material Transfer for Manufacture",
+							"Manufacture",
+							"Repack",
+							"Send to Subcontractor",
+						],
+						doc.purpose
+					)
+				) {
 					filters = {
-						'item_code': item.item_code,
-						'posting_date': frm.doc.posting_date || frappe.datetime.nowdate()
-					}
+						item_code: item.item_code,
+						posting_date: frm.doc.posting_date || frappe.datetime.nowdate(),
+					};
 				} else {
 					filters = {
-						'item_code': item.item_code
-					}
+						item_code: item.item_code,
+					};
 				}
 
 				// User could want to select a manually created empty batch (no warehouse)
@@ -99,9 +114,9 @@
 				}
 
 				return {
-					query : "erpnext.controllers.queries.get_batch_no",
-					filters: filters
-				}
+					query: "erpnext.controllers.queries.get_batch_no",
+					filters: filters,
+				};
 			}
 		});
 
@@ -109,119 +124,125 @@
 			let row = locals[cdt][cdn];
 			return {
 				filters: {
-					'item_code': row.item_code,
-					'voucher_type': doc.doctype,
-					'voucher_no': ["in", [doc.name, ""]],
-					'is_cancelled': 0,
-				}
-			}
+					item_code: row.item_code,
+					voucher_type: doc.doctype,
+					voucher_no: ["in", [doc.name, ""]],
+					is_cancelled: 0,
+				},
+			};
 		});
 
-
 		frm.add_fetch("bom_no", "inspection_required", "inspection_required");
 		erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype);
 
-		frappe.db.get_single_value('Stock Settings', 'disable_serial_no_and_batch_selector')
-		.then((value) => {
+		frappe.db.get_single_value("Stock Settings", "disable_serial_no_and_batch_selector").then((value) => {
 			if (value) {
 				frappe.flags.hide_serial_batch_dialog = true;
 			}
 		});
 		attach_bom_items(frm.doc.bom_no);
 
-		if(!check_should_not_attach_bom_items(frm.doc.bom_no)) {
+		if (!check_should_not_attach_bom_items(frm.doc.bom_no)) {
 			erpnext.accounts.dimensions.update_dimension(frm, frm.doctype);
 		}
 	},
 
-	setup_quality_inspection: function(frm) {
+	setup_quality_inspection: function (frm) {
 		if (!frm.doc.inspection_required) {
 			return;
 		}
 
 		if (!frm.is_new() && frm.doc.docstatus === 0) {
-			frm.add_custom_button(__("Quality Inspection(s)"), () => {
-				let transaction_controller = new erpnext.TransactionController({ frm: frm });
-				transaction_controller.make_quality_inspection();
-			}, __("Create"));
-			frm.page.set_inner_btn_group_as_primary(__('Create'));
+			frm.add_custom_button(
+				__("Quality Inspection(s)"),
+				() => {
+					let transaction_controller = new erpnext.TransactionController({ frm: frm });
+					transaction_controller.make_quality_inspection();
+				},
+				__("Create")
+			);
+			frm.page.set_inner_btn_group_as_primary(__("Create"));
 		}
 
 		let quality_inspection_field = frm.get_docfield("items", "quality_inspection");
-		quality_inspection_field.get_route_options_for_new_doc = function(row) {
+		quality_inspection_field.get_route_options_for_new_doc = function (row) {
 			if (frm.is_new()) return {};
 			return {
-				"inspection_type": "Incoming",
-				"reference_type": frm.doc.doctype,
-				"reference_name": frm.doc.name,
-				"item_code": row.doc.item_code,
-				"description": row.doc.description,
-				"item_serial_no": row.doc.serial_no ? row.doc.serial_no.split("\n")[0] : null,
-				"batch_no": row.doc.batch_no
-			}
-		}
+				inspection_type: "Incoming",
+				reference_type: frm.doc.doctype,
+				reference_name: frm.doc.name,
+				item_code: row.doc.item_code,
+				description: row.doc.description,
+				item_serial_no: row.doc.serial_no ? row.doc.serial_no.split("\n")[0] : null,
+				batch_no: row.doc.batch_no,
+			};
+		};
 
-		frm.set_query("quality_inspection", "items", function(doc, cdt, cdn) {
+		frm.set_query("quality_inspection", "items", function (doc, cdt, cdn) {
 			var d = locals[cdt][cdn];
 
 			return {
-				query:"erpnext.stock.doctype.quality_inspection.quality_inspection.quality_inspection_query",
+				query: "erpnext.stock.doctype.quality_inspection.quality_inspection.quality_inspection_query",
 				filters: {
-					'item_code': d.item_code,
-					'reference_name': doc.name
-				}
-			}
+					item_code: d.item_code,
+					reference_name: doc.name,
+				},
+			};
 		});
 	},
 
-	outgoing_stock_entry: function(frm) {
+	outgoing_stock_entry: function (frm) {
 		frappe.call({
 			doc: frm.doc,
 			method: "set_items_for_stock_in",
-			callback: function() {
-				refresh_field('items');
-			}
+			callback: function () {
+				refresh_field("items");
+			},
 		});
 	},
 
-	refresh: function(frm) {
+	refresh: function (frm) {
 		frm.trigger("get_items_from_transit_entry");
 
-		if(!frm.doc.docstatus) {
-			frm.trigger('validate_purpose_consumption');
-			frm.add_custom_button(__('Material Request'), function() {
-				frappe.model.with_doctype('Material Request', function() {
-					var mr = frappe.model.get_new_doc('Material Request');
-					var items = frm.get_field('items').grid.get_selected_children();
-					if(!items.length) {
-						items = frm.doc.items;
-					}
+		if (!frm.doc.docstatus) {
+			frm.trigger("validate_purpose_consumption");
+			frm.add_custom_button(
+				__("Material Request"),
+				function () {
+					frappe.model.with_doctype("Material Request", function () {
+						var mr = frappe.model.get_new_doc("Material Request");
+						var items = frm.get_field("items").grid.get_selected_children();
+						if (!items.length) {
+							items = frm.doc.items;
+						}
 
-					mr.work_order = frm.doc.work_order;
-					items.forEach(function(item) {
-						var mr_item = frappe.model.add_child(mr, 'items');
-						mr_item.item_code = item.item_code;
-						mr_item.item_name = item.item_name;
-						mr_item.uom = item.uom;
-						mr_item.stock_uom = item.stock_uom;
-						mr_item.conversion_factor = item.conversion_factor;
-						mr_item.item_group = item.item_group;
-						mr_item.description = item.description;
-						mr_item.image = item.image;
-						mr_item.qty = item.qty;
-						mr_item.warehouse = item.s_warehouse;
-						mr_item.required_date = frappe.datetime.nowdate();
+						mr.work_order = frm.doc.work_order;
+						items.forEach(function (item) {
+							var mr_item = frappe.model.add_child(mr, "items");
+							mr_item.item_code = item.item_code;
+							mr_item.item_name = item.item_name;
+							mr_item.uom = item.uom;
+							mr_item.stock_uom = item.stock_uom;
+							mr_item.conversion_factor = item.conversion_factor;
+							mr_item.item_group = item.item_group;
+							mr_item.description = item.description;
+							mr_item.image = item.image;
+							mr_item.qty = item.qty;
+							mr_item.warehouse = item.s_warehouse;
+							mr_item.required_date = frappe.datetime.nowdate();
+						});
+						frappe.set_route("Form", "Material Request", mr.name);
 					});
-					frappe.set_route('Form', 'Material Request', mr.name);
-				});
-			}, __("Create"));
+				},
+				__("Create")
+			);
 		}
 
-		if(frm.doc.items) {
-			const has_alternative = frm.doc.items.find(i => i.allow_alternative_item === 1);
+		if (frm.doc.items) {
+			const has_alternative = frm.doc.items.find((i) => i.allow_alternative_item === 1);
 
 			if (frm.doc.docstatus == 0 && has_alternative) {
-				frm.add_custom_button(__('Alternate Item'), () => {
+				frm.add_custom_button(__("Alternate Item"), () => {
 					erpnext.utils.select_alternate_items({
 						frm: frm,
 						child_docname: "items",
@@ -229,111 +250,139 @@
 						child_doctype: "Stock Entry Detail",
 						original_item_field: "original_item",
 						condition: (d) => {
-							if (d.s_warehouse && d.allow_alternative_item) {return true;}
-						}
-					})
+							if (d.s_warehouse && d.allow_alternative_item) {
+								return true;
+							}
+						},
+					});
 				});
 			}
 		}
 
 		if (frm.doc.docstatus === 1) {
-			if (frm.doc.add_to_transit && frm.doc.purpose=='Material Transfer' && frm.doc.per_transferred < 100) {
-				frm.add_custom_button(__('End Transit'), function() {
+			if (
+				frm.doc.add_to_transit &&
+				frm.doc.purpose == "Material Transfer" &&
+				frm.doc.per_transferred < 100
+			) {
+				frm.add_custom_button(__("End Transit"), function () {
 					frappe.model.open_mapped_doc({
 						method: "erpnext.stock.doctype.stock_entry.stock_entry.make_stock_in_entry",
-						frm: frm
-					})
+						frm: frm,
+					});
 				});
 			}
 
 			if (frm.doc.per_transferred > 0) {
-				frm.add_custom_button(__('Received Stock Entries'), function() {
-					frappe.route_options = {
-						'outgoing_stock_entry': frm.doc.name,
-						'docstatus': ['!=', 2]
-					};
+				frm.add_custom_button(
+					__("Received Stock Entries"),
+					function () {
+						frappe.route_options = {
+							outgoing_stock_entry: frm.doc.name,
+							docstatus: ["!=", 2],
+						};
 
-					frappe.set_route('List', 'Stock Entry');
-				}, __("View"));
+						frappe.set_route("List", "Stock Entry");
+					},
+					__("View")
+				);
 			}
 		}
 
 		if (frm.doc.docstatus === 0) {
-			frm.add_custom_button(__('Purchase Invoice'), function() {
-				erpnext.utils.map_current_doc({
-					method: "erpnext.accounts.doctype.purchase_invoice.purchase_invoice.make_stock_entry",
-					source_doctype: "Purchase Invoice",
-					target: frm,
-					date_field: "posting_date",
-					setters: {
-						supplier: frm.doc.supplier || undefined,
-					},
-					get_query_filters: {
-						docstatus: 1
-					}
-				})
-			}, __("Get Items From"));
-
-			frm.add_custom_button(__('Material Request'), function() {
-				const allowed_request_types = ["Material Transfer", "Material Issue", "Customer Provided"];
-				const depends_on_condition = "eval:doc.material_request_type==='Customer Provided'";
-				const d = erpnext.utils.map_current_doc({
-					method: "erpnext.stock.doctype.material_request.material_request.make_stock_entry",
-					source_doctype: "Material Request",
-					target: frm,
-					date_field: "schedule_date",
-					setters: [{
-						fieldtype: 'Select',
-						label: __('Purpose'),
-						options: allowed_request_types.join("\n"),
-						fieldname: 'material_request_type',
-						default: "Material Transfer",
-						mandatory: 1,
-						change() {
-							if (this.value === 'Customer Provided') {
-								d.dialog.get_field("customer").set_focus();
-							}
+			frm.add_custom_button(
+				__("Purchase Invoice"),
+				function () {
+					erpnext.utils.map_current_doc({
+						method: "erpnext.accounts.doctype.purchase_invoice.purchase_invoice.make_stock_entry",
+						source_doctype: "Purchase Invoice",
+						target: frm,
+						date_field: "posting_date",
+						setters: {
+							supplier: frm.doc.supplier || undefined,
 						},
-					},
-					{
-						fieldtype: 'Link',
-						label: __('Customer'),
-						options: 'Customer',
-						fieldname: 'customer',
-						depends_on: depends_on_condition,
-						mandatory_depends_on: depends_on_condition,
-					}],
-					get_query_filters: {
-						docstatus: 1,
-						material_request_type: ["in", allowed_request_types],
-						status: ["not in", ["Transferred", "Issued", "Cancelled", "Stopped"]]
-					}
-				})
-			}, __("Get Items From"));
+						get_query_filters: {
+							docstatus: 1,
+						},
+					});
+				},
+				__("Get Items From")
+			);
+
+			frm.add_custom_button(
+				__("Material Request"),
+				function () {
+					const allowed_request_types = [
+						"Material Transfer",
+						"Material Issue",
+						"Customer Provided",
+					];
+					const depends_on_condition = "eval:doc.material_request_type==='Customer Provided'";
+					const d = erpnext.utils.map_current_doc({
+						method: "erpnext.stock.doctype.material_request.material_request.make_stock_entry",
+						source_doctype: "Material Request",
+						target: frm,
+						date_field: "schedule_date",
+						setters: [
+							{
+								fieldtype: "Select",
+								label: __("Purpose"),
+								options: allowed_request_types.join("\n"),
+								fieldname: "material_request_type",
+								default: "Material Transfer",
+								mandatory: 1,
+								change() {
+									if (this.value === "Customer Provided") {
+										d.dialog.get_field("customer").set_focus();
+									}
+								},
+							},
+							{
+								fieldtype: "Link",
+								label: __("Customer"),
+								options: "Customer",
+								fieldname: "customer",
+								depends_on: depends_on_condition,
+								mandatory_depends_on: depends_on_condition,
+							},
+						],
+						get_query_filters: {
+							docstatus: 1,
+							material_request_type: ["in", allowed_request_types],
+							status: ["not in", ["Transferred", "Issued", "Cancelled", "Stopped"]],
+						},
+					});
+				},
+				__("Get Items From")
+			);
 		}
 
 		if (frm.doc.docstatus === 0 && frm.doc.purpose == "Material Issue") {
-			frm.add_custom_button(__('Expired Batches'), function() {
-				frappe.call({
-					method: "erpnext.stock.doctype.stock_entry.stock_entry.get_expired_batch_items",
-					callback: function(r) {
-						if (!r.exc && r.message) {
-							frm.set_value("items", []);
-							r.message.forEach(function(element) {
-								let d = frm.add_child("items");
-								d.item_code = element.item;
-								d.s_warehouse = element.warehouse;
-								d.qty = element.qty;
-								d.uom = element.stock_uom;
-								d.conversion_factor = 1;
-								d.batch_no = element.batch_no;
-								d.transfer_qty = element.qty;
-								frm.refresh_fields();
-							});
-						}
-					}
-				});
-			}, __("Get Items From"));
+			frm.add_custom_button(
+				__("Expired Batches"),
+				function () {
+					frappe.call({
+						method: "erpnext.stock.doctype.stock_entry.stock_entry.get_expired_batch_items",
+						callback: function (r) {
+							if (!r.exc && r.message) {
+								frm.set_value("items", []);
+								r.message.forEach(function (element) {
+									let d = frm.add_child("items");
+									d.item_code = element.item;
+									d.s_warehouse = element.warehouse;
+									d.qty = element.qty;
+									d.uom = element.stock_uom;
+									d.conversion_factor = 1;
+									d.batch_no = element.batch_no;
+									d.transfer_qty = element.qty;
+									frm.refresh_fields();
+								});
+							}
+						},
+					});
+				},
+				__("Get Items From")
+			);
 		}
 
 		frm.events.show_bom_custom_button(frm);
@@ -342,8 +391,12 @@
 			frm.trigger("toggle_display_account_head");
 		}
 
-		if(frm.doc.docstatus==1 && frm.doc.purpose == "Material Receipt" && frm.get_sum('items', 			'sample_quantity')) {
-			frm.add_custom_button(__('Create Sample Retention Stock Entry'), function () {
+		if (
+			frm.doc.docstatus == 1 &&
+			frm.doc.purpose == "Material Receipt" &&
+			frm.get_sum("items", "sample_quantity")
+		) {
+			frm.add_custom_button(__("Create Sample Retention Stock Entry"), function () {
 				frm.trigger("make_retention_stock_entry");
 			});
 		}
@@ -351,81 +404,88 @@
 		frm.trigger("setup_quality_inspection");
 		attach_bom_items(frm.doc.bom_no);
 
-		if(!check_should_not_attach_bom_items(frm.doc.bom_no)) {
+		if (!check_should_not_attach_bom_items(frm.doc.bom_no)) {
 			erpnext.accounts.dimensions.update_dimension(frm, frm.doctype);
 		}
 
-		let sbb_field = frm.get_docfield('items', 'serial_and_batch_bundle');
+		let sbb_field = frm.get_docfield("items", "serial_and_batch_bundle");
 		if (sbb_field) {
 			sbb_field.get_route_options_for_new_doc = (row) => {
 				return {
-					'item_code': row.doc.item_code,
-					'voucher_type': frm.doc.doctype,
-				}
+					item_code: row.doc.item_code,
+					voucher_type: frm.doc.doctype,
+				};
 			};
 		}
 	},
 
-	get_items_from_transit_entry: function(frm) {
-		if (frm.doc.docstatus===0) {
-			frm.add_custom_button(__('Transit Entry'), function() {
-				erpnext.utils.map_current_doc({
-					method: "erpnext.stock.doctype.stock_entry.stock_entry.make_stock_in_entry",
-					source_doctype: "Stock Entry",
-					target: frm,
-					date_field: "posting_date",
-					setters: {
-						stock_entry_type: "Material Transfer",
-						purpose: "Material Transfer",
-					},
-					get_query_filters: {
-						docstatus: 1,
-						purpose: "Material Transfer",
-						add_to_transit: 1,
-					}
-				})
-			}, __("Get Items From"));
+	get_items_from_transit_entry: function (frm) {
+		if (frm.doc.docstatus === 0) {
+			frm.add_custom_button(
+				__("Transit Entry"),
+				function () {
+					erpnext.utils.map_current_doc({
+						method: "erpnext.stock.doctype.stock_entry.stock_entry.make_stock_in_entry",
+						source_doctype: "Stock Entry",
+						target: frm,
+						date_field: "posting_date",
+						setters: {
+							stock_entry_type: "Material Transfer",
+							purpose: "Material Transfer",
+						},
+						get_query_filters: {
+							docstatus: 1,
+							purpose: "Material Transfer",
+							add_to_transit: 1,
+						},
+					});
+				},
+				__("Get Items From")
+			);
 		}
 	},
 
-	before_save: function(frm) {
+	before_save: function (frm) {
 		frm.doc.items.forEach((item) => {
 			item.uom = item.uom || item.stock_uom;
-		})
+		});
 	},
 
-	stock_entry_type: function(frm){
-		frm.remove_custom_button('Bill of Materials', "Get Items From");
+	stock_entry_type: function (frm) {
+		frm.remove_custom_button("Bill of Materials", "Get Items From");
 		frm.events.show_bom_custom_button(frm);
-		frm.trigger('add_to_transit');
+		frm.trigger("add_to_transit");
 
 		frm.fields_dict.items.grid.update_docfield_property(
-			'basic_rate', 'read_only', frm.doc.purpose == "Material Receipt" ? 0 : 1
+			"basic_rate",
+			"read_only",
+			frm.doc.purpose == "Material Receipt" ? 0 : 1
 		);
 	},
 
-	purpose: function(frm) {
-		frm.trigger('validate_purpose_consumption');
+	purpose: function (frm) {
+		frm.trigger("validate_purpose_consumption");
 		frm.fields_dict.items.grid.refresh();
 		frm.cscript.toggle_related_fields(frm.doc);
 	},
 
-	validate_purpose_consumption: function(frm) {
-		frappe.call({
-			method: "erpnext.manufacturing.doctype.manufacturing_settings.manufacturing_settings.is_material_consumption_enabled",
-		}).then(r => {
-			if (cint(r.message) == 0
-				&& frm.doc.purpose=="Material Consumption for Manufacture") {
-				frm.set_value("purpose", 'Manufacture');
-				frappe.throw(__('Material Consumption is not set in Manufacturing Settings.'));
-			}
-		});
+	validate_purpose_consumption: function (frm) {
+		frappe
+			.call({
+				method: "erpnext.manufacturing.doctype.manufacturing_settings.manufacturing_settings.is_material_consumption_enabled",
+			})
+			.then((r) => {
+				if (cint(r.message) == 0 && frm.doc.purpose == "Material Consumption for Manufacture") {
+					frm.set_value("purpose", "Manufacture");
+					frappe.throw(__("Material Consumption is not set in Manufacturing Settings."));
+				}
+			});
 	},
 
-	company: function(frm) {
-		if(frm.doc.company) {
+	company: function (frm) {
+		if (frm.doc.company) {
 			var company_doc = frappe.get_doc(":Company", frm.doc.company);
-			if(company_doc.default_letter_head) {
+			if (company_doc.default_letter_head) {
 				frm.set_value("letter_head", company_doc.default_letter_head);
 			}
 			frm.trigger("toggle_display_account_head");
@@ -434,83 +494,84 @@
 		}
 	},
 
-	make_retention_stock_entry: function(frm) {
+	make_retention_stock_entry: function (frm) {
 		frappe.call({
 			method: "erpnext.stock.doctype.stock_entry.stock_entry.move_sample_to_retention_warehouse",
-			args:{
-				"company": frm.doc.company,
-				"items": frm.doc.items
+			args: {
+				company: frm.doc.company,
+				items: frm.doc.items,
 			},
 			callback: function (r) {
 				if (r.message) {
 					var doc = frappe.model.sync(r.message)[0];
 					frappe.set_route("Form", doc.doctype, doc.name);
+				} else {
+					frappe.msgprint(
+						__("Retention Stock Entry already created or Sample Quantity not provided")
+					);
 				}
-				else {
-					frappe.msgprint(__("Retention Stock Entry already created or Sample Quantity not provided"));
-				}
-			}
+			},
 		});
 	},
 
-	toggle_display_account_head: function(frm) {
+	toggle_display_account_head: function (frm) {
 		var enabled = erpnext.is_perpetual_inventory_enabled(frm.doc.company);
 		frm.fields_dict["items"].grid.set_column_disp(["cost_center", "expense_account"], enabled);
 	},
 
-	set_basic_rate: function(frm, cdt, cdn) {
+	set_basic_rate: function (frm, cdt, cdn) {
 		const item = locals[cdt][cdn];
 		item.transfer_qty = flt(item.qty) * flt(item.conversion_factor);
 
 		const args = {
-			'item_code'			: item.item_code,
-			'posting_date'		: frm.doc.posting_date,
-			'posting_time'		: frm.doc.posting_time,
-			'warehouse'			: cstr(item.s_warehouse) || cstr(item.t_warehouse),
-			'serial_no'			: item.serial_no,
-			'batch_no'          : item.batch_no,
-			'company'			: frm.doc.company,
-			'qty'				: item.s_warehouse ? -1*flt(item.transfer_qty) : flt(item.transfer_qty),
-			'voucher_type'		: frm.doc.doctype,
-			'voucher_no'		: item.name,
-			'allow_zero_valuation': 1,
+			item_code: item.item_code,
+			posting_date: frm.doc.posting_date,
+			posting_time: frm.doc.posting_time,
+			warehouse: cstr(item.s_warehouse) || cstr(item.t_warehouse),
+			serial_no: item.serial_no,
+			batch_no: item.batch_no,
+			company: frm.doc.company,
+			qty: item.s_warehouse ? -1 * flt(item.transfer_qty) : flt(item.transfer_qty),
+			voucher_type: frm.doc.doctype,
+			voucher_no: item.name,
+			allow_zero_valuation: 1,
 		};
 
 		if (item.item_code || item.serial_no) {
 			frappe.call({
 				method: "erpnext.stock.utils.get_incoming_rate",
 				args: {
-					args: args
+					args: args,
 				},
-				callback: function(r) {
-					frappe.model.set_value(cdt, cdn, 'basic_rate', (r.message || 0.0));
+				callback: function (r) {
+					frappe.model.set_value(cdt, cdn, "basic_rate", r.message || 0.0);
 					frm.events.calculate_basic_amount(frm, item);
-				}
+				},
 			});
 		}
 	},
 
-	get_warehouse_details: function(frm, cdt, cdn) {
+	get_warehouse_details: function (frm, cdt, cdn) {
 		var child = locals[cdt][cdn];
-		if(!child.bom_no) {
+		if (!child.bom_no) {
 			frappe.call({
 				method: "erpnext.stock.doctype.stock_entry.stock_entry.get_warehouse_details",
 				args: {
-					"args": {
-						'item_code': child.item_code,
-						'warehouse': cstr(child.s_warehouse) || cstr(child.t_warehouse),
-						'transfer_qty': child.transfer_qty,
-						'serial_and_batch_bundle': child.serial_and_batch_bundle,
-						'qty': child.s_warehouse ? -1* child.transfer_qty : child.transfer_qty,
-						'posting_date': frm.doc.posting_date,
-						'posting_time': frm.doc.posting_time,
-						'company': frm.doc.company,
-						'voucher_type': frm.doc.doctype,
-						'voucher_no': child.name,
-						'allow_zero_valuation': 1
-					}
+					args: {
+						item_code: child.item_code,
+						warehouse: cstr(child.s_warehouse) || cstr(child.t_warehouse),
+						transfer_qty: child.transfer_qty,
+						serial_and_batch_bundle: child.serial_and_batch_bundle,
+						qty: child.s_warehouse ? -1 * child.transfer_qty : child.transfer_qty,
+						posting_date: frm.doc.posting_date,
+						posting_time: frm.doc.posting_time,
+						company: frm.doc.company,
+						voucher_type: frm.doc.doctype,
+						voucher_no: child.name,
+						allow_zero_valuation: 1,
+					},
 				},
-				callback: function(r) {
+				callback: function (r) {
 					if (!r.exc) {
 						let fields = ["actual_qty", "basic_rate"];
 						if (frm.doc.purpose == "Material Receipt") {
@@ -518,72 +579,97 @@
 						}
 
 						fields.forEach((field) => {
-							frappe.model.set_value(cdt, cdn, field, (r.message[field] || 0.0));
+							frappe.model.set_value(cdt, cdn, field, r.message[field] || 0.0);
 						});
 						frm.events.calculate_basic_amount(frm, child);
 					}
-				}
+				},
 			});
 		}
 	},
 
-	show_bom_custom_button: function(frm){
-		if (frm.doc.docstatus === 0 &&
-			['Material Issue', 'Material Receipt', 'Material Transfer', 'Send to Subcontractor'].includes(frm.doc.purpose)) {
-			frm.add_custom_button(__('Bill of Materials'), function() {
-				frm.events.get_items_from_bom(frm);
-			}, __("Get Items From"));
+	show_bom_custom_button: function (frm) {
+		if (
+			frm.doc.docstatus === 0 &&
+			["Material Issue", "Material Receipt", "Material Transfer", "Send to Subcontractor"].includes(
+				frm.doc.purpose
+			)
+		) {
+			frm.add_custom_button(
+				__("Bill of Materials"),
+				function () {
+					frm.events.get_items_from_bom(frm);
+				},
+				__("Get Items From")
+			);
 		}
 	},
 
-	get_items_from_bom: function(frm) {
-		let filters = function(){
-			return {filters: { docstatus:1 }};
-		}
+	get_items_from_bom: function (frm) {
+		let filters = function () {
+			return { filters: { docstatus: 1 } };
+		};
 
 		let fields = [
-			{"fieldname":"bom", "fieldtype":"Link", "label":__("BOM"),
-			options:"BOM", reqd: 1, get_query: () => {
-				return {filters: { docstatus:1, "is_active": 1 }};
-			}},
-			{"fieldname":"source_warehouse", "fieldtype":"Link", "label":__("Source Warehouse"),
-			options:"Warehouse"},
-			{"fieldname":"target_warehouse", "fieldtype":"Link", "label":__("Target Warehouse"),
-			options:"Warehouse"},
-			{"fieldname":"qty", "fieldtype":"Float", "label":__("Quantity"),
-			reqd: 1, "default": 1},
-			{"fieldname":"fetch_exploded", "fieldtype":"Check",
-			"label":__("Fetch exploded BOM (including sub-assemblies)"), "default":1},
-			{"fieldname":"fetch", "label":__("Get Items from BOM"), "fieldtype":"Button"}
-		]
+			{
+				fieldname: "bom",
+				fieldtype: "Link",
+				label: __("BOM"),
+				options: "BOM",
+				reqd: 1,
+				get_query: () => {
+					return { filters: { docstatus: 1, is_active: 1 } };
+				},
+			},
+			{
+				fieldname: "source_warehouse",
+				fieldtype: "Link",
+				label: __("Source Warehouse"),
+				options: "Warehouse",
+			},
+			{
+				fieldname: "target_warehouse",
+				fieldtype: "Link",
+				label: __("Target Warehouse"),
+				options: "Warehouse",
+			},
+			{ fieldname: "qty", fieldtype: "Float", label: __("Quantity"), reqd: 1, default: 1 },
+			{
+				fieldname: "fetch_exploded",
+				fieldtype: "Check",
+				label: __("Fetch exploded BOM (including sub-assemblies)"),
+				default: 1,
+			},
+			{ fieldname: "fetch", label: __("Get Items from BOM"), fieldtype: "Button" },
+		];
 
 		// Exclude field 'Target Warehouse' in case of Material Issue
-		if (frm.doc.purpose == 'Material Issue'){
-			fields.splice(2,1);
+		if (frm.doc.purpose == "Material Issue") {
+			fields.splice(2, 1);
 		}
 		// Exclude field 'Source Warehouse' in case of Material Receipt
-		else if(frm.doc.purpose == 'Material Receipt'){
-			fields.splice(1,1);
+		else if (frm.doc.purpose == "Material Receipt") {
+			fields.splice(1, 1);
 		}
 
 		let d = new frappe.ui.Dialog({
 			title: __("Get Items from BOM"),
-			fields: fields
+			fields: fields,
 		});
-		d.get_input("fetch").on("click", function() {
+		d.get_input("fetch").on("click", function () {
 			let values = d.get_values();
-			if(!values) return;
+			if (!values) return;
 			values["company"] = frm.doc.company;
-			if(!frm.doc.company) frappe.throw(__("Company field is required"));
+			if (!frm.doc.company) frappe.throw(__("Company field is required"));
 			frappe.call({
 				method: "erpnext.manufacturing.doctype.bom.bom.get_bom_items",
 				args: values,
-				callback: function(r) {
+				callback: function (r) {
 					if (!r.message) {
 						frappe.throw(__("BOM does not contain any stock item"));
 					} else {
 						erpnext.utils.remove_empty_first_row(frm, "items");
-						$.each(r.message, function(i, item) {
+						$.each(r.message, function (i, item) {
 							let d = frappe.model.add_child(cur_frm.doc, "Stock Entry Detail", "items");
 							d.item_code = item.item_code;
 							d.item_name = item.item_name;
@@ -601,65 +687,74 @@
 					}
 					d.hide();
 					refresh_field("items");
-				}
+				},
 			});
-
 		});
 		d.show();
 	},
 
-	calculate_basic_amount: function(frm, item) {
-		item.basic_amount = flt(flt(item.transfer_qty) * flt(item.basic_rate),
-			precision("basic_amount", item));
+	calculate_basic_amount: function (frm, item) {
+		item.basic_amount = flt(
+			flt(item.transfer_qty) * flt(item.basic_rate),
+			precision("basic_amount", item)
+		);
 		frm.events.calculate_total_additional_costs(frm);
 	},
 
-	calculate_total_additional_costs: function(frm) {
+	calculate_total_additional_costs: function (frm) {
 		const total_additional_costs = frappe.utils.sum(
-			(frm.doc.additional_costs || []).map(function(c) { return flt(c.base_amount); })
+			(frm.doc.additional_costs || []).map(function (c) {
+				return flt(c.base_amount);
+			})
 		);
 
-		frm.set_value("total_additional_costs",
-			flt(total_additional_costs, precision("total_additional_costs")));
+		frm.set_value(
+			"total_additional_costs",
+			flt(total_additional_costs, precision("total_additional_costs"))
+		);
 	},
 
-	source_warehouse_address: function(frm) {
-		erpnext.utils.get_address_display(frm, 'source_warehouse_address', 'source_address_display', false);
+	source_warehouse_address: function (frm) {
+		erpnext.utils.get_address_display(frm, "source_warehouse_address", "source_address_display", false);
 	},
 
-	target_warehouse_address: function(frm) {
-		erpnext.utils.get_address_display(frm, 'target_warehouse_address', 'target_address_display', false);
+	target_warehouse_address: function (frm) {
+		erpnext.utils.get_address_display(frm, "target_warehouse_address", "target_address_display", false);
 	},
 
-	add_to_transit: function(frm) {
-		if(frm.doc.purpose=='Material Transfer') {
+	add_to_transit: function (frm) {
+		if (frm.doc.purpose == "Material Transfer") {
 			var filters = {
-				'is_group': 0,
-				'company': frm.doc.company
+				is_group: 0,
+				company: frm.doc.company,
+			};
+
+			if (frm.doc.add_to_transit) {
+				filters["warehouse_type"] = "Transit";
+				frm.set_value("to_warehouse", "");
+				frm.trigger("set_transit_warehouse");
 			}
 
-			if(frm.doc.add_to_transit){
-				filters['warehouse_type'] = 'Transit';
-				frm.set_value('to_warehouse', '');
-				frm.trigger('set_transit_warehouse');
-			}
-
-			frm.fields_dict.to_warehouse.get_query = function() {
+			frm.fields_dict.to_warehouse.get_query = function () {
 				return {
-					filters:filters
+					filters: filters,
 				};
 			};
 		}
 	},
 
-	set_transit_warehouse: function(frm) {
-		if(frm.doc.add_to_transit && frm.doc.purpose == 'Material Transfer' && !frm.doc.to_warehouse
-			&& frm.doc.from_warehouse) {
-			let dt = frm.doc.from_warehouse ? 'Warehouse' : 'Company';
+	set_transit_warehouse: function (frm) {
+		if (
+			frm.doc.add_to_transit &&
+			frm.doc.purpose == "Material Transfer" &&
+			!frm.doc.to_warehouse &&
+			frm.doc.from_warehouse
+		) {
+			let dt = frm.doc.from_warehouse ? "Warehouse" : "Company";
 			let dn = frm.doc.from_warehouse ? frm.doc.from_warehouse : frm.doc.company;
-			frappe.db.get_value(dt, dn, 'default_in_transit_warehouse', (r) => {
+			frappe.db.get_value(dt, dn, "default_in_transit_warehouse", (r) => {
 				if (r.default_in_transit_warehouse) {
-					frm.set_value('to_warehouse', r.default_in_transit_warehouse);
+					frm.set_value("to_warehouse", r.default_in_transit_warehouse);
 				}
 			});
 		}
@@ -673,7 +768,7 @@
 		if (frm.doc.purchase_order) {
 			frm.set_value("subcontracting_order", "");
 			erpnext.utils.map_current_doc({
-				method: 'erpnext.stock.doctype.stock_entry.stock_entry.get_items_from_subcontract_order',
+				method: "erpnext.stock.doctype.stock_entry.stock_entry.get_items_from_subcontract_order",
 				source_name: frm.doc.purchase_order,
 				target_doc: frm,
 				freeze: true,
@@ -685,7 +780,7 @@
 		if (frm.doc.subcontracting_order) {
 			frm.set_value("purchase_order", "");
 			erpnext.utils.map_current_doc({
-				method: 'erpnext.stock.doctype.stock_entry.stock_entry.get_items_from_subcontract_order',
+				method: "erpnext.stock.doctype.stock_entry.stock_entry.get_items_from_subcontract_order",
 				source_name: frm.doc.subcontracting_order,
 				target_doc: frm,
 				freeze: true,
@@ -695,20 +790,26 @@
 
 	process_loss_qty(frm) {
 		if (frm.doc.process_loss_qty) {
-			frm.doc.process_loss_percentage = flt(frm.doc.process_loss_qty / frm.doc.fg_completed_qty * 100, precision("process_loss_qty", frm.doc));
+			frm.doc.process_loss_percentage = flt(
+				(frm.doc.process_loss_qty / frm.doc.fg_completed_qty) * 100,
+				precision("process_loss_qty", frm.doc)
+			);
 			refresh_field("process_loss_percentage");
 		}
 	},
 
 	process_loss_percentage(frm) {
 		if (frm.doc.process_loss_percentage) {
-			frm.doc.process_loss_qty = flt((frm.doc.fg_completed_qty * frm.doc.process_loss_percentage) / 100 , precision("process_loss_qty", frm.doc));
+			frm.doc.process_loss_qty = flt(
+				(frm.doc.fg_completed_qty * frm.doc.process_loss_percentage) / 100,
+				precision("process_loss_qty", frm.doc)
+			);
 			refresh_field("process_loss_qty");
 		}
-	}
+	},
 });
 
-frappe.ui.form.on('Stock Entry Detail', {
+frappe.ui.form.on("Stock Entry Detail", {
 	qty(frm, cdt, cdn) {
 		frm.events.set_basic_rate(frm, cdt, cdn);
 	},
@@ -738,50 +839,50 @@
 
 	uom(doc, cdt, cdn) {
 		var d = locals[cdt][cdn];
-		if(d.uom && d.item_code){
+		if (d.uom && d.item_code) {
 			return frappe.call({
 				method: "erpnext.stock.doctype.stock_entry.stock_entry.get_uom_details",
 				args: {
 					item_code: d.item_code,
 					uom: d.uom,
-					qty: d.qty
+					qty: d.qty,
 				},
-				callback: function(r) {
-					if(r.message) {
+				callback: function (r) {
+					if (r.message) {
 						frappe.model.set_value(cdt, cdn, r.message);
 					}
-				}
+				},
 			});
 		}
 	},
 
 	item_code(frm, cdt, cdn) {
 		var d = locals[cdt][cdn];
-		if(d.item_code) {
+		if (d.item_code) {
 			var args = {
-				'item_code'			: d.item_code,
-				'warehouse'			: cstr(d.s_warehouse) || cstr(d.t_warehouse),
-				'transfer_qty'		: d.transfer_qty,
-				'serial_no'		: d.serial_no,
-				'batch_no'      : d.batch_no,
-				'bom_no'		: d.bom_no,
-				'expense_account'	: d.expense_account,
-				'cost_center'		: d.cost_center,
-				'company'		: frm.doc.company,
-				'qty'			: d.qty,
-				'voucher_type'		: frm.doc.doctype,
-				'voucher_no'		: d.name,
-				'allow_zero_valuation': 1,
+				item_code: d.item_code,
+				warehouse: cstr(d.s_warehouse) || cstr(d.t_warehouse),
+				transfer_qty: d.transfer_qty,
+				serial_no: d.serial_no,
+				batch_no: d.batch_no,
+				bom_no: d.bom_no,
+				expense_account: d.expense_account,
+				cost_center: d.cost_center,
+				company: frm.doc.company,
+				qty: d.qty,
+				voucher_type: frm.doc.doctype,
+				voucher_no: d.name,
+				allow_zero_valuation: 1,
 			};
 
 			return frappe.call({
 				doc: frm.doc,
 				method: "get_item_details",
 				args: args,
-				callback: function(r) {
-					if(r.message) {
+				callback: function (r) {
+					if (r.message) {
 						var d = locals[cdt][cdn];
-						$.each(r.message, function(k, v) {
+						$.each(r.message, function (k, v) {
 							if (v) {
 								frappe.model.set_value(cdt, cdn, k, v); // qty and it's subsequent fields weren't triggered
 							}
@@ -793,14 +894,18 @@
 							no_batch_serial_number_value = true;
 						}
 
-						if (no_batch_serial_number_value && !frappe.flags.hide_serial_batch_dialog && !frappe.flags.dialog_set) {
+						if (
+							no_batch_serial_number_value &&
+							!frappe.flags.hide_serial_batch_dialog &&
+							!frappe.flags.dialog_set
+						) {
 							frappe.flags.dialog_set = true;
 							erpnext.stock.select_batch_and_serial_no(frm, d);
 						} else {
 							frappe.flags.dialog_set = false;
 						}
 					}
-				}
+				},
 			});
 		}
 	},
@@ -824,36 +929,35 @@
 	add_serial_batch_bundle(frm, cdt, cdn) {
 		var child = locals[cdt][cdn];
 		erpnext.stock.select_batch_and_serial_no(frm, child);
-	}
+	},
 });
 
-var validate_sample_quantity = function(frm, cdt, cdn) {
+var validate_sample_quantity = function (frm, cdt, cdn) {
 	var d = locals[cdt][cdn];
 	if (d.sample_quantity && frm.doc.purpose == "Material Receipt") {
 		frappe.call({
-			method: 'erpnext.stock.doctype.stock_entry.stock_entry.validate_sample_quantity',
+			method: "erpnext.stock.doctype.stock_entry.stock_entry.validate_sample_quantity",
 			args: {
 				batch_no: d.batch_no,
 				item_code: d.item_code,
 				sample_quantity: d.sample_quantity,
-				qty: d.transfer_qty
+				qty: d.transfer_qty,
 			},
 			callback: (r) => {
 				frappe.model.set_value(cdt, cdn, "sample_quantity", r.message);
-			}
+			},
 		});
 	}
 };
 
-frappe.ui.form.on('Landed Cost Taxes and Charges', {
-	amount: function(frm, cdt, cdn) {
+frappe.ui.form.on("Landed Cost Taxes and Charges", {
+	amount: function (frm, cdt, cdn) {
 		frm.events.set_base_amount(frm, cdt, cdn);
-
 	},
 
-	expense_account: function(frm, cdt, cdn) {
+	expense_account: function (frm, cdt, cdn) {
 		frm.events.set_account_currency(frm, cdt, cdn);
-	}
+	},
 });
 
 erpnext.stock.StockEntry = class StockEntry extends erpnext.stock.StockController {
@@ -862,69 +966,68 @@
 
 		this.setup_posting_date_time_check();
 
-		this.frm.fields_dict.bom_no.get_query = function() {
+		this.frm.fields_dict.bom_no.get_query = function () {
 			return {
-				filters:{
-					"docstatus": 1,
-					"is_active": 1
-				}
+				filters: {
+					docstatus: 1,
+					is_active: 1,
+				},
 			};
 		};
 
-		this.frm.fields_dict.items.grid.get_field('item_code').get_query = function() {
-			return erpnext.queries.item({is_stock_item: 1});
+		this.frm.fields_dict.items.grid.get_field("item_code").get_query = function () {
+			return erpnext.queries.item({ is_stock_item: 1 });
 		};
 
-		this.frm.set_query("purchase_order", function() {
+		this.frm.set_query("purchase_order", function () {
 			return {
-				"filters": {
-					"docstatus": 1,
-					"is_old_subcontracting_flow": 1,
-					"company": me.frm.doc.company
-				}
+				filters: {
+					docstatus: 1,
+					is_old_subcontracting_flow: 1,
+					company: me.frm.doc.company,
+				},
 			};
 		});
 
-		this.frm.set_query("subcontracting_order", function() {
+		this.frm.set_query("subcontracting_order", function () {
 			return {
-				"filters": {
-					"docstatus": 1,
-					"company": me.frm.doc.company,
-					"status": ["not in", ["Completed", "Closed"]]
-				}
+				filters: {
+					docstatus: 1,
+					company: me.frm.doc.company,
+					status: ["not in", ["Completed", "Closed"]],
+				},
 			};
 		});
 
-		if(me.frm.doc.company && erpnext.is_perpetual_inventory_enabled(me.frm.doc.company)) {
+		if (me.frm.doc.company && erpnext.is_perpetual_inventory_enabled(me.frm.doc.company)) {
 			this.frm.add_fetch("company", "stock_adjustment_account", "expense_account");
 		}
 
-		this.frm.fields_dict.items.grid.get_field('expense_account').get_query = function() {
+		this.frm.fields_dict.items.grid.get_field("expense_account").get_query = function () {
 			if (erpnext.is_perpetual_inventory_enabled(me.frm.doc.company)) {
 				return {
 					filters: {
-						"company": me.frm.doc.company,
-						"is_group": 0
-					}
-				}
+						company: me.frm.doc.company,
+						is_group: 0,
+					},
+				};
 			}
-		}
+		};
 
 		if (me.frm.doc.purchase_order) {
 			this.frm.add_fetch("purchase_order", "supplier", "supplier");
-		}
-		else {
+		} else {
 			this.frm.add_fetch("subcontracting_order", "supplier", "supplier");
 		}
 
-		frappe.dynamic_link = { doc: this.frm.doc, fieldname: 'supplier', doctype: 'Supplier' }
-		this.frm.set_query("supplier_address", erpnext.queries.address_query)
+		frappe.dynamic_link = { doc: this.frm.doc, fieldname: "supplier", doctype: "Supplier" };
+		this.frm.set_query("supplier_address", erpnext.queries.address_query);
 	}
 
 	onload_post_render() {
 		var me = this;
-		this.set_default_account(function() {
-			if(me.frm.doc.__islocal && me.frm.doc.company && !me.frm.doc.amended_from) {
+		this.set_default_account(function () {
+			if (me.frm.doc.__islocal && me.frm.doc.company && !me.frm.doc.amended_from) {
 				me.frm.trigger("company");
 			}
 		});
@@ -940,7 +1043,7 @@
 		this.show_stock_ledger();
 		this.set_fields_onload_for_line_item();
 		erpnext.utils.view_serial_batch_nos(this.frm);
-		if (this.frm.doc.docstatus===1 && erpnext.is_perpetual_inventory_enabled(this.frm.doc.company)) {
+		if (this.frm.doc.docstatus === 1 && erpnext.is_perpetual_inventory_enabled(this.frm.doc.company)) {
 			this.show_general_ledger();
 		}
 		erpnext.hide_company(this.frm);
@@ -952,7 +1055,7 @@
 
 		if (item?.serial_no) {
 			// Replace all occurences of comma with line feed
-			item.serial_no = item.serial_no.replace(/,/g, '\n');
+			item.serial_no = item.serial_no.replace(/,/g, "\n");
 			item.conversion_factor = item.conversion_factor || 1;
 
 			let valid_serial_nos = [];
@@ -962,23 +1065,30 @@
 					valid_serial_nos.push(serialnos[i]);
 				}
 			}
-			frappe.model.set_value(item.doctype, item.name,
-				"qty", valid_serial_nos.length / item.conversion_factor);
+			frappe.model.set_value(
+				item.doctype,
+				item.name,
+				"qty",
+				valid_serial_nos.length / item.conversion_factor
+			);
 		}
 	}
 
 	set_fields_onload_for_line_item() {
-		if (this.frm.is_new() && this.frm.doc?.items
-			&& cint(frappe.user_defaults?.use_serial_batch_fields) === 1) {
-			this.frm.doc.items.forEach(item => {
+		if (
+			this.frm.is_new() &&
+			this.frm.doc?.items &&
+			cint(frappe.user_defaults?.use_serial_batch_fields) === 1
+		) {
+			this.frm.doc.items.forEach((item) => {
 				frappe.model.set_value(item.doctype, item.name, "use_serial_batch_fields", 1);
-			})
+			});
 		}
 	}
 
 	scan_barcode() {
 		frappe.flags.dialog_set = false;
-		const barcode_scanner = new erpnext.utils.BarcodeScanner({frm:this.frm});
+		const barcode_scanner = new erpnext.utils.BarcodeScanner({ frm: this.frm });
 		barcode_scanner.process_scan();
 	}
 
@@ -993,32 +1103,35 @@
 	set_default_account(callback) {
 		var me = this;
 
-		if(this.frm.doc.company && erpnext.is_perpetual_inventory_enabled(this.frm.doc.company)) {
+		if (this.frm.doc.company && erpnext.is_perpetual_inventory_enabled(this.frm.doc.company)) {
 			return this.frm.call({
 				method: "erpnext.accounts.utils.get_company_default",
 				args: {
-					"fieldname": "stock_adjustment_account",
-					"company": this.frm.doc.company
+					fieldname: "stock_adjustment_account",
+					company: this.frm.doc.company,
 				},
-				callback: function(r) {
+				callback: function (r) {
 					if (!r.exc) {
-						$.each(me.frm.doc.items || [], function(i, d) {
-							if(!d.expense_account) d.expense_account = r.message;
+						$.each(me.frm.doc.items || [], function (i, d) {
+							if (!d.expense_account) d.expense_account = r.message;
 						});
-						if(callback) callback();
+						if (callback) callback();
 					}
-				}
+				},
 			});
 		}
 	}
 
 	clean_up() {
 		// Clear Work Order record from locals, because it is updated via Stock Entry
-		if(this.frm.doc.work_order &&
-			in_list(["Manufacture", "Material Transfer for Manufacture", "Material Consumption for Manufacture"],
-				this.frm.doc.purpose)) {
-			frappe.model.remove_from_locals("Work Order",
-				this.frm.doc.work_order);
+		if (
+			this.frm.doc.work_order &&
+			in_list(
+				["Manufacture", "Material Transfer for Manufacture", "Material Consumption for Manufacture"],
+				this.frm.doc.purpose
+			)
+		) {
+			frappe.model.remove_from_locals("Work Order", this.frm.doc.work_order);
 		}
 	}
 
@@ -1028,22 +1141,22 @@
 
 	get_items() {
 		var me = this;
-		if(!this.frm.doc.fg_completed_qty || !this.frm.doc.bom_no)
+		if (!this.frm.doc.fg_completed_qty || !this.frm.doc.bom_no)
 			frappe.throw(__("BOM and Manufacturing Quantity are required"));
 
-		if(this.frm.doc.work_order || this.frm.doc.bom_no) {
+		if (this.frm.doc.work_order || this.frm.doc.bom_no) {
 			// if work order / bom is mentioned, get items
 			return this.frm.call({
 				doc: me.frm.doc,
 				freeze: true,
 				method: "get_items",
-				callback: function(r) {
-					if(!r.exc) refresh_field("items");
-					if(me.frm.doc.bom_no) {
+				callback: function (r) {
+					if (!r.exc) refresh_field("items");
+					if (me.frm.doc.bom_no) {
 						attach_bom_items(me.frm.doc.bom_no);
 						erpnext.accounts.dimensions.update_dimension(me.frm, me.frm.doctype);
 					}
-				}
+				},
 			});
 		}
 	}
@@ -1051,7 +1164,7 @@
 	work_order() {
 		var me = this;
 		this.toggle_enable_bom();
-		if(!me.frm.doc.work_order || me.frm.doc.job_card) {
+		if (!me.frm.doc.work_order || me.frm.doc.job_card) {
 			return;
 		}
 
@@ -1059,27 +1172,34 @@
 			method: "erpnext.stock.doctype.stock_entry.stock_entry.get_work_order_details",
 			args: {
 				work_order: me.frm.doc.work_order,
-				company: me.frm.doc.company
+				company: me.frm.doc.company,
 			},
-			callback: function(r) {
+			callback: function (r) {
 				if (!r.exc) {
-					$.each(["from_bom", "bom_no", "fg_completed_qty", "use_multi_level_bom"], function(i, field) {
-						me.frm.set_value(field, r.message[field]);
-					})
+					$.each(
+						["from_bom", "bom_no", "fg_completed_qty", "use_multi_level_bom"],
+						function (i, field) {
+							me.frm.set_value(field, r.message[field]);
+						}
+					);
 
 					if (me.frm.doc.purpose == "Material Transfer for Manufacture" && !me.frm.doc.to_warehouse)
 						me.frm.set_value("to_warehouse", r.message["wip_warehouse"]);
 
-
-					if (me.frm.doc.purpose == "Manufacture" || me.frm.doc.purpose == "Material Consumption for Manufacture" ) {
+					if (
+						me.frm.doc.purpose == "Manufacture" ||
+						me.frm.doc.purpose == "Material Consumption for Manufacture"
+					) {
 						if (me.frm.doc.purpose == "Manufacture") {
-							if (!me.frm.doc.to_warehouse) me.frm.set_value("to_warehouse", r.message["fg_warehouse"]);
+							if (!me.frm.doc.to_warehouse)
+								me.frm.set_value("to_warehouse", r.message["fg_warehouse"]);
 						}
-						if (!me.frm.doc.from_warehouse) me.frm.set_value("from_warehouse", r.message["wip_warehouse"]);
+						if (!me.frm.doc.from_warehouse)
+							me.frm.set_value("from_warehouse", r.message["wip_warehouse"]);
 					}
 					me.get_items();
 				}
-			}
+			},
 		});
 	}
 
@@ -1088,13 +1208,17 @@
 	}
 
 	add_excise_button() {
-		if(frappe.boot.sysdefaults.country === "India")
-			this.frm.add_custom_button(__("Excise Invoice"), function() {
-				var excise = frappe.model.make_new_doc_and_get_name('Journal Entry');
-				excise = locals['Journal Entry'][excise];
-				excise.voucher_type = 'Excise Entry';
-				frappe.set_route('Form', 'Journal Entry', excise.name);
-			}, __('Create'));
+		if (frappe.boot.sysdefaults.country === "India")
+			this.frm.add_custom_button(
+				__("Excise Invoice"),
+				function () {
+					var excise = frappe.model.make_new_doc_and_get_name("Journal Entry");
+					excise = locals["Journal Entry"][excise];
+					excise.voucher_type = "Excise Entry";
+					frappe.set_route("Form", "Journal Entry", excise.name);
+				},
+				__("Create")
+			);
 	}
 
 	items_add(doc, cdt, cdn) {
@@ -1104,8 +1228,8 @@
 			this.frm.script_manager.copy_from_first_row("items", row, ["expense_account", "cost_center"]);
 		}
 
-		if(!row.s_warehouse) row.s_warehouse = this.frm.doc.from_warehouse;
-		if(!row.t_warehouse) row.t_warehouse = this.frm.doc.to_warehouse;
+		if (!row.s_warehouse) row.s_warehouse = this.frm.doc.from_warehouse;
+		if (!row.t_warehouse) row.t_warehouse = this.frm.doc.to_warehouse;
 
 		if (cint(frappe.user_defaults?.use_serial_batch_fields)) {
 			frappe.model.set_value(row.doctype, row.name, "use_serial_batch_fields", 1);
@@ -1113,7 +1237,7 @@
 	}
 
 	from_warehouse(doc) {
-		this.frm.trigger('set_transit_warehouse');
+		this.frm.trigger("set_transit_warehouse");
 		this.set_warehouse_in_children(doc.items, "s_warehouse", doc.from_warehouse);
 	}
 
@@ -1131,32 +1255,54 @@
 	}
 
 	toggle_related_fields(doc) {
-		this.frm.toggle_enable("from_warehouse", doc.purpose!='Material Receipt');
-		this.frm.toggle_enable("to_warehouse", doc.purpose!='Material Issue');
+		this.frm.toggle_enable("from_warehouse", doc.purpose != "Material Receipt");
+		this.frm.toggle_enable("to_warehouse", doc.purpose != "Material Issue");
 
-		this.frm.fields_dict["items"].grid.set_column_disp("retain_sample", doc.purpose=='Material Receipt');
-		this.frm.fields_dict["items"].grid.set_column_disp("sample_quantity", doc.purpose=='Material Receipt');
+		this.frm.fields_dict["items"].grid.set_column_disp(
+			"retain_sample",
+			doc.purpose == "Material Receipt"
+		);
+		this.frm.fields_dict["items"].grid.set_column_disp(
+			"sample_quantity",
+			doc.purpose == "Material Receipt"
+		);
 
 		this.frm.cscript.toggle_enable_bom();
 
-		if (doc.purpose == 'Send to Subcontractor') {
-			doc.customer = doc.customer_name = doc.customer_address =
-				doc.delivery_note_no = doc.sales_invoice_no = null;
+		if (doc.purpose == "Send to Subcontractor") {
+			doc.customer =
+				doc.customer_name =
+				doc.customer_address =
+				doc.delivery_note_no =
+				doc.sales_invoice_no =
+					null;
 		} else {
-			doc.customer = doc.customer_name = doc.customer_address =
-				doc.delivery_note_no = doc.sales_invoice_no = doc.supplier =
-				doc.supplier_name = doc.supplier_address = doc.purchase_receipt_no =
-				doc.address_display = null;
+			doc.customer =
+				doc.customer_name =
+				doc.customer_address =
+				doc.delivery_note_no =
+				doc.sales_invoice_no =
+				doc.supplier =
+				doc.supplier_name =
+				doc.supplier_address =
+				doc.purchase_receipt_no =
+				doc.address_display =
+					null;
 		}
-		if(doc.purpose == "Material Receipt") {
+		if (doc.purpose == "Material Receipt") {
 			this.frm.set_value("from_bom", 0);
 		}
 
 		// Addition costs based on purpose
-		this.frm.toggle_display(["additional_costs", "total_additional_costs", "additional_costs_section"],
-			doc.purpose!='Material Issue');
+		this.frm.toggle_display(
+			["additional_costs", "total_additional_costs", "additional_costs_section"],
+			doc.purpose != "Material Issue"
+		);
 
-		this.frm.fields_dict["items"].grid.set_column_disp("additional_cost", doc.purpose!='Material Issue');
+		this.frm.fields_dict["items"].grid.set_column_disp(
+			"additional_cost",
+			doc.purpose != "Material Issue"
+		);
 	}
 
 	supplier(doc) {
@@ -1167,50 +1313,46 @@
 erpnext.stock.select_batch_and_serial_no = (frm, item) => {
 	let path = "assets/erpnext/js/utils/serial_no_batch_selector.js";
 
-	frappe.db.get_value("Item", item.item_code, ["has_batch_no", "has_serial_no"])
-		.then((r) => {
-			if (r.message && (r.message.has_batch_no || r.message.has_serial_no)) {
-				item.has_serial_no = r.message.has_serial_no;
-				item.has_batch_no = r.message.has_batch_no;
-				item.type_of_transaction = item.s_warehouse ? "Outward" : "Inward";
+	frappe.db.get_value("Item", item.item_code, ["has_batch_no", "has_serial_no"]).then((r) => {
+		if (r.message && (r.message.has_batch_no || r.message.has_serial_no)) {
+			item.has_serial_no = r.message.has_serial_no;
+			item.has_batch_no = r.message.has_batch_no;
+			item.type_of_transaction = item.s_warehouse ? "Outward" : "Inward";
 
-				frappe.require(path, function() {
-					new erpnext.SerialBatchPackageSelector(
-						frm, item, (r) => {
-							if (r) {
-								frappe.model.set_value(item.doctype, item.name, {
-									"serial_and_batch_bundle": r.name,
-									"use_serial_batch_fields": 0,
-									"qty": Math.abs(r.total_qty) / flt(item.conversion_factor || 1, precision("conversion_factor", item))
-								});
-							}
-						}
-					);
+			frappe.require(path, function () {
+				new erpnext.SerialBatchPackageSelector(frm, item, (r) => {
+					if (r) {
+						frappe.model.set_value(item.doctype, item.name, {
+							serial_and_batch_bundle: r.name,
+							use_serial_batch_fields: 0,
+							qty:
+								Math.abs(r.total_qty) /
+								flt(item.conversion_factor || 1, precision("conversion_factor", item)),
+						});
+					}
 				});
-			}
-		});
-}
+			});
+		}
+	});
+};
 
 function attach_bom_items(bom_no) {
 	if (!bom_no) {
-		return
+		return;
 	}
 
-	if (check_should_not_attach_bom_items(bom_no)) return
-	frappe.db.get_doc("BOM",bom_no).then(bom => {
-		const {name, items} = bom
-		erpnext.stock.bom = {name, items:{}}
-		items.forEach(item => {
+	if (check_should_not_attach_bom_items(bom_no)) return;
+	frappe.db.get_doc("BOM", bom_no).then((bom) => {
+		const { name, items } = bom;
+		erpnext.stock.bom = { name, items: {} };
+		items.forEach((item) => {
 			erpnext.stock.bom.items[item.item_code] = item;
 		});
 	});
 }
 
 function check_should_not_attach_bom_items(bom_no) {
-  return (
-	bom_no === undefined ||
-	(erpnext.stock.bom && erpnext.stock.bom.name === bom_no)
-  );
+	return bom_no === undefined || (erpnext.stock.bom && erpnext.stock.bom.name === bom_no);
 }
 
-extend_cscript(cur_frm.cscript, new erpnext.stock.StockEntry({frm: cur_frm}));
+extend_cscript(cur_frm.cscript, new erpnext.stock.StockEntry({ frm: cur_frm }));
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry_list.js b/erpnext/stock/doctype/stock_entry/stock_entry_list.js
index af29d49..8a1c808 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry_list.js
+++ b/erpnext/stock/doctype/stock_entry/stock_entry_list.js
@@ -1,19 +1,25 @@
-frappe.listview_settings['Stock Entry'] = {
-	add_fields: ["`tabStock Entry`.`from_warehouse`", "`tabStock Entry`.`to_warehouse`",
-		"`tabStock Entry`.`purpose`", "`tabStock Entry`.`work_order`", "`tabStock Entry`.`bom_no`",
-		"`tabStock Entry`.`is_return`"],
+frappe.listview_settings["Stock Entry"] = {
+	add_fields: [
+		"`tabStock Entry`.`from_warehouse`",
+		"`tabStock Entry`.`to_warehouse`",
+		"`tabStock Entry`.`purpose`",
+		"`tabStock Entry`.`work_order`",
+		"`tabStock Entry`.`bom_no`",
+		"`tabStock Entry`.`is_return`",
+	],
 	get_indicator: function (doc) {
-		if(doc.is_return===1 && doc.purpose === "Material Transfer for Manufacture") {
-			return [__("Material Returned from WIP"), "orange",
-				"is_return,=,1|purpose,=,Material Transfer for Manufacture|docstatus,<,2"];
+		if (doc.is_return === 1 && doc.purpose === "Material Transfer for Manufacture") {
+			return [
+				__("Material Returned from WIP"),
+				"orange",
+				"is_return,=,1|purpose,=,Material Transfer for Manufacture|docstatus,<,2",
+			];
 		} else if (doc.docstatus === 0) {
 			return [__("Draft"), "red", "docstatus,=,0"];
-
-		} else if (doc.purpose === 'Send to Warehouse' && doc.per_transferred < 100) {
+		} else if (doc.purpose === "Send to Warehouse" && doc.per_transferred < 100) {
 			// not delivered & overdue
 			return [__("Goods In Transit"), "grey", "per_transferred,<,100"];
-
-		} else if (doc.purpose === 'Send to Warehouse' && doc.per_transferred === 100) {
+		} else if (doc.purpose === "Send to Warehouse" && doc.per_transferred === 100) {
 			return [__("Goods Transferred"), "green", "per_transferred,=,100"];
 		} else if (doc.docstatus === 2) {
 			return [__("Canceled"), "red", "docstatus,=,2"];
@@ -22,21 +28,30 @@
 		}
 	},
 	column_render: {
-		"from_warehouse": function(doc) {
+		from_warehouse: function (doc) {
 			var html = "";
-			if(doc.from_warehouse) {
-				html += '<span class="filterable h6"\
-					data-filter="from_warehouse,=,'+doc.from_warehouse+'">'
-						+doc.from_warehouse+' </span>';
+			if (doc.from_warehouse) {
+				html +=
+					'<span class="filterable h6"\
+					data-filter="from_warehouse,=,' +
+					doc.from_warehouse +
+					'">' +
+					doc.from_warehouse +
+					" </span>";
 			}
 			// if(doc.from_warehouse || doc.to_warehouse) {
 			// 	html += '<i class="fa fa-arrow-right text-muted"></i> ';
 			// }
-			if(doc.to_warehouse) {
-				html += '<span class="filterable h6"\
-				data-filter="to_warehouse,=,'+doc.to_warehouse+'">'+doc.to_warehouse+'</span>';
+			if (doc.to_warehouse) {
+				html +=
+					'<span class="filterable h6"\
+				data-filter="to_warehouse,=,' +
+					doc.to_warehouse +
+					'">' +
+					doc.to_warehouse +
+					"</span>";
 			}
 			return html;
-		}
-	}
+		},
+	},
 };
diff --git a/erpnext/stock/doctype/stock_entry_type/stock_entry_type.js b/erpnext/stock/doctype/stock_entry_type/stock_entry_type.js
index c554278..21e60fb 100644
--- a/erpnext/stock/doctype/stock_entry_type/stock_entry_type.js
+++ b/erpnext/stock/doctype/stock_entry_type/stock_entry_type.js
@@ -1,8 +1,7 @@
 // Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Stock Entry Type', {
+frappe.ui.form.on("Stock Entry Type", {
 	// refresh: function(frm) {
-
 	// }
 });
diff --git a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.js b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.js
index 23018aa..7196dc9 100644
--- a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.js
+++ b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.js
@@ -1,8 +1,8 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Stock Ledger Entry', {
-	refresh: function(frm) {
-		frm.page.btn_secondary.hide()
-	}
+frappe.ui.form.on("Stock Ledger Entry", {
+	refresh: function (frm) {
+		frm.page.btn_secondary.hide();
+	},
 });
diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js
index ba7f9c5..4a85360 100644
--- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js
+++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js
@@ -6,27 +6,27 @@
 
 frappe.ui.form.on("Stock Reconciliation", {
 	setup(frm) {
-		frm.ignore_doctypes_on_cancel_all = ['Serial and Batch Bundle'];
+		frm.ignore_doctypes_on_cancel_all = ["Serial and Batch Bundle"];
 	},
 
-	onload: function(frm) {
+	onload: function (frm) {
 		frm.add_fetch("item_code", "item_name", "item_name");
 
 		// end of life
-		frm.set_query("item_code", "items", function(doc, cdt, cdn) {
+		frm.set_query("item_code", "items", function (doc, cdt, cdn) {
 			return {
 				query: "erpnext.controllers.queries.item_query",
-				filters:{
-					"is_stock_item": 1
-				}
-			}
+				filters: {
+					is_stock_item: 1,
+				},
+			};
 		});
-		frm.set_query("batch_no", "items", function(doc, cdt, cdn) {
+		frm.set_query("batch_no", "items", function (doc, cdt, cdn) {
 			var item = locals[cdt][cdn];
 			return {
 				filters: {
-					'item': item.item_code
-				}
+					item: item.item_code,
+				},
 			};
 		});
 
@@ -34,27 +34,27 @@
 			let row = locals[cdt][cdn];
 			return {
 				filters: {
-					'item_code': row.item_code,
-					'voucher_type': doc.doctype,
-					'voucher_no': ["in", [doc.name, ""]],
-					'is_cancelled': 0,
-				}
-			}
+					item_code: row.item_code,
+					voucher_type: doc.doctype,
+					voucher_no: ["in", [doc.name, ""]],
+					is_cancelled: 0,
+				},
+			};
 		});
 
-		let sbb_field = frm.get_docfield('items', 'serial_and_batch_bundle');
+		let sbb_field = frm.get_docfield("items", "serial_and_batch_bundle");
 		if (sbb_field) {
 			sbb_field.get_route_options_for_new_doc = (row) => {
 				return {
-					'item_code': row.doc.item_code,
-					'warehouse': row.doc.warehouse,
-					'voucher_type': frm.doc.doctype,
-				}
+					item_code: row.doc.item_code,
+					warehouse: row.doc.warehouse,
+					voucher_type: frm.doc.doctype,
+				};
 			};
 		}
 
 		if (frm.doc.company) {
-			erpnext.queries.setup_queries(frm, "Warehouse", function() {
+			erpnext.queries.setup_queries(frm, "Warehouse", function () {
 				return erpnext.queries.warehouse(frm.doc);
 			});
 		}
@@ -66,57 +66,57 @@
 		erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype);
 	},
 
-	company: function(frm) {
+	company: function (frm) {
 		frm.trigger("toggle_display_account_head");
 		erpnext.accounts.dimensions.update_dimension(frm, frm.doctype);
 	},
 
-	refresh: function(frm) {
-		if(frm.doc.docstatus < 1) {
-			frm.add_custom_button(__("Fetch Items from Warehouse"), function() {
+	refresh: function (frm) {
+		if (frm.doc.docstatus < 1) {
+			frm.add_custom_button(__("Fetch Items from Warehouse"), function () {
 				frm.events.get_items(frm);
 			});
 		}
 
-		if(frm.doc.company) {
+		if (frm.doc.company) {
 			frm.trigger("toggle_display_account_head");
 		}
 	},
 
-	scan_barcode: function(frm) {
-		const barcode_scanner = new erpnext.utils.BarcodeScanner({frm:frm});
+	scan_barcode: function (frm) {
+		const barcode_scanner = new erpnext.utils.BarcodeScanner({ frm: frm });
 		barcode_scanner.process_scan();
 	},
 
-	scan_mode: function(frm) {
+	scan_mode: function (frm) {
 		if (frm.doc.scan_mode) {
 			frappe.show_alert({
 				message: __("Scan mode enabled, existing quantity will not be fetched."),
-				indicator: "green"
+				indicator: "green",
 			});
 		}
 	},
 
-	set_warehouse: function(frm) {
-		let transaction_controller = new erpnext.TransactionController({frm:frm});
+	set_warehouse: function (frm) {
+		let transaction_controller = new erpnext.TransactionController({ frm: frm });
 		transaction_controller.autofill_warehouse(frm.doc.items, "warehouse", frm.doc.set_warehouse);
 	},
 
-	get_items: function(frm) {
+	get_items: function (frm) {
 		let fields = [
 			{
-				label: 'Warehouse',
-				fieldname: 'warehouse',
-				fieldtype: 'Link',
-				options: 'Warehouse',
+				label: "Warehouse",
+				fieldname: "warehouse",
+				fieldtype: "Link",
+				options: "Warehouse",
 				reqd: 1,
-				"get_query": function() {
+				get_query: function () {
 					return {
-						"filters": {
-							"company": frm.doc.company,
-						}
+						filters: {
+							company: frm.doc.company,
+						},
 					};
-				}
+				},
 			},
 			{
 				label: "Item Code",
@@ -127,57 +127,62 @@
 			{
 				label: __("Ignore Empty Stock"),
 				fieldname: "ignore_empty_stock",
-				fieldtype: "Check"
-			}
+				fieldtype: "Check",
+			},
 		];
 
-		frappe.prompt(fields, function(data) {
-			frappe.call({
-				method: "erpnext.stock.doctype.stock_reconciliation.stock_reconciliation.get_items",
-				args: {
-					warehouse: data.warehouse,
-					posting_date: frm.doc.posting_date,
-					posting_time: frm.doc.posting_time,
-					company: frm.doc.company,
-					item_code: data.item_code,
-					ignore_empty_stock: data.ignore_empty_stock
-				},
-				callback: function(r) {
-					if (r.exc || !r.message || !r.message.length) return;
+		frappe.prompt(
+			fields,
+			function (data) {
+				frappe.call({
+					method: "erpnext.stock.doctype.stock_reconciliation.stock_reconciliation.get_items",
+					args: {
+						warehouse: data.warehouse,
+						posting_date: frm.doc.posting_date,
+						posting_time: frm.doc.posting_time,
+						company: frm.doc.company,
+						item_code: data.item_code,
+						ignore_empty_stock: data.ignore_empty_stock,
+					},
+					callback: function (r) {
+						if (r.exc || !r.message || !r.message.length) return;
 
-					frm.clear_table("items");
+						frm.clear_table("items");
 
-					r.message.forEach((row) => {
-						let item = frm.add_child("items");
-						$.extend(item, row);
+						r.message.forEach((row) => {
+							let item = frm.add_child("items");
+							$.extend(item, row);
 
-						item.qty = item.qty || 0;
-						item.valuation_rate = item.valuation_rate || 0;
-					});
-					frm.refresh_field("items");
-				}
-			});
-		}, __("Get Items"), __("Update"));
+							item.qty = item.qty || 0;
+							item.valuation_rate = item.valuation_rate || 0;
+						});
+						frm.refresh_field("items");
+					},
+				});
+			},
+			__("Get Items"),
+			__("Update")
+		);
 	},
 
-	posting_date: function(frm) {
+	posting_date: function (frm) {
 		frm.trigger("set_valuation_rate_and_qty_for_all_items");
 	},
 
-	posting_time: function(frm) {
+	posting_time: function (frm) {
 		frm.trigger("set_valuation_rate_and_qty_for_all_items");
 	},
 
-	set_valuation_rate_and_qty_for_all_items: function(frm) {
-		frm.doc.items.forEach(row => {
+	set_valuation_rate_and_qty_for_all_items: function (frm) {
+		frm.doc.items.forEach((row) => {
 			frm.events.set_valuation_rate_and_qty(frm, row.doctype, row.name);
 		});
 	},
 
-	set_valuation_rate_and_qty: function(frm, cdt, cdn) {
+	set_valuation_rate_and_qty: function (frm, cdt, cdn) {
 		var d = frappe.model.get_doc(cdt, cdn);
 
-		if(d.item_code && d.warehouse) {
+		if (d.item_code && d.warehouse) {
 			frappe.call({
 				method: "erpnext.stock.doctype.stock_reconciliation.stock_reconciliation.get_stock_balance_for",
 				args: {
@@ -185,9 +190,9 @@
 					warehouse: d.warehouse,
 					posting_date: frm.doc.posting_date,
 					posting_time: frm.doc.posting_time,
-					batch_no: d.batch_no
+					batch_no: d.batch_no,
 				},
-				callback: function(r) {
+				callback: function (r) {
 					const row = frappe.model.get_doc(cdt, cdn);
 					if (!frm.doc.scan_mode) {
 						frappe.model.set_value(cdt, cdn, "qty", r.message.qty);
@@ -198,17 +203,22 @@
 					frappe.model.set_value(cdt, cdn, "current_amount", r.message.rate * r.message.qty);
 					frappe.model.set_value(cdt, cdn, "amount", row.qty * row.valuation_rate);
 					frappe.model.set_value(cdt, cdn, "current_serial_no", r.message.serial_nos);
-					frappe.model.set_value(cdt, cdn, "use_serial_batch_fields", r.message.use_serial_batch_fields);
+					frappe.model.set_value(
+						cdt,
+						cdn,
+						"use_serial_batch_fields",
+						r.message.use_serial_batch_fields
+					);
 
 					if (frm.doc.purpose == "Stock Reconciliation" && !frm.doc.scan_mode) {
 						frappe.model.set_value(cdt, cdn, "serial_no", r.message.serial_nos);
 					}
-				}
+				},
 			});
 		}
 	},
 
-	set_amount_quantity: function(doc, cdt, cdn) {
+	set_amount_quantity: function (doc, cdt, cdn) {
 		var d = frappe.model.get_doc(cdt, cdn);
 		if (d.qty && d.valuation_rate) {
 			frappe.model.set_value(cdt, cdn, "amount", flt(d.qty) * flt(d.valuation_rate));
@@ -216,34 +226,35 @@
 			frappe.model.set_value(cdt, cdn, "amount_difference", flt(d.amount) - flt(d.current_amount));
 		}
 	},
-	toggle_display_account_head: function(frm) {
-		frm.toggle_display(['expense_account', 'cost_center'],
-			erpnext.is_perpetual_inventory_enabled(frm.doc.company));
+	toggle_display_account_head: function (frm) {
+		frm.toggle_display(
+			["expense_account", "cost_center"],
+			erpnext.is_perpetual_inventory_enabled(frm.doc.company)
+		);
 	},
-	purpose: function(frm) {
+	purpose: function (frm) {
 		frm.trigger("set_expense_account");
 	},
-	set_expense_account: function(frm) {
+	set_expense_account: function (frm) {
 		if (frm.doc.company && erpnext.is_perpetual_inventory_enabled(frm.doc.company)) {
 			return frm.call({
 				method: "erpnext.stock.doctype.stock_reconciliation.stock_reconciliation.get_difference_account",
 				args: {
-					"purpose": frm.doc.purpose,
-					"company": frm.doc.company
+					purpose: frm.doc.purpose,
+					company: frm.doc.company,
 				},
-				callback: function(r) {
+				callback: function (r) {
 					if (!r.exc) {
 						frm.set_value("expense_account", r.message);
 					}
-				}
+				},
 			});
 		}
-	}
+	},
 });
 
 frappe.ui.form.on("Stock Reconciliation Item", {
-
-	warehouse: function(frm, cdt, cdn) {
+	warehouse: function (frm, cdt, cdn) {
 		var child = locals[cdt][cdn];
 		if (child.batch_no && !frm.doc.scan_mode) {
 			frappe.model.set_value(child.cdt, child.cdn, "batch_no", "");
@@ -252,7 +263,7 @@
 		frm.events.set_valuation_rate_and_qty(frm, cdt, cdn);
 	},
 
-	item_code: function(frm, cdt, cdn) {
+	item_code: function (frm, cdt, cdn) {
 		var child = locals[cdt][cdn];
 		if (child.batch_no && !frm.doc.scan_mode) {
 			frappe.model.set_value(cdt, cdn, "batch_no", "");
@@ -261,28 +272,28 @@
 		frm.events.set_valuation_rate_and_qty(frm, cdt, cdn);
 	},
 
-	batch_no: function(frm, cdt, cdn) {
+	batch_no: function (frm, cdt, cdn) {
 		frm.events.set_valuation_rate_and_qty(frm, cdt, cdn);
 	},
 
-	qty: function(frm, cdt, cdn) {
+	qty: function (frm, cdt, cdn) {
 		frm.events.set_amount_quantity(frm, cdt, cdn);
 	},
 
-	valuation_rate: function(frm, cdt, cdn) {
+	valuation_rate: function (frm, cdt, cdn) {
 		frm.events.set_amount_quantity(frm, cdt, cdn);
 	},
 
-	serial_no: function(frm, cdt, cdn) {
+	serial_no: function (frm, cdt, cdn) {
 		var child = locals[cdt][cdn];
 
 		if (child.serial_no) {
-			const serial_nos = child.serial_no.trim().split('\n');
+			const serial_nos = child.serial_no.trim().split("\n");
 			frappe.model.set_value(cdt, cdn, "qty", serial_nos.length);
 		}
 	},
 
-	items_add: function(frm, cdt, cdn) {
+	items_add: function (frm, cdt, cdn) {
 		var item = frappe.get_doc(cdt, cdn);
 		if (!item.warehouse && frm.doc.set_warehouse) {
 			frappe.model.set_value(cdt, cdn, "warehouse", frm.doc.set_warehouse);
@@ -291,8 +302,7 @@
 
 	add_serial_batch_bundle(frm, cdt, cdn) {
 		erpnext.utils.pick_serial_and_batch_bundle(frm, cdt, cdn, "Inward");
-	}
-
+	},
 });
 
 erpnext.stock.StockReconciliation = class StockReconciliation extends erpnext.stock.StockController {
@@ -304,30 +314,30 @@
 		if (me.frm.doc.company && erpnext.is_perpetual_inventory_enabled(me.frm.doc.company)) {
 			this.frm.add_fetch("company", "cost_center", "cost_center");
 		}
-		this.frm.fields_dict["expense_account"].get_query = function() {
-			if(erpnext.is_perpetual_inventory_enabled(me.frm.doc.company)) {
+		this.frm.fields_dict["expense_account"].get_query = function () {
+			if (erpnext.is_perpetual_inventory_enabled(me.frm.doc.company)) {
 				return {
-					"filters": {
-						'company': me.frm.doc.company,
-						"is_group": 0
-					}
-				}
+					filters: {
+						company: me.frm.doc.company,
+						is_group: 0,
+					},
+				};
 			}
-		}
-		this.frm.fields_dict["cost_center"].get_query = function() {
-			if(erpnext.is_perpetual_inventory_enabled(me.frm.doc.company)) {
+		};
+		this.frm.fields_dict["cost_center"].get_query = function () {
+			if (erpnext.is_perpetual_inventory_enabled(me.frm.doc.company)) {
 				return {
-					"filters": {
-						'company': me.frm.doc.company,
-						"is_group": 0
-					}
-				}
+					filters: {
+						company: me.frm.doc.company,
+						is_group: 0,
+					},
+				};
 			}
-		}
+		};
 	}
 
 	refresh() {
-		if(this.frm.doc.docstatus > 0) {
+		if (this.frm.doc.docstatus > 0) {
 			this.show_stock_ledger();
 			erpnext.utils.view_serial_batch_nos(this.frm);
 			if (erpnext.is_perpetual_inventory_enabled(this.frm.doc.company)) {
@@ -335,7 +345,6 @@
 			}
 		}
 	}
-
 };
 
-cur_frm.cscript = new erpnext.stock.StockReconciliation({frm: cur_frm});
+cur_frm.cscript = new erpnext.stock.StockReconciliation({ frm: cur_frm });
diff --git a/erpnext/stock/doctype/stock_reposting_settings/stock_reposting_settings.js b/erpnext/stock/doctype/stock_reposting_settings/stock_reposting_settings.js
index 5f81679..e8c1437 100644
--- a/erpnext/stock/doctype/stock_reposting_settings/stock_reposting_settings.js
+++ b/erpnext/stock/doctype/stock_reposting_settings/stock_reposting_settings.js
@@ -1,23 +1,23 @@
 // Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Stock Reposting Settings', {
-	refresh: function(frm) {
-		frm.trigger('convert_to_item_based_reposting');
+frappe.ui.form.on("Stock Reposting Settings", {
+	refresh: function (frm) {
+		frm.trigger("convert_to_item_based_reposting");
 	},
 
-	convert_to_item_based_reposting: function(frm) {
-		frm.add_custom_button(__('Convert to Item Based Reposting'), function() {
+	convert_to_item_based_reposting: function (frm) {
+		frm.add_custom_button(__("Convert to Item Based Reposting"), function () {
 			frm.call({
-				method: 'convert_to_item_wh_reposting',
+				method: "convert_to_item_wh_reposting",
 				frezz: true,
 				doc: frm.doc,
-				callback: function(r) {
+				callback: function (r) {
 					if (!r.exc) {
 						frm.reload_doc();
 					}
-				}
-			})
-		})
-	}
+				},
+			});
+		});
+	},
 });
diff --git a/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.js b/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.js
index f60a037..a8d56b4 100644
--- a/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.js
+++ b/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.js
@@ -1,43 +1,43 @@
 // Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Stock Reservation Entry', {
+frappe.ui.form.on("Stock Reservation Entry", {
 	refresh(frm) {
-		frm.trigger('set_queries');
-		frm.trigger('toggle_read_only_fields');
-		frm.trigger('hide_rate_related_fields');
-		frm.trigger('hide_primary_action_button');
-		frm.trigger('make_sb_entries_warehouse_read_only');
+		frm.trigger("set_queries");
+		frm.trigger("toggle_read_only_fields");
+		frm.trigger("hide_rate_related_fields");
+		frm.trigger("hide_primary_action_button");
+		frm.trigger("make_sb_entries_warehouse_read_only");
 	},
 
 	has_serial_no(frm) {
-		frm.trigger('toggle_read_only_fields');
+		frm.trigger("toggle_read_only_fields");
 	},
 
 	has_batch_no(frm) {
-		frm.trigger('toggle_read_only_fields');
+		frm.trigger("toggle_read_only_fields");
 	},
 
 	warehouse(frm) {
 		if (frm.doc.warehouse) {
 			frm.doc.sb_entries.forEach((row) => {
-				frappe.model.set_value(row.doctype, row.name, 'warehouse', frm.doc.warehouse);
+				frappe.model.set_value(row.doctype, row.name, "warehouse", frm.doc.warehouse);
 			});
 		}
 	},
 
 	set_queries(frm) {
-		frm.set_query('warehouse', () => {
+		frm.set_query("warehouse", () => {
 			return {
 				filters: {
-					'is_group': 0,
-					'company': frm.doc.company,
-				}
+					is_group: 0,
+					company: frm.doc.company,
+				},
 			};
 		});
 
-		frm.set_query('serial_no', 'sb_entries', function(doc, cdt, cdn) {
-			var selected_serial_nos = doc.sb_entries.map(row => {
+		frm.set_query("serial_no", "sb_entries", function (doc, cdt, cdn) {
+			var selected_serial_nos = doc.sb_entries.map((row) => {
 				return row.serial_no;
 			});
 			var row = locals[cdt][cdn];
@@ -45,82 +45,86 @@
 				filters: {
 					item_code: doc.item_code,
 					warehouse: row.warehouse,
-					status: 'Active',
-					name: ['not in', selected_serial_nos],
-				}
-			}
+					status: "Active",
+					name: ["not in", selected_serial_nos],
+				},
+			};
 		});
 
-		frm.set_query('batch_no', 'sb_entries', function(doc, cdt, cdn) {
+		frm.set_query("batch_no", "sb_entries", function (doc, cdt, cdn) {
 			let filters = {
 				item: doc.item_code,
-				batch_qty: ['>', 0],
+				batch_qty: [">", 0],
 				disabled: 0,
-			}
+			};
 
 			if (!doc.has_serial_no) {
-				var selected_batch_nos = doc.sb_entries.map(row => {
+				var selected_batch_nos = doc.sb_entries.map((row) => {
 					return row.batch_no;
 				});
 
-				filters.name = ['not in', selected_batch_nos];
+				filters.name = ["not in", selected_batch_nos];
 			}
 
-			return { filters: filters }
+			return { filters: filters };
 		});
 	},
 
 	toggle_read_only_fields(frm) {
 		if (frm.doc.has_serial_no) {
-			frm.doc.sb_entries.forEach(row => {
+			frm.doc.sb_entries.forEach((row) => {
 				if (row.qty !== 1) {
-					frappe.model.set_value(row.doctype, row.name, 'qty', 1);
+					frappe.model.set_value(row.doctype, row.name, "qty", 1);
 				}
-			})
+			});
 		}
 
 		frm.fields_dict.sb_entries.grid.update_docfield_property(
-			'serial_no', 'read_only', !frm.doc.has_serial_no
+			"serial_no",
+			"read_only",
+			!frm.doc.has_serial_no
 		);
 
 		frm.fields_dict.sb_entries.grid.update_docfield_property(
-			'batch_no', 'read_only', !frm.doc.has_batch_no
+			"batch_no",
+			"read_only",
+			!frm.doc.has_batch_no
 		);
 
 		// Qty will always be 1 for Serial No.
-		frm.fields_dict.sb_entries.grid.update_docfield_property(
-			'qty', 'read_only', frm.doc.has_serial_no
-		);
+		frm.fields_dict.sb_entries.grid.update_docfield_property("qty", "read_only", frm.doc.has_serial_no);
 
-		frm.set_df_property('sb_entries', 'allow_on_submit', frm.doc.from_voucher_type == "Pick List" ? 0 : 1);
+		frm.set_df_property(
+			"sb_entries",
+			"allow_on_submit",
+			frm.doc.from_voucher_type == "Pick List" ? 0 : 1
+		);
 	},
 
 	hide_rate_related_fields(frm) {
-		['incoming_rate', 'outgoing_rate', 'stock_value_difference', 'is_outward', 'stock_queue'].forEach(field => {
-			frm.fields_dict.sb_entries.grid.update_docfield_property(
-				field, 'hidden', 1
-			);
-		});
+		["incoming_rate", "outgoing_rate", "stock_value_difference", "is_outward", "stock_queue"].forEach(
+			(field) => {
+				frm.fields_dict.sb_entries.grid.update_docfield_property(field, "hidden", 1);
+			}
+		);
 	},
 
 	hide_primary_action_button(frm) {
 		// Hide 'Amend' button on cancelled document
 		if (frm.doc.docstatus == 2) {
-			frm.page.btn_primary.hide()
+			frm.page.btn_primary.hide();
 		}
 	},
 
 	make_sb_entries_warehouse_read_only(frm) {
-		frm.fields_dict.sb_entries.grid.update_docfield_property(
-			'warehouse', 'read_only', 1
-		);
+		frm.fields_dict.sb_entries.grid.update_docfield_property("warehouse", "read_only", 1);
 	},
 });
 
-frappe.ui.form.on('Serial and Batch Entry', {
+frappe.ui.form.on("Serial and Batch Entry", {
 	sb_entries_add(frm, cdt, cdn) {
 		if (frm.doc.warehouse) {
-			frappe.model.set_value(cdt, cdn, 'warehouse', frm.doc.warehouse);
+			frappe.model.set_value(cdt, cdn, "warehouse", frm.doc.warehouse);
 		}
 	},
-});
\ No newline at end of file
+});
diff --git a/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry_list.js b/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry_list.js
index 5b390f7..d2194a4 100644
--- a/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry_list.js
+++ b/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry_list.js
@@ -1,17 +1,17 @@
 // Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.listview_settings['Stock Reservation Entry'] = {
+frappe.listview_settings["Stock Reservation Entry"] = {
 	get_indicator: function (doc) {
 		const status_colors = {
-                  'Draft': 'red',
-                  'Partially Reserved': 'orange',
-                  'Reserved': 'blue',
-                  'Partially Delivered': 'purple',
-                  'Delivered': 'green',
-                  'Cancelled': 'red',
+			Draft: "red",
+			"Partially Reserved": "orange",
+			Reserved: "blue",
+			"Partially Delivered": "purple",
+			Delivered: "green",
+			Cancelled: "red",
 		};
 
-            return [__(doc.status), status_colors[doc.status], 'status,=,' + doc.status];
+		return [__(doc.status), status_colors[doc.status], "status,=," + doc.status];
 	},
-};
\ No newline at end of file
+};
diff --git a/erpnext/stock/doctype/stock_settings/stock_settings.js b/erpnext/stock/doctype/stock_settings/stock_settings.js
index 89ac4b5..1972b19 100644
--- a/erpnext/stock/doctype/stock_settings/stock_settings.js
+++ b/erpnext/stock/doctype/stock_settings/stock_settings.js
@@ -1,29 +1,31 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Stock Settings', {
-	refresh: function(frm) {
-		let filters = function() {
+frappe.ui.form.on("Stock Settings", {
+	refresh: function (frm) {
+		let filters = function () {
 			return {
-				filters : {
-					is_group : 0
-				}
+				filters: {
+					is_group: 0,
+				},
 			};
 		};
 
 		frm.set_query("default_warehouse", filters);
 		frm.set_query("sample_retention_warehouse", filters);
 	},
-	allow_negative_stock: function(frm) {
+	allow_negative_stock: function (frm) {
 		if (!frm.doc.allow_negative_stock) {
 			return;
 		}
 
-		let msg = __("Using negative stock disables FIFO/Moving average valuation when inventory is negative.");
+		let msg = __(
+			"Using negative stock disables FIFO/Moving average valuation when inventory is negative."
+		);
 		msg += " ";
-		msg += __("This is considered dangerous from accounting point of view.")
+		msg += __("This is considered dangerous from accounting point of view.");
 		msg += "<br>";
-		msg += ("Do you still want to enable negative inventory?");
+		msg += "Do you still want to enable negative inventory?";
 
 		frappe.confirm(
 			msg,
@@ -32,5 +34,5 @@
 				frm.set_value("allow_negative_stock", 0);
 			}
 		);
-	}
+	},
 });
diff --git a/erpnext/stock/doctype/uom_category/uom_category.js b/erpnext/stock/doctype/uom_category/uom_category.js
index 48026da..b53190f 100644
--- a/erpnext/stock/doctype/uom_category/uom_category.js
+++ b/erpnext/stock/doctype/uom_category/uom_category.js
@@ -1,8 +1,6 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('UOM Category', {
-	refresh: function() {
-
-	}
+frappe.ui.form.on("UOM Category", {
+	refresh: function () {},
 });
diff --git a/erpnext/stock/doctype/variant_field/variant_field.js b/erpnext/stock/doctype/variant_field/variant_field.js
index 13db3f9..8455d91 100644
--- a/erpnext/stock/doctype/variant_field/variant_field.js
+++ b/erpnext/stock/doctype/variant_field/variant_field.js
@@ -1,8 +1,6 @@
 // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Variant Field', {
-	refresh: function() {
-
-	}
+frappe.ui.form.on("Variant Field", {
+	refresh: function () {},
 });
diff --git a/erpnext/stock/doctype/warehouse/warehouse.js b/erpnext/stock/doctype/warehouse/warehouse.js
index 3819c0b2..195ecb6 100644
--- a/erpnext/stock/doctype/warehouse/warehouse.js
+++ b/erpnext/stock/doctype/warehouse/warehouse.js
@@ -35,18 +35,15 @@
 
 	refresh: function (frm) {
 		frm.toggle_display("warehouse_name", frm.doc.__islocal);
-		frm.toggle_display(
-			["address_html", "contact_html"],
-			!frm.doc.__islocal
-		);
+		frm.toggle_display(["address_html", "contact_html"], !frm.doc.__islocal);
 
 		if (!frm.is_new()) {
 			frappe.contacts.render_address_and_contact(frm);
 
 			let enable_toggle = frm.doc.disabled ? "Enable" : "Disable";
 			frm.add_custom_button(__(enable_toggle), () => {
-				frm.set_value('disabled', 1 - frm.doc.disabled);
-				frm.save()
+				frm.set_value("disabled", 1 - frm.doc.disabled);
+				frm.save();
 			});
 
 			frm.add_custom_button(__("Stock Balance"), function () {
@@ -61,25 +58,20 @@
 					: __("Convert to Group", null, "Warehouse"),
 				function () {
 					convert_to_group_or_ledger(frm);
-				},
+				}
 			);
-
 		} else {
 			frappe.contacts.clear_address_and_contact(frm);
 		}
 
-
 		if (!frm.doc.is_group && frm.doc.__onload && frm.doc.__onload.account) {
-			frm.add_custom_button(
-				__("General Ledger", null, "Warehouse"),
-				function () {
-					frappe.route_options = {
-						account: frm.doc.__onload.account,
-						company: frm.doc.company,
-					};
-					frappe.set_route("query-report", "General Ledger");
-				}
-			);
+			frm.add_custom_button(__("General Ledger", null, "Warehouse"), function () {
+				frappe.route_options = {
+					account: frm.doc.__onload.account,
+					company: frm.doc.company,
+				};
+				frappe.set_route("query-report", "General Ledger");
+			});
 		}
 
 		frm.toggle_enable(["is_group", "company"], false);
diff --git a/erpnext/stock/doctype/warehouse/warehouse_tree.js b/erpnext/stock/doctype/warehouse/warehouse_tree.js
index eb635e6..d9070b3 100644
--- a/erpnext/stock/doctype/warehouse/warehouse_tree.js
+++ b/erpnext/stock/doctype/warehouse/warehouse_tree.js
@@ -1,20 +1,25 @@
-frappe.treeview_settings['Warehouse'] = {
+frappe.treeview_settings["Warehouse"] = {
 	get_tree_nodes: "erpnext.stock.doctype.warehouse.warehouse.get_children",
 	add_tree_node: "erpnext.stock.doctype.warehouse.warehouse.add_node",
 	get_tree_root: false,
 	root_label: "Warehouses",
-	filters: [{
-		fieldname: "company",
-		fieldtype:"Select",
-		options: erpnext.utils.get_tree_options("company"),
-		label: __("Company"),
-		default: erpnext.utils.get_tree_default("company")
-	}],
-	fields:[
-		{fieldtype:'Data', fieldname: 'warehouse_name',
-			label:__('New Warehouse Name'), reqd:true},
-		{fieldtype:'Check', fieldname:'is_group', label:__('Is Group'),
-			description: __("Child nodes can be only created under 'Group' type nodes")}
+	filters: [
+		{
+			fieldname: "company",
+			fieldtype: "Select",
+			options: erpnext.utils.get_tree_options("company"),
+			label: __("Company"),
+			default: erpnext.utils.get_tree_default("company"),
+		},
 	],
-	ignore_fields:["parent_warehouse"],
-}
+	fields: [
+		{ fieldtype: "Data", fieldname: "warehouse_name", label: __("New Warehouse Name"), reqd: true },
+		{
+			fieldtype: "Check",
+			fieldname: "is_group",
+			label: __("Is Group"),
+			description: __("Child nodes can be only created under 'Group' type nodes"),
+		},
+	],
+	ignore_fields: ["parent_warehouse"],
+};
diff --git a/erpnext/stock/doctype/warehouse_type/warehouse_type.js b/erpnext/stock/doctype/warehouse_type/warehouse_type.js
index 4c4b89c..521b07a 100644
--- a/erpnext/stock/doctype/warehouse_type/warehouse_type.js
+++ b/erpnext/stock/doctype/warehouse_type/warehouse_type.js
@@ -1,8 +1,7 @@
 // Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Warehouse Type', {
+frappe.ui.form.on("Warehouse Type", {
 	// refresh: function(frm) {
-
 	// }
 });
diff --git a/erpnext/stock/page/stock_balance/stock_balance.js b/erpnext/stock/page/stock_balance/stock_balance.js
index 90b8d45..a5fba9f 100644
--- a/erpnext/stock/page/stock_balance/stock_balance.js
+++ b/erpnext/stock/page/stock_balance/stock_balance.js
@@ -1,103 +1,101 @@
-frappe.pages['stock-balance'].on_page_load = function(wrapper) {
+frappe.pages["stock-balance"].on_page_load = function (wrapper) {
 	var page = frappe.ui.make_app_page({
 		parent: wrapper,
-		title: __('Stock Summary'),
-		single_column: true
+		title: __("Stock Summary"),
+		single_column: true,
 	});
 	page.start = 0;
 
 	page.warehouse_field = page.add_field({
-		fieldname: 'warehouse',
-		label: __('Warehouse'),
-		fieldtype:'Link',
-		options:'Warehouse',
+		fieldname: "warehouse",
+		label: __("Warehouse"),
+		fieldtype: "Link",
+		options: "Warehouse",
 		default: frappe.route_options && frappe.route_options.warehouse,
-		change: function() {
+		change: function () {
 			page.item_dashboard.start = 0;
 			page.item_dashboard.refresh();
-		}
+		},
 	});
 
 	page.item_field = page.add_field({
-		fieldname: 'item_code',
-		label: __('Item'),
-		fieldtype:'Link',
-		options:'Item',
+		fieldname: "item_code",
+		label: __("Item"),
+		fieldtype: "Link",
+		options: "Item",
 		default: frappe.route_options && frappe.route_options.item_code,
-		change: function() {
+		change: function () {
 			page.item_dashboard.start = 0;
 			page.item_dashboard.refresh();
-		}
+		},
 	});
 
 	page.item_group_field = page.add_field({
-		fieldname: 'item_group',
-		label: __('Item Group'),
-		fieldtype:'Link',
-		options:'Item Group',
+		fieldname: "item_group",
+		label: __("Item Group"),
+		fieldtype: "Link",
+		options: "Item Group",
 		default: frappe.route_options && frappe.route_options.item_group,
-		change: function() {
+		change: function () {
 			page.item_dashboard.start = 0;
 			page.item_dashboard.refresh();
-		}
+		},
 	});
 
 	page.sort_selector = new frappe.ui.SortSelector({
-		parent: page.wrapper.find('.page-form'),
+		parent: page.wrapper.find(".page-form"),
 		args: {
-			sort_by: 'projected_qty',
-			sort_order: 'asc',
+			sort_by: "projected_qty",
+			sort_order: "asc",
 			options: [
-				{fieldname: 'projected_qty', label: __('Projected qty')},
-				{fieldname: 'reserved_qty', label: __('Reserved for sale')},
-				{fieldname: 'reserved_qty_for_production', label: __('Reserved for manufacturing')},
-				{fieldname: 'reserved_qty_for_sub_contract', label: __('Reserved for sub contracting')},
-				{fieldname: 'actual_qty', label: __('Actual qty in stock')},
-			]
+				{ fieldname: "projected_qty", label: __("Projected qty") },
+				{ fieldname: "reserved_qty", label: __("Reserved for sale") },
+				{ fieldname: "reserved_qty_for_production", label: __("Reserved for manufacturing") },
+				{ fieldname: "reserved_qty_for_sub_contract", label: __("Reserved for sub contracting") },
+				{ fieldname: "actual_qty", label: __("Actual qty in stock") },
+			],
 		},
-		change: function(sort_by, sort_order) {
+		change: function (sort_by, sort_order) {
 			page.item_dashboard.sort_by = sort_by;
 			page.item_dashboard.sort_order = sort_order;
 			page.item_dashboard.start = 0;
 			page.item_dashboard.refresh();
-		}
+		},
 	});
 
 	// page.sort_selector.wrapper.css({'margin-right': '15px', 'margin-top': '4px'});
 
-	frappe.require('item-dashboard.bundle.js', function() {
+	frappe.require("item-dashboard.bundle.js", function () {
 		page.item_dashboard = new erpnext.stock.ItemDashboard({
 			parent: page.main,
 			page_length: 20,
-			method: 'erpnext.stock.dashboard.item_dashboard.get_data',
-			template: 'item_dashboard_list'
-		})
+			method: "erpnext.stock.dashboard.item_dashboard.get_data",
+			template: "item_dashboard_list",
+		});
 
-		page.item_dashboard.before_refresh = function() {
+		page.item_dashboard.before_refresh = function () {
 			this.item_code = page.item_field.get_value();
 			this.warehouse = page.warehouse_field.get_value();
 			this.item_group = page.item_group_field.get_value();
-		}
+		};
 
 		page.item_dashboard.refresh();
 
 		// item click
-		var setup_click = function(doctype) {
-			page.main.on('click', 'a[data-type="'+ doctype.toLowerCase() +'"]', function() {
-				var name = $(this).attr('data-name');
-				var field = page[doctype.toLowerCase() + '_field'];
-				if(field.get_value()===name) {
-					frappe.set_route('Form', doctype, name)
+		var setup_click = function (doctype) {
+			page.main.on("click", 'a[data-type="' + doctype.toLowerCase() + '"]', function () {
+				var name = $(this).attr("data-name");
+				var field = page[doctype.toLowerCase() + "_field"];
+				if (field.get_value() === name) {
+					frappe.set_route("Form", doctype, name);
 				} else {
 					field.set_input(name);
 					page.item_dashboard.refresh();
 				}
 			});
-		}
+		};
 
-		setup_click('Item');
-		setup_click('Warehouse');
+		setup_click("Item");
+		setup_click("Warehouse");
 	});
-
-
-}
+};
diff --git a/erpnext/stock/page/warehouse_capacity_summary/warehouse_capacity_summary.js b/erpnext/stock/page/warehouse_capacity_summary/warehouse_capacity_summary.js
index c175a4a..b4502fc 100644
--- a/erpnext/stock/page/warehouse_capacity_summary/warehouse_capacity_summary.js
+++ b/erpnext/stock/page/warehouse_capacity_summary/warehouse_capacity_summary.js
@@ -1,98 +1,98 @@
-frappe.pages['warehouse-capacity-summary'].on_page_load = function(wrapper) {
+frappe.pages["warehouse-capacity-summary"].on_page_load = function (wrapper) {
 	var page = frappe.ui.make_app_page({
 		parent: wrapper,
-		title: __('Warehouse Capacity Summary'),
-		single_column: true
+		title: __("Warehouse Capacity Summary"),
+		single_column: true,
 	});
-	page.set_secondary_action('Refresh', () => page.capacity_dashboard.refresh(), 'refresh');
+	page.set_secondary_action("Refresh", () => page.capacity_dashboard.refresh(), "refresh");
 	page.start = 0;
 
 	page.company_field = page.add_field({
-		fieldname: 'company',
-		label: __('Company'),
-		fieldtype: 'Link',
-		options: 'Company',
+		fieldname: "company",
+		label: __("Company"),
+		fieldtype: "Link",
+		options: "Company",
 		reqd: 1,
 		default: frappe.defaults.get_default("company"),
-		change: function() {
+		change: function () {
 			page.capacity_dashboard.start = 0;
 			page.capacity_dashboard.refresh();
-		}
+		},
 	});
 
 	page.warehouse_field = page.add_field({
-		fieldname: 'warehouse',
-		label: __('Warehouse'),
-		fieldtype: 'Link',
-		options: 'Warehouse',
-		change: function() {
+		fieldname: "warehouse",
+		label: __("Warehouse"),
+		fieldtype: "Link",
+		options: "Warehouse",
+		change: function () {
 			page.capacity_dashboard.start = 0;
 			page.capacity_dashboard.refresh();
-		}
+		},
 	});
 
 	page.item_field = page.add_field({
-		fieldname: 'item_code',
-		label: __('Item'),
-		fieldtype: 'Link',
-		options: 'Item',
-		change: function() {
+		fieldname: "item_code",
+		label: __("Item"),
+		fieldtype: "Link",
+		options: "Item",
+		change: function () {
 			page.capacity_dashboard.start = 0;
 			page.capacity_dashboard.refresh();
-		}
+		},
 	});
 
 	page.parent_warehouse_field = page.add_field({
-		fieldname: 'parent_warehouse',
-		label: __('Parent Warehouse'),
-		fieldtype: 'Link',
-		options: 'Warehouse',
-		get_query: function() {
+		fieldname: "parent_warehouse",
+		label: __("Parent Warehouse"),
+		fieldtype: "Link",
+		options: "Warehouse",
+		get_query: function () {
 			return {
 				filters: {
-					"is_group": 1
-				}
+					is_group: 1,
+				},
 			};
 		},
-		change: function() {
+		change: function () {
 			page.capacity_dashboard.start = 0;
 			page.capacity_dashboard.refresh();
-		}
+		},
 	});
 
 	page.sort_selector = new frappe.ui.SortSelector({
-		parent: page.wrapper.find('.page-form'),
+		parent: page.wrapper.find(".page-form"),
 		args: {
-			sort_by: 'stock_capacity',
-			sort_order: 'desc',
+			sort_by: "stock_capacity",
+			sort_order: "desc",
 			options: [
-				{fieldname: 'stock_capacity', label: __('Capacity (Stock UOM)')},
-				{fieldname: 'percent_occupied', label: __('% Occupied')},
-				{fieldname: 'actual_qty', label: __('Balance Qty (Stock)')}
-			]
+				{ fieldname: "stock_capacity", label: __("Capacity (Stock UOM)") },
+				{ fieldname: "percent_occupied", label: __("% Occupied") },
+				{ fieldname: "actual_qty", label: __("Balance Qty (Stock)") },
+			],
 		},
-		change: function(sort_by, sort_order) {
+		change: function (sort_by, sort_order) {
 			page.capacity_dashboard.sort_by = sort_by;
 			page.capacity_dashboard.sort_order = sort_order;
 			page.capacity_dashboard.start = 0;
 			page.capacity_dashboard.refresh();
-		}
+		},
 	});
 
-	frappe.require('item-dashboard.bundle.js', function() {
-		$(frappe.render_template('warehouse_capacity_summary_header')).appendTo(page.main);
+	frappe.require("item-dashboard.bundle.js", function () {
+		$(frappe.render_template("warehouse_capacity_summary_header")).appendTo(page.main);
 
 		page.capacity_dashboard = new erpnext.stock.ItemDashboard({
 			page_name: "warehouse-capacity-summary",
 			page_length: 10,
 			parent: page.main,
-			sort_by: 'stock_capacity',
-			sort_order: 'desc',
-			method: 'erpnext.stock.dashboard.warehouse_capacity_dashboard.get_data',
-			template: 'warehouse_capacity_summary'
+			sort_by: "stock_capacity",
+			sort_order: "desc",
+			method: "erpnext.stock.dashboard.warehouse_capacity_dashboard.get_data",
+			template: "warehouse_capacity_summary",
 		});
 
-		page.capacity_dashboard.before_refresh = function() {
+		page.capacity_dashboard.before_refresh = function () {
 			this.item_code = page.item_field.get_value();
 			this.warehouse = page.warehouse_field.get_value();
 			this.parent_warehouse = page.parent_warehouse_field.get_value();
@@ -101,12 +101,12 @@
 
 		page.capacity_dashboard.refresh();
 
-		let setup_click = function(doctype) {
-			page.main.on('click', 'a[data-type="'+ doctype.toLowerCase() +'"]', function() {
-				var name = $(this).attr('data-name');
-				var field = page[doctype.toLowerCase() + '_field'];
-				if (field.get_value()===name) {
-					frappe.set_route('Form', doctype, name);
+		let setup_click = function (doctype) {
+			page.main.on("click", 'a[data-type="' + doctype.toLowerCase() + '"]', function () {
+				var name = $(this).attr("data-name");
+				var field = page[doctype.toLowerCase() + "_field"];
+				if (field.get_value() === name) {
+					frappe.set_route("Form", doctype, name);
 				} else {
 					field.set_input(name);
 					page.capacity_dashboard.refresh();
@@ -114,7 +114,7 @@
 			});
 		};
 
-		setup_click('Item');
-		setup_click('Warehouse');
+		setup_click("Item");
+		setup_click("Warehouse");
 	});
 };
diff --git a/erpnext/stock/report/batch_item_expiry_status/batch_item_expiry_status.js b/erpnext/stock/report/batch_item_expiry_status/batch_item_expiry_status.js
index 5ead48d..5ec424f 100644
--- a/erpnext/stock/report/batch_item_expiry_status/batch_item_expiry_status.js
+++ b/erpnext/stock/report/batch_item_expiry_status/batch_item_expiry_status.js
@@ -2,34 +2,34 @@
 // For license information, please see license.txt
 
 frappe.query_reports["Batch Item Expiry Status"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"width": "80",
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
-			"reqd": 1,
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			width: "80",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
+			reqd: 1,
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"width": "80",
-			"default": frappe.datetime.get_today(),
-			"reqd": 1,
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			width: "80",
+			default: frappe.datetime.get_today(),
+			reqd: 1,
 		},
 		{
-			"fieldname":"item",
-			"label": __("Item"),
-			"fieldtype": "Link",
-			"options": "Item",
-			"width": "100",
-			"get_query": function () {
+			fieldname: "item",
+			label: __("Item"),
+			fieldtype: "Link",
+			options: "Item",
+			width: "100",
+			get_query: function () {
 				return {
-					filters: {"has_batch_no": 1}
-				}
-			}
-		}
-	]
-}
+					filters: { has_batch_no: 1 },
+				};
+			},
+		},
+	],
+};
diff --git a/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.js b/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.js
index 2a65e38..352fb19 100644
--- a/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.js
+++ b/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.js
@@ -2,87 +2,90 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.query_reports["Batch-Wise Balance History"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company"),
-			"reqd": 1
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
+			reqd: 1,
 		},
 		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"width": "80",
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
-			"reqd": 1
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			width: "80",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
+			reqd: 1,
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"width": "80",
-			"default": frappe.datetime.get_today(),
-			"reqd": 1
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			width: "80",
+			default: frappe.datetime.get_today(),
+			reqd: 1,
 		},
 		{
-			"fieldname":"item_code",
-			"label": __("Item Code"),
-			"fieldtype": "Link",
-			"options": "Item",
-			"get_query": function() {
+			fieldname: "item_code",
+			label: __("Item Code"),
+			fieldtype: "Link",
+			options: "Item",
+			get_query: function () {
 				return {
 					filters: {
-						"has_batch_no": 1
-					}
+						has_batch_no: 1,
+					},
 				};
-			}
+			},
 		},
 		{
-			"fieldname":"warehouse",
-			"label": __("Warehouse"),
-			"fieldtype": "Link",
-			"options": "Warehouse",
-			"get_query": function() {
-				let company = frappe.query_report.get_filter_value('company');
+			fieldname: "warehouse",
+			label: __("Warehouse"),
+			fieldtype: "Link",
+			options: "Warehouse",
+			get_query: function () {
+				let company = frappe.query_report.get_filter_value("company");
 				return {
 					filters: {
-						"company": company
-					}
+						company: company,
+					},
 				};
-			}
+			},
 		},
 		{
-			"fieldname":"batch_no",
-			"label": __("Batch No"),
-			"fieldtype": "Link",
-			"options": "Batch",
-			"get_query": function() {
-				let item_code = frappe.query_report.get_filter_value('item_code');
+			fieldname: "batch_no",
+			label: __("Batch No"),
+			fieldtype: "Link",
+			options: "Batch",
+			get_query: function () {
+				let item_code = frappe.query_report.get_filter_value("item_code");
 				return {
 					filters: {
-						"item": item_code
-					}
+						item: item_code,
+					},
 				};
-			}
+			},
 		},
 	],
-	"formatter": function (value, row, column, data, default_formatter) {
+	formatter: function (value, row, column, data, default_formatter) {
 		if (column.fieldname == "Batch" && data && !!data["Batch"]) {
 			value = data["Batch"];
-			column.link_onclick = "frappe.query_reports['Batch-Wise Balance History'].set_batch_route_to_stock_ledger(" + JSON.stringify(data) + ")";
+			column.link_onclick =
+				"frappe.query_reports['Batch-Wise Balance History'].set_batch_route_to_stock_ledger(" +
+				JSON.stringify(data) +
+				")";
 		}
 
 		value = default_formatter(value, row, column, data);
 		return value;
 	},
-	"set_batch_route_to_stock_ledger": function (data) {
+	set_batch_route_to_stock_ledger: function (data) {
 		frappe.route_options = {
-			"batch_no": data["Batch"]
+			batch_no: data["Batch"],
 		};
 
 		frappe.set_route("query-report", "Stock Ledger");
-	}
-}
+	},
+};
diff --git a/erpnext/stock/report/bom_search/bom_search.js b/erpnext/stock/report/bom_search/bom_search.js
index e9e763c..b6f3c96 100644
--- a/erpnext/stock/report/bom_search/bom_search.js
+++ b/erpnext/stock/report/bom_search/bom_search.js
@@ -2,41 +2,41 @@
 // For license information, please see license.txt
 
 frappe.query_reports["BOM Search"] = {
-	"filters": [
+	filters: [
 		{
 			fieldname: "item1",
 			label: __("Item 1"),
 			fieldtype: "Link",
-			options: "Item"
+			options: "Item",
 		},
 		{
 			fieldname: "item2",
 			label: __("Item 2"),
 			fieldtype: "Link",
-			options: "Item"
+			options: "Item",
 		},
 		{
 			fieldname: "item3",
 			label: __("Item 3"),
 			fieldtype: "Link",
-			options: "Item"
+			options: "Item",
 		},
 		{
 			fieldname: "item4",
 			label: __("Item 4"),
 			fieldtype: "Link",
-			options: "Item"
+			options: "Item",
 		},
 		{
 			fieldname: "item5",
 			label: __("Item 5"),
 			fieldtype: "Link",
-			options: "Item"
+			options: "Item",
 		},
 		{
 			fieldname: "search_sub_assemblies",
 			label: __("Search Sub Assemblies"),
 			fieldtype: "Check",
 		},
-	]
-}
+	],
+};
diff --git a/erpnext/stock/report/cogs_by_item_group/cogs_by_item_group.js b/erpnext/stock/report/cogs_by_item_group/cogs_by_item_group.js
index a032285..ecca3b1 100644
--- a/erpnext/stock/report/cogs_by_item_group/cogs_by_item_group.js
+++ b/erpnext/stock/report/cogs_by_item_group/cogs_by_item_group.js
@@ -1,31 +1,29 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
-
 frappe.query_reports["COGS By Item Group"] = {
 	filters: [
-    {
-      label: __("Company"),
-      fieldname: "company",
-      fieldtype: "Link",
-      options: "Company",
-      mandatory: true,
-      default: frappe.defaults.get_user_default("Company"),
-    },
-    {
-      label: __("From Date"),
-      fieldname: "from_date",
-      fieldtype: "Date",
-      mandatory: true,
-      default: frappe.datetime.year_start(),
-    },
-    {
-      label: __("To Date"),
-      fieldname: "to_date",
-      fieldtype: "Date",
-      mandatory: true,
-      default: frappe.datetime.get_today(),
-    },
-	]
+		{
+			label: __("Company"),
+			fieldname: "company",
+			fieldtype: "Link",
+			options: "Company",
+			mandatory: true,
+			default: frappe.defaults.get_user_default("Company"),
+		},
+		{
+			label: __("From Date"),
+			fieldname: "from_date",
+			fieldtype: "Date",
+			mandatory: true,
+			default: frappe.datetime.year_start(),
+		},
+		{
+			label: __("To Date"),
+			fieldname: "to_date",
+			fieldtype: "Date",
+			mandatory: true,
+			default: frappe.datetime.get_today(),
+		},
+	],
 };
diff --git a/erpnext/stock/report/delayed_item_report/delayed_item_report.js b/erpnext/stock/report/delayed_item_report/delayed_item_report.js
index cf6e12f..aecf0fa 100644
--- a/erpnext/stock/report/delayed_item_report/delayed_item_report.js
+++ b/erpnext/stock/report/delayed_item_report/delayed_item_report.js
@@ -1,62 +1,61 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Delayed Item Report"] = {
-	"filters": [
+	filters: [
 		{
 			fieldname: "company",
 			label: __("Company"),
 			fieldtype: "Link",
 			options: "Company",
 			default: frappe.defaults.get_default("company"),
-			reqd: 1
+			reqd: 1,
 		},
 		{
-			fieldname:"from_date",
+			fieldname: "from_date",
 			label: __("From Date"),
 			fieldtype: "Date",
 			default: frappe.datetime.month_start(),
-			reqd: 1
+			reqd: 1,
 		},
 		{
-			fieldname:"to_date",
+			fieldname: "to_date",
 			label: __("To Date"),
 			fieldtype: "Date",
 			default: frappe.datetime.now_date(),
-			reqd: 1
+			reqd: 1,
 		},
 		{
-			fieldname:"sales_order",
+			fieldname: "sales_order",
 			label: __("Sales Order"),
 			fieldtype: "Link",
 			options: "Sales Order",
 		},
 		{
-			fieldname:"customer",
+			fieldname: "customer",
 			label: __("Customer"),
 			fieldtype: "Link",
 			options: "Customer",
 		},
 		{
-			fieldname:"customer_group",
+			fieldname: "customer_group",
 			label: __("Customer Group"),
 			fieldtype: "Link",
 			options: "Customer Group",
 		},
 		{
-			fieldname:"item_group",
+			fieldname: "item_group",
 			label: __("Item Group"),
 			fieldtype: "Link",
 			options: "Item Group",
 		},
 		{
-			fieldname:"based_on",
+			fieldname: "based_on",
 			label: __("Based On"),
 			fieldtype: "Select",
 			options: ["Delivery Note", "Sales Invoice"],
 			default: "Sales Invoice",
-			reqd: 1
+			reqd: 1,
 		},
-	]
-}
+	],
+};
diff --git a/erpnext/stock/report/delayed_order_report/delayed_order_report.js b/erpnext/stock/report/delayed_order_report/delayed_order_report.js
index cf489c9..3aa6f91 100644
--- a/erpnext/stock/report/delayed_order_report/delayed_order_report.js
+++ b/erpnext/stock/report/delayed_order_report/delayed_order_report.js
@@ -1,62 +1,61 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Delayed Order Report"] = {
-	"filters": [
+	filters: [
 		{
 			fieldname: "company",
 			label: __("Company"),
 			fieldtype: "Link",
 			options: "Company",
 			default: frappe.defaults.get_default("company"),
-			reqd: 1
+			reqd: 1,
 		},
 		{
-			fieldname:"from_date",
+			fieldname: "from_date",
 			label: __("From Date"),
 			fieldtype: "Date",
 			default: frappe.datetime.month_start(),
-			reqd: 1
+			reqd: 1,
 		},
 		{
-			fieldname:"to_date",
+			fieldname: "to_date",
 			label: __("To Date"),
 			fieldtype: "Date",
 			default: frappe.datetime.now_date(),
-			reqd: 1
+			reqd: 1,
 		},
 		{
-			fieldname:"sales_order",
+			fieldname: "sales_order",
 			label: __("Sales Order"),
 			fieldtype: "Link",
 			options: "Sales Order",
 		},
 		{
-			fieldname:"customer",
+			fieldname: "customer",
 			label: __("Customer"),
 			fieldtype: "Link",
 			options: "Customer",
 		},
 		{
-			fieldname:"customer_group",
+			fieldname: "customer_group",
 			label: __("Customer Group"),
 			fieldtype: "Link",
 			options: "Customer Group",
 		},
 		{
-			fieldname:"item_group",
+			fieldname: "item_group",
 			label: __("Item Group"),
 			fieldtype: "Link",
 			options: "Item Group",
 		},
 		{
-			fieldname:"based_on",
+			fieldname: "based_on",
 			label: __("Based On"),
 			fieldtype: "Select",
 			options: ["Delivery Note", "Sales Invoice"],
 			default: "Sales Invoice",
-			reqd: 1
+			reqd: 1,
 		},
-	]
-}
+	],
+};
diff --git a/erpnext/stock/report/delivery_note_trends/delivery_note_trends.js b/erpnext/stock/report/delivery_note_trends/delivery_note_trends.js
index 8a04565..5e7dc8b 100644
--- a/erpnext/stock/report/delivery_note_trends/delivery_note_trends.js
+++ b/erpnext/stock/report/delivery_note_trends/delivery_note_trends.js
@@ -1,8 +1,8 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.require("assets/erpnext/js/sales_trends_filters.js", function() {
+frappe.require("assets/erpnext/js/sales_trends_filters.js", function () {
 	frappe.query_reports["Delivery Note Trends"] = {
-		filters: erpnext.get_sales_trends_filters()
-	}
+		filters: erpnext.get_sales_trends_filters(),
+	};
 });
diff --git a/erpnext/stock/report/fifo_queue_vs_qty_after_transaction_comparison/fifo_queue_vs_qty_after_transaction_comparison.js b/erpnext/stock/report/fifo_queue_vs_qty_after_transaction_comparison/fifo_queue_vs_qty_after_transaction_comparison.js
index bc86979..38266aa 100644
--- a/erpnext/stock/report/fifo_queue_vs_qty_after_transaction_comparison/fifo_queue_vs_qty_after_transaction_comparison.js
+++ b/erpnext/stock/report/fifo_queue_vs_qty_after_transaction_comparison/fifo_queue_vs_qty_after_transaction_comparison.js
@@ -1,49 +1,45 @@
 // Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
-const DIFFERNCE_FIELD_NAMES = [
-	"fifo_qty_diff",
-	"fifo_value_diff",
-];
+const DIFFERNCE_FIELD_NAMES = ["fifo_qty_diff", "fifo_value_diff"];
 
 frappe.query_reports["FIFO Queue vs Qty After Transaction Comparison"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname": "item_code",
-			"fieldtype": "Link",
-			"label": "Item",
-			"options": "Item",
-			get_query: function() {
+			fieldname: "item_code",
+			fieldtype: "Link",
+			label: "Item",
+			options: "Item",
+			get_query: function () {
 				return {
-					filters: {is_stock_item: 1, has_serial_no: 0}
-				}
-			}
+					filters: { is_stock_item: 1, has_serial_no: 0 },
+				};
+			},
 		},
 		{
-			"fieldname": "item_group",
-			"fieldtype": "Link",
-			"label": "Item Group",
-			"options": "Item Group",
+			fieldname: "item_group",
+			fieldtype: "Link",
+			label: "Item Group",
+			options: "Item Group",
 		},
 		{
-			"fieldname": "warehouse",
-			"fieldtype": "Link",
-			"label": "Warehouse",
-			"options": "Warehouse",
+			fieldname: "warehouse",
+			fieldtype: "Link",
+			label: "Warehouse",
+			options: "Warehouse",
 		},
 		{
-			"fieldname": "from_date",
-			"fieldtype": "Date",
-			"label": "From Posting Date",
+			fieldname: "from_date",
+			fieldtype: "Date",
+			label: "From Posting Date",
 		},
 		{
-			"fieldname": "to_date",
-			"fieldtype": "Date",
-			"label": "From Posting Date",
-		}
+			fieldname: "to_date",
+			fieldtype: "Date",
+			label: "From Posting Date",
+		},
 	],
-	formatter (value, row, column, data, default_formatter) {
+	formatter(value, row, column, data, default_formatter) {
 		value = default_formatter(value, row, column, data);
 		if (DIFFERNCE_FIELD_NAMES.includes(column.fieldname) && Math.abs(data[column.fieldname]) > 0.001) {
 			value = "<span style='color:red'>" + value + "</span>";
diff --git a/erpnext/stock/report/incorrect_balance_qty_after_transaction/incorrect_balance_qty_after_transaction.js b/erpnext/stock/report/incorrect_balance_qty_after_transaction/incorrect_balance_qty_after_transaction.js
index 0f9120b..8c4e6d4 100644
--- a/erpnext/stock/report/incorrect_balance_qty_after_transaction/incorrect_balance_qty_after_transaction.js
+++ b/erpnext/stock/report/incorrect_balance_qty_after_transaction/incorrect_balance_qty_after_transaction.js
@@ -1,27 +1,26 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Incorrect Balance Qty After Transaction"] = {
-	"filters": [
+	filters: [
 		{
 			label: __("Company"),
 			fieldtype: "Link",
 			fieldname: "company",
 			options: "Company",
 			default: frappe.defaults.get_user_default("Company"),
-			reqd: 1
+			reqd: 1,
 		},
 		{
-			label: __('Item Code'),
-			fieldtype: 'Link',
-			fieldname: 'item_code',
-			options: 'Item'
+			label: __("Item Code"),
+			fieldtype: "Link",
+			fieldname: "item_code",
+			options: "Item",
 		},
 		{
-			label: __('Warehouse'),
-			fieldtype: 'Link',
-			fieldname: 'warehouse'
-		}
-	]
+			label: __("Warehouse"),
+			fieldtype: "Link",
+			fieldname: "warehouse",
+		},
+	],
 };
diff --git a/erpnext/stock/report/incorrect_serial_no_valuation/incorrect_serial_no_valuation.js b/erpnext/stock/report/incorrect_serial_no_valuation/incorrect_serial_no_valuation.js
index a061d04..51948ca 100644
--- a/erpnext/stock/report/incorrect_serial_no_valuation/incorrect_serial_no_valuation.js
+++ b/erpnext/stock/report/incorrect_serial_no_valuation/incorrect_serial_no_valuation.js
@@ -1,35 +1,34 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Incorrect Serial No Valuation"] = {
-	"filters": [
+	filters: [
 		{
-			label: __('Item Code'),
-			fieldtype: 'Link',
-			fieldname: 'item_code',
-			options: 'Item',
-			get_query: function() {
+			label: __("Item Code"),
+			fieldtype: "Link",
+			fieldname: "item_code",
+			options: "Item",
+			get_query: function () {
 				return {
 					filters: {
-						'has_serial_no': 1
-					}
-				}
-			}
+						has_serial_no: 1,
+					},
+				};
+			},
 		},
 		{
-			label: __('From Date'),
-			fieldtype: 'Date',
-			fieldname: 'from_date',
+			label: __("From Date"),
+			fieldtype: "Date",
+			fieldname: "from_date",
 			reqd: 1,
 			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
 		},
 		{
-			label: __('To Date'),
-			fieldtype: 'Date',
-			fieldname: 'to_date',
+			label: __("To Date"),
+			fieldtype: "Date",
+			fieldname: "to_date",
 			reqd: 1,
 			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
-		}
-	]
+		},
+	],
 };
diff --git a/erpnext/stock/report/incorrect_stock_value_report/incorrect_stock_value_report.js b/erpnext/stock/report/incorrect_stock_value_report/incorrect_stock_value_report.js
index 174d033..0a6ca3f 100644
--- a/erpnext/stock/report/incorrect_stock_value_report/incorrect_stock_value_report.js
+++ b/erpnext/stock/report/incorrect_stock_value_report/incorrect_stock_value_report.js
@@ -1,36 +1,35 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Incorrect Stock Value Report"] = {
-	"filters": [
+	filters: [
 		{
-			"label": __("Company"),
-			"fieldname": "company",
-			"fieldtype": "Link",
-			"options": "Company",
-			"reqd": 1,
-			"default": frappe.defaults.get_user_default("Company")
+			label: __("Company"),
+			fieldname: "company",
+			fieldtype: "Link",
+			options: "Company",
+			reqd: 1,
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
-			"label": __("Account"),
-			"fieldname": "account",
-			"fieldtype": "Link",
-			"options": "Account",
-			get_query: function() {
-				var company = frappe.query_report.get_filter_value('company');
+			label: __("Account"),
+			fieldname: "account",
+			fieldtype: "Link",
+			options: "Account",
+			get_query: function () {
+				var company = frappe.query_report.get_filter_value("company");
 				return {
 					filters: {
-						"account_type": "Stock",
-						"company": company
-					}
-				}
-			}
+						account_type: "Stock",
+						company: company,
+					},
+				};
+			},
 		},
 		{
-			"label": __("From Date"),
-			"fieldname": "from_date",
-			"fieldtype": "Date"
-		}
-	]
+			label: __("From Date"),
+			fieldname: "from_date",
+			fieldtype: "Date",
+		},
+	],
 };
diff --git a/erpnext/stock/report/item_price_stock/item_price_stock.js b/erpnext/stock/report/item_price_stock/item_price_stock.js
index c4684da..72d8d23 100644
--- a/erpnext/stock/report/item_price_stock/item_price_stock.js
+++ b/erpnext/stock/report/item_price_stock/item_price_stock.js
@@ -1,14 +1,13 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Item Price Stock"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"item_code",
-			"label": __("Item"),
-			"fieldtype": "Link",
-			"options": "Item"
-		}
-	]
-}
+			fieldname: "item_code",
+			label: __("Item"),
+			fieldtype: "Link",
+			options: "Item",
+		},
+	],
+};
diff --git a/erpnext/stock/report/item_prices/item_prices.js b/erpnext/stock/report/item_prices/item_prices.js
index 77bca44..868b503 100644
--- a/erpnext/stock/report/item_prices/item_prices.js
+++ b/erpnext/stock/report/item_prices/item_prices.js
@@ -2,16 +2,16 @@
 // For license information, please see license.txt
 
 frappe.query_reports["Item Prices"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname": "items",
-			"label": __("Items Filter"),
-			"fieldtype": "Select",
-			"options": "Enabled Items only\nDisabled Items only\nAll Items",
-			"default": "Enabled Items only",
-			"on_change": function(query_report) {
+			fieldname: "items",
+			label: __("Items Filter"),
+			fieldtype: "Select",
+			options: "Enabled Items only\nDisabled Items only\nAll Items",
+			default: "Enabled Items only",
+			on_change: function (query_report) {
 				query_report.trigger_refresh();
-			}
-		}
-	]
-}
+			},
+		},
+	],
+};
diff --git a/erpnext/stock/report/item_shortage_report/item_shortage_report.js b/erpnext/stock/report/item_shortage_report/item_shortage_report.js
index 5642038..d293b89 100644
--- a/erpnext/stock/report/item_shortage_report/item_shortage_report.js
+++ b/erpnext/stock/report/item_shortage_report/item_shortage_report.js
@@ -1,26 +1,25 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Item Shortage Report"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname": "company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"width": "80",
-			"options": "Company",
-			"reqd": 1,
-			"default": frappe.defaults.get_default("company")
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			width: "80",
+			options: "Company",
+			reqd: 1,
+			default: frappe.defaults.get_default("company"),
 		},
 		{
-			"fieldname": "warehouse",
-			"label": __("Warehouse"),
-			"fieldtype": "MultiSelectList",
-			"width": "100",
-			get_data: function(txt) {
-				return frappe.db.get_link_options('Warehouse', txt);
-			}
-		}
-	]
+			fieldname: "warehouse",
+			label: __("Warehouse"),
+			fieldtype: "MultiSelectList",
+			width: "100",
+			get_data: function (txt) {
+				return frappe.db.get_link_options("Warehouse", txt);
+			},
+		},
+	],
 };
diff --git a/erpnext/stock/report/item_variant_details/item_variant_details.js b/erpnext/stock/report/item_variant_details/item_variant_details.js
index b902294..37c149a 100644
--- a/erpnext/stock/report/item_variant_details/item_variant_details.js
+++ b/erpnext/stock/report/item_variant_details/item_variant_details.js
@@ -1,9 +1,8 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Item Variant Details"] = {
-	"filters": [
+	filters: [
 		{
 			reqd: 1,
 			default: "",
@@ -13,9 +12,9 @@
 			fieldtype: "Link",
 			get_query: () => {
 				return {
-					filters: { "has_variants": 1 }
-				}
-			}
-		}
-	]
-}
+					filters: { has_variants: 1 },
+				};
+			},
+		},
+	],
+};
diff --git a/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.js b/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.js
index 3f8d90d..8d46b14 100644
--- a/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.js
+++ b/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.js
@@ -2,31 +2,31 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.query_reports["Itemwise Recommended Reorder Level"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			default: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today()
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.get_today(),
 		},
 		{
-			"fieldname":"item_group",
-			"label": __("Item Group"),
-			"fieldtype": "Link",
-			"options": "Item Group",
-			"reqd": 1
+			fieldname: "item_group",
+			label: __("Item Group"),
+			fieldtype: "Link",
+			options: "Item Group",
+			reqd: 1,
 		},
 		{
-			"fieldname":"brand",
-			"label": __("Brand"),
-			"fieldtype": "Link",
-			"options": "Brand"
-		}
-	]
-}
+			fieldname: "brand",
+			label: __("Brand"),
+			fieldtype: "Link",
+			options: "Brand",
+		},
+	],
+};
diff --git a/erpnext/stock/report/product_bundle_balance/product_bundle_balance.js b/erpnext/stock/report/product_bundle_balance/product_bundle_balance.js
index 4458a72..5cef5c7 100644
--- a/erpnext/stock/report/product_bundle_balance/product_bundle_balance.js
+++ b/erpnext/stock/report/product_bundle_balance/product_bundle_balance.js
@@ -2,51 +2,51 @@
 // For license information, please see license.txt
 
 frappe.query_reports["Product Bundle Balance"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"date",
-			"label": __("Date"),
-			"fieldtype": "Date",
-			"width": "80",
-			"reqd": 1,
-			"default": frappe.datetime.get_today(),
+			fieldname: "date",
+			label: __("Date"),
+			fieldtype: "Date",
+			width: "80",
+			reqd: 1,
+			default: frappe.datetime.get_today(),
 		},
 		{
-			"fieldname": "item_code",
-			"label": __("Item"),
-			"fieldtype": "Link",
-			"width": "80",
-			"options": "Item",
-			"get_query": function() {
+			fieldname: "item_code",
+			label: __("Item"),
+			fieldtype: "Link",
+			width: "80",
+			options: "Item",
+			get_query: function () {
 				return {
 					query: "erpnext.controllers.queries.item_query",
-					filters: {"is_stock_item": 0}
+					filters: { is_stock_item: 0 },
 				};
-			}
+			},
 		},
 		{
-			"fieldname": "item_group",
-			"label": __("Item Group"),
-			"fieldtype": "Link",
-			"width": "80",
-			"options": "Item Group"
+			fieldname: "item_group",
+			label: __("Item Group"),
+			fieldtype: "Link",
+			width: "80",
+			options: "Item Group",
 		},
 		{
-			"fieldname":"brand",
-			"label": __("Brand"),
-			"fieldtype": "Link",
-			"options": "Brand"
+			fieldname: "brand",
+			label: __("Brand"),
+			fieldtype: "Link",
+			options: "Brand",
 		},
 		{
-			"fieldname": "warehouse",
-			"label": __("Warehouse"),
-			"fieldtype": "Link",
-			"width": "80",
-			"options": "Warehouse"
+			fieldname: "warehouse",
+			label: __("Warehouse"),
+			fieldtype: "Link",
+			width: "80",
+			options: "Warehouse",
 		},
 	],
-	"initial_depth": 0,
-	"formatter": function(value, row, column, data, default_formatter) {
+	initial_depth: 0,
+	formatter: function (value, row, column, data, default_formatter) {
 		value = default_formatter(value, row, column, data);
 		if (!data.parent_item) {
 			value = $(`<span>${value}</span>`);
@@ -54,5 +54,5 @@
 			value = $value.wrap("<p></p>").parent().html();
 		}
 		return value;
-	}
+	},
 };
diff --git a/erpnext/stock/report/purchase_receipt_trends/purchase_receipt_trends.js b/erpnext/stock/report/purchase_receipt_trends/purchase_receipt_trends.js
index 695efac..bddfe5d 100644
--- a/erpnext/stock/report/purchase_receipt_trends/purchase_receipt_trends.js
+++ b/erpnext/stock/report/purchase_receipt_trends/purchase_receipt_trends.js
@@ -1,8 +1,8 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.require("assets/erpnext/js/purchase_trends_filters.js", function() {
+frappe.require("assets/erpnext/js/purchase_trends_filters.js", function () {
 	frappe.query_reports["Purchase Receipt Trends"] = {
-		filters: erpnext.get_purchase_trends_filters()
-	}
+		filters: erpnext.get_purchase_trends_filters(),
+	};
 });
diff --git a/erpnext/stock/report/reserved_stock/reserved_stock.js b/erpnext/stock/report/reserved_stock/reserved_stock.js
index 2b075e2..29a97ad 100644
--- a/erpnext/stock/report/reserved_stock/reserved_stock.js
+++ b/erpnext/stock/report/reserved_stock/reserved_stock.js
@@ -15,10 +15,7 @@
 			fieldname: "from_date",
 			label: __("From Date"),
 			fieldtype: "Date",
-			default: frappe.datetime.add_months(
-				frappe.datetime.get_today(),
-				-1
-			),
+			default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
 			reqd: 1,
 		},
 		{
@@ -72,7 +69,7 @@
 			get_query: () => ({
 				filters: {
 					name: ["in", ["Sales Order"]],
-				}
+				},
 			}),
 		},
 		{
@@ -98,7 +95,7 @@
 			get_query: () => ({
 				filters: {
 					name: ["in", ["Pick List", "Purchase Receipt"]],
-				}
+				},
 			}),
 		},
 		{
@@ -126,13 +123,7 @@
 			fieldname: "status",
 			label: __("Status"),
 			fieldtype: "Select",
-			options: [
-				"",
-				"Partially Reserved",
-				"Reserved",
-				"Partially Delivered",
-				"Delivered",
-			],
+			options: ["", "Partially Reserved", "Reserved", "Partially Delivered", "Delivered"],
 		},
 		{
 			fieldname: "project",
@@ -165,17 +156,14 @@
 						value = "<span style='color:green'>" + value + "</span>";
 						break;
 				}
-			}
-			else if (column.fieldname == "delivered_qty") {
+			} else if (column.fieldname == "delivered_qty") {
 				if (data.delivered_qty > 0) {
 					if (data.reserved_qty > data.delivered_qty) {
 						value = "<span style='color:blue'>" + value + "</span>";
-					}
-					else {
+					} else {
 						value = "<span style='color:green'>" + value + "</span>";
 					}
-				}
-				else {
+				} else {
 					value = "<span style='color:red'>" + value + "</span>";
 				}
 			}
diff --git a/erpnext/stock/report/serial_and_batch_summary/serial_and_batch_summary.js b/erpnext/stock/report/serial_and_batch_summary/serial_and_batch_summary.js
index 10e5925..3b66cb0 100644
--- a/erpnext/stock/report/serial_and_batch_summary/serial_and_batch_summary.js
+++ b/erpnext/stock/report/serial_and_batch_summary/serial_and_batch_summary.js
@@ -3,93 +3,93 @@
 /* eslint-disable */
 
 frappe.query_reports["Serial and Batch Summary"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company"),
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today()
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.get_today(),
 		},
 		{
-			"fieldname":"item_code",
-			"label": __("Item"),
-			"fieldtype": "Link",
-			"options": "Item",
+			fieldname: "item_code",
+			label: __("Item"),
+			fieldtype: "Link",
+			options: "Item",
 		},
 		{
-			"fieldname":"warehouse",
-			"label": __("Warehouse"),
-			"fieldtype": "Link",
-			"options": "Warehouse",
+			fieldname: "warehouse",
+			label: __("Warehouse"),
+			fieldtype: "Link",
+			options: "Warehouse",
 		},
 		{
-			"fieldname":"voucher_type",
-			"label": __("Voucher Type"),
-			"fieldtype": "Link",
-			"options": "DocType",
-			get_query: function() {
+			fieldname: "voucher_type",
+			label: __("Voucher Type"),
+			fieldtype: "Link",
+			options: "DocType",
+			get_query: function () {
 				return {
 					query: "erpnext.stock.report.serial_and_batch_summary.serial_and_batch_summary.get_voucher_type",
-				}
-			}
+				};
+			},
 		},
 		{
-			"fieldname":"voucher_no",
-			"label": __("Voucher No"),
-			"fieldtype": "MultiSelectList",
-			get_data: function(txt) {
+			fieldname: "voucher_no",
+			label: __("Voucher No"),
+			fieldtype: "MultiSelectList",
+			get_data: function (txt) {
 				if (!frappe.query_report.filters) return;
 
-				let voucher_type = frappe.query_report.get_filter_value('voucher_type');
+				let voucher_type = frappe.query_report.get_filter_value("voucher_type");
 				if (!voucher_type) return;
 
 				return frappe.db.get_link_options(voucher_type, txt);
 			},
 		},
 		{
-			"fieldname":"serial_no",
-			"label": __("Serial No"),
-			"fieldtype": "Link",
-			"options": "Serial No",
-			get_query: function() {
+			fieldname: "serial_no",
+			label: __("Serial No"),
+			fieldtype: "Link",
+			options: "Serial No",
+			get_query: function () {
 				return {
 					query: "erpnext.stock.report.serial_and_batch_summary.serial_and_batch_summary.get_serial_nos",
 					filters: {
-						"item_code": frappe.query_report.get_filter_value('item_code'),
-						"voucher_type": frappe.query_report.get_filter_value('voucher_type'),
-						"voucher_no": frappe.query_report.get_filter_value('voucher_no'),
-					}
-				}
-			}
+						item_code: frappe.query_report.get_filter_value("item_code"),
+						voucher_type: frappe.query_report.get_filter_value("voucher_type"),
+						voucher_no: frappe.query_report.get_filter_value("voucher_no"),
+					},
+				};
+			},
 		},
 		{
-			"fieldname":"batch_no",
-			"label": __("Batch No"),
-			"fieldtype": "Link",
-			"options": "Batch",
-			get_query: function() {
+			fieldname: "batch_no",
+			label: __("Batch No"),
+			fieldtype: "Link",
+			options: "Batch",
+			get_query: function () {
 				return {
 					query: "erpnext.stock.report.serial_and_batch_summary.serial_and_batch_summary.get_batch_nos",
 					filters: {
-						"item_code": frappe.query_report.get_filter_value('item_code'),
-						"voucher_type": frappe.query_report.get_filter_value('voucher_type'),
-						"voucher_no": frappe.query_report.get_filter_value('voucher_no'),
-					}
-				}
-			}
-		}
-	]
+						item_code: frappe.query_report.get_filter_value("item_code"),
+						voucher_type: frappe.query_report.get_filter_value("voucher_type"),
+						voucher_no: frappe.query_report.get_filter_value("voucher_no"),
+					},
+				};
+			},
+		},
+	],
 };
diff --git a/erpnext/stock/report/serial_no_ledger/serial_no_ledger.js b/erpnext/stock/report/serial_no_ledger/serial_no_ledger.js
index fe977c6..376fe41 100644
--- a/erpnext/stock/report/serial_no_ledger/serial_no_ledger.js
+++ b/erpnext/stock/report/serial_no_ledger/serial_no_ledger.js
@@ -1,70 +1,69 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Serial No Ledger"] = {
-	"filters": [
+	filters: [
 		{
-			'label': __('Item Code'),
-			'fieldtype': 'Link',
-			'fieldname': 'item_code',
-			'reqd': 1,
-			'options': 'Item',
-			get_query: function() {
+			label: __("Item Code"),
+			fieldtype: "Link",
+			fieldname: "item_code",
+			reqd: 1,
+			options: "Item",
+			get_query: function () {
 				return {
 					filters: {
-						'has_serial_no': 1
-					}
-				}
-			}
+						has_serial_no: 1,
+					},
+				};
+			},
 		},
 		{
-			'label': __('Warehouse'),
-			'fieldtype': 'Link',
-			'fieldname': 'warehouse',
-			'options': 'Warehouse',
-			get_query: function() {
-				let company = frappe.query_report.get_filter_value('company');
+			label: __("Warehouse"),
+			fieldtype: "Link",
+			fieldname: "warehouse",
+			options: "Warehouse",
+			get_query: function () {
+				let company = frappe.query_report.get_filter_value("company");
 
 				if (company) {
 					return {
 						filters: {
-							'company': company
-						}
-					}
+							company: company,
+						},
+					};
 				}
-			}
+			},
 		},
 		{
-			'label': __('Serial No'),
-			'fieldtype': 'Link',
-			'fieldname': 'serial_no',
-			'options': 'Serial No',
-			get_query: function() {
-				let item_code = frappe.query_report.get_filter_value('item_code');
-				let warehouse = frappe.query_report.get_filter_value('warehouse');
+			label: __("Serial No"),
+			fieldtype: "Link",
+			fieldname: "serial_no",
+			options: "Serial No",
+			get_query: function () {
+				let item_code = frappe.query_report.get_filter_value("item_code");
+				let warehouse = frappe.query_report.get_filter_value("warehouse");
 
-				let query_filters = {'item_code': item_code};
+				let query_filters = { item_code: item_code };
 				if (warehouse) {
-					query_filters['warehouse'] = warehouse;
+					query_filters["warehouse"] = warehouse;
 				}
 
 				return {
-					filters: query_filters
-				}
-			}
+					filters: query_filters,
+				};
+			},
 		},
 		{
-			'label': __('As On Date'),
-			'fieldtype': 'Date',
-			'fieldname': 'posting_date',
-			'default': frappe.datetime.get_today()
+			label: __("As On Date"),
+			fieldtype: "Date",
+			fieldname: "posting_date",
+			default: frappe.datetime.get_today(),
 		},
 		{
-			'label': __('Posting Time'),
-			'fieldtype': 'Time',
-			'fieldname': 'posting_time',
-			'default': frappe.datetime.get_time()
+			label: __("Posting Time"),
+			fieldtype: "Time",
+			fieldname: "posting_time",
+			default: frappe.datetime.get_time(),
 		},
-	]
+	],
 };
diff --git a/erpnext/stock/report/stock_ageing/stock_ageing.js b/erpnext/stock/report/stock_ageing/stock_ageing.js
index db463b7..6410841 100644
--- a/erpnext/stock/report/stock_ageing/stock_ageing.js
+++ b/erpnext/stock/report/stock_ageing/stock_ageing.js
@@ -2,74 +2,74 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.query_reports["Stock Ageing"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company"),
-			"reqd": 1
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
+			reqd: 1,
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("As On Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today(),
-			"reqd": 1
+			fieldname: "to_date",
+			label: __("As On Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.get_today(),
+			reqd: 1,
 		},
 		{
-			"fieldname":"warehouse",
-			"label": __("Warehouse"),
-			"fieldtype": "Link",
-			"options": "Warehouse",
+			fieldname: "warehouse",
+			label: __("Warehouse"),
+			fieldtype: "Link",
+			options: "Warehouse",
 			get_query: () => {
 				const company = frappe.query_report.get_filter_value("company");
 				return {
 					filters: {
-						...company && {company},
-					}
+						...(company && { company }),
+					},
 				};
-			}
+			},
 		},
 		{
-			"fieldname":"item_code",
-			"label": __("Item"),
-			"fieldtype": "Link",
-			"options": "Item"
+			fieldname: "item_code",
+			label: __("Item"),
+			fieldtype: "Link",
+			options: "Item",
 		},
 		{
-			"fieldname":"brand",
-			"label": __("Brand"),
-			"fieldtype": "Link",
-			"options": "Brand"
+			fieldname: "brand",
+			label: __("Brand"),
+			fieldtype: "Link",
+			options: "Brand",
 		},
 		{
-			"fieldname":"range1",
-			"label": __("Ageing Range 1"),
-			"fieldtype": "Int",
-			"default": "30",
-			"reqd": 1
+			fieldname: "range1",
+			label: __("Ageing Range 1"),
+			fieldtype: "Int",
+			default: "30",
+			reqd: 1,
 		},
 		{
-			"fieldname":"range2",
-			"label": __("Ageing Range 2"),
-			"fieldtype": "Int",
-			"default": "60",
-			"reqd": 1
+			fieldname: "range2",
+			label: __("Ageing Range 2"),
+			fieldtype: "Int",
+			default: "60",
+			reqd: 1,
 		},
 		{
-			"fieldname":"range3",
-			"label": __("Ageing Range 3"),
-			"fieldtype": "Int",
-			"default": "90",
-			"reqd": 1
+			fieldname: "range3",
+			label: __("Ageing Range 3"),
+			fieldtype: "Int",
+			default: "90",
+			reqd: 1,
 		},
 		{
-			"fieldname":"show_warehouse_wise_stock",
-			"label": __("Show Warehouse-wise Stock"),
-			"fieldtype": "Check",
-			"default": 0
-		}
-	]
-}
+			fieldname: "show_warehouse_wise_stock",
+			label: __("Show Warehouse-wise Stock"),
+			fieldtype: "Check",
+			default: 0,
+		},
+	],
+};
diff --git a/erpnext/stock/report/stock_analytics/stock_analytics.js b/erpnext/stock/report/stock_analytics/stock_analytics.js
index e033fd9..dae64d9 100644
--- a/erpnext/stock/report/stock_analytics/stock_analytics.js
+++ b/erpnext/stock/report/stock_analytics/stock_analytics.js
@@ -1,40 +1,39 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Stock Analytics"] = {
-	"filters": [
+	filters: [
 		{
 			fieldname: "item_group",
 			label: __("Item Group"),
 			fieldtype: "Link",
-			options:"Item Group",
+			options: "Item Group",
 			default: "",
 		},
 		{
 			fieldname: "item_code",
 			label: __("Item"),
 			fieldtype: "Link",
-			options:"Item",
+			options: "Item",
 			default: "",
-			get_query: () => ({filters: { 'is_stock_item': 1 }}),
+			get_query: () => ({ filters: { is_stock_item: 1 } }),
 		},
 		{
 			fieldname: "value_quantity",
 			label: __("Value Or Qty"),
 			fieldtype: "Select",
 			options: [
-				{ "value": "Value", "label": __("Value") },
-				{ "value": "Quantity", "label": __("Quantity") }
+				{ value: "Value", label: __("Value") },
+				{ value: "Quantity", label: __("Quantity") },
 			],
 			default: "Value",
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			fieldname: "brand",
 			label: __("Brand"),
 			fieldtype: "Link",
-			options:"Brand",
+			options: "Brand",
 			default: "",
 		},
 		{
@@ -51,92 +50,91 @@
 			fieldtype: "Link",
 			options: "Warehouse",
 			default: "",
-			get_query: function() {
-				const company = frappe.query_report.get_filter_value('company');
+			get_query: function () {
+				const company = frappe.query_report.get_filter_value("company");
 				return {
-					filters: { 'company': company }
-				}
-			}
+					filters: { company: company },
+				};
+			},
 		},
 		{
 			fieldname: "from_date",
 			label: __("From Date"),
 			fieldtype: "Date",
 			default: frappe.defaults.get_global_default("year_start_date"),
-			reqd: 1
+			reqd: 1,
 		},
 		{
-			fieldname:"to_date",
+			fieldname: "to_date",
 			label: __("To Date"),
 			fieldtype: "Date",
 			default: frappe.defaults.get_global_default("year_end_date"),
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			fieldname: "range",
 			label: __("Range"),
 			fieldtype: "Select",
 			options: [
-				{ "value": "Weekly", "label": __("Weekly") },
-				{ "value": "Monthly", "label": __("Monthly") },
-				{ "value": "Quarterly", "label": __("Quarterly") },
-				{ "value": "Yearly", "label": __("Yearly") }
+				{ value: "Weekly", label: __("Weekly") },
+				{ value: "Monthly", label: __("Monthly") },
+				{ value: "Quarterly", label: __("Quarterly") },
+				{ value: "Yearly", label: __("Yearly") },
 			],
 			default: "Monthly",
-			reqd: 1
-		}
+			reqd: 1,
+		},
 	],
-	after_datatable_render: function(datatable_obj) {
-		$(datatable_obj.wrapper).find(".dt-row-0").find('input[type=checkbox]').click();
+	after_datatable_render: function (datatable_obj) {
+		$(datatable_obj.wrapper).find(".dt-row-0").find("input[type=checkbox]").click();
 	},
 	get_datatable_options(options) {
 		return Object.assign(options, {
 			checkboxColumn: true,
 			events: {
-				onCheckRow: function(data) {
+				onCheckRow: function (data) {
 					let row_name = data[2].content;
 					let row_values = data.slice(7).map(function (column) {
 						return column.content;
-					})
-					let entry  = {
-						'name':row_name,
-						'values':row_values
-					}
+					});
+					let entry = {
+						name: row_name,
+						values: row_values,
+					};
 
 					let raw_data = frappe.query_report.chart.data;
 					let new_datasets = raw_data.datasets;
 
 					var found = false;
 
-					for(var i=0; i < new_datasets.length;i++){
-						if(new_datasets[i].name == row_name){
+					for (var i = 0; i < new_datasets.length; i++) {
+						if (new_datasets[i].name == row_name) {
 							found = true;
-							new_datasets.splice(i,1);
+							new_datasets.splice(i, 1);
 							break;
 						}
 					}
 
-					if(!found){
+					if (!found) {
 						new_datasets.push(entry);
 					}
 
 					let new_data = {
 						labels: raw_data.labels,
-						datasets: new_datasets
-					}
+						datasets: new_datasets,
+					};
 
 					setTimeout(() => {
-						frappe.query_report.chart.update(new_data)
-					},500)
-
+						frappe.query_report.chart.update(new_data);
+					}, 500);
 
 					setTimeout(() => {
 						frappe.query_report.chart.draw(true);
-					}, 1000)
+					}, 1000);
 
 					frappe.query_report.raw_chart_data = new_data;
 				},
-			}
+			},
 		});
-	}
-}
+	},
+};
diff --git a/erpnext/stock/report/stock_and_account_value_comparison/stock_and_account_value_comparison.js b/erpnext/stock/report/stock_and_account_value_comparison/stock_and_account_value_comparison.js
index ffef11a..1e2022e 100644
--- a/erpnext/stock/report/stock_and_account_value_comparison/stock_and_account_value_comparison.js
+++ b/erpnext/stock/report/stock_and_account_value_comparison/stock_and_account_value_comparison.js
@@ -1,37 +1,36 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Stock and Account Value Comparison"] = {
-	"filters": [
+	filters: [
 		{
-			"label": __("Company"),
-			"fieldname": "company",
-			"fieldtype": "Link",
-			"options": "Company",
-			"reqd": 1,
-			"default": frappe.defaults.get_user_default("Company")
+			label: __("Company"),
+			fieldname: "company",
+			fieldtype: "Link",
+			options: "Company",
+			reqd: 1,
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
-			"label": __("Account"),
-			"fieldname": "account",
-			"fieldtype": "Link",
-			"options": "Account",
-			get_query: function() {
-				var company = frappe.query_report.get_filter_value('company');
+			label: __("Account"),
+			fieldname: "account",
+			fieldtype: "Link",
+			options: "Account",
+			get_query: function () {
+				var company = frappe.query_report.get_filter_value("company");
 				return {
 					filters: {
-						"account_type": "Stock",
-						"company": company
-					}
-				}
-			}
+						account_type: "Stock",
+						company: company,
+					},
+				};
+			},
 		},
 		{
-			"label": __("As On Date"),
-			"fieldname": "as_on_date",
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today(),
+			label: __("As On Date"),
+			fieldname: "as_on_date",
+			fieldtype: "Date",
+			default: frappe.datetime.get_today(),
 		},
 	],
 
@@ -42,7 +41,7 @@
 	},
 
 	onload(report) {
-		report.page.add_inner_button(__("Create Reposting Entries"), function() {
+		report.page.add_inner_button(__("Create Reposting Entries"), function () {
 			let message = `<div>
 				<p>
 					Reposting Entries will change the value of
@@ -54,7 +53,7 @@
 				</div>
 			`;
 			let indexes = frappe.query_report.datatable.rowmanager.getCheckedRows();
-			let selected_rows = indexes.map(i => frappe.query_report.data[i]);
+			let selected_rows = indexes.map((i) => frappe.query_report.data[i]);
 
 			if (!selected_rows.length) {
 				frappe.throw(__("Please select rows to create Reposting Entries"));
@@ -65,11 +64,10 @@
 					method: "erpnext.stock.report.stock_and_account_value_comparison.stock_and_account_value_comparison.create_reposting_entries",
 					args: {
 						rows: selected_rows,
-						company: frappe.query_report.get_filter_values().company
-					}
+						company: frappe.query_report.get_filter_values().company,
+					},
 				});
-
 			});
 		});
-	}
+	},
 };
diff --git a/erpnext/stock/report/stock_balance/stock_balance.js b/erpnext/stock/report/stock_balance/stock_balance.js
index fe6e83e..ca2c053 100644
--- a/erpnext/stock/report/stock_balance/stock_balance.js
+++ b/erpnext/stock/report/stock_balance/stock_balance.js
@@ -2,119 +2,118 @@
 // For license information, please see license.txt
 
 frappe.query_reports["Stock Balance"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname": "company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"width": "80",
-			"options": "Company",
-			"default": frappe.defaults.get_default("company")
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			width: "80",
+			options: "Company",
+			default: frappe.defaults.get_default("company"),
 		},
 		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"width": "80",
-			"reqd": 1,
-			"default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			width: "80",
+			reqd: 1,
+			default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"width": "80",
-			"reqd": 1,
-			"default": frappe.datetime.get_today()
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			width: "80",
+			reqd: 1,
+			default: frappe.datetime.get_today(),
 		},
 		{
-			"fieldname": "item_group",
-			"label": __("Item Group"),
-			"fieldtype": "Link",
-			"width": "80",
-			"options": "Item Group"
+			fieldname: "item_group",
+			label: __("Item Group"),
+			fieldtype: "Link",
+			width: "80",
+			options: "Item Group",
 		},
 		{
-			"fieldname": "item_code",
-			"label": __("Item"),
-			"fieldtype": "Link",
-			"width": "80",
-			"options": "Item",
-			"get_query": function() {
+			fieldname: "item_code",
+			label: __("Item"),
+			fieldtype: "Link",
+			width: "80",
+			options: "Item",
+			get_query: function () {
 				return {
 					query: "erpnext.controllers.queries.item_query",
 				};
-			}
+			},
 		},
 		{
-			"fieldname": "warehouse",
-			"label": __("Warehouse"),
-			"fieldtype": "Link",
-			"width": "80",
-			"options": "Warehouse",
+			fieldname: "warehouse",
+			label: __("Warehouse"),
+			fieldtype: "Link",
+			width: "80",
+			options: "Warehouse",
 			get_query: () => {
 				let warehouse_type = frappe.query_report.get_filter_value("warehouse_type");
 				let company = frappe.query_report.get_filter_value("company");
 
 				return {
 					filters: {
-						...warehouse_type && {warehouse_type},
-						...company && {company}
-					}
-				}
-			}
+						...(warehouse_type && { warehouse_type }),
+						...(company && { company }),
+					},
+				};
+			},
 		},
 		{
-			"fieldname": "warehouse_type",
-			"label": __("Warehouse Type"),
-			"fieldtype": "Link",
-			"width": "80",
-			"options": "Warehouse Type"
+			fieldname: "warehouse_type",
+			label: __("Warehouse Type"),
+			fieldtype: "Link",
+			width: "80",
+			options: "Warehouse Type",
 		},
 		{
-			"fieldname": "valuation_field_type",
-			"label": __("Valuation Field Type"),
-			"fieldtype": "Select",
-			"width": "80",
-			"options": "Currency\nFloat",
-			"default": "Currency"
+			fieldname: "valuation_field_type",
+			label: __("Valuation Field Type"),
+			fieldtype: "Select",
+			width: "80",
+			options: "Currency\nFloat",
+			default: "Currency",
 		},
 		{
-			"fieldname":"include_uom",
-			"label": __("Include UOM"),
-			"fieldtype": "Link",
-			"options": "UOM"
+			fieldname: "include_uom",
+			label: __("Include UOM"),
+			fieldtype: "Link",
+			options: "UOM",
 		},
 		{
-			"fieldname": "show_variant_attributes",
-			"label": __("Show Variant Attributes"),
-			"fieldtype": "Check"
+			fieldname: "show_variant_attributes",
+			label: __("Show Variant Attributes"),
+			fieldtype: "Check",
 		},
 		{
-			"fieldname": 'show_stock_ageing_data',
-			"label": __('Show Stock Ageing Data'),
-			"fieldtype": 'Check'
+			fieldname: "show_stock_ageing_data",
+			label: __("Show Stock Ageing Data"),
+			fieldtype: "Check",
 		},
 		{
-			"fieldname": 'ignore_closing_balance',
-			"label": __('Ignore Closing Balance'),
-			"fieldtype": 'Check',
-			"default": 0
+			fieldname: "ignore_closing_balance",
+			label: __("Ignore Closing Balance"),
+			fieldtype: "Check",
+			default: 0,
 		},
 	],
 
-	"formatter": function (value, row, column, data, default_formatter) {
+	formatter: function (value, row, column, data, default_formatter) {
 		value = default_formatter(value, row, column, data);
 
 		if (column.fieldname == "out_qty" && data && data.out_qty > 0) {
 			value = "<span style='color:red'>" + value + "</span>";
-		}
-		else if (column.fieldname == "in_qty" && data && data.in_qty > 0) {
+		} else if (column.fieldname == "in_qty" && data && data.in_qty > 0) {
 			value = "<span style='color:green'>" + value + "</span>";
 		}
 
 		return value;
-	}
+	},
 };
 
-erpnext.utils.add_inventory_dimensions('Stock Balance', 8);
\ No newline at end of file
+erpnext.utils.add_inventory_dimensions("Stock Balance", 8);
diff --git a/erpnext/stock/report/stock_ledger/stock_ledger.js b/erpnext/stock/report/stock_ledger/stock_ledger.js
index baccd55..d4c11de 100644
--- a/erpnext/stock/report/stock_ledger/stock_ledger.js
+++ b/erpnext/stock/report/stock_ledger/stock_ledger.js
@@ -2,116 +2,115 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.query_reports["Stock Ledger"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company"),
-			"reqd": 1
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
+			reqd: 1,
 		},
 		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
-			"reqd": 1
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+			reqd: 1,
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"default": frappe.datetime.get_today(),
-			"reqd": 1
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.get_today(),
+			reqd: 1,
 		},
 		{
-			"fieldname":"warehouse",
-			"label": __("Warehouse"),
-			"fieldtype": "Link",
-			"options": "Warehouse",
-			"get_query": function() {
-				const company = frappe.query_report.get_filter_value('company');
+			fieldname: "warehouse",
+			label: __("Warehouse"),
+			fieldtype: "Link",
+			options: "Warehouse",
+			get_query: function () {
+				const company = frappe.query_report.get_filter_value("company");
 				return {
-					filters: { 'company': company }
-				}
-			}
+					filters: { company: company },
+				};
+			},
 		},
 		{
-			"fieldname":"item_code",
-			"label": __("Item"),
-			"fieldtype": "Link",
-			"options": "Item",
-			"get_query": function() {
+			fieldname: "item_code",
+			label: __("Item"),
+			fieldtype: "Link",
+			options: "Item",
+			get_query: function () {
 				return {
-					query: "erpnext.controllers.queries.item_query"
-				}
-			}
+					query: "erpnext.controllers.queries.item_query",
+				};
+			},
 		},
 		{
-			"fieldname":"item_group",
-			"label": __("Item Group"),
-			"fieldtype": "Link",
-			"options": "Item Group"
+			fieldname: "item_group",
+			label: __("Item Group"),
+			fieldtype: "Link",
+			options: "Item Group",
 		},
 		{
-			"fieldname":"batch_no",
-			"label": __("Batch No"),
-			"fieldtype": "Link",
-			"options": "Batch",
+			fieldname: "batch_no",
+			label: __("Batch No"),
+			fieldtype: "Link",
+			options: "Batch",
 			on_change() {
-				const batch_no = frappe.query_report.get_filter_value('batch_no');
+				const batch_no = frappe.query_report.get_filter_value("batch_no");
 				if (batch_no) {
-					frappe.query_report.set_filter_value('segregate_serial_batch_bundle', 1);
+					frappe.query_report.set_filter_value("segregate_serial_batch_bundle", 1);
 				} else {
-					frappe.query_report.set_filter_value('segregate_serial_batch_bundle', 0);
+					frappe.query_report.set_filter_value("segregate_serial_batch_bundle", 0);
 				}
-			}
+			},
 		},
 		{
-			"fieldname":"brand",
-			"label": __("Brand"),
-			"fieldtype": "Link",
-			"options": "Brand"
+			fieldname: "brand",
+			label: __("Brand"),
+			fieldtype: "Link",
+			options: "Brand",
 		},
 		{
-			"fieldname":"voucher_no",
-			"label": __("Voucher #"),
-			"fieldtype": "Data"
+			fieldname: "voucher_no",
+			label: __("Voucher #"),
+			fieldtype: "Data",
 		},
 		{
-			"fieldname":"project",
-			"label": __("Project"),
-			"fieldtype": "Link",
-			"options": "Project"
+			fieldname: "project",
+			label: __("Project"),
+			fieldtype: "Link",
+			options: "Project",
 		},
 		{
-			"fieldname":"include_uom",
-			"label": __("Include UOM"),
-			"fieldtype": "Link",
-			"options": "UOM"
+			fieldname: "include_uom",
+			label: __("Include UOM"),
+			fieldtype: "Link",
+			options: "UOM",
 		},
 		{
-			"fieldname": "valuation_field_type",
-			"label": __("Valuation Field Type"),
-			"fieldtype": "Select",
-			"width": "80",
-			"options": "Currency\nFloat",
-			"default": "Currency"
+			fieldname: "valuation_field_type",
+			label: __("Valuation Field Type"),
+			fieldtype: "Select",
+			width: "80",
+			options: "Currency\nFloat",
+			default: "Currency",
 		},
 		{
-			"fieldname": "segregate_serial_batch_bundle",
-			"label": __("Segregate Serial / Batch Bundle"),
-			"fieldtype": "Check",
-			"default": 0
-		}
+			fieldname: "segregate_serial_batch_bundle",
+			label: __("Segregate Serial / Batch Bundle"),
+			fieldtype: "Check",
+			default: 0,
+		},
 	],
-	"formatter": function (value, row, column, data, default_formatter) {
+	formatter: function (value, row, column, data, default_formatter) {
 		value = default_formatter(value, row, column, data);
 		if (column.fieldname == "out_qty" && data && data.out_qty < 0) {
 			value = "<span style='color:red'>" + value + "</span>";
-		}
-		else if (column.fieldname == "in_qty" && data && data.in_qty > 0) {
+		} else if (column.fieldname == "in_qty" && data && data.in_qty > 0) {
 			value = "<span style='color:green'>" + value + "</span>";
 		}
 
@@ -119,4 +118,4 @@
 	},
 };
 
-erpnext.utils.add_inventory_dimensions('Stock Ledger', 10);
\ No newline at end of file
+erpnext.utils.add_inventory_dimensions("Stock Ledger", 10);
diff --git a/erpnext/stock/report/stock_ledger_invariant_check/stock_ledger_invariant_check.js b/erpnext/stock/report/stock_ledger_invariant_check/stock_ledger_invariant_check.js
index 3f67bff..1b05d3a 100644
--- a/erpnext/stock/report/stock_ledger_invariant_check/stock_ledger_invariant_check.js
+++ b/erpnext/stock/report/stock_ledger_invariant_check/stock_ledger_invariant_check.js
@@ -1,44 +1,43 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 const DIFFERENCE_FIELD_NAMES = [
-	'difference_in_qty',
-	'fifo_qty_diff',
-	'fifo_value_diff',
-	'fifo_valuation_diff',
-	'valuation_diff',
-	'fifo_difference_diff',
-	'diff_value_diff'
+	"difference_in_qty",
+	"fifo_qty_diff",
+	"fifo_value_diff",
+	"fifo_valuation_diff",
+	"valuation_diff",
+	"fifo_difference_diff",
+	"diff_value_diff",
 ];
 
-frappe.query_reports['Stock Ledger Invariant Check'] = {
-	'filters': [
+frappe.query_reports["Stock Ledger Invariant Check"] = {
+	filters: [
 		{
-			'fieldname': 'item_code',
-			'fieldtype': 'Link',
-			'label': 'Item',
-			'mandatory': 1,
-			'options': 'Item',
-			get_query: function() {
+			fieldname: "item_code",
+			fieldtype: "Link",
+			label: "Item",
+			mandatory: 1,
+			options: "Item",
+			get_query: function () {
 				return {
-					filters: {is_stock_item: 1, has_serial_no: 0}
-				}
-			}
+					filters: { is_stock_item: 1, has_serial_no: 0 },
+				};
+			},
 		},
 		{
-			'fieldname': 'warehouse',
-			'fieldtype': 'Link',
-			'label': 'Warehouse',
-			'mandatory': 1,
-			'options': 'Warehouse',
-		}
+			fieldname: "warehouse",
+			fieldtype: "Link",
+			label: "Warehouse",
+			mandatory: 1,
+			options: "Warehouse",
+		},
 	],
 
-	formatter (value, row, column, data, default_formatter) {
+	formatter(value, row, column, data, default_formatter) {
 		value = default_formatter(value, row, column, data);
 		if (DIFFERENCE_FIELD_NAMES.includes(column.fieldname) && Math.abs(data[column.fieldname]) > 0.001) {
-			value = '<span style="color:red">' + value + '</span>';
+			value = '<span style="color:red">' + value + "</span>";
 		}
 		return value;
 	},
@@ -50,7 +49,7 @@
 	},
 
 	onload(report) {
-		report.page.add_inner_button(__('Create Reposting Entry'), () => {
+		report.page.add_inner_button(__("Create Reposting Entry"), () => {
 			let message = `
 				<div>
 					<p>
@@ -62,23 +61,21 @@
 					<p>Are you sure you want to create a Reposting Entry?</p>
 				</div>`;
 			let indexes = frappe.query_report.datatable.rowmanager.getCheckedRows();
-			let selected_rows = indexes.map(i => frappe.query_report.data[i]);
+			let selected_rows = indexes.map((i) => frappe.query_report.data[i]);
 
 			if (!selected_rows.length) {
-				frappe.throw(__('Please select a row to create a Reposting Entry'));
-			}
-			else if (selected_rows.length > 1) {
-				frappe.throw(__('Please select only one row to create a Reposting Entry'));
-			}
-			else {
+				frappe.throw(__("Please select a row to create a Reposting Entry"));
+			} else if (selected_rows.length > 1) {
+				frappe.throw(__("Please select only one row to create a Reposting Entry"));
+			} else {
 				frappe.confirm(__(message), () => {
 					frappe.call({
-						method: 'erpnext.stock.report.stock_ledger_invariant_check.stock_ledger_invariant_check.create_reposting_entries',
+						method: "erpnext.stock.report.stock_ledger_invariant_check.stock_ledger_invariant_check.create_reposting_entries",
 						args: {
 							rows: selected_rows,
 							item_code: frappe.query_report.get_filter_values().item_code,
 							warehouse: frappe.query_report.get_filter_values().warehouse,
-						}
+						},
 					});
 				});
 			}
diff --git a/erpnext/stock/report/stock_ledger_variance/stock_ledger_variance.js b/erpnext/stock/report/stock_ledger_variance/stock_ledger_variance.js
index bf3a397..07e7b59 100644
--- a/erpnext/stock/report/stock_ledger_variance/stock_ledger_variance.js
+++ b/erpnext/stock/report/stock_ledger_variance/stock_ledger_variance.js
@@ -8,60 +8,55 @@
 	"fifo_valuation_diff",
 	"valuation_diff",
 	"fifo_difference_diff",
-	"diff_value_diff"
+	"diff_value_diff",
 ];
 
 frappe.query_reports["Stock Ledger Variance"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname": "company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"reqd": 1,
-			"default": frappe.defaults.get_user_default("Company")
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			reqd: 1,
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
-			"fieldname": "item_code",
-			"fieldtype": "Link",
-			"label": __("Item"),
-			"options": "Item",
-			get_query: function() {
+			fieldname: "item_code",
+			fieldtype: "Link",
+			label: __("Item"),
+			options: "Item",
+			get_query: function () {
 				return {
-					filters: {is_stock_item: 1, has_serial_no: 0}
-				}
-			}
+					filters: { is_stock_item: 1, has_serial_no: 0 },
+				};
+			},
 		},
 		{
-			"fieldname": "warehouse",
-			"fieldtype": "Link",
-			"label": __("Warehouse"),
-			"options": "Warehouse",
-			get_query: function() {
+			fieldname: "warehouse",
+			fieldtype: "Link",
+			label: __("Warehouse"),
+			options: "Warehouse",
+			get_query: function () {
 				return {
-					filters: {is_group: 0, disabled: 0}
-				}
-			}
+					filters: { is_group: 0, disabled: 0 },
+				};
+			},
 		},
 		{
-			"fieldname": "difference_in",
-			"fieldtype": "Select",
-			"label": __("Difference In"),
-			"options": [
-				"",
-				"Qty",
-				"Value",
-				"Valuation",
-			],
+			fieldname: "difference_in",
+			fieldtype: "Select",
+			label: __("Difference In"),
+			options: ["", "Qty", "Value", "Valuation"],
 		},
 		{
-			"fieldname": "include_disabled",
-			"fieldtype": "Check",
-			"label": __("Include Disabled"),
-		}
+			fieldname: "include_disabled",
+			fieldtype: "Check",
+			label: __("Include Disabled"),
+		},
 	],
 
-	formatter (value, row, column, data, default_formatter) {
+	formatter(value, row, column, data, default_formatter) {
 		value = default_formatter(value, row, column, data);
 
 		if (DIFFERENCE_FIELD_NAMES.includes(column.fieldname) && Math.abs(data[column.fieldname]) > 0.001) {
@@ -78,7 +73,7 @@
 	},
 
 	onload(report) {
-		report.page.add_inner_button(__('Create Reposting Entries'), () => {
+		report.page.add_inner_button(__("Create Reposting Entries"), () => {
 			let message = `
 				<div>
 					<p>
@@ -90,7 +85,7 @@
 					<p>Are you sure you want to create Reposting Entries?</p>
 				</div>`;
 			let indexes = frappe.query_report.datatable.rowmanager.getCheckedRows();
-			let selected_rows = indexes.map(i => frappe.query_report.data[i]);
+			let selected_rows = indexes.map((i) => frappe.query_report.data[i]);
 
 			if (!selected_rows.length) {
 				frappe.throw(__("Please select rows to create Reposting Entries"));
@@ -98,10 +93,10 @@
 
 			frappe.confirm(__(message), () => {
 				frappe.call({
-					method: 'erpnext.stock.report.stock_ledger_invariant_check.stock_ledger_invariant_check.create_reposting_entries',
+					method: "erpnext.stock.report.stock_ledger_invariant_check.stock_ledger_invariant_check.create_reposting_entries",
 					args: {
 						rows: selected_rows,
-					}
+					},
 				});
 			});
 		});
diff --git a/erpnext/stock/report/stock_projected_qty/stock_projected_qty.js b/erpnext/stock/report/stock_projected_qty/stock_projected_qty.js
index cb109f8..6e333aa 100644
--- a/erpnext/stock/report/stock_projected_qty/stock_projected_qty.js
+++ b/erpnext/stock/report/stock_projected_qty/stock_projected_qty.js
@@ -2,55 +2,55 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.query_reports["Stock Projected Qty"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company")
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
-			"fieldname":"warehouse",
-			"label": __("Warehouse"),
-			"fieldtype": "Link",
-			"options": "Warehouse",
-			"get_query": () => {
+			fieldname: "warehouse",
+			label: __("Warehouse"),
+			fieldtype: "Link",
+			options: "Warehouse",
+			get_query: () => {
 				return {
 					filters: {
-						company: frappe.query_report.get_filter_value('company')
-					}
-				}
-			}
+						company: frappe.query_report.get_filter_value("company"),
+					},
+				};
+			},
 		},
 		{
-			"fieldname":"item_code",
-			"label": __("Item"),
-			"fieldtype": "Link",
-			"options": "Item",
-			"get_query": function() {
+			fieldname: "item_code",
+			label: __("Item"),
+			fieldtype: "Link",
+			options: "Item",
+			get_query: function () {
 				return {
-					query: "erpnext.controllers.queries.item_query"
-				}
-			}
+					query: "erpnext.controllers.queries.item_query",
+				};
+			},
 		},
 		{
-			"fieldname":"item_group",
-			"label": __("Item Group"),
-			"fieldtype": "Link",
-			"options": "Item Group"
+			fieldname: "item_group",
+			label: __("Item Group"),
+			fieldtype: "Link",
+			options: "Item Group",
 		},
 		{
-			"fieldname":"brand",
-			"label": __("Brand"),
-			"fieldtype": "Link",
-			"options": "Brand"
+			fieldname: "brand",
+			label: __("Brand"),
+			fieldtype: "Link",
+			options: "Brand",
 		},
 		{
-			"fieldname":"include_uom",
-			"label": __("Include UOM"),
-			"fieldtype": "Link",
-			"options": "UOM"
-		}
-	]
-}
+			fieldname: "include_uom",
+			label: __("Include UOM"),
+			fieldtype: "Link",
+			options: "UOM",
+		},
+	],
+};
diff --git a/erpnext/stock/report/stock_qty_vs_serial_no_count/stock_qty_vs_serial_no_count.js b/erpnext/stock/report/stock_qty_vs_serial_no_count/stock_qty_vs_serial_no_count.js
index 7a48798..26cccb8 100644
--- a/erpnext/stock/report/stock_qty_vs_serial_no_count/stock_qty_vs_serial_no_count.js
+++ b/erpnext/stock/report/stock_qty_vs_serial_no_count/stock_qty_vs_serial_no_count.js
@@ -1,42 +1,40 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Stock Qty vs Serial No Count"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company"),
-			"reqd": 1
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
+			reqd: 1,
 		},
 		{
-			"fieldname":"warehouse",
-			"label": __("Warehouse"),
-			"fieldtype": "Link",
-			"options": "Warehouse",
-			"get_query": function() {
-				const company = frappe.query_report.get_filter_value('company');
+			fieldname: "warehouse",
+			label: __("Warehouse"),
+			fieldtype: "Link",
+			options: "Warehouse",
+			get_query: function () {
+				const company = frappe.query_report.get_filter_value("company");
 				return {
-					filters: { 'company': company }
-				}
+					filters: { company: company },
+				};
 			},
-			"reqd": 1
+			reqd: 1,
 		},
 	],
 
-	"formatter": function (value, row, column, data, default_formatter) {
+	formatter: function (value, row, column, data, default_formatter) {
 		value = default_formatter(value, row, column, data);
 		if (column.fieldname == "difference" && data) {
 			if (data.difference > 0) {
 				value = "<span style='color:red'>" + value + "</span>";
-			}
-			else if (data.difference < 0) {
+			} else if (data.difference < 0) {
 				value = "<span style='color:red'>" + value + "</span>";
 			}
 		}
 		return value;
-	}
+	},
 };
diff --git a/erpnext/stock/report/supplier_wise_sales_analytics/supplier_wise_sales_analytics.js b/erpnext/stock/report/supplier_wise_sales_analytics/supplier_wise_sales_analytics.js
index 5b00647..92a01c4 100644
--- a/erpnext/stock/report/supplier_wise_sales_analytics/supplier_wise_sales_analytics.js
+++ b/erpnext/stock/report/supplier_wise_sales_analytics/supplier_wise_sales_analytics.js
@@ -2,27 +2,27 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.query_reports["Supplier-Wise Sales Analytics"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"supplier",
-			"label": __("Supplier"),
-			"fieldtype": "Link",
-			"options": "Supplier",
-			"width": "80"
+			fieldname: "supplier",
+			label: __("Supplier"),
+			fieldtype: "Link",
+			options: "Supplier",
+			width: "80",
 		},
 		{
-			"fieldname":"from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"width": "80",
-			"default": frappe.datetime.month_start()
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			width: "80",
+			default: frappe.datetime.month_start(),
 		},
 		{
-			"fieldname":"to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"width": "80",
-			"default": frappe.datetime.month_end()
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			width: "80",
+			default: frappe.datetime.month_end(),
 		},
-	]
-}
+	],
+};
diff --git a/erpnext/stock/report/total_stock_summary/total_stock_summary.js b/erpnext/stock/report/total_stock_summary/total_stock_summary.js
index 3d247f6..1d31566 100644
--- a/erpnext/stock/report/total_stock_summary/total_stock_summary.js
+++ b/erpnext/stock/report/total_stock_summary/total_stock_summary.js
@@ -1,27 +1,26 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Total Stock Summary"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"group_by",
-			"label": __("Group By"),
-			"fieldtype": "Select",
-			"width": "80",
-			"reqd": 1,
-			"options": ["Warehouse", "Company"],
-			"default": "Warehouse",
+			fieldname: "group_by",
+			label: __("Group By"),
+			fieldtype: "Select",
+			width: "80",
+			reqd: 1,
+			options: ["Warehouse", "Company"],
+			default: "Warehouse",
 		},
 		{
-			"fieldname": "company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"width": "80",
-			"options": "Company",
-			"reqd": 1,
-			"default": frappe.defaults.get_user_default("Company"),
-			"depends_on": "eval: doc.group_by != 'Company'",
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			width: "80",
+			options: "Company",
+			reqd: 1,
+			default: frappe.defaults.get_user_default("Company"),
+			depends_on: "eval: doc.group_by != 'Company'",
 		},
-	]
-}
+	],
+};
diff --git a/erpnext/stock/report/warehouse_wise_item_balance_age_and_value/warehouse_wise_item_balance_age_and_value.js b/erpnext/stock/report/warehouse_wise_item_balance_age_and_value/warehouse_wise_item_balance_age_and_value.js
index 8d6b283..137c786 100644
--- a/erpnext/stock/report/warehouse_wise_item_balance_age_and_value/warehouse_wise_item_balance_age_and_value.js
+++ b/erpnext/stock/report/warehouse_wise_item_balance_age_and_value/warehouse_wise_item_balance_age_and_value.js
@@ -1,51 +1,50 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Warehouse wise Item Balance Age and Value"] = {
-        "filters": [
-{
-                        "fieldname":"from_date",
-                        "label": __("From Date"),
-                        "fieldtype": "Date",
-                        "width": "80",
-                        "reqd": 1,
-                        "default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
-                },
-                {
-                        "fieldname":"to_date",
-                        "label": __("To Date"),
-                        "fieldtype": "Date",
-                        "width": "80",
-                        "reqd": 1,
-                        "default": frappe.datetime.get_today()
-                },
-                {
-                        "fieldname": "item_group",
-                        "label": __("Item Group"),
-                        "fieldtype": "Link",
-                        "width": "80",
-                        "options": "Item Group"
-                },
-                {
-                        "fieldname": "item_code",
-                        "label": __("Item"),
-                        "fieldtype": "Link",
-                        "width": "80",
-                        "options": "Item"
-                },
-                {
-                        "fieldname": "warehouse",
-                        "label": __("Warehouse"),
-                        "fieldtype": "Link",
-                        "width": "80",
-                        "options": "Warehouse"
-                },
-                {
-                        "fieldname": "filter_total_zero_qty",
-                        "label": __("Filter Total Zero Qty"),
-                        "fieldtype": "Check",
-                        "default": 1
-                },
-        ]
-}
+	filters: [
+		{
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			width: "80",
+			reqd: 1,
+			default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
+		},
+		{
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			width: "80",
+			reqd: 1,
+			default: frappe.datetime.get_today(),
+		},
+		{
+			fieldname: "item_group",
+			label: __("Item Group"),
+			fieldtype: "Link",
+			width: "80",
+			options: "Item Group",
+		},
+		{
+			fieldname: "item_code",
+			label: __("Item"),
+			fieldtype: "Link",
+			width: "80",
+			options: "Item",
+		},
+		{
+			fieldname: "warehouse",
+			label: __("Warehouse"),
+			fieldtype: "Link",
+			width: "80",
+			options: "Warehouse",
+		},
+		{
+			fieldname: "filter_total_zero_qty",
+			label: __("Filter Total Zero Qty"),
+			fieldtype: "Check",
+			default: 1,
+		},
+	],
+};
diff --git a/erpnext/stock/report/warehouse_wise_stock_balance/warehouse_wise_stock_balance.js b/erpnext/stock/report/warehouse_wise_stock_balance/warehouse_wise_stock_balance.js
index 4a77052..ea09092 100644
--- a/erpnext/stock/report/warehouse_wise_stock_balance/warehouse_wise_stock_balance.js
+++ b/erpnext/stock/report/warehouse_wise_stock_balance/warehouse_wise_stock_balance.js
@@ -1,27 +1,25 @@
 // Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Warehouse Wise Stock Balance"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname":"company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"reqd": 1,
-			"default": frappe.defaults.get_user_default("Company")
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			reqd: 1,
+			default: frappe.defaults.get_user_default("Company"),
 		},
 		{
-			"fieldname":"show_disabled_warehouses",
-			"label": __("Show Disabled Warehouses"),
-			"fieldtype": "Check",
-			"default": 0
-
-		}
+			fieldname: "show_disabled_warehouses",
+			label: __("Show Disabled Warehouses"),
+			fieldtype: "Check",
+			default: 0,
+		},
 	],
-	"initial_depth": 3,
-	"tree": true,
-	"parent_field": "parent_warehouse",
-	"name_field": "warehouse"
+	initial_depth: 3,
+	tree: true,
+	parent_field: "parent_warehouse",
+	name_field: "warehouse",
 };
diff --git a/erpnext/subcontracting/doctype/subcontracting_bom/subcontracting_bom.js b/erpnext/subcontracting/doctype/subcontracting_bom/subcontracting_bom.js
index a7f0d7a..43aac4a 100644
--- a/erpnext/subcontracting/doctype/subcontracting_bom/subcontracting_bom.js
+++ b/erpnext/subcontracting/doctype/subcontracting_bom/subcontracting_bom.js
@@ -1,40 +1,40 @@
 // Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Subcontracting BOM', {
-    setup: (frm) => {
-		frm.trigger('set_queries');
+frappe.ui.form.on("Subcontracting BOM", {
+	setup: (frm) => {
+		frm.trigger("set_queries");
 	},
 
-    set_queries: (frm) => {
-        frm.set_query('finished_good', () => {
-            return {
-                filters: {
-                    disabled: 0,
-                    is_stock_item: 1,
-                    default_bom: ['!=', ''],
-                    is_sub_contracted_item: 1,
-                }
-            }
-        });
+	set_queries: (frm) => {
+		frm.set_query("finished_good", () => {
+			return {
+				filters: {
+					disabled: 0,
+					is_stock_item: 1,
+					default_bom: ["!=", ""],
+					is_sub_contracted_item: 1,
+				},
+			};
+		});
 
-        frm.set_query('finished_good_bom', () => {
-            return {
-                filters: {
-                    docstatus: 1,
-                    is_active: 1,
-                    item: frm.doc.finished_good,
-                }
-            }
-        });
+		frm.set_query("finished_good_bom", () => {
+			return {
+				filters: {
+					docstatus: 1,
+					is_active: 1,
+					item: frm.doc.finished_good,
+				},
+			};
+		});
 
-        frm.set_query('service_item', () => {
-            return {
-                filters: {
-                    disabled: 0,
-                    is_stock_item: 0,
-                }
-            }
-        });
-    }
+		frm.set_query("service_item", () => {
+			return {
+				filters: {
+					disabled: 0,
+					is_stock_item: 0,
+				},
+			};
+		});
+	},
 });
diff --git a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js
index 4c8a0ad..9d788f0 100644
--- a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js
+++ b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js
@@ -1,101 +1,100 @@
 // Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.provide('erpnext.buying');
+frappe.provide("erpnext.buying");
 
 erpnext.landed_cost_taxes_and_charges.setup_triggers("Subcontracting Order");
 
-frappe.ui.form.on('Subcontracting Order', {
+frappe.ui.form.on("Subcontracting Order", {
 	setup: (frm) => {
 		frm.get_field("items").grid.cannot_add_rows = true;
 		frm.get_field("items").grid.only_sortable();
 
-		frm.set_indicator_formatter('item_code',
-			(doc) => (doc.qty <= doc.received_qty) ? 'green' : 'orange');
+		frm.set_indicator_formatter("item_code", (doc) => (doc.qty <= doc.received_qty ? "green" : "orange"));
 
-		frm.set_query('supplier_warehouse', () => {
+		frm.set_query("supplier_warehouse", () => {
 			return {
 				filters: {
 					company: frm.doc.company,
-					is_group: 0
-				}
+					is_group: 0,
+				},
 			};
 		});
 
-		frm.set_query('purchase_order', () => {
+		frm.set_query("purchase_order", () => {
 			return {
 				filters: {
 					docstatus: 1,
 					is_subcontracted: 1,
-					is_old_subcontracting_flow: 0
-				}
+					is_old_subcontracting_flow: 0,
+				},
 			};
 		});
 
-		frm.set_query('set_warehouse', () => {
+		frm.set_query("set_warehouse", () => {
 			return {
 				filters: {
 					company: frm.doc.company,
-					is_group: 0
-				}
+					is_group: 0,
+				},
 			};
 		});
 
-		frm.set_query('warehouse', 'items', () => ({
+		frm.set_query("warehouse", "items", () => ({
 			filters: {
 				company: frm.doc.company,
-				is_group: 0
-			}
+				is_group: 0,
+			},
 		}));
 
-		frm.set_query('expense_account', 'items', () => ({
-			query: 'erpnext.controllers.queries.get_expense_account',
+		frm.set_query("expense_account", "items", () => ({
+			query: "erpnext.controllers.queries.get_expense_account",
 			filters: {
-				company: frm.doc.company
-			}
+				company: frm.doc.company,
+			},
 		}));
 
-		frm.set_query('bom', 'items', (doc, cdt, cdn) => {
+		frm.set_query("bom", "items", (doc, cdt, cdn) => {
 			let d = locals[cdt][cdn];
 			return {
 				filters: {
 					item: d.item_code,
 					is_active: 1,
 					docstatus: 1,
-					company: frm.doc.company
-				}
+					company: frm.doc.company,
+				},
 			};
 		});
 
-		frm.set_query('set_reserve_warehouse', () => {
+		frm.set_query("set_reserve_warehouse", () => {
 			return {
 				filters: {
 					company: frm.doc.company,
-					name: ['!=', frm.doc.supplier_warehouse],
-					is_group: 0
-				}
+					name: ["!=", frm.doc.supplier_warehouse],
+					is_group: 0,
+				},
 			};
 		});
 	},
 
 	onload: (frm) => {
 		if (!frm.doc.transaction_date) {
-			frm.set_value('transaction_date', frappe.datetime.get_today());
+			frm.set_value("transaction_date", frappe.datetime.get_today());
 		}
 	},
 
 	purchase_order: (frm) => {
-		frm.set_value('service_items', null);
-		frm.set_value('items', null);
-		frm.set_value('supplied_items', null);
+		frm.set_value("service_items", null);
+		frm.set_value("items", null);
+		frm.set_value("supplied_items", null);
 
 		if (frm.doc.purchase_order) {
 			erpnext.utils.map_current_doc({
-				method: 'erpnext.buying.doctype.purchase_order.purchase_order.make_subcontracting_order',
+				method: "erpnext.buying.doctype.purchase_order.purchase_order.make_subcontracting_order",
 				source_name: frm.doc.purchase_order,
 				target_doc: frm,
 				freeze: true,
-				freeze_message: __('Mapping Subcontracting Order ...'),
+				freeze_message: __("Mapping Subcontracting Order ..."),
 			});
 		}
 	},
@@ -103,13 +102,21 @@
 	refresh: function (frm) {
 		if (frm.doc.docstatus == 1 && frm.has_perm("submit")) {
 			if (frm.doc.status == "Closed") {
-				frm.add_custom_button(__('Re-open'), () => frm.events.update_subcontracting_order_status(frm), __("Status"));
-			} else if(flt(frm.doc.per_received, 2) < 100) {
-				frm.add_custom_button(__('Close'), () => frm.events.update_subcontracting_order_status(frm, "Closed"), __("Status"));
+				frm.add_custom_button(
+					__("Re-open"),
+					() => frm.events.update_subcontracting_order_status(frm),
+					__("Status")
+				);
+			} else if (flt(frm.doc.per_received, 2) < 100) {
+				frm.add_custom_button(
+					__("Close"),
+					() => frm.events.update_subcontracting_order_status(frm, "Closed"),
+					__("Status")
+				);
 			}
 		}
 
-		frm.trigger('get_materials_from_supplier');
+		frm.trigger("get_materials_from_supplier");
 	},
 
 	update_subcontracting_order_status(frm, status) {
@@ -131,7 +138,7 @@
 		let sco_rm_details = [];
 
 		if (frm.doc.status != "Closed" && frm.doc.supplied_items) {
-			frm.doc.supplied_items.forEach(d => {
+			frm.doc.supplied_items.forEach((d) => {
 				if (d.total_supplied_qty > 0 && d.total_supplied_qty != d.consumed_qty) {
 					sco_rm_details.push(d.name);
 				}
@@ -139,43 +146,47 @@
 		}
 
 		if (sco_rm_details && sco_rm_details.length) {
-			frm.add_custom_button(__('Return of Components'), () => {
-				frm.call({
-					method: 'erpnext.controllers.subcontracting_controller.get_materials_from_supplier',
-					freeze: true,
-					freeze_message: __('Creating Stock Entry'),
-					args: {
-						subcontract_order: frm.doc.name,
-						rm_details: sco_rm_details,
-						order_doctype: cur_frm.doc.doctype
-					},
-					callback: function (r) {
-						if (r && r.message) {
-							const doc = frappe.model.sync(r.message);
-							frappe.set_route("Form", doc[0].doctype, doc[0].name);
-						}
-					}
-				});
-			}, __('Create'));
+			frm.add_custom_button(
+				__("Return of Components"),
+				() => {
+					frm.call({
+						method: "erpnext.controllers.subcontracting_controller.get_materials_from_supplier",
+						freeze: true,
+						freeze_message: __("Creating Stock Entry"),
+						args: {
+							subcontract_order: frm.doc.name,
+							rm_details: sco_rm_details,
+							order_doctype: cur_frm.doc.doctype,
+						},
+						callback: function (r) {
+							if (r && r.message) {
+								const doc = frappe.model.sync(r.message);
+								frappe.set_route("Form", doc[0].doctype, doc[0].name);
+							}
+						},
+					});
+				},
+				__("Create")
+			);
 		}
-	}
+	},
 });
 
-frappe.ui.form.on('Landed Cost Taxes and Charges', {
+frappe.ui.form.on("Landed Cost Taxes and Charges", {
 	amount: function (frm, cdt, cdn) {
 		frm.events.set_base_amount(frm, cdt, cdn);
 	},
 
 	expense_account: function (frm, cdt, cdn) {
 		frm.events.set_account_currency(frm, cdt, cdn);
-	}
+	},
 });
 
 erpnext.buying.SubcontractingOrderController = class SubcontractingOrderController {
 	setup() {
 		this.frm.custom_make_buttons = {
-			'Subcontracting Receipt': 'Subcontracting Receipt',
-			'Stock Entry': 'Material to Supplier',
+			"Subcontracting Receipt": "Subcontracting Receipt",
+			"Stock Entry": "Material to Supplier",
 		};
 	}
 
@@ -183,14 +194,22 @@
 		var me = this;
 
 		if (doc.docstatus == 1) {
-			if (!['Closed', 'Completed'].includes(doc.status)) {
+			if (!["Closed", "Completed"].includes(doc.status)) {
 				if (flt(doc.per_received) < 100) {
-					cur_frm.add_custom_button(__('Subcontracting Receipt'), this.make_subcontracting_receipt, __('Create'));
+					cur_frm.add_custom_button(
+						__("Subcontracting Receipt"),
+						this.make_subcontracting_receipt,
+						__("Create")
+					);
 					if (me.has_unsupplied_items()) {
-						cur_frm.add_custom_button(__('Material to Supplier'), this.make_stock_entry, __('Transfer'));
+						cur_frm.add_custom_button(
+							__("Material to Supplier"),
+							this.make_stock_entry,
+							__("Transfer")
+						);
 					}
 				}
-				cur_frm.page.set_inner_btn_group_as_primary(__('Create'));
+				cur_frm.page.set_inner_btn_group_as_primary(__("Create"));
 			}
 		}
 	}
@@ -216,30 +235,32 @@
 	}
 
 	has_unsupplied_items() {
-		return this.frm.doc['supplied_items'].some(item => item.required_qty > (item.supplied_qty - item.returned_qty));
+		return this.frm.doc["supplied_items"].some(
+			(item) => item.required_qty > item.supplied_qty - item.returned_qty
+		);
 	}
 
 	make_subcontracting_receipt() {
 		frappe.model.open_mapped_doc({
-			method: 'erpnext.subcontracting.doctype.subcontracting_order.subcontracting_order.make_subcontracting_receipt',
+			method: "erpnext.subcontracting.doctype.subcontracting_order.subcontracting_order.make_subcontracting_receipt",
 			frm: cur_frm,
-			freeze_message: __('Creating Subcontracting Receipt ...')
+			freeze_message: __("Creating Subcontracting Receipt ..."),
 		});
 	}
 
 	make_stock_entry() {
 		frappe.call({
-			method: 'erpnext.controllers.subcontracting_controller.make_rm_stock_entry',
+			method: "erpnext.controllers.subcontracting_controller.make_rm_stock_entry",
 			args: {
 				subcontract_order: cur_frm.doc.name,
-				order_doctype: cur_frm.doc.doctype
+				order_doctype: cur_frm.doc.doctype,
 			},
 			callback: (r) => {
 				var doclist = frappe.model.sync(r.message);
-				frappe.set_route('Form', doclist[0].doctype, doclist[0].name);
-			}
+				frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
+			},
 		});
 	}
 };
 
-extend_cscript(cur_frm.cscript, new erpnext.buying.SubcontractingOrderController({ frm: cur_frm }));
\ No newline at end of file
+extend_cscript(cur_frm.cscript, new erpnext.buying.SubcontractingOrderController({ frm: cur_frm }));
diff --git a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order_list.js b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order_list.js
index ec54944..895ffdb 100644
--- a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order_list.js
+++ b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order_list.js
@@ -1,18 +1,18 @@
 // Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.listview_settings['Subcontracting Order'] = {
+frappe.listview_settings["Subcontracting Order"] = {
 	get_indicator: function (doc) {
 		const status_colors = {
-			"Draft": "grey",
-			"Open": "orange",
+			Draft: "grey",
+			Open: "orange",
 			"Partially Received": "yellow",
-			"Completed": "green",
+			Completed: "green",
 			"Partial Material Transferred": "purple",
 			"Material Transferred": "blue",
-			"Closed": "green",
-			"Cancelled": "red",
+			Closed: "green",
+			Cancelled: "red",
 		};
 		return [__(doc.status), status_colors[doc.status], "status,=," + doc.status];
 	},
-};
\ No newline at end of file
+};
diff --git a/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.js b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.js
index 0535799..aeff2f6 100644
--- a/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.js
+++ b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.js
@@ -1,20 +1,20 @@
 // Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.provide('erpnext.buying');
+frappe.provide("erpnext.buying");
 
-erpnext.landed_cost_taxes_and_charges.setup_triggers('Subcontracting Receipt');
+erpnext.landed_cost_taxes_and_charges.setup_triggers("Subcontracting Receipt");
 
-frappe.ui.form.on('Subcontracting Receipt', {
+frappe.ui.form.on("Subcontracting Receipt", {
 	setup: (frm) => {
-		frm.ignore_doctypes_on_cancel_all = ['Serial and Batch Bundle'];
-		frm.get_field('supplied_items').grid.cannot_add_rows = true;
-		frm.get_field('supplied_items').grid.only_sortable();
-		frm.trigger('set_queries');
+		frm.ignore_doctypes_on_cancel_all = ["Serial and Batch Bundle"];
+		frm.get_field("supplied_items").grid.cannot_add_rows = true;
+		frm.get_field("supplied_items").grid.only_sortable();
+		frm.trigger("set_queries");
 
 		frm.custom_make_buttons = {
-			'Purchase Receipt': 'Purchase Receipt',
-		}
+			"Purchase Receipt": "Purchase Receipt",
+		};
 	},
 
 	on_submit(frm) {
@@ -24,198 +24,222 @@
 	refresh_serial_batch_bundle_field(frm) {
 		frappe.route_hooks.after_submit = (frm_obj) => {
 			frm_obj.reload_doc();
-		}
+		};
 	},
 
 	refresh: (frm) => {
 		if (frm.doc.docstatus === 1) {
-			frm.add_custom_button(__('Stock Ledger'), () => {
-				frappe.route_options = {
-					voucher_no: frm.doc.name,
-					from_date: frm.doc.posting_date,
-					to_date: moment(frm.doc.modified).format('YYYY-MM-DD'),
-					company: frm.doc.company,
-					show_cancelled_entries: frm.doc.docstatus === 2
-				}
-				frappe.set_route('query-report', 'Stock Ledger');
-			}, __('View'));
+			frm.add_custom_button(
+				__("Stock Ledger"),
+				() => {
+					frappe.route_options = {
+						voucher_no: frm.doc.name,
+						from_date: frm.doc.posting_date,
+						to_date: moment(frm.doc.modified).format("YYYY-MM-DD"),
+						company: frm.doc.company,
+						show_cancelled_entries: frm.doc.docstatus === 2,
+					};
+					frappe.set_route("query-report", "Stock Ledger");
+				},
+				__("View")
+			);
 
-			frm.add_custom_button(__('Accounting Ledger'), () => {
-				frappe.route_options = {
-					voucher_no: frm.doc.name,
-					from_date: frm.doc.posting_date,
-					to_date: moment(frm.doc.modified).format('YYYY-MM-DD'),
-					company: frm.doc.company,
-					group_by: 'Group by Voucher (Consolidated)',
-					show_cancelled_entries: frm.doc.docstatus === 2
-				}
-				frappe.set_route('query-report', 'General Ledger');
-			}, __('View'));
+			frm.add_custom_button(
+				__("Accounting Ledger"),
+				() => {
+					frappe.route_options = {
+						voucher_no: frm.doc.name,
+						from_date: frm.doc.posting_date,
+						to_date: moment(frm.doc.modified).format("YYYY-MM-DD"),
+						company: frm.doc.company,
+						group_by: "Group by Voucher (Consolidated)",
+						show_cancelled_entries: frm.doc.docstatus === 2,
+					};
+					frappe.set_route("query-report", "General Ledger");
+				},
+				__("View")
+			);
 
 			if (frm.doc.is_return === 0) {
-				frm.add_custom_button(__('Purchase Receipt'), () => {
-					frappe.model.open_mapped_doc({
-						method: 'erpnext.subcontracting.doctype.subcontracting_receipt.subcontracting_receipt.make_purchase_receipt',
-						frm: frm,
-						freeze: true,
-						freeze_message: __('Creating Purchase Receipt ...')
-					});
-				}, __('Create'));
+				frm.add_custom_button(
+					__("Purchase Receipt"),
+					() => {
+						frappe.model.open_mapped_doc({
+							method: "erpnext.subcontracting.doctype.subcontracting_receipt.subcontracting_receipt.make_purchase_receipt",
+							frm: frm,
+							freeze: true,
+							freeze_message: __("Creating Purchase Receipt ..."),
+						});
+					},
+					__("Create")
+				);
 			}
 		}
 
 		if (!frm.doc.is_return && frm.doc.docstatus === 1 && frm.doc.per_returned < 100) {
-			frm.add_custom_button(__('Subcontract Return'), () => {
-				frappe.model.open_mapped_doc({
-					method: 'erpnext.subcontracting.doctype.subcontracting_receipt.subcontracting_receipt.make_subcontract_return',
-					frm: frm
-				});
-			}, __('Create'));
-			frm.page.set_inner_btn_group_as_primary(__('Create'));
+			frm.add_custom_button(
+				__("Subcontract Return"),
+				() => {
+					frappe.model.open_mapped_doc({
+						method: "erpnext.subcontracting.doctype.subcontracting_receipt.subcontracting_receipt.make_subcontract_return",
+						frm: frm,
+					});
+				},
+				__("Create")
+			);
+			frm.page.set_inner_btn_group_as_primary(__("Create"));
 		}
 
 		if (frm.doc.docstatus === 0) {
-			frm.add_custom_button(__('Subcontracting Order'), () => {
-				if (!frm.doc.supplier) {
-					frappe.throw({
-						title: __('Mandatory'),
-						message: __('Please Select a Supplier')
-					});
-				}
-
-				erpnext.utils.map_current_doc({
-					method: 'erpnext.subcontracting.doctype.subcontracting_order.subcontracting_order.make_subcontracting_receipt',
-					source_doctype: 'Subcontracting Order',
-					target: frm,
-					setters: {
-						supplier: frm.doc.supplier,
-					},
-					get_query_filters: {
-						docstatus: 1,
-						per_received: ['<', 100],
-						company: frm.doc.company,
-						status: ['!=', 'Closed'],
+			frm.add_custom_button(
+				__("Subcontracting Order"),
+				() => {
+					if (!frm.doc.supplier) {
+						frappe.throw({
+							title: __("Mandatory"),
+							message: __("Please Select a Supplier"),
+						});
 					}
-				});
-			}, __('Get Items From'));
 
-			frm.fields_dict.supplied_items.grid.update_docfield_property('consumed_qty', 'read_only', frm.doc.__onload && frm.doc.__onload.backflush_based_on === 'BOM');
+					erpnext.utils.map_current_doc({
+						method: "erpnext.subcontracting.doctype.subcontracting_order.subcontracting_order.make_subcontracting_receipt",
+						source_doctype: "Subcontracting Order",
+						target: frm,
+						setters: {
+							supplier: frm.doc.supplier,
+						},
+						get_query_filters: {
+							docstatus: 1,
+							per_received: ["<", 100],
+							company: frm.doc.company,
+							status: ["!=", "Closed"],
+						},
+					});
+				},
+				__("Get Items From")
+			);
+
+			frm.fields_dict.supplied_items.grid.update_docfield_property(
+				"consumed_qty",
+				"read_only",
+				frm.doc.__onload && frm.doc.__onload.backflush_based_on === "BOM"
+			);
 		}
 
-		frm.trigger('setup_quality_inspection');
-		frm.trigger('set_route_options_for_new_doc');
+		frm.trigger("setup_quality_inspection");
+		frm.trigger("set_route_options_for_new_doc");
 	},
 
 	set_warehouse: (frm) => {
-		set_warehouse_in_children(frm.doc.items, 'warehouse', frm.doc.set_warehouse);
+		set_warehouse_in_children(frm.doc.items, "warehouse", frm.doc.set_warehouse);
 	},
 
 	rejected_warehouse: (frm) => {
-		set_warehouse_in_children(frm.doc.items, 'rejected_warehouse', frm.doc.rejected_warehouse);
+		set_warehouse_in_children(frm.doc.items, "rejected_warehouse", frm.doc.rejected_warehouse);
 	},
 
 	get_scrap_items: (frm) => {
 		frappe.call({
 			doc: frm.doc,
-			method: 'get_scrap_items',
+			method: "get_scrap_items",
 			args: {
-				recalculate_rate: true
+				recalculate_rate: true,
 			},
 			freeze: true,
-			freeze_message: __('Getting Scrap Items'),
+			freeze_message: __("Getting Scrap Items"),
 			callback: (r) => {
 				if (!r.exc) {
 					frm.refresh();
 				}
-			}
+			},
 		});
 	},
 
 	set_queries: (frm) => {
-		frm.set_query('set_warehouse', () => {
+		frm.set_query("set_warehouse", () => {
 			return {
 				filters: {
 					company: frm.doc.company,
-					is_group: 0
-				}
-			}
+					is_group: 0,
+				},
+			};
 		});
 
-		frm.set_query('rejected_warehouse', () => {
+		frm.set_query("rejected_warehouse", () => {
 			return {
 				filters: {
 					company: frm.doc.company,
-					is_group: 0
-				}
-			}
+					is_group: 0,
+				},
+			};
 		});
 
-		frm.set_query('supplier_warehouse', () => {
+		frm.set_query("supplier_warehouse", () => {
 			return {
 				filters: {
 					company: frm.doc.company,
-					is_group: 0
-				}
-			}
+					is_group: 0,
+				},
+			};
 		});
 
-		frm.set_query('warehouse', 'items', () => ({
+		frm.set_query("warehouse", "items", () => ({
 			filters: {
 				company: frm.doc.company,
-				is_group: 0
-			}
+				is_group: 0,
+			},
 		}));
 
-		frm.set_query('rejected_warehouse', 'items', () => ({
+		frm.set_query("rejected_warehouse", "items", () => ({
 			filters: {
 				company: frm.doc.company,
-				is_group: 0
-			}
+				is_group: 0,
+			},
 		}));
 
-		frm.set_query('expense_account', 'items', () => {
+		frm.set_query("expense_account", "items", () => {
 			return {
-				query: 'erpnext.controllers.queries.get_expense_account',
-				filters: { 'company': frm.doc.company }
-			}
+				query: "erpnext.controllers.queries.get_expense_account",
+				filters: { company: frm.doc.company },
+			};
 		});
 
-		frm.set_query('batch_no', 'items', (doc, cdt, cdn) => {
+		frm.set_query("batch_no", "items", (doc, cdt, cdn) => {
 			var row = locals[cdt][cdn];
 			return {
 				filters: {
-					item: row.item_code
-				}
-			}
+					item: row.item_code,
+				},
+			};
 		});
 
-		frm.set_query('serial_and_batch_bundle', 'items', (doc, cdt, cdn) => {
+		frm.set_query("serial_and_batch_bundle", "items", (doc, cdt, cdn) => {
 			return frm.events.get_serial_and_batch_bundle_filters(doc, cdt, cdn);
 		});
 
-		frm.set_query('rejected_serial_and_batch_bundle', 'items', (doc, cdt, cdn) => {
+		frm.set_query("rejected_serial_and_batch_bundle", "items", (doc, cdt, cdn) => {
 			return frm.events.get_serial_and_batch_bundle_filters(doc, cdt, cdn);
 		});
 
-		frm.set_query('batch_no', 'supplied_items', (doc, cdt, cdn) => {
+		frm.set_query("batch_no", "supplied_items", (doc, cdt, cdn) => {
 			var row = locals[cdt][cdn];
 			return {
 				filters: {
-					item: row.rm_item_code
-				}
-			}
+					item: row.rm_item_code,
+				},
+			};
 		});
 
-		frm.set_query('serial_and_batch_bundle', 'supplied_items', (doc, cdt, cdn) => {
+		frm.set_query("serial_and_batch_bundle", "supplied_items", (doc, cdt, cdn) => {
 			let row = locals[cdt][cdn];
 			return {
 				filters: {
-					'item_code': row.rm_item_code,
-					'voucher_type': doc.doctype,
-					'voucher_no': ['in', [doc.name, '']],
-					'is_cancelled': 0,
-				}
-			}
+					item_code: row.rm_item_code,
+					voucher_type: doc.doctype,
+					voucher_no: ["in", [doc.name, ""]],
+					is_cancelled: 0,
+				},
+			};
 		});
 	},
 
@@ -223,12 +247,12 @@
 		let row = locals[cdt][cdn];
 		return {
 			filters: {
-				'item_code': row.item_code,
-				'voucher_type': doc.doctype,
-				'voucher_no': ['in', [doc.name, '']],
-				'is_cancelled': 0,
-			}
-		}
+				item_code: row.item_code,
+				voucher_type: doc.doctype,
+				voucher_no: ["in", [doc.name, ""]],
+				is_cancelled: 0,
+			},
+		};
 	},
 
 	setup_quality_inspection: (frm) => {
@@ -239,48 +263,48 @@
 	},
 
 	set_route_options_for_new_doc: (frm) => {
-		let batch_no_field = frm.get_docfield('items', 'batch_no');
+		let batch_no_field = frm.get_docfield("items", "batch_no");
 		if (batch_no_field) {
 			batch_no_field.get_route_options_for_new_doc = (row) => {
 				return {
-					'item': row.doc.item_code
-				}
-			}
+					item: row.doc.item_code,
+				};
+			};
 		}
 
-		let item_sbb_field = frm.get_docfield('items', 'serial_and_batch_bundle');
+		let item_sbb_field = frm.get_docfield("items", "serial_and_batch_bundle");
 		if (item_sbb_field) {
 			item_sbb_field.get_route_options_for_new_doc = (row) => {
 				return {
-					'item_code': row.doc.item_code,
-					'voucher_type': frm.doc.doctype,
-				}
-			}
+					item_code: row.doc.item_code,
+					voucher_type: frm.doc.doctype,
+				};
+			};
 		}
 
-		let rejected_item_sbb_field = frm.get_docfield('items', 'rejected_serial_and_batch_bundle');
+		let rejected_item_sbb_field = frm.get_docfield("items", "rejected_serial_and_batch_bundle");
 		if (rejected_item_sbb_field) {
 			rejected_item_sbb_field.get_route_options_for_new_doc = (row) => {
 				return {
-					'item_code': row.doc.item_code,
-					'voucher_type': frm.doc.doctype,
-				}
-			}
+					item_code: row.doc.item_code,
+					voucher_type: frm.doc.doctype,
+				};
+			};
 		}
 
-		let rm_sbb_field = frm.get_docfield('supplied_items', 'serial_and_batch_bundle');
+		let rm_sbb_field = frm.get_docfield("supplied_items", "serial_and_batch_bundle");
 		if (rm_sbb_field) {
 			rm_sbb_field.get_route_options_for_new_doc = (row) => {
 				return {
-					'item_code': row.doc.rm_item_code,
-					'voucher_type': frm.doc.doctype,
-				}
-			}
+					item_code: row.doc.rm_item_code,
+					voucher_type: frm.doc.doctype,
+				};
+			};
 		}
 	},
 });
 
-frappe.ui.form.on('Landed Cost Taxes and Charges', {
+frappe.ui.form.on("Landed Cost Taxes and Charges", {
 	amount: (frm, cdt, cdn) => {
 		set_missing_values(frm);
 		frm.events.set_base_amount(frm, cdt, cdn);
@@ -292,10 +316,10 @@
 
 	additional_costs_remove: (frm) => {
 		set_missing_values(frm);
-	}
+	},
 });
 
-frappe.ui.form.on('Subcontracting Receipt Item', {
+frappe.ui.form.on("Subcontracting Receipt Item", {
 	item_code(frm) {
 		set_missing_values(frm);
 	},
@@ -313,7 +337,7 @@
 	},
 });
 
-frappe.ui.form.on('Subcontracting Receipt Supplied Item', {
+frappe.ui.form.on("Subcontracting Receipt Supplied Item", {
 	consumed_qty(frm) {
 		set_missing_values(frm);
 	},
@@ -322,14 +346,14 @@
 let set_warehouse_in_children = (child_table, warehouse_field, warehouse) => {
 	let transaction_controller = new erpnext.TransactionController();
 	transaction_controller.autofill_warehouse(child_table, warehouse_field, warehouse);
-}
+};
 
 let set_missing_values = (frm) => {
 	frappe.call({
 		doc: frm.doc,
-		method: 'set_missing_values',
+		method: "set_missing_values",
 		callback: (r) => {
 			if (!r.exc) frm.refresh();
 		},
 	});
-}
+};
diff --git a/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt_list.js b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt_list.js
index 14a4e4a..be6c0d0 100644
--- a/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt_list.js
+++ b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt_list.js
@@ -1,14 +1,14 @@
 // Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.listview_settings['Subcontracting Receipt'] = {
+frappe.listview_settings["Subcontracting Receipt"] = {
 	get_indicator: function (doc) {
 		const status_colors = {
-			"Draft": "grey",
-			"Return": "gray",
+			Draft: "grey",
+			Return: "gray",
 			"Return Issued": "grey",
-			"Completed": "green",
+			Completed: "green",
 		};
 		return [__(doc.status), status_colors[doc.status], "status,=," + doc.status];
 	},
-};
\ No newline at end of file
+};
diff --git a/erpnext/support/doctype/issue/issue.js b/erpnext/support/doctype/issue/issue.js
index 9f91dc1..03d209e 100644
--- a/erpnext/support/doctype/issue/issue.js
+++ b/erpnext/support/doctype/issue/issue.js
@@ -1,40 +1,47 @@
 frappe.ui.form.on("Issue", {
-	onload: function(frm) {
+	onload: function (frm) {
 		frm.email_field = "raised_by";
 
-		frappe.db.get_value("Support Settings", {name: "Support Settings"},
-			["allow_resetting_service_level_agreement", "track_service_level_agreement"], (r) => {
+		frappe.db.get_value(
+			"Support Settings",
+			{ name: "Support Settings" },
+			["allow_resetting_service_level_agreement", "track_service_level_agreement"],
+			(r) => {
 				if (r && r.track_service_level_agreement == "0") {
 					frm.set_df_property("service_level_section", "hidden", 1);
 				}
 				if (r && r.allow_resetting_service_level_agreement == "0") {
 					frm.set_df_property("reset_service_level_agreement", "hidden", 1);
 				}
-			});
+			}
+		);
 
 		// buttons
 		if (frm.doc.status !== "Closed") {
-			frm.add_custom_button(__("Close"), function() {
+			frm.add_custom_button(__("Close"), function () {
 				frm.set_value("status", "Closed");
 				frm.save();
 			});
 
-			frm.add_custom_button(__("Task"), function() {
-				frappe.model.open_mapped_doc({
-					method: "erpnext.support.doctype.issue.issue.make_task",
-					frm: frm
-				});
-			}, __("Create"));
-
+			frm.add_custom_button(
+				__("Task"),
+				function () {
+					frappe.model.open_mapped_doc({
+						method: "erpnext.support.doctype.issue.issue.make_task",
+						frm: frm,
+					});
+				},
+				__("Create")
+			);
 		} else {
-			frm.add_custom_button(__("Reopen"), function() {
+			frm.add_custom_button(__("Reopen"), function () {
 				frm.set_value("status", "Open");
 				frm.save();
 			});
 		}
 	},
 
-	reset_service_level_agreement: function(frm) {
+	reset_service_level_agreement: function (frm) {
 		let reset_sla = new frappe.ui.Dialog({
 			title: __("Reset Service Level Agreement"),
 			fields: [
@@ -42,8 +49,8 @@
 					fieldtype: "Data",
 					fieldname: "reason",
 					label: __("Reason"),
-					reqd: 1
-				}
+					reqd: 1,
+				},
 			],
 			primary_action_label: __("Reset"),
 			primary_action: (values) => {
@@ -53,39 +60,42 @@
 
 				frappe.show_alert({
 					indicator: "green",
-					message: __("Resetting Service Level Agreement.")
+					message: __("Resetting Service Level Agreement."),
 				});
 
-				frappe.call("erpnext.support.doctype.service_level_agreement.service_level_agreement.reset_service_level_agreement", {
-					reason: values.reason,
-					user: frappe.session.user_email,
-					doctype: frm.doc.doctype,
-					docname: frm.doc.name,
-				}, () => {
-					reset_sla.enable_primary_action();
-					frm.refresh();
-					frappe.msgprint(__("Service Level Agreement was reset."));
-				});
-			}
+				frappe.call(
+					"erpnext.support.doctype.service_level_agreement.service_level_agreement.reset_service_level_agreement",
+					{
+						reason: values.reason,
+						user: frappe.session.user_email,
+						doctype: frm.doc.doctype,
+						docname: frm.doc.name,
+					},
+					() => {
+						reset_sla.enable_primary_action();
+						frm.refresh();
+						frappe.msgprint(__("Service Level Agreement was reset."));
+					}
+				);
+			},
 		});
 
 		reset_sla.show();
 	},
 
-
-	timeline_refresh: function(frm) {
+	timeline_refresh: function (frm) {
 		if (!frm.timeline.wrapper.find(".btn-split-issue").length) {
 			let split_issue_btn = $(`
 				<a class="action-btn btn-split-issue" title="${__("Split Issue")}">
-					${frappe.utils.icon('branch', 'sm')}
+					${frappe.utils.icon("branch", "sm")}
 				</a>
 			`);
 
 			let communication_box = frm.timeline.wrapper.find('.timeline-item[data-doctype="Communication"]');
-			communication_box.find('.actions').prepend(split_issue_btn);
+			communication_box.find(".actions").prepend(split_issue_btn);
 
 			if (!frm.timeline.wrapper.data("split-issue-event-attached")) {
-				frm.timeline.wrapper.on('click', '.btn-split-issue', (e) => {
+				frm.timeline.wrapper.on("click", ".btn-split-issue", (e) => {
 					var dialog = new frappe.ui.Dialog({
 						title: __("Split Issue"),
 						fields: [
@@ -94,20 +104,30 @@
 								fieldtype: "Data",
 								reqd: 1,
 								label: __("Subject"),
-								description: __("All communications including and above this shall be moved into the new Issue")
-							}
+								description: __(
+									"All communications including and above this shall be moved into the new Issue"
+								),
+							},
 						],
 						primary_action_label: __("Split"),
 						primary_action: () => {
-							frm.call("split_issue", {
-								subject: dialog.fields_dict.subject.value,
-								communication_id: e.currentTarget.closest(".timeline-item").getAttribute("data-name")
-							}, (r) => {
-								frappe.msgprint(`New issue created: <a href="/app/issue/${r.message}">${r.message}</a>`);
-								frm.reload_doc();
-								dialog.hide();
-							});
-						}
+							frm.call(
+								"split_issue",
+								{
+									subject: dialog.fields_dict.subject.value,
+									communication_id: e.currentTarget
+										.closest(".timeline-item")
+										.getAttribute("data-name"),
+								},
+								(r) => {
+									frappe.msgprint(
+										`New issue created: <a href="/app/issue/${r.message}">${r.message}</a>`
+									);
+									frm.reload_doc();
+									dialog.hide();
+								}
+							);
+						},
 					});
 					dialog.show();
 				});
diff --git a/erpnext/support/doctype/issue/issue_list.js b/erpnext/support/doctype/issue/issue_list.js
index 5c9d4ed..8aa1650 100644
--- a/erpnext/support/doctype/issue/issue_list.js
+++ b/erpnext/support/doctype/issue/issue_list.js
@@ -1,30 +1,30 @@
-frappe.listview_settings['Issue'] = {
-	colwidths: {"subject": 6},
-	add_fields: ['priority'],
+frappe.listview_settings["Issue"] = {
+	colwidths: { subject: 6 },
+	add_fields: ["priority"],
 	filters: [["status", "=", "Open"]],
-	onload: function(listview) {
+	onload: function (listview) {
 		var method = "erpnext.support.doctype.issue.issue.set_multiple_status";
 
-		listview.page.add_action_item(__("Set as Open"), function() {
-			listview.call_for_selected_items(method, {"status": "Open"});
+		listview.page.add_action_item(__("Set as Open"), function () {
+			listview.call_for_selected_items(method, { status: "Open" });
 		});
 
-		listview.page.add_action_item(__("Set as Closed"), function() {
-			listview.call_for_selected_items(method, {"status": "Closed"});
+		listview.page.add_action_item(__("Set as Closed"), function () {
+			listview.call_for_selected_items(method, { status: "Closed" });
 		});
 	},
-	get_indicator: function(doc) {
-		if (doc.status === 'Open') {
+	get_indicator: function (doc) {
+		if (doc.status === "Open") {
 			const color = {
-				'Low': 'yellow',
-				'Medium': 'orange',
-				'High': 'red'
+				Low: "yellow",
+				Medium: "orange",
+				High: "red",
 			};
-			return [__(doc.status), color[doc.priority] || 'red', `status,=,Open`];
-		} else if (doc.status === 'Closed') {
+			return [__(doc.status), color[doc.priority] || "red", `status,=,Open`];
+		} else if (doc.status === "Closed") {
 			return [__(doc.status), "green", "status,=," + doc.status];
 		} else {
 			return [__(doc.status), "gray", "status,=," + doc.status];
 		}
-	}
-}
+	},
+};
diff --git a/erpnext/support/doctype/issue_priority/issue_priority.js b/erpnext/support/doctype/issue_priority/issue_priority.js
index 37ce6a5..e777d06 100644
--- a/erpnext/support/doctype/issue_priority/issue_priority.js
+++ b/erpnext/support/doctype/issue_priority/issue_priority.js
@@ -1,8 +1,7 @@
 // Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Issue Priority', {
+frappe.ui.form.on("Issue Priority", {
 	// refresh: function(frm) {
-
 	// }
 });
diff --git a/erpnext/support/doctype/issue_type/issue_type.js b/erpnext/support/doctype/issue_type/issue_type.js
index 2b3d14e..aa0c456 100644
--- a/erpnext/support/doctype/issue_type/issue_type.js
+++ b/erpnext/support/doctype/issue_type/issue_type.js
@@ -1,8 +1,6 @@
 // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Issue Type', {
-	refresh: function(frm) {
-
-	}
+frappe.ui.form.on("Issue Type", {
+	refresh: function (frm) {},
 });
diff --git a/erpnext/support/doctype/service_level_agreement/service_level_agreement.js b/erpnext/support/doctype/service_level_agreement/service_level_agreement.js
index 4dbb0e7..a8b85de 100644
--- a/erpnext/support/doctype/service_level_agreement/service_level_agreement.js
+++ b/erpnext/support/doctype/service_level_agreement/service_level_agreement.js
@@ -1,121 +1,145 @@
 // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Service Level Agreement', {
-	setup: function(frm) {
+frappe.ui.form.on("Service Level Agreement", {
+	setup: function (frm) {
 		if (cint(frm.doc.apply_sla_for_resolution) === 1) {
-			frm.get_field('priorities').grid.editable_fields = [
-				{fieldname: 'default_priority', columns: 1},
-				{fieldname: 'priority', columns: 2},
-				{fieldname: 'response_time', columns: 2},
-				{fieldname: 'resolution_time', columns: 2}
+			frm.get_field("priorities").grid.editable_fields = [
+				{ fieldname: "default_priority", columns: 1 },
+				{ fieldname: "priority", columns: 2 },
+				{ fieldname: "response_time", columns: 2 },
+				{ fieldname: "resolution_time", columns: 2 },
 			];
 		} else {
-			frm.get_field('priorities').grid.editable_fields = [
-				{fieldname: 'default_priority', columns: 1},
-				{fieldname: 'priority', columns: 2},
-				{fieldname: 'response_time', columns: 3},
+			frm.get_field("priorities").grid.editable_fields = [
+				{ fieldname: "default_priority", columns: 1 },
+				{ fieldname: "priority", columns: 2 },
+				{ fieldname: "response_time", columns: 3 },
 			];
 		}
 	},
 
-	refresh: function(frm) {
-		frm.trigger('fetch_status_fields');
-		frm.trigger('toggle_resolution_fields');
-		frm.trigger('default_service_level_agreement');
-		frm.trigger('entity');
+	refresh: function (frm) {
+		frm.trigger("fetch_status_fields");
+		frm.trigger("toggle_resolution_fields");
+		frm.trigger("default_service_level_agreement");
+		frm.trigger("entity");
 	},
 
-	default_service_level_agreement: function(frm) {
-		const field = frm.get_field('default_service_level_agreement');
+	default_service_level_agreement: function (frm) {
+		const field = frm.get_field("default_service_level_agreement");
 		if (frm.doc.default_service_level_agreement) {
-			field.set_description(__('SLA will be applied on every {0}', [frm.doc.document_type]));
+			field.set_description(__("SLA will be applied on every {0}", [frm.doc.document_type]));
 		} else {
-			field.set_description(__('Enable to apply SLA on every {0}', [frm.doc.document_type]));
+			field.set_description(__("Enable to apply SLA on every {0}", [frm.doc.document_type]));
 		}
 	},
 
-	document_type: function(frm) {
-		frm.trigger('fetch_status_fields');
-		frm.trigger('default_service_level_agreement');
+	document_type: function (frm) {
+		frm.trigger("fetch_status_fields");
+		frm.trigger("default_service_level_agreement");
 	},
 
-	entity_type: function(frm) {
-		frm.set_value('entity', undefined);
+	entity_type: function (frm) {
+		frm.set_value("entity", undefined);
 	},
 
-	entity: function(frm) {
-		const field = frm.get_field('entity');
+	entity: function (frm) {
+		const field = frm.get_field("entity");
 		if (frm.doc.entity) {
-			const and_descendants = frm.doc.entity_type != 'Customer' ? ' ' + __('or its descendants') : '';
+			const and_descendants = frm.doc.entity_type != "Customer" ? " " + __("or its descendants") : "";
 			field.set_description(
-				__('SLA will be applied if {1} is set as {2}{3}', [
-					frm.doc.document_type, frm.doc.entity_type,
-					frm.doc.entity, and_descendants
+				__("SLA will be applied if {1} is set as {2}{3}", [
+					frm.doc.document_type,
+					frm.doc.entity_type,
+					frm.doc.entity,
+					and_descendants,
 				])
 			);
 		} else {
-			field.set_description('');
+			field.set_description("");
 		}
 	},
 
-	fetch_status_fields: function(frm) {
+	fetch_status_fields: function (frm) {
 		let allow_statuses = [];
 		let exclude_statuses = [];
 
 		if (frm.doc.document_type) {
 			frappe.model.with_doctype(frm.doc.document_type, () => {
-				let statuses = frappe.meta.get_docfield(frm.doc.document_type, 'status', frm.doc.name).options;
-				statuses = statuses.split('\n');
+				let statuses = frappe.meta.get_docfield(
+					frm.doc.document_type,
+					"status",
+					frm.doc.name
+				).options;
+				statuses = statuses.split("\n");
 
-				exclude_statuses = ['Open', 'Closed'];
+				exclude_statuses = ["Open", "Closed"];
 				allow_statuses = statuses.filter((status) => !exclude_statuses.includes(status));
 
 				frm.fields_dict.pause_sla_on.grid.update_docfield_property(
-					'status', 'options', [''].concat(allow_statuses)
+					"status",
+					"options",
+					[""].concat(allow_statuses)
 				);
 
-				exclude_statuses = ['Open'];
+				exclude_statuses = ["Open"];
 				allow_statuses = statuses.filter((status) => !exclude_statuses.includes(status));
 				frm.fields_dict.sla_fulfilled_on.grid.update_docfield_property(
-					'status', 'options', [''].concat(allow_statuses)
+					"status",
+					"options",
+					[""].concat(allow_statuses)
 				);
 			});
 		}
 
-		frm.refresh_field('pause_sla_on');
+		frm.refresh_field("pause_sla_on");
 	},
 
-	apply_sla_for_resolution: function(frm) {
-		frm.trigger('toggle_resolution_fields');
+	apply_sla_for_resolution: function (frm) {
+		frm.trigger("toggle_resolution_fields");
 	},
 
-	toggle_resolution_fields: function(frm) {
+	toggle_resolution_fields: function (frm) {
 		if (cint(frm.doc.apply_sla_for_resolution) === 1) {
-			frm.fields_dict.priorities.grid.update_docfield_property('resolution_time', 'hidden', 0);
-			frm.fields_dict.priorities.grid.update_docfield_property('resolution_time', 'reqd', 1);
+			frm.fields_dict.priorities.grid.update_docfield_property("resolution_time", "hidden", 0);
+			frm.fields_dict.priorities.grid.update_docfield_property("resolution_time", "reqd", 1);
 		} else {
-			frm.fields_dict.priorities.grid.update_docfield_property('resolution_time', 'hidden', 1);
-			frm.fields_dict.priorities.grid.update_docfield_property('resolution_time', 'reqd', 0);
+			frm.fields_dict.priorities.grid.update_docfield_property("resolution_time", "hidden", 1);
+			frm.fields_dict.priorities.grid.update_docfield_property("resolution_time", "reqd", 0);
 		}
 
-		frm.refresh_field('priorities');
+		frm.refresh_field("priorities");
 	},
 
-	onload: function(frm) {
-		frm.set_query("document_type", function() {
+	onload: function (frm) {
+		frm.set_query("document_type", function () {
 			let invalid_doctypes = frappe.model.core_doctypes_list;
-			invalid_doctypes.push(frm.doc.doctype, 'Cost Center', 'Company');
+			invalid_doctypes.push(frm.doc.doctype, "Cost Center", "Company");
 
 			return {
 				filters: [
-					['DocType', 'issingle', '=', 0],
-					['DocType', 'istable', '=', 0],
-					['DocType', 'is_submittable', '=', 0],
-					['DocType', 'name', 'not in', invalid_doctypes],
-					['DocType', 'module', 'not in', ["Email", "Core", "Custom", "Event Streaming", "Social", "Data Migration", "Geo", "Desk"]]
-				]
+					["DocType", "issingle", "=", 0],
+					["DocType", "istable", "=", 0],
+					["DocType", "is_submittable", "=", 0],
+					["DocType", "name", "not in", invalid_doctypes],
+					[
+						"DocType",
+						"module",
+						"not in",
+						[
+							"Email",
+							"Core",
+							"Custom",
+							"Event Streaming",
+							"Social",
+							"Data Migration",
+							"Geo",
+							"Desk",
+						],
+					],
+				],
 			};
 		});
-	}
+	},
 });
diff --git a/erpnext/support/doctype/support_settings/support_settings.js b/erpnext/support/doctype/support_settings/support_settings.js
index 78adca8..3a1cb84 100644
--- a/erpnext/support/doctype/support_settings/support_settings.js
+++ b/erpnext/support/doctype/support_settings/support_settings.js
@@ -1,8 +1,8 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Support Settings', {
-	refresh: function(frm) {
+frappe.ui.form.on("Support Settings", {
+	refresh: function (frm) {
 		//
-	}
+	},
 });
diff --git a/erpnext/support/doctype/warranty_claim/warranty_claim.js b/erpnext/support/doctype/warranty_claim/warranty_claim.js
index 10cb37f..d7b77f7 100644
--- a/erpnext/support/doctype/warranty_claim/warranty_claim.js
+++ b/erpnext/support/doctype/warranty_claim/warranty_claim.js
@@ -43,10 +43,7 @@
 			doctype: "Customer",
 		};
 
-		if (
-			!frm.doc.__islocal &&
-			["Open", "Work In Progress"].includes(frm.doc.status)
-		) {
+		if (!frm.doc.__islocal && ["Open", "Work In Progress"].includes(frm.doc.status)) {
 			frm.add_custom_button(__("Maintenance Visit"), () => {
 				frappe.model.open_mapped_doc({
 					method: "erpnext.support.doctype.warranty_claim.warranty_claim.make_maintenance_visit",
diff --git a/erpnext/support/doctype/warranty_claim/warranty_claim_list.js b/erpnext/support/doctype/warranty_claim/warranty_claim_list.js
index e162e13..fdafb0e 100644
--- a/erpnext/support/doctype/warranty_claim/warranty_claim_list.js
+++ b/erpnext/support/doctype/warranty_claim/warranty_claim_list.js
@@ -1,4 +1,4 @@
-frappe.listview_settings['Warranty Claim'] = {
+frappe.listview_settings["Warranty Claim"] = {
 	add_fields: ["status", "customer", "item_code"],
-	filters:[["status","=", "Open"]]
+	filters: [["status", "=", "Open"]],
 };
diff --git a/erpnext/support/report/first_response_time_for_issues/first_response_time_for_issues.js b/erpnext/support/report/first_response_time_for_issues/first_response_time_for_issues.js
index a133770..ffe7387 100644
--- a/erpnext/support/report/first_response_time_for_issues/first_response_time_for_issues.js
+++ b/erpnext/support/report/first_response_time_for_issues/first_response_time_for_issues.js
@@ -1,43 +1,44 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["First Response Time for Issues"] = {
-	"filters": [
+	filters: [
 		{
-			"fieldname": "from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"reqd": 1,
-			"default": frappe.datetime.add_days(frappe.datetime.nowdate(), -30)
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			reqd: 1,
+			default: frappe.datetime.add_days(frappe.datetime.nowdate(), -30),
 		},
 		{
-			"fieldname": "to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"reqd": 1,
-			"default":frappe.datetime.nowdate()
-		}
+			fieldname: "to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			reqd: 1,
+			default: frappe.datetime.nowdate(),
+		},
 	],
-	get_chart_data: function(_columns, result) {
+	get_chart_data: function (_columns, result) {
 		return {
 			data: {
-				labels: result.map(d => d.creation_date),
-				datasets: [{
-					name: 'First Response Time',
-					values: result.map(d => d.first_response_time)
-				}]
+				labels: result.map((d) => d.creation_date),
+				datasets: [
+					{
+						name: "First Response Time",
+						values: result.map((d) => d.first_response_time),
+					},
+				],
 			},
 			type: "line",
 			tooltipOptions: {
-				formatTooltipY: d => {
+				formatTooltipY: (d) => {
 					let duration_options = {
 						hide_days: 0,
-						hide_seconds: 0
+						hide_seconds: 0,
 					};
 					return frappe.utils.get_formatted_duration(d, duration_options);
-				}
-			}
-		}
-	}
+				},
+			},
+		};
+	},
 };
diff --git a/erpnext/support/report/issue_analytics/issue_analytics.js b/erpnext/support/report/issue_analytics/issue_analytics.js
index be45b9b..7a800f4 100644
--- a/erpnext/support/report/issue_analytics/issue_analytics.js
+++ b/erpnext/support/report/issue_analytics/issue_analytics.js
@@ -1,16 +1,15 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Issue Analytics"] = {
-	"filters": [
+	filters: [
 		{
 			fieldname: "company",
 			label: __("Company"),
 			fieldtype: "Link",
 			options: "Company",
 			default: frappe.defaults.get_user_default("Company"),
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			fieldname: "based_on",
@@ -18,125 +17,124 @@
 			fieldtype: "Select",
 			options: ["Customer", "Issue Type", "Issue Priority", "Assigned To"],
 			default: "Customer",
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			fieldname: "from_date",
 			label: __("From Date"),
 			fieldtype: "Date",
 			default: frappe.defaults.get_global_default("year_start_date"),
-			reqd: 1
+			reqd: 1,
 		},
 		{
-			fieldname:"to_date",
+			fieldname: "to_date",
 			label: __("To Date"),
 			fieldtype: "Date",
 			default: frappe.defaults.get_global_default("year_end_date"),
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			fieldname: "range",
 			label: __("Range"),
 			fieldtype: "Select",
 			options: [
-				{ "value": "Weekly", "label": __("Weekly") },
-				{ "value": "Monthly", "label": __("Monthly") },
-				{ "value": "Quarterly", "label": __("Quarterly") },
-				{ "value": "Yearly", "label": __("Yearly") }
+				{ value: "Weekly", label: __("Weekly") },
+				{ value: "Monthly", label: __("Monthly") },
+				{ value: "Quarterly", label: __("Quarterly") },
+				{ value: "Yearly", label: __("Yearly") },
 			],
 			default: "Monthly",
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			fieldname: "status",
 			label: __("Status"),
 			fieldtype: "Select",
-			options:[
+			options: [
 				"",
-				{label: __('Open'), value: 'Open'},
-				{label: __('Replied'), value: 'Replied'},
-				{label: __('Resolved'), value: 'Resolved'},
-				{label: __('Closed'), value: 'Closed'}
-			]
+				{ label: __("Open"), value: "Open" },
+				{ label: __("Replied"), value: "Replied" },
+				{ label: __("Resolved"), value: "Resolved" },
+				{ label: __("Closed"), value: "Closed" },
+			],
 		},
 		{
 			fieldname: "priority",
 			label: __("Issue Priority"),
 			fieldtype: "Link",
-			options: "Issue Priority"
+			options: "Issue Priority",
 		},
 		{
 			fieldname: "customer",
 			label: __("Customer"),
 			fieldtype: "Link",
-			options: "Customer"
+			options: "Customer",
 		},
 		{
 			fieldname: "project",
 			label: __("Project"),
 			fieldtype: "Link",
-			options: "Project"
+			options: "Project",
 		},
 		{
 			fieldname: "assigned_to",
 			label: __("Assigned To"),
 			fieldtype: "Link",
-			options: "User"
-		}
+			options: "User",
+		},
 	],
-	after_datatable_render: function(datatable_obj) {
-		$(datatable_obj.wrapper).find(".dt-row-0").find('input[type=checkbox]').click();
+	after_datatable_render: function (datatable_obj) {
+		$(datatable_obj.wrapper).find(".dt-row-0").find("input[type=checkbox]").click();
 	},
 	get_datatable_options(options) {
 		return Object.assign(options, {
 			checkboxColumn: true,
 			events: {
-				onCheckRow: function(data) {
+				onCheckRow: function (data) {
 					if (data && data.length) {
 						let row_name = data[2].content;
-						let row_values = data.slice(3).map(function(column) {
+						let row_values = data.slice(3).map(function (column) {
 							return column.content;
-						})
-						let entry  = {
-							'name': row_name,
-							'values': row_values
-						}
+						});
+						let entry = {
+							name: row_name,
+							values: row_values,
+						};
 
 						let raw_data = frappe.query_report.chart.data;
 						let new_datasets = raw_data.datasets;
 
 						var found = false;
 
-						for(var i=0; i < new_datasets.length; i++){
-							if (new_datasets[i].name == row_name){
+						for (var i = 0; i < new_datasets.length; i++) {
+							if (new_datasets[i].name == row_name) {
 								found = true;
-								new_datasets.splice(i,1);
+								new_datasets.splice(i, 1);
 								break;
 							}
 						}
 
-						if (!found){
+						if (!found) {
 							new_datasets.push(entry);
 						}
 
 						let new_data = {
 							labels: raw_data.labels,
-							datasets: new_datasets
-						}
+							datasets: new_datasets,
+						};
 
 						setTimeout(() => {
-							frappe.query_report.chart.update(new_data)
-						},500)
-
+							frappe.query_report.chart.update(new_data);
+						}, 500);
 
 						setTimeout(() => {
 							frappe.query_report.chart.draw(true);
-						}, 1000)
+						}, 1000);
 
 						frappe.query_report.raw_chart_data = new_data;
 					}
 				},
-			}
+			},
 		});
-	}
+	},
 };
diff --git a/erpnext/support/report/issue_summary/issue_summary.js b/erpnext/support/report/issue_summary/issue_summary.js
index aee6f53..79c57d7 100644
--- a/erpnext/support/report/issue_summary/issue_summary.js
+++ b/erpnext/support/report/issue_summary/issue_summary.js
@@ -1,16 +1,15 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Issue Summary"] = {
-	"filters": [
+	filters: [
 		{
 			fieldname: "company",
 			label: __("Company"),
 			fieldtype: "Link",
 			options: "Company",
 			default: frappe.defaults.get_user_default("Company"),
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			fieldname: "based_on",
@@ -18,58 +17,58 @@
 			fieldtype: "Select",
 			options: ["Customer", "Issue Type", "Issue Priority", "Assigned To"],
 			default: "Customer",
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			fieldname: "from_date",
 			label: __("From Date"),
 			fieldtype: "Date",
 			default: frappe.defaults.get_global_default("year_start_date"),
-			reqd: 1
+			reqd: 1,
 		},
 		{
-			fieldname:"to_date",
+			fieldname: "to_date",
 			label: __("To Date"),
 			fieldtype: "Date",
 			default: frappe.defaults.get_global_default("year_end_date"),
-			reqd: 1
+			reqd: 1,
 		},
 		{
 			fieldname: "status",
 			label: __("Status"),
 			fieldtype: "Select",
-			options:[
+			options: [
 				"",
-				{label: __('Open'), value: 'Open'},
-				{label: __('Replied'), value: 'Replied'},
-				{label: __('On Hold'), value: 'On Hold'},
-				{label: __('Resolved'), value: 'Resolved'},
-				{label: __('Closed'), value: 'Closed'}
-			]
+				{ label: __("Open"), value: "Open" },
+				{ label: __("Replied"), value: "Replied" },
+				{ label: __("On Hold"), value: "On Hold" },
+				{ label: __("Resolved"), value: "Resolved" },
+				{ label: __("Closed"), value: "Closed" },
+			],
 		},
 		{
 			fieldname: "priority",
 			label: __("Issue Priority"),
 			fieldtype: "Link",
-			options: "Issue Priority"
+			options: "Issue Priority",
 		},
 		{
 			fieldname: "customer",
 			label: __("Customer"),
 			fieldtype: "Link",
-			options: "Customer"
+			options: "Customer",
 		},
 		{
 			fieldname: "project",
 			label: __("Project"),
 			fieldtype: "Link",
-			options: "Project"
+			options: "Project",
 		},
 		{
 			fieldname: "assigned_to",
 			label: __("Assigned To"),
 			fieldtype: "Link",
-			options: "User"
-		}
-	]
+			options: "User",
+		},
+	],
 };
diff --git a/erpnext/support/report/support_hour_distribution/support_hour_distribution.js b/erpnext/support/report/support_hour_distribution/support_hour_distribution.js
index 82ccc73..96d8e00 100644
--- a/erpnext/support/report/support_hour_distribution/support_hour_distribution.js
+++ b/erpnext/support/report/support_hour_distribution/support_hour_distribution.js
@@ -1,22 +1,21 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["Support Hour Distribution"] = {
-	"filters": [
+	filters: [
 		{
-			'lable': __("From Date"),
-			'fieldname': 'from_date',
-			'fieldtype': 'Date',
-			'default': frappe.datetime.nowdate(),
-			'reqd': 1
+			lable: __("From Date"),
+			fieldname: "from_date",
+			fieldtype: "Date",
+			default: frappe.datetime.nowdate(),
+			reqd: 1,
 		},
 		{
-			'lable': __("To Date"),
-			'fieldname': 'to_date',
-			'fieldtype': 'Date',
-			'default': frappe.datetime.nowdate(),
-			'reqd': 1
-		}
-	]
-}
+			lable: __("To Date"),
+			fieldname: "to_date",
+			fieldtype: "Date",
+			default: frappe.datetime.nowdate(),
+			reqd: 1,
+		},
+	],
+};
diff --git a/erpnext/support/web_form/issues/issues.js b/erpnext/support/web_form/issues/issues.js
index ffc5e98..8f56ebb 100644
--- a/erpnext/support/web_form/issues/issues.js
+++ b/erpnext/support/web_form/issues/issues.js
@@ -1,3 +1,3 @@
-frappe.ready(function() {
+frappe.ready(function () {
 	// bind events here
-})
+});
diff --git a/erpnext/telephony/doctype/call_log/call_log.js b/erpnext/telephony/doctype/call_log/call_log.js
index e7afa0b..1fd1526 100644
--- a/erpnext/telephony/doctype/call_log/call_log.js
+++ b/erpnext/telephony/doctype/call_log/call_log.js
@@ -1,21 +1,21 @@
 // Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Call Log', {
-	refresh: function(frm) {
+frappe.ui.form.on("Call Log", {
+	refresh: function (frm) {
 		frm.events.setup_recording_audio_control(frm);
-		const incoming_call = frm.doc.type == 'Incoming';
-		frm.add_custom_button(incoming_call ? __('Callback'): __('Call Again'), () => {
+		const incoming_call = frm.doc.type == "Incoming";
+		frm.add_custom_button(incoming_call ? __("Callback") : __("Call Again"), () => {
 			const number = incoming_call ? frm.doc.from : frm.doc.to;
 			frappe.phone_call.handler(number, frm);
 		});
 	},
 	setup_recording_audio_control(frm) {
-		const recording_wrapper = frm.get_field('recording_html').$wrapper;
-		if (!frm.doc.recording_url || frm.doc.recording_url == 'null') {
+		const recording_wrapper = frm.get_field("recording_html").$wrapper;
+		if (!frm.doc.recording_url || frm.doc.recording_url == "null") {
 			recording_wrapper.empty();
 		} else {
-			recording_wrapper.addClass('input-max-width');
+			recording_wrapper.addClass("input-max-width");
 			recording_wrapper.html(`
 				<audio
 					controls
@@ -23,5 +23,5 @@
 				</audio>
 			`);
 		}
-	}
+	},
 });
diff --git a/erpnext/telephony/doctype/incoming_call_settings/incoming_call_settings.js b/erpnext/telephony/doctype/incoming_call_settings/incoming_call_settings.js
index b80acdb..3a1d3e5 100644
--- a/erpnext/telephony/doctype/incoming_call_settings/incoming_call_settings.js
+++ b/erpnext/telephony/doctype/incoming_call_settings/incoming_call_settings.js
@@ -3,17 +3,17 @@
 
 function time_to_seconds(time_str) {
 	// Convert time string of format HH:MM:SS into seconds.
-	let seq = time_str.split(':');
+	let seq = time_str.split(":");
 	seq = seq.map((n) => parseInt(n));
-	return (seq[0]*60*60) + (seq[1]*60) + seq[2];
+	return seq[0] * 60 * 60 + seq[1] * 60 + seq[2];
 }
 
-function number_sort(array, ascending=true) {
+function number_sort(array, ascending = true) {
 	let array_copy = [...array];
 	if (ascending) {
-		array_copy.sort((a, b) => a-b); // ascending order
+		array_copy.sort((a, b) => a - b); // ascending order
 	} else {
-		array_copy.sort((a, b) => b-a); // descending order
+		array_copy.sort((a, b) => b - a); // descending order
 	}
 	return array_copy;
 }
@@ -54,7 +54,9 @@
 		let from_time_in_secs = time_to_seconds(record.from_time);
 		let to_time_in_secs = time_to_seconds(record.to_time);
 		if (from_time_in_secs >= to_time_in_secs) {
-			errors.push(__('Call Schedule Row {0}: To time slot should always be ahead of From time slot.', [row]));
+			errors.push(
+				__("Call Schedule Row {0}: To time slot should always be ahead of From time slot.", [row])
+			);
 		}
 	}
 
@@ -66,7 +68,7 @@
 function is_call_schedule_overlapped(day_schedule) {
 	// Check if any time slots are overlapped in a day schedule.
 	let timeslots = [];
-	day_schedule.forEach((record)=> {
+	day_schedule.forEach((record) => {
 		timeslots.push([time_to_seconds(record.from_time), time_to_seconds(record.to_time)]);
 	});
 
@@ -77,8 +79,8 @@
 	timeslots = number_sort(timeslots);
 
 	// Sorted timeslots will be in ascending order if not overlapped.
-	for (let i=1; i < timeslots.length; i++) {
-		if (check_timeslot_overlap(timeslots[i-1], timeslots[i])) {
+	for (let i = 1; i < timeslots.length; i++) {
+		if (check_timeslot_overlap(timeslots[i - 1], timeslots[i])) {
 			return true;
 		}
 	}
@@ -86,16 +88,16 @@
 }
 
 function validate_call_schedule_overlaps(schedule) {
-	let group_by_day = groupby(schedule, 'day_of_week');
+	let group_by_day = groupby(schedule, "day_of_week");
 	for (const [day, day_schedule] of Object.entries(group_by_day)) {
 		if (is_call_schedule_overlapped(day_schedule)) {
-			frappe.throw(__('Please fix overlapping time slots for {0}', [day]));
+			frappe.throw(__("Please fix overlapping time slots for {0}", [day]));
 		}
 	}
 }
 
-frappe.ui.form.on('Incoming Call Settings', {
+frappe.ui.form.on("Incoming Call Settings", {
 	validate(frm) {
 		validate_call_schedule(frm.doc.call_handling_schedule);
-	}
+	},
 });
diff --git a/erpnext/telephony/doctype/telephony_call_type/telephony_call_type.js b/erpnext/telephony/doctype/telephony_call_type/telephony_call_type.js
index efba2b8..474f5ec 100644
--- a/erpnext/telephony/doctype/telephony_call_type/telephony_call_type.js
+++ b/erpnext/telephony/doctype/telephony_call_type/telephony_call_type.js
@@ -1,8 +1,7 @@
 // Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Telephony Call Type', {
+frappe.ui.form.on("Telephony Call Type", {
 	// refresh: function(frm) {
-
 	// }
 });
diff --git a/erpnext/telephony/doctype/voice_call_settings/voice_call_settings.js b/erpnext/telephony/doctype/voice_call_settings/voice_call_settings.js
index 4a61b61..2014444 100644
--- a/erpnext/telephony/doctype/voice_call_settings/voice_call_settings.js
+++ b/erpnext/telephony/doctype/voice_call_settings/voice_call_settings.js
@@ -1,8 +1,7 @@
 // Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Voice Call Settings', {
+frappe.ui.form.on("Voice Call Settings", {
 	// refresh: function(frm) {
-
 	// }
 });
diff --git a/erpnext/templates/pages/projects.js b/erpnext/templates/pages/projects.js
index 7149cee..622ed42 100644
--- a/erpnext/templates/pages/projects.js
+++ b/erpnext/templates/pages/projects.js
@@ -1,120 +1,117 @@
-frappe.ready(function() {
-
-	$('.task-status-switch').on('click', function() {
+frappe.ready(function () {
+	$(".task-status-switch").on("click", function () {
 		var $btn = $(this);
-		if($btn.attr('data-status')==='Open') {
-			reload_items('completed', 'task', $btn);
+		if ($btn.attr("data-status") === "Open") {
+			reload_items("completed", "task", $btn);
 		} else {
-			reload_items('open', 'task', $btn);
+			reload_items("open", "task", $btn);
 		}
-	})
+	});
 
-
-	$('.issue-status-switch').on('click', function() {
+	$(".issue-status-switch").on("click", function () {
 		var $btn = $(this);
-		if($btn.attr('data-status')==='Open') {
-			reload_items('completed', 'issue', $btn);
+		if ($btn.attr("data-status") === "Open") {
+			reload_items("completed", "issue", $btn);
 		} else {
-			reload_items('open', 'issue', $btn);
+			reload_items("open", "issue", $btn);
 		}
-	})
+	});
 
 	var start = 10;
-	$(".more-tasks").click(function() {
-		more_items('task', true);
+	$(".more-tasks").click(function () {
+		more_items("task", true);
 	});
 
-	$(".more-issues").click(function() {
-		more_items('issue', true);
+	$(".more-issues").click(function () {
+		more_items("issue", true);
 	});
 
-	$(".more-timelogs").click(function() {
-		more_items('timelog', false);
+	$(".more-timelogs").click(function () {
+		more_items("timelog", false);
 	});
 
-	$(".more-timelines").click(function() {
-		more_items('timeline', false);
+	$(".more-timelines").click(function () {
+		more_items("timeline", false);
 	});
 
-	$(".file-size").each(function() {
+	$(".file-size").each(function () {
 		$(this).text(frappe.form.formatters.FileSize($(this).text()));
 	});
 
-
-	var reload_items = function(item_status, item, $btn) {
+	var reload_items = function (item_status, item, $btn) {
 		$.ajax({
 			method: "GET",
 			url: "/",
 			dataType: "json",
 			data: {
-				cmd: "erpnext.templates.pages.projects.get_"+ item +"_html",
-				project: '{{ doc.name }}',
+				cmd: "erpnext.templates.pages.projects.get_" + item + "_html",
+				project: "{{ doc.name }}",
 				item_status: item_status,
 			},
-			success: function(data) {
-				if(typeof data.message == 'undefined') {
-					$('.project-'+ item).html("No "+ item_status +" "+ item);
-					$(".more-"+ item).toggle(false);
+			success: function (data) {
+				if (typeof data.message == "undefined") {
+					$(".project-" + item).html("No " + item_status + " " + item);
+					$(".more-" + item).toggle(false);
 				}
-				$('.project-'+ item).html(data.message);
-				$(".more-"+ item).toggle(true);
+				$(".project-" + item).html(data.message);
+				$(".more-" + item).toggle(true);
 
 				// update status
-				if(item_status==='open') {
-					$btn.html(__('Show Completed')).attr('data-status', 'Open');
+				if (item_status === "open") {
+					$btn.html(__("Show Completed")).attr("data-status", "Open");
 				} else {
-					$btn.html(__('Show Open')).attr('data-status', 'Completed');
+					$btn.html(__("Show Open")).attr("data-status", "Completed");
 				}
-			}
+			},
 		});
+	};
 
-	}
-
-	var more_items = function(item, item_status){
-		if(item_status) {
-			item_status = $('.project-'+ item +'-section .btn-group .bold').hasClass('btn-completed-'+ item)
-				? 'completed' : 'open';
+	var more_items = function (item, item_status) {
+		if (item_status) {
+			item_status = $(".project-" + item + "-section .btn-group .bold").hasClass(
+				"btn-completed-" + item
+			)
+				? "completed"
+				: "open";
 		}
 		$.ajax({
 			method: "GET",
 			url: "/",
 			dataType: "json",
 			data: {
-				cmd: "erpnext.templates.pages.projects.get_"+ item +"_html",
-				project: '{{ doc.name }}',
+				cmd: "erpnext.templates.pages.projects.get_" + item + "_html",
+				project: "{{ doc.name }}",
 				start: start,
 				item_status: item_status,
 			},
-			success: function(data) {
-
-				$(data.message).appendTo('.project-'+ item);
-				if(typeof data.message == 'undefined') {
-					$(".more-"+ item).toggle(false);
+			success: function (data) {
+				$(data.message).appendTo(".project-" + item);
+				if (typeof data.message == "undefined") {
+					$(".more-" + item).toggle(false);
 				}
-				start = start+10;
-			}
+				start = start + 10;
+			},
 		});
-	}
+	};
 
-	var close_item = function(item, item_name){
+	var close_item = function (item, item_name) {
 		var args = {
-			project: '{{ doc.name }}',
+			project: "{{ doc.name }}",
 			item_name: item_name,
-		}
+		};
 		frappe.call({
 			btn: this,
 			type: "POST",
-			method: "erpnext.templates.pages.projects.set_"+ item +"_status",
+			method: "erpnext.templates.pages.projects.set_" + item + "_status",
 			args: args,
-			callback: function(r) {
-				if(r.exc) {
-					if(r._server_messages)
-						frappe.msgprint(r._server_messages);
+			callback: function (r) {
+				if (r.exc) {
+					if (r._server_messages) frappe.msgprint(r._server_messages);
 				} else {
 					$(this).remove();
 				}
-			}
-		})
+			},
+		});
 		return false;
-	}
+	};
 });
diff --git a/erpnext/utilities/doctype/rename_tool/rename_tool.js b/erpnext/utilities/doctype/rename_tool/rename_tool.js
index b8203f4..1b8b2be 100644
--- a/erpnext/utilities/doctype/rename_tool/rename_tool.js
+++ b/erpnext/utilities/doctype/rename_tool/rename_tool.js
@@ -1,17 +1,16 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-
 frappe.ui.form.on("Rename Tool", {
-	onload: function(frm) {
+	onload: function (frm) {
 		return frappe.call({
 			method: "erpnext.utilities.doctype.rename_tool.rename_tool.get_doctypes",
-			callback: function(r) {
+			callback: function (r) {
 				frm.set_df_property("select_doctype", "options", r.message);
-			}
+			},
 		});
 	},
-	refresh: function(frm) {
+	refresh: function (frm) {
 		frm.disable_save();
 
 		frm.get_field("file_to_rename").df.options = {
@@ -22,14 +21,14 @@
 		if (!frm.doc.file_to_rename) {
 			frm.get_field("rename_log").$wrapper.html("");
 		}
-		frm.page.set_primary_action(__("Rename"), function() {
+		frm.page.set_primary_action(__("Rename"), function () {
 			frm.get_field("rename_log").$wrapper.html("<p>Renaming...</p>");
 			frappe.call({
 				method: "erpnext.utilities.doctype.rename_tool.rename_tool.upload",
 				args: {
-					select_doctype: frm.doc.select_doctype
+					select_doctype: frm.doc.select_doctype,
 				},
-				callback: function(r) {
+				callback: function (r) {
 					let html = r.message.join("<br>");
 
 					if (r.exc) {
@@ -40,8 +39,8 @@
 					}
 
 					frm.get_field("rename_log").$wrapper.html(html);
-				}
+				},
 			});
 		});
-	}
-})
+	},
+});
diff --git a/erpnext/utilities/doctype/video/video.js b/erpnext/utilities/doctype/video/video.js
index e6c6efb..83e6d06 100644
--- a/erpnext/utilities/doctype/video/video.js
+++ b/erpnext/utilities/doctype/video/video.js
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Video', {
+frappe.ui.form.on("Video", {
 	refresh: function (frm) {
 		frm.events.toggle_youtube_statistics_section(frm);
 		frm.add_custom_button(__("Watch Video"), () => frappe.help.show_video(frm.doc.url, frm.doc.title));
@@ -9,9 +9,9 @@
 
 	toggle_youtube_statistics_section: (frm) => {
 		if (frm.doc.provider === "YouTube") {
-			frappe.db.get_single_value("Video Settings", "enable_youtube_tracking").then( val => {
+			frappe.db.get_single_value("Video Settings", "enable_youtube_tracking").then((val) => {
 				frm.toggle_display("youtube_tracking_section", val);
 			});
 		}
-	}
+	},
 });
diff --git a/erpnext/utilities/doctype/video/video_list.js b/erpnext/utilities/doctype/video/video_list.js
index 6f78f6e..a87e036 100644
--- a/erpnext/utilities/doctype/video/video_list.js
+++ b/erpnext/utilities/doctype/video/video_list.js
@@ -1,7 +1,7 @@
 frappe.listview_settings["Video"] = {
 	onload: (listview) => {
-		listview.page.add_menu_item(__("Video Settings"), function() {
-			frappe.set_route("Form","Video Settings", "Video Settings");
+		listview.page.add_menu_item(__("Video Settings"), function () {
+			frappe.set_route("Form", "Video Settings", "Video Settings");
 		});
-	}
-}
+	},
+};
diff --git a/erpnext/utilities/doctype/video_settings/video_settings.js b/erpnext/utilities/doctype/video_settings/video_settings.js
index 9ac8b9e..bb26988 100644
--- a/erpnext/utilities/doctype/video_settings/video_settings.js
+++ b/erpnext/utilities/doctype/video_settings/video_settings.js
@@ -1,8 +1,7 @@
 // Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.ui.form.on('Video Settings', {
+frappe.ui.form.on("Video Settings", {
 	// refresh: function(frm) {
-
 	// }
 });
diff --git a/erpnext/utilities/report/youtube_interactions/youtube_interactions.js b/erpnext/utilities/report/youtube_interactions/youtube_interactions.js
index adf2cf6..38f6c88 100644
--- a/erpnext/utilities/report/youtube_interactions/youtube_interactions.js
+++ b/erpnext/utilities/report/youtube_interactions/youtube_interactions.js
@@ -1,9 +1,8 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-
 frappe.query_reports["YouTube Interactions"] = {
-	"filters": [
+	filters: [
 		{
 			fieldname: "from_date",
 			label: __("From Date"),
@@ -11,10 +10,10 @@
 			default: frappe.datetime.add_months(frappe.datetime.now_date(), -12),
 		},
 		{
-			fieldname:"to_date",
+			fieldname: "to_date",
 			label: __("To Date"),
 			fieldtype: "Date",
 			default: frappe.datetime.now_date(),
-		}
-	]
+		},
+	],
 };
diff --git a/erpnext/utilities/web_form/addresses/addresses.js b/erpnext/utilities/web_form/addresses/addresses.js
index ffc5e98..8f56ebb 100644
--- a/erpnext/utilities/web_form/addresses/addresses.js
+++ b/erpnext/utilities/web_form/addresses/addresses.js
@@ -1,3 +1,3 @@
-frappe.ready(function() {
+frappe.ready(function () {
 	// bind events here
-})
+});
diff --git a/erpnext/www/book_appointment/index.js b/erpnext/www/book_appointment/index.js
index 71a34d4..0770d10 100644
--- a/erpnext/www/book_appointment/index.js
+++ b/erpnext/www/book_appointment/index.js
@@ -1,250 +1,259 @@
 frappe.ready(async () => {
-    initialise_select_date();
-})
+	initialise_select_date();
+});
 
 async function initialise_select_date() {
-    navigate_to_page(1);
-    await get_global_variables();
-    setup_date_picker();
-    setup_timezone_selector();
-    hide_next_button();
+	navigate_to_page(1);
+	await get_global_variables();
+	setup_date_picker();
+	setup_timezone_selector();
+	hide_next_button();
 }
 
 async function get_global_variables() {
-    // Using await through this file instead of then.
-    window.appointment_settings = (await frappe.call({
-        method: 'erpnext.www.book_appointment.index.get_appointment_settings'
-    })).message;
-    window.timezones = (await frappe.call({
-        method:'erpnext.www.book_appointment.index.get_timezones'
-    })).message;
+	// Using await through this file instead of then.
+	window.appointment_settings = (
+		await frappe.call({
+			method: "erpnext.www.book_appointment.index.get_appointment_settings",
+		})
+	).message;
+	window.timezones = (
+		await frappe.call({
+			method: "erpnext.www.book_appointment.index.get_timezones",
+		})
+	).message;
 }
 
 function setup_timezone_selector() {
-    let timezones_element = document.getElementById('appointment-timezone');
-    let local_timezone = moment.tz.guess()
-    window.timezones.forEach(timezone => {
-        let opt = document.createElement('option');
-        opt.value = timezone;
-        if (timezone == local_timezone) {
-            opt.selected = true;
-        }
-        opt.innerHTML = timezone;
-        timezones_element.appendChild(opt)
-    });
+	let timezones_element = document.getElementById("appointment-timezone");
+	let local_timezone = moment.tz.guess();
+	window.timezones.forEach((timezone) => {
+		let opt = document.createElement("option");
+		opt.value = timezone;
+		if (timezone == local_timezone) {
+			opt.selected = true;
+		}
+		opt.innerHTML = timezone;
+		timezones_element.appendChild(opt);
+	});
 }
 
 function setup_date_picker() {
-    let date_picker = document.getElementById('appointment-date');
-    let today = new Date();
-    date_picker.min = today.toISOString().substr(0, 10);
-    today.setDate(today.getDate() + window.appointment_settings.advance_booking_days);
-    date_picker.max = today.toISOString().substr(0, 10);
+	let date_picker = document.getElementById("appointment-date");
+	let today = new Date();
+	date_picker.min = today.toISOString().substr(0, 10);
+	today.setDate(today.getDate() + window.appointment_settings.advance_booking_days);
+	date_picker.max = today.toISOString().substr(0, 10);
 }
 
 function hide_next_button() {
-    let next_button = document.getElementById('next-button');
-    next_button.disabled = true;
-    next_button.onclick = () => frappe.msgprint(__("Please select a date and time"));
+	let next_button = document.getElementById("next-button");
+	next_button.disabled = true;
+	next_button.onclick = () => frappe.msgprint(__("Please select a date and time"));
 }
 
 function show_next_button() {
-    let next_button = document.getElementById('next-button');
-    next_button.disabled = false;
-    next_button.onclick = setup_details_page;
+	let next_button = document.getElementById("next-button");
+	next_button.disabled = false;
+	next_button.onclick = setup_details_page;
 }
 
 function on_date_or_timezone_select() {
-    let date_picker = document.getElementById('appointment-date');
-    let timezone = document.getElementById('appointment-timezone');
-    if (date_picker.value === '') {
-        clear_time_slots();
-        hide_next_button();
-        frappe.throw(__('Please select a date'));
-    }
-    window.selected_date = date_picker.value;
-    window.selected_timezone = timezone.value;
-    update_time_slots(date_picker.value, timezone.value);
-    let lead_text = document.getElementById('lead-text');
-    lead_text.innerHTML = __("Select Time")
+	let date_picker = document.getElementById("appointment-date");
+	let timezone = document.getElementById("appointment-timezone");
+	if (date_picker.value === "") {
+		clear_time_slots();
+		hide_next_button();
+		frappe.throw(__("Please select a date"));
+	}
+	window.selected_date = date_picker.value;
+	window.selected_timezone = timezone.value;
+	update_time_slots(date_picker.value, timezone.value);
+	let lead_text = document.getElementById("lead-text");
+	lead_text.innerHTML = __("Select Time");
 }
 
 async function get_time_slots(date, timezone) {
-    let slots = (await frappe.call({
-        method: 'erpnext.www.book_appointment.index.get_appointment_slots',
-        args: {
-            date: date,
-            timezone: timezone
-        }
-    })).message;
-    return slots;
+	let slots = (
+		await frappe.call({
+			method: "erpnext.www.book_appointment.index.get_appointment_slots",
+			args: {
+				date: date,
+				timezone: timezone,
+			},
+		})
+	).message;
+	return slots;
 }
 
 async function update_time_slots(selected_date, selected_timezone) {
-    let timeslot_container = document.getElementById('timeslot-container');
-    window.slots = await get_time_slots(selected_date, selected_timezone);
-    clear_time_slots();
-    if (window.slots.length <= 0) {
-        let message_div = document.createElement('p');
-        message_div.innerHTML = __("There are no slots available on this date");
-        timeslot_container.appendChild(message_div);
-        return
-    }
-    window.slots.forEach((slot, index) => {
-        // Get and append timeslot div
-        let timeslot_div = get_timeslot_div_layout(slot)
-        timeslot_container.appendChild(timeslot_div);
-    });
-    set_default_timeslot();
+	let timeslot_container = document.getElementById("timeslot-container");
+	window.slots = await get_time_slots(selected_date, selected_timezone);
+	clear_time_slots();
+	if (window.slots.length <= 0) {
+		let message_div = document.createElement("p");
+		message_div.innerHTML = __("There are no slots available on this date");
+		timeslot_container.appendChild(message_div);
+		return;
+	}
+	window.slots.forEach((slot, index) => {
+		// Get and append timeslot div
+		let timeslot_div = get_timeslot_div_layout(slot);
+		timeslot_container.appendChild(timeslot_div);
+	});
+	set_default_timeslot();
 }
 
 function get_timeslot_div_layout(timeslot) {
-    let start_time = new Date(timeslot.time)
-    let timeslot_div = document.createElement('div');
-    timeslot_div.classList.add('time-slot');
-    if (!timeslot.availability) {
-        timeslot_div.classList.add('unavailable')
-    }
-    timeslot_div.innerHTML = get_slot_layout(start_time);
-    timeslot_div.id = timeslot.time.substring(11, 19);
-    timeslot_div.addEventListener('click', select_time);
-    return timeslot_div
+	let start_time = new Date(timeslot.time);
+	let timeslot_div = document.createElement("div");
+	timeslot_div.classList.add("time-slot");
+	if (!timeslot.availability) {
+		timeslot_div.classList.add("unavailable");
+	}
+	timeslot_div.innerHTML = get_slot_layout(start_time);
+	timeslot_div.id = timeslot.time.substring(11, 19);
+	timeslot_div.addEventListener("click", select_time);
+	return timeslot_div;
 }
 
 function clear_time_slots() {
-    // Clear any existing divs in timeslot container
-    let timeslot_container = document.getElementById('timeslot-container');
-    while (timeslot_container.firstChild) {
-        timeslot_container.removeChild(timeslot_container.firstChild);
-    }
+	// Clear any existing divs in timeslot container
+	let timeslot_container = document.getElementById("timeslot-container");
+	while (timeslot_container.firstChild) {
+		timeslot_container.removeChild(timeslot_container.firstChild);
+	}
 }
 
 function get_slot_layout(time) {
-    let timezone = document.getElementById("appointment-timezone").value;
-    time = new Date(time);
-    let start_time_string = moment(time).tz(timezone).format("LT");
-    let end_time = moment(time).tz(timezone).add(window.appointment_settings.appointment_duration, 'minutes');
-    let end_time_string = end_time.format("LT");
-    return `<span style="font-size: 1.2em;">${start_time_string}</span><br><span class="text-muted small">${__("to") } ${end_time_string}</span>`;
+	let timezone = document.getElementById("appointment-timezone").value;
+	time = new Date(time);
+	let start_time_string = moment(time).tz(timezone).format("LT");
+	let end_time = moment(time).tz(timezone).add(window.appointment_settings.appointment_duration, "minutes");
+	let end_time_string = end_time.format("LT");
+	return `<span style="font-size: 1.2em;">${start_time_string}</span><br><span class="text-muted small">${__(
+		"to"
+	)} ${end_time_string}</span>`;
 }
 
 function select_time() {
-    if (this.classList.contains('unavailable')) {
-        return;
-    }
-    let selected_element = document.getElementsByClassName('selected');
-    if (!(selected_element.length > 0)) {
-        this.classList.add('selected');
-        show_next_button();
-        return;
-    }
-    selected_element = selected_element[0]
-    window.selected_time = this.id;
-    selected_element.classList.remove('selected');
-    this.classList.add('selected');
-    show_next_button();
+	if (this.classList.contains("unavailable")) {
+		return;
+	}
+	let selected_element = document.getElementsByClassName("selected");
+	if (!(selected_element.length > 0)) {
+		this.classList.add("selected");
+		show_next_button();
+		return;
+	}
+	selected_element = selected_element[0];
+	window.selected_time = this.id;
+	selected_element.classList.remove("selected");
+	this.classList.add("selected");
+	show_next_button();
 }
 
 function set_default_timeslot() {
-    let timeslots = document.getElementsByClassName('time-slot')
-    // Can't use a forEach here since, we need to break the loop after a timeslot is selected
-    for (let i = 0; i < timeslots.length; i++) {
-        const timeslot = timeslots[i];
-        if (!timeslot.classList.contains('unavailable')) {
-            timeslot.classList.add('selected');
-            break;
-        }
-    }
+	let timeslots = document.getElementsByClassName("time-slot");
+	// Can't use a forEach here since, we need to break the loop after a timeslot is selected
+	for (let i = 0; i < timeslots.length; i++) {
+		const timeslot = timeslots[i];
+		if (!timeslot.classList.contains("unavailable")) {
+			timeslot.classList.add("selected");
+			break;
+		}
+	}
 }
 
 function navigate_to_page(page_number) {
-    let page1 = document.getElementById('select-date-time');
-    let page2 = document.getElementById('enter-details');
-    switch (page_number) {
-        case 1:
-            page1.style.display = 'block';
-            page2.style.display = 'none';
-            break;
-        case 2:
-            page1.style.display = 'none';
-            page2.style.display = 'block';
-            break;
-        default:
-            break;
-    }
+	let page1 = document.getElementById("select-date-time");
+	let page2 = document.getElementById("enter-details");
+	switch (page_number) {
+		case 1:
+			page1.style.display = "block";
+			page2.style.display = "none";
+			break;
+		case 2:
+			page1.style.display = "none";
+			page2.style.display = "block";
+			break;
+		default:
+			break;
+	}
 }
 
 function setup_details_page() {
-    navigate_to_page(2)
-    let date_container = document.getElementsByClassName('date-span')[0];
-    let time_container = document.getElementsByClassName('time-span')[0];
-    setup_search_params();
-    date_container.innerHTML = moment(window.selected_date).format("MMM Do YYYY");
-    time_container.innerHTML = moment(window.selected_time, "HH:mm:ss").format("LT");
+	navigate_to_page(2);
+	let date_container = document.getElementsByClassName("date-span")[0];
+	let time_container = document.getElementsByClassName("time-span")[0];
+	setup_search_params();
+	date_container.innerHTML = moment(window.selected_date).format("MMM Do YYYY");
+	time_container.innerHTML = moment(window.selected_time, "HH:mm:ss").format("LT");
 }
 
 function setup_search_params() {
-    let search_params = new URLSearchParams(window.location.search);
-    let customer_name = search_params.get("name")
-    let customer_email = search_params.get("email")
-    let detail = search_params.get("details")
-    if (customer_name) {
-        let name_input = document.getElementById("customer_name");
-        name_input.value = customer_name;
-        name_input.disabled = true;
-    }
-    if(customer_email) {
-        let email_input = document.getElementById("customer_email");
-        email_input.value = customer_email;
-        email_input.disabled = true;
-    }
-    if(detail) {
-        let detail_input = document.getElementById("customer_notes");
-        detail_input.value = detail;
-        detail_input.disabled = true;
-    }
+	let search_params = new URLSearchParams(window.location.search);
+	let customer_name = search_params.get("name");
+	let customer_email = search_params.get("email");
+	let detail = search_params.get("details");
+	if (customer_name) {
+		let name_input = document.getElementById("customer_name");
+		name_input.value = customer_name;
+		name_input.disabled = true;
+	}
+	if (customer_email) {
+		let email_input = document.getElementById("customer_email");
+		email_input.value = customer_email;
+		email_input.disabled = true;
+	}
+	if (detail) {
+		let detail_input = document.getElementById("customer_notes");
+		detail_input.value = detail;
+		detail_input.disabled = true;
+	}
 }
 async function submit() {
-    let button = document.getElementById('submit-button');
-    button.disabled = true;
-    let form = document.querySelector('#customer-form');
-    if (!form.checkValidity()) {
-        form.reportValidity();
-        button.disabled = false;
-        return;
-    }
-    let contact = get_form_data();
-    let appointment =  frappe.call({
-        method: 'erpnext.www.book_appointment.index.create_appointment',
-        args: {
-            'date': window.selected_date,
-            'time': window.selected_time,
-            'contact': contact,
-            'tz':window.selected_timezone
-        },
-        callback: (response)=>{
-            if (response.message.status == "Unverified") {
-                frappe.show_alert(__("Please check your email to confirm the appointment"))
-            } else {
-                frappe.show_alert(__("Appointment Created Successfully"));
-            }
-            setTimeout(()=>{
-                let redirect_url = "/";
-                if (window.appointment_settings.success_redirect_url){
-                    redirect_url += window.appointment_settings.success_redirect_url;
-                }
-                window.location.href = redirect_url;},5000)
-        },
-        error: (err)=>{
-            frappe.show_alert(__("Something went wrong please try again"));
-            button.disabled = false;
-        }
-    });
+	let button = document.getElementById("submit-button");
+	button.disabled = true;
+	let form = document.querySelector("#customer-form");
+	if (!form.checkValidity()) {
+		form.reportValidity();
+		button.disabled = false;
+		return;
+	}
+	let contact = get_form_data();
+	let appointment = frappe.call({
+		method: "erpnext.www.book_appointment.index.create_appointment",
+		args: {
+			date: window.selected_date,
+			time: window.selected_time,
+			contact: contact,
+			tz: window.selected_timezone,
+		},
+		callback: (response) => {
+			if (response.message.status == "Unverified") {
+				frappe.show_alert(__("Please check your email to confirm the appointment"));
+			} else {
+				frappe.show_alert(__("Appointment Created Successfully"));
+			}
+			setTimeout(() => {
+				let redirect_url = "/";
+				if (window.appointment_settings.success_redirect_url) {
+					redirect_url += window.appointment_settings.success_redirect_url;
+				}
+				window.location.href = redirect_url;
+			}, 5000);
+		},
+		error: (err) => {
+			frappe.show_alert(__("Something went wrong please try again"));
+			button.disabled = false;
+		},
+	});
 }
 
 function get_form_data() {
-    let contact = {};
-    let inputs = ['name', 'skype', 'number', 'notes', 'email'];
-    inputs.forEach((id) => contact[id] = document.getElementById(`customer_${id}`).value)
-    return contact
+	let contact = {};
+	let inputs = ["name", "skype", "number", "notes", "email"];
+	inputs.forEach((id) => (contact[id] = document.getElementById(`customer_${id}`).value));
+	return contact;
 }
