fix: Get Bundle Items
diff --git a/erpnext/accounts/report/gross_profit/gross_profit.py b/erpnext/accounts/report/gross_profit/gross_profit.py
index 7c3a9af..8ea5e07 100644
--- a/erpnext/accounts/report/gross_profit/gross_profit.py
+++ b/erpnext/accounts/report/gross_profit/gross_profit.py
@@ -436,31 +436,7 @@
 		parents_index = 0
 		for index, row in enumerate(self.si_list):
 			if parents_index < len(parents) and row.parent == parents[parents_index]:
-				invoice = frappe._dict({
-					'parent_invoice': "",
-					'indent': 0.0,
-					'parent': row.parent,
-					'posting_date': row.posting_date,
-					'posting_time': row.posting_time,
-					'project': row.project,
-					'update_stock': row.update_stock,
-					'customer': row.customer,
-					'customer_group': row.customer_group,
-					'item_code': None,
-					'item_name': None,
-					'description': None,
-					'warehouse': None,
-					'item_group': None,
-					'brand': None, 
-					'dn_detail': None, 
-					'delivery_note': None, 
-					'qty': None, 
-					'item_row': None, 
-					'is_return': row.is_return, 
-					'cost_center': row.cost_center,
-					'base_net_amount': frappe.db.get_value('Sales Invoice', row.parent, 'base_net_total')
-				})
-
+				invoice = self.get_invoice_row(row)
 				self.si_list.insert(index, invoice)
 				parents_index += 1
 
@@ -473,9 +449,42 @@
 
 					if frappe.db.exists('Product Bundle', row.item_code):
 						self.add_bundle_items(row, index)
+
+	def get_invoice_row(self, row):
+		return frappe._dict({
+			'parent_invoice': "",
+			'indent': 0.0,
+			'parent': row.parent,
+			'posting_date': row.posting_date,
+			'posting_time': row.posting_time,
+			'project': row.project,
+			'update_stock': row.update_stock,
+			'customer': row.customer,
+			'customer_group': row.customer_group,
+			'item_code': None,
+			'item_name': None,
+			'description': None,
+			'warehouse': None,
+			'item_group': None,
+			'brand': None, 
+			'dn_detail': None, 
+			'delivery_note': None, 
+			'qty': None, 
+			'item_row': None, 
+			'is_return': row.is_return, 
+			'cost_center': row.cost_center,
+			'base_net_amount': frappe.db.get_value('Sales Invoice', row.parent, 'base_net_total')
+		})
 			
 	def add_bundle_items(self, product_bundle, index):
-		bundle_items = frappe.get_all(
+		bundle_items = self.get_bundle_items(product_bundle)
+
+		for i, item in enumerate(bundle_items):
+			bundle_item = self.get_bundle_item_row(product_bundle, item)
+			self.si_list.insert((index+i+1), bundle_item)
+
+	def get_bundle_items(self, product_bundle):
+		return frappe.get_all(
 			'Product Bundle Item',
 			filters = {
 				'parent': product_bundle.item_code
@@ -483,33 +492,31 @@
 			fields = ['item_code', 'qty']
 		)
 
-		for i, item in enumerate(bundle_items):
-			item_name, description, item_group, brand = self.get_bundle_item_details(item.item_code)
+	def get_bundle_item_row(self, product_bundle, item):
+		item_name, description, item_group, brand = self.get_bundle_item_details(item.item_code)
 
-			bundle_item = frappe._dict({
-				'parent_invoice': product_bundle.item_code,
-				'indent': product_bundle.indent + 1,
-				'parent': item.item_code,
-				'posting_date': product_bundle.posting_date,
-				'posting_time': product_bundle.posting_time,
-				'project': product_bundle.project,
-				'customer': product_bundle.customer,
-				'customer_group': product_bundle.customer_group,
-				'item_code': item.item_code,
-				'item_name': item_name,
-				'description': description,
-				'warehouse': product_bundle.warehouse,
-				'item_group': item_group,
-				'brand': brand, 
-				'dn_detail': product_bundle.dn_detail, 
-				'delivery_note': product_bundle.delivery_note, 
-				'qty': (flt(product_bundle.qty) * flt(item.qty)), 
-				'item_row': None, 
-				'is_return': product_bundle.is_return, 
-				'cost_center': product_bundle.cost_center
-			})
-
-			self.si_list.insert((index+i+1), bundle_item)
+		return frappe._dict({
+			'parent_invoice': product_bundle.item_code,
+			'indent': product_bundle.indent + 1,
+			'parent': item.item_code,
+			'posting_date': product_bundle.posting_date,
+			'posting_time': product_bundle.posting_time,
+			'project': product_bundle.project,
+			'customer': product_bundle.customer,
+			'customer_group': product_bundle.customer_group,
+			'item_code': item.item_code,
+			'item_name': item_name,
+			'description': description,
+			'warehouse': product_bundle.warehouse,
+			'item_group': item_group,
+			'brand': brand, 
+			'dn_detail': product_bundle.dn_detail, 
+			'delivery_note': product_bundle.delivery_note, 
+			'qty': (flt(product_bundle.qty) * flt(item.qty)), 
+			'item_row': None, 
+			'is_return': product_bundle.is_return, 
+			'cost_center': product_bundle.cost_center
+		})
 
 	def get_bundle_item_details(self, item_code):
 		return frappe.db.get_value(