mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-21 22:19:18 +00:00
Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com> fix(stock): update buying amount calculation in gross profit report (#55020)
This commit is contained in:
@@ -812,19 +812,11 @@ class GrossProfitGenerator:
|
|||||||
return self.calculate_buying_amount_from_sle(
|
return self.calculate_buying_amount_from_sle(
|
||||||
row, my_sle, parenttype, parent, row.item_row, item_code
|
row, my_sle, parenttype, parent, row.item_row, item_code
|
||||||
)
|
)
|
||||||
elif self.delivery_notes.get((row.parent, row.item_code), None):
|
elif row.item_row and self.delivery_notes.get(row.item_row):
|
||||||
# check if Invoice has delivery notes
|
dn = self.delivery_notes[row.item_row]
|
||||||
dn = self.delivery_notes.get((row.parent, row.item_code))
|
if flt(dn.total_qty):
|
||||||
parenttype, parent, item_row, dn_warehouse = (
|
return flt(row.qty) * flt(dn.total_incoming_value) / flt(dn.total_qty)
|
||||||
"Delivery Note",
|
return flt(row.qty) * self.get_average_buying_rate(row, item_code)
|
||||||
dn["delivery_note"],
|
|
||||||
dn["item_row"],
|
|
||||||
dn["warehouse"],
|
|
||||||
)
|
|
||||||
my_sle = self.get_stock_ledger_entries(item_code, dn_warehouse)
|
|
||||||
return self.calculate_buying_amount_from_sle(
|
|
||||||
row, my_sle, parenttype, parent, item_row, item_code
|
|
||||||
)
|
|
||||||
elif row.sales_order and row.so_detail:
|
elif row.sales_order and row.so_detail:
|
||||||
incoming_amount = self.get_buying_amount_from_so_dn(row.sales_order, row.so_detail, item_code)
|
incoming_amount = self.get_buying_amount_from_so_dn(row.sales_order, row.so_detail, item_code)
|
||||||
if incoming_amount:
|
if incoming_amount:
|
||||||
@@ -1076,25 +1068,29 @@ class GrossProfitGenerator:
|
|||||||
def get_delivery_notes(self):
|
def get_delivery_notes(self):
|
||||||
self.delivery_notes = frappe._dict({})
|
self.delivery_notes = frappe._dict({})
|
||||||
if self.si_list:
|
if self.si_list:
|
||||||
|
from frappe.query_builder.functions import Sum
|
||||||
|
|
||||||
invoices = [x.parent for x in self.si_list]
|
invoices = [x.parent for x in self.si_list]
|
||||||
dni = qb.DocType("Delivery Note Item")
|
dni = qb.DocType("Delivery Note Item")
|
||||||
delivery_notes = (
|
delivery_notes = (
|
||||||
qb.from_(dni)
|
qb.from_(dni)
|
||||||
.select(
|
.select(
|
||||||
dni.against_sales_invoice.as_("sales_invoice"),
|
dni.si_detail,
|
||||||
dni.item_code,
|
Sum(dni.stock_qty * dni.incoming_rate).as_("total_incoming_value"),
|
||||||
dni.warehouse,
|
Sum(dni.stock_qty).as_("total_qty"),
|
||||||
dni.parent.as_("delivery_note"),
|
|
||||||
dni.name.as_("item_row"),
|
|
||||||
)
|
)
|
||||||
.where((dni.docstatus == 1) & (dni.against_sales_invoice.isin(invoices)))
|
.where(
|
||||||
.groupby(dni.against_sales_invoice, dni.item_code)
|
(dni.docstatus == 1)
|
||||||
.orderby(dni.creation, order=Order.desc)
|
& (dni.against_sales_invoice.isin(invoices))
|
||||||
|
& (dni.si_detail.isnotnull())
|
||||||
|
& (dni.si_detail != "")
|
||||||
|
)
|
||||||
|
.groupby(dni.si_detail)
|
||||||
.run(as_dict=True)
|
.run(as_dict=True)
|
||||||
)
|
)
|
||||||
|
|
||||||
for entry in delivery_notes:
|
for entry in delivery_notes:
|
||||||
self.delivery_notes[(entry.sales_invoice, entry.item_code)] = entry
|
self.delivery_notes[entry.si_detail] = entry
|
||||||
|
|
||||||
def group_items_by_invoice(self):
|
def group_items_by_invoice(self):
|
||||||
"""
|
"""
|
||||||
|
|||||||
Reference in New Issue
Block a user