feat: added negative inventory validation and restrict to make backdated entry for serial nos
diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py
index 2e705ea..2048a42 100644
--- a/erpnext/controllers/stock_controller.py
+++ b/erpnext/controllers/stock_controller.py
@@ -372,6 +372,44 @@
 
 				row.db_set("serial_and_batch_bundle", None)
 
+	def make_package_for_transfer(
+		self, serial_and_batch_bundle, warehouse, type_of_transaction=None, do_not_submit=None
+	):
+		bundle_doc = frappe.get_doc("Serial and Batch Bundle", serial_and_batch_bundle)
+
+		if not type_of_transaction:
+			type_of_transaction = "Inward"
+
+		bundle_doc = frappe.copy_doc(bundle_doc)
+		bundle_doc.warehouse = warehouse
+		bundle_doc.type_of_transaction = type_of_transaction
+		bundle_doc.voucher_type = self.doctype
+		bundle_doc.voucher_no = self.name
+		bundle_doc.is_cancelled = 0
+
+		for row in bundle_doc.ledgers:
+			row.is_outward = 0
+			row.qty = abs(row.qty)
+			row.stock_value_difference = abs(row.stock_value_difference)
+			if type_of_transaction == "Outward":
+				row.qty *= -1
+				row.stock_value_difference *= row.stock_value_difference
+				row.is_outward = 1
+
+			row.warehouse = warehouse
+
+		bundle_doc.set_total_qty()
+		bundle_doc.set_avg_rate()
+		bundle_doc.flags.ignore_permissions = True
+
+		if not do_not_submit:
+			bundle_doc.submit()
+		else:
+			bundle_doc.save(ignore_permissions=True)
+
+		print(bundle_doc.name)
+		return bundle_doc.name
+
 	def get_sl_entries(self, d, args):
 		sl_dict = frappe._dict(
 			{