feat: setup Quality Inspection for Subcontracting Receipt

- SCR[docstatus=0, is_return=0] Create > Quality Inspection(s)
- Filters for Quality Inspection field in Subcontracting Receipt Items table
diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js
index 59d2b15..3f16314 100644
--- a/erpnext/public/js/controllers/transaction.js
+++ b/erpnext/public/js/controllers/transaction.js
@@ -277,7 +277,7 @@
 	}
 
 	setup_quality_inspection() {
-		if(!in_list(["Delivery Note", "Sales Invoice", "Purchase Receipt", "Purchase Invoice"], this.frm.doc.doctype)) {
+		if(!in_list(["Delivery Note", "Sales Invoice", "Purchase Receipt", "Purchase Invoice", "Subcontracting Receipt"], this.frm.doc.doctype)) {
 			return;
 		}
 
@@ -289,7 +289,7 @@
 			this.frm.page.set_inner_btn_group_as_primary(__('Create'));
 		}
 
-		const inspection_type = in_list(["Purchase Receipt", "Purchase Invoice"], this.frm.doc.doctype)
+		const inspection_type = in_list(["Purchase Receipt", "Purchase Invoice", "Subcontracting Receipt"], this.frm.doc.doctype)
 			? "Incoming" : "Outgoing";
 
 		let quality_inspection_field = this.frm.get_docfield("items", "quality_inspection");
diff --git a/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.js b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.js
index 94a2589..e374077 100644
--- a/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.js
+++ b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.js
@@ -3,14 +3,91 @@
 
 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', {
 	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');
+	},
 
+	refresh: (frm) => {
+		if (frm.doc.docstatus > 0) {
+			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'));
+		}
+
+		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'));
+		}
+
+		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
+						}
+					});
+				}, __('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');
+	},
+
+	set_warehouse: (frm) => {
+		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_queries: (frm) => {
 		frm.set_query('set_warehouse', () => {
 			return {
 				filters: {
@@ -52,38 +129,36 @@
 			}
 		}));
 
-		frm.set_query('expense_account', 'items', function () {
-			return {
+		frm.set_query('expense_account', 'items', () => ({
 				query: 'erpnext.controllers.queries.get_expense_account',
 				filters: { 'company': frm.doc.company }
-			};
-		});
+			}));
 
-		frm.set_query('batch_no', 'items', function(doc, cdt, cdn) {
+		frm.set_query('batch_no', 'items', (doc, cdt, cdn) => {
 			var row = locals[cdt][cdn];
 			return {
 				filters: {
 					item: row.item_code
 				}
-			}
+			};
 		});
 
-		frm.set_query('batch_no', 'supplied_items', function(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
 				}
-			}
+			};
 		});
 
-		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, ""]],
+					'voucher_no': ['in', [doc.name, '']],
 					'is_cancelled': 0,
 				}
 			}
@@ -101,7 +176,7 @@
 
 		let batch_no_field = frm.get_docfield('items', 'batch_no');
 		if (batch_no_field) {
-			batch_no_field.get_route_options_for_new_doc = function(row) {
+			batch_no_field.get_route_options_for_new_doc = (row) => {
 				return {
 					'item': row.doc.item_code
 				}
@@ -109,85 +184,20 @@
 		}
 	},
 
-	refresh: (frm) => {
-		if (frm.doc.docstatus > 0) {
-			frm.add_custom_button(__('Stock 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,
-					show_cancelled_entries: frm.doc.docstatus === 2
-				};
-				frappe.set_route('query-report', 'Stock Ledger');
-			}, __('View'));
-
-			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'));
+	setup_quality_inspection: (frm) => {
+		if (!frm.is_new() && frm.doc.docstatus === 0 && !frm.doc.is_return) {
+			let transaction_controller = new erpnext.TransactionController({ frm: frm });
+			transaction_controller.setup_quality_inspection();
 		}
-
-		if (!frm.doc.is_return && frm.doc.docstatus == 1 && frm.doc.per_returned < 100) {
-			frm.add_custom_button(__('Subcontract Return'), function () {
-				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'), function () {
-				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
-					}
-				});
-			}, __('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');
-		}
-	},
-
-	set_warehouse: (frm) => {
-		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);
 	},
 });
 
 frappe.ui.form.on('Landed Cost Taxes and Charges', {
-	amount: function (frm, cdt, cdn) {
+	amount: (frm, cdt, cdn) => {
 		frm.events.set_base_amount(frm, cdt, cdn);
 	},
 
-	expense_account: function (frm, cdt, cdn) {
+	expense_account: (frm, cdt, cdn) => {
 		frm.events.set_account_currency(frm, cdt, cdn);
 	}
 });