refactor: rewrite Procurement Tracker Report queries in QB
This commit is contained in:
parent
a14b9c7bac
commit
e78a706994
@ -127,32 +127,27 @@ def get_columns(filters):
|
|||||||
return columns
|
return columns
|
||||||
|
|
||||||
|
|
||||||
def get_conditions(filters):
|
def apply_filters_on_query(filters, parent, child, query):
|
||||||
conditions = ""
|
|
||||||
|
|
||||||
if filters.get("company"):
|
if filters.get("company"):
|
||||||
conditions += " AND parent.company=%s" % frappe.db.escape(filters.get("company"))
|
query = query.where(parent.company == filters.get("company"))
|
||||||
|
|
||||||
if filters.get("cost_center") or filters.get("project"):
|
if filters.get("cost_center") or filters.get("project"):
|
||||||
conditions += """
|
query = query.where(
|
||||||
AND (child.`cost_center`=%s OR child.`project`=%s)
|
(child.cost_center == filters.get("cost_center")) | (child.project == filters.get("project"))
|
||||||
""" % (
|
|
||||||
frappe.db.escape(filters.get("cost_center")),
|
|
||||||
frappe.db.escape(filters.get("project")),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if filters.get("from_date"):
|
if filters.get("from_date"):
|
||||||
conditions += " AND parent.transaction_date>='%s'" % filters.get("from_date")
|
query = query.where(parent.transaction_date >= filters.get("from_date"))
|
||||||
|
|
||||||
if filters.get("to_date"):
|
if filters.get("to_date"):
|
||||||
conditions += " AND parent.transaction_date<='%s'" % filters.get("to_date")
|
query = query.where(parent.transaction_date <= filters.get("to_date"))
|
||||||
return conditions
|
|
||||||
|
return query
|
||||||
|
|
||||||
|
|
||||||
def get_data(filters):
|
def get_data(filters):
|
||||||
conditions = get_conditions(filters)
|
purchase_order_entry = get_po_entries(filters)
|
||||||
purchase_order_entry = get_po_entries(conditions)
|
mr_records, procurement_record_against_mr = get_mapped_mr_details(filters)
|
||||||
mr_records, procurement_record_against_mr = get_mapped_mr_details(conditions)
|
|
||||||
pr_records = get_mapped_pr_records()
|
pr_records = get_mapped_pr_records()
|
||||||
pi_records = get_mapped_pi_records()
|
pi_records = get_mapped_pi_records()
|
||||||
|
|
||||||
@ -187,11 +182,15 @@ def get_data(filters):
|
|||||||
return procurement_record
|
return procurement_record
|
||||||
|
|
||||||
|
|
||||||
def get_mapped_mr_details(conditions):
|
def get_mapped_mr_details(filters):
|
||||||
mr_records = {}
|
mr_records = {}
|
||||||
mr_details = frappe.db.sql(
|
parent = frappe.qb.DocType("Material Request")
|
||||||
"""
|
child = frappe.qb.DocType("Material Request Item")
|
||||||
SELECT
|
|
||||||
|
query = (
|
||||||
|
frappe.qb.from_(parent)
|
||||||
|
.from_(child)
|
||||||
|
.select(
|
||||||
parent.transaction_date,
|
parent.transaction_date,
|
||||||
parent.per_ordered,
|
parent.per_ordered,
|
||||||
parent.owner,
|
parent.owner,
|
||||||
@ -203,18 +202,13 @@ def get_mapped_mr_details(conditions):
|
|||||||
child.uom,
|
child.uom,
|
||||||
parent.status,
|
parent.status,
|
||||||
child.project,
|
child.project,
|
||||||
child.cost_center
|
child.cost_center,
|
||||||
FROM `tabMaterial Request` parent, `tabMaterial Request Item` child
|
)
|
||||||
WHERE
|
.where((parent.per_ordered >= 0) & (parent.name == child.parent) & (parent.docstatus == 1))
|
||||||
parent.per_ordered>=0
|
)
|
||||||
AND parent.name=child.parent
|
query = apply_filters_on_query(filters, parent, child, query)
|
||||||
AND parent.docstatus=1
|
|
||||||
{conditions}
|
mr_details = query.run(as_dict=True)
|
||||||
""".format(
|
|
||||||
conditions=conditions
|
|
||||||
),
|
|
||||||
as_dict=1,
|
|
||||||
) # nosec
|
|
||||||
|
|
||||||
procurement_record_against_mr = []
|
procurement_record_against_mr = []
|
||||||
for record in mr_details:
|
for record in mr_details:
|
||||||
@ -241,46 +235,49 @@ def get_mapped_mr_details(conditions):
|
|||||||
|
|
||||||
|
|
||||||
def get_mapped_pi_records():
|
def get_mapped_pi_records():
|
||||||
return frappe._dict(
|
po = frappe.qb.DocType("Purchase Order")
|
||||||
frappe.db.sql(
|
pi_item = frappe.qb.DocType("Purchase Invoice Item")
|
||||||
"""
|
pi_records = (
|
||||||
SELECT
|
frappe.qb.from_(pi_item)
|
||||||
pi_item.po_detail,
|
.inner_join(po)
|
||||||
pi_item.base_amount
|
.on(pi_item.purchase_order == po.name)
|
||||||
FROM `tabPurchase Invoice Item` as pi_item
|
.select(pi_item.po_detail, pi_item.base_amount)
|
||||||
INNER JOIN `tabPurchase Order` as po
|
.where(
|
||||||
ON pi_item.`purchase_order` = po.`name`
|
(pi_item.docstatus == 1)
|
||||||
WHERE
|
& (po.status.notin(("Closed", "Completed", "Cancelled")))
|
||||||
pi_item.docstatus = 1
|
& (pi_item.po_detail.isnotnull())
|
||||||
AND po.status not in ('Closed','Completed','Cancelled')
|
|
||||||
AND pi_item.po_detail IS NOT NULL
|
|
||||||
"""
|
|
||||||
)
|
)
|
||||||
)
|
).run()
|
||||||
|
|
||||||
|
return frappe._dict(pi_records)
|
||||||
|
|
||||||
|
|
||||||
def get_mapped_pr_records():
|
def get_mapped_pr_records():
|
||||||
return frappe._dict(
|
pr = frappe.qb.DocType("Purchase Receipt")
|
||||||
frappe.db.sql(
|
pr_item = frappe.qb.DocType("Purchase Receipt Item")
|
||||||
"""
|
pr_records = (
|
||||||
SELECT
|
frappe.qb.from_(pr)
|
||||||
pr_item.purchase_order_item,
|
.from_(pr_item)
|
||||||
pr.posting_date
|
.select(pr_item.purchase_order_item, pr.posting_date)
|
||||||
FROM `tabPurchase Receipt` pr, `tabPurchase Receipt Item` pr_item
|
.where(
|
||||||
WHERE
|
(pr.docstatus == 1)
|
||||||
pr.docstatus=1
|
& (pr.name == pr_item.parent)
|
||||||
AND pr.name=pr_item.parent
|
& (pr_item.purchase_order_item.isnotnull())
|
||||||
AND pr_item.purchase_order_item IS NOT NULL
|
& (pr.status.notin(("Closed", "Completed", "Cancelled")))
|
||||||
AND pr.status not in ('Closed','Completed','Cancelled')
|
|
||||||
"""
|
|
||||||
)
|
)
|
||||||
)
|
).run()
|
||||||
|
|
||||||
|
return frappe._dict(pr_records)
|
||||||
|
|
||||||
|
|
||||||
def get_po_entries(conditions):
|
def get_po_entries(filters):
|
||||||
return frappe.db.sql(
|
parent = frappe.qb.DocType("Purchase Order")
|
||||||
"""
|
child = frappe.qb.DocType("Purchase Order Item")
|
||||||
SELECT
|
|
||||||
|
query = (
|
||||||
|
frappe.qb.from_(parent)
|
||||||
|
.from_(child)
|
||||||
|
.select(
|
||||||
child.name,
|
child.name,
|
||||||
child.parent,
|
child.parent,
|
||||||
child.cost_center,
|
child.cost_center,
|
||||||
@ -297,17 +294,15 @@ def get_po_entries(conditions):
|
|||||||
parent.transaction_date,
|
parent.transaction_date,
|
||||||
parent.supplier,
|
parent.supplier,
|
||||||
parent.status,
|
parent.status,
|
||||||
parent.owner
|
parent.owner,
|
||||||
FROM `tabPurchase Order` parent, `tabPurchase Order Item` child
|
)
|
||||||
WHERE
|
.where(
|
||||||
parent.docstatus = 1
|
(parent.docstatus == 1)
|
||||||
AND parent.name = child.parent
|
& (parent.name == child.parent)
|
||||||
AND parent.status not in ('Closed','Completed','Cancelled')
|
& (parent.status.notin(("Closed", "Completed", "Cancelled")))
|
||||||
{conditions}
|
)
|
||||||
GROUP BY
|
.groupby(parent.name, child.item_code)
|
||||||
parent.name, child.item_code
|
)
|
||||||
""".format(
|
query = apply_filters_on_query(filters, parent, child, query)
|
||||||
conditions=conditions
|
|
||||||
),
|
return query.run(as_dict=True)
|
||||||
as_dict=1,
|
|
||||||
) # nosec
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user