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: