feat: add filters for multiple company operation
diff --git a/erpnext/buying/report/procurement_tracker/procurement_tracker.js b/erpnext/buying/report/procurement_tracker/procurement_tracker.js
index 7096b9f..0013666 100644
--- a/erpnext/buying/report/procurement_tracker/procurement_tracker.js
+++ b/erpnext/buying/report/procurement_tracker/procurement_tracker.js
@@ -4,6 +4,27 @@
 
 frappe.query_reports["Procurement Tracker"] = {
 	"filters": [
-
+		{
+			fieldname: "company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
+			reqd: 1
+		},
+		{
+			fieldname: "cost_center",
+			label: __("Cost Center"),
+			fieldtype: "Link",
+			options: "Cost Center",
+			reqd: 1
+		},
+		{
+			fieldname: "project",
+			label: __("Project"),
+			fieldtype: "Link",
+			options: "Project",
+			reqd: 1
+		}
 	]
 }
diff --git a/erpnext/buying/report/procurement_tracker/procurement_tracker.py b/erpnext/buying/report/procurement_tracker/procurement_tracker.py
index 18a6660..e3361a4 100644
--- a/erpnext/buying/report/procurement_tracker/procurement_tracker.py
+++ b/erpnext/buying/report/procurement_tracker/procurement_tracker.py
@@ -6,11 +6,11 @@
 from frappe import _
 
 def execute(filters=None):
-	columns = get_columns()
-	data = get_data()
+	columns = get_columns(filters)
+	data = get_data(filters)
 	return columns, data
 
-def get_columns():
+def get_columns(filters):
 	columns = [
 		{
 			"label": _("Material Request Date"),
@@ -144,9 +144,22 @@
 	]
 	return columns
 
-def get_data():
-	purchase_order_entry = get_po_entries()
-	mr_records, procurement_record_against_mr = get_mapped_mr_details()
+def get_conditions(filters):
+	conditions = ""
+
+	if filters.get("company"):
+		conditions += " AND company='%s'"% filters.get('company')
+	if filters.get("cost_center") or filters.get("project"):
+		conditions += """
+			AND (cost_center='%s'
+			OR project='%s')
+			"""% (filters.get('cost_center'), filters.get('project'))
+	return conditions
+
+def get_data(filters):
+	conditions = get_conditions(filters)
+	purchase_order_entry = get_po_entries(conditions)
+	mr_records, procurement_record_against_mr = get_mapped_mr_details(conditions)
 	pr_records = get_mapped_pr_records()
 	pi_records = get_mapped_pi_records()
 
@@ -157,7 +170,7 @@
 		# fetch material records linked to the purchase order item
 		mr_record = mr_records.get(po.material_request_item, [{}])[0]
 		procurement_detail = {
-			"material_request_date": mr_record.get('transaction_date', ''),
+			"material_request_date": mr_record.get('transaction_date'),
 			"cost_center": po.cost_center,
 			"project": po.project,
 			"requesting_site": po.warehouse,
@@ -180,7 +193,7 @@
 		procurement_record.append(procurement_detail)
 	return procurement_record
 
-def get_mapped_mr_details():
+def get_mapped_mr_details(conditions):
 	mr_records = {}
 	mr_details = frappe.db.sql("""
 		SELECT
@@ -194,7 +207,8 @@
 			mr.per_ordered>=0
 			AND mr.name=mr_item.parent
 			AND mr.docstatus=1
-		""", as_dict=1)
+			{conditions}
+		""".format(conditions=conditions), as_dict=1) #nosec
 
 	procurement_record_against_mr = []
 	for record in mr_details:
@@ -232,7 +246,7 @@
 			AND pr_item.purchase_order_item IS NOT NULL
 		"""))
 
-def get_po_entries():
+def get_po_entries(conditions):
 	return frappe.db.sql("""
 		SELECT
 			po_item.name,
@@ -257,6 +271,7 @@
 			po.docstatus = 1
 			AND po.name = po_item.parent
 			AND po.status not in  ("Closed","Completed","Cancelled")
+			{conditions}
 		GROUP BY
 			po.name,po_item.item_code
-		""", as_dict=1)
\ No newline at end of file
+		""".format(conditions=conditions), as_dict=1) #nosec
\ No newline at end of file
diff --git a/erpnext/buying/report/procurement_tracker/test_procurement_tracker.py b/erpnext/buying/report/procurement_tracker/test_procurement_tracker.py
index 7d8e750..418396f 100644
--- a/erpnext/buying/report/procurement_tracker/test_procurement_tracker.py
+++ b/erpnext/buying/report/procurement_tracker/test_procurement_tracker.py
@@ -8,12 +8,33 @@
 from erpnext.buying.report.procurement_tracker.procurement_tracker import execute
 from erpnext.stock.doctype.material_request.test_material_request import make_material_request
 from erpnext.stock.doctype.material_request.material_request import make_purchase_order
-from erpnext.buying.doctype.purchase_order.purchase_order import make_purchase_receipt, make_purchase_invoice
+from erpnext.buying.doctype.purchase_order.purchase_order import make_purchase_receipt
+from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse
 
 class TestProcurementTracker(unittest.TestCase):
 	maxDiff = None
 	def test_result_for_procurement_tracker(self):
-		mr = make_material_request()
+		filters = {
+			'company': '_Test Procurement Company',
+			'cost_center': '_Test Cost Center - _TC'
+		}
+		expected_data = self.generate_expected_data()
+		report = execute(filters)
+
+		length = len(report[1])
+		self.assertEqual(expected_data, report[1][length-1])
+
+	def generate_expected_data(self):
+		if not frappe.db.exists("Company", "_Test Procurement Company"):
+			frappe.get_doc(dict(
+				doctype="Company",
+				company_name="_Test Procurement Company",
+				abbr="_TPC",
+				default_currency="INR",
+				country="India"
+				)).insert()
+		warehouse = create_warehouse("_Test Procurement Warehouse", company="_Test Procurement Company")
+		mr = make_material_request(company="_Test Procurement Company", warehouse=warehouse)
 		po = make_purchase_order(mr.name)
 		po.supplier = "_Test Supplier"
 		po.get("items")[0].cost_center = "_Test Cost Center - _TC"
@@ -23,12 +44,11 @@
 		frappe.db.commit()
 		date_obj = datetime.date(datetime.now())
 
-		report = execute()
 		expected_data = {
 			"material_request_date": date_obj,
 			"cost_center": "_Test Cost Center - _TC",
 			"project": None,
-			"requesting_site": "_Test Warehouse - _TC",
+			"requesting_site": "_Test Procurement Warehouse - _TPC",
 			"requestor": "Administrator",
 			"material_request_no": mr.name,
 			"description": '_Test Item 1',
@@ -45,5 +65,4 @@
 			"expected_delivery_date": date_obj,
 			"actual_delivery_date": date_obj
 		}
-		length = len(report[1])
-		self.assertEqual(expected_data, report[1][length-1])
\ No newline at end of file
+		return expected_data
\ No newline at end of file
diff --git a/erpnext/stock/doctype/material_request/test_material_request.py b/erpnext/stock/doctype/material_request/test_material_request.py
index 7dc54d0..79cdc1a 100644
--- a/erpnext/stock/doctype/material_request/test_material_request.py
+++ b/erpnext/stock/doctype/material_request/test_material_request.py
@@ -629,7 +629,8 @@
 		"item_code": args.item_code or "_Test Item",
 		"qty": args.qty or 10,
 		"schedule_date": args.schedule_date or today(),
-		"warehouse": args.warehouse or "_Test Warehouse - _TC"
+		"warehouse": args.warehouse or "_Test Warehouse - _TC",
+		"cost_center": args.cost_center or "_Test Cost Center - _TC"
 	})
 	mr.insert()
 	if not args.do_not_submit: