mirror of
https://github.com/frappe/erpnext.git
synced 2026-03-17 14:02:10 +00:00
fix: billed qty and received amount in PO analysis report (#44349)
(cherry picked from commit 2ab7ec5437)
Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
This commit is contained in:
@@ -18,6 +18,7 @@ def execute(filters=None):
|
|||||||
|
|
||||||
columns = get_columns(filters)
|
columns = get_columns(filters)
|
||||||
data = get_data(filters)
|
data = get_data(filters)
|
||||||
|
update_received_amount(data)
|
||||||
|
|
||||||
if not data:
|
if not data:
|
||||||
return [], [], None, []
|
return [], [], None, []
|
||||||
@@ -40,7 +41,6 @@ def get_data(filters):
|
|||||||
po = frappe.qb.DocType("Purchase Order")
|
po = frappe.qb.DocType("Purchase Order")
|
||||||
po_item = frappe.qb.DocType("Purchase Order Item")
|
po_item = frappe.qb.DocType("Purchase Order Item")
|
||||||
pi_item = frappe.qb.DocType("Purchase Invoice Item")
|
pi_item = frappe.qb.DocType("Purchase Invoice Item")
|
||||||
pr_item = frappe.qb.DocType("Purchase Receipt Item")
|
|
||||||
|
|
||||||
query = (
|
query = (
|
||||||
frappe.qb.from_(po)
|
frappe.qb.from_(po)
|
||||||
@@ -48,8 +48,6 @@ def get_data(filters):
|
|||||||
.on(po_item.parent == po.name)
|
.on(po_item.parent == po.name)
|
||||||
.left_join(pi_item)
|
.left_join(pi_item)
|
||||||
.on((pi_item.po_detail == po_item.name) & (pi_item.docstatus == 1))
|
.on((pi_item.po_detail == po_item.name) & (pi_item.docstatus == 1))
|
||||||
.left_join(pr_item)
|
|
||||||
.on((pr_item.purchase_order_item == po_item.name) & (pr_item.docstatus == 1))
|
|
||||||
.select(
|
.select(
|
||||||
po.transaction_date.as_("date"),
|
po.transaction_date.as_("date"),
|
||||||
po_item.schedule_date.as_("required_date"),
|
po_item.schedule_date.as_("required_date"),
|
||||||
@@ -63,7 +61,6 @@ def get_data(filters):
|
|||||||
(po_item.qty - po_item.received_qty).as_("pending_qty"),
|
(po_item.qty - po_item.received_qty).as_("pending_qty"),
|
||||||
Sum(IfNull(pi_item.qty, 0)).as_("billed_qty"),
|
Sum(IfNull(pi_item.qty, 0)).as_("billed_qty"),
|
||||||
po_item.base_amount.as_("amount"),
|
po_item.base_amount.as_("amount"),
|
||||||
(pr_item.base_amount).as_("received_qty_amount"),
|
|
||||||
(po_item.billed_amt * IfNull(po.conversion_rate, 1)).as_("billed_amount"),
|
(po_item.billed_amt * IfNull(po.conversion_rate, 1)).as_("billed_amount"),
|
||||||
(po_item.base_amount - (po_item.billed_amt * IfNull(po.conversion_rate, 1))).as_(
|
(po_item.base_amount - (po_item.billed_amt * IfNull(po.conversion_rate, 1))).as_(
|
||||||
"pending_amount"
|
"pending_amount"
|
||||||
@@ -95,6 +92,39 @@ def get_data(filters):
|
|||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
|
def update_received_amount(data):
|
||||||
|
pr_data = get_received_amount_data(data)
|
||||||
|
|
||||||
|
for row in data:
|
||||||
|
row.received_qty_amount = flt(pr_data.get(row.name))
|
||||||
|
|
||||||
|
|
||||||
|
def get_received_amount_data(data):
|
||||||
|
pr = frappe.qb.DocType("Purchase Receipt")
|
||||||
|
pr_item = frappe.qb.DocType("Purchase Receipt Item")
|
||||||
|
|
||||||
|
query = (
|
||||||
|
frappe.qb.from_(pr)
|
||||||
|
.inner_join(pr_item)
|
||||||
|
.on(pr_item.parent == pr.name)
|
||||||
|
.select(
|
||||||
|
pr_item.purchase_order_item,
|
||||||
|
Sum(pr_item.base_amount).as_("received_qty_amount"),
|
||||||
|
)
|
||||||
|
.where((pr_item.parent == pr.name) & (pr.docstatus == 1))
|
||||||
|
.groupby(pr_item.purchase_order_item)
|
||||||
|
)
|
||||||
|
|
||||||
|
query = query.where(pr_item.purchase_order_item.isin([row.name for row in data]))
|
||||||
|
|
||||||
|
data = query.run()
|
||||||
|
|
||||||
|
if not data:
|
||||||
|
return frappe._dict()
|
||||||
|
|
||||||
|
return frappe._dict(data)
|
||||||
|
|
||||||
|
|
||||||
def prepare_data(data, filters):
|
def prepare_data(data, filters):
|
||||||
completed, pending = 0, 0
|
completed, pending = 0, 0
|
||||||
pending_field = "pending_amount"
|
pending_field = "pending_amount"
|
||||||
|
|||||||
Reference in New Issue
Block a user