diff --git a/erpnext/accounts/report/gross_profit/gross_profit.py b/erpnext/accounts/report/gross_profit/gross_profit.py index bfeeb34332..4afce91223 100644 --- a/erpnext/accounts/report/gross_profit/gross_profit.py +++ b/erpnext/accounts/report/gross_profit/gross_profit.py @@ -98,11 +98,17 @@ class GrossProfitGenerator(object): row.base_amount = flt(row.base_net_amount) - product_bundles = self.product_bundles.get(row.parenttype, {}).get(row.parent, frappe._dict()) - + if row.update_stock: + product_bundles = self.product_bundles.get(row.parenttype, {}).get(row.parent, frappe._dict()) + elif row.dn_detail: + product_bundles = self.product_bundles.get("Delivery Note", {})\ + .get(row.delivery_note, frappe._dict()) + row.item_row = row.dn_detail + # get buying amount if row.item_code in product_bundles: - row.buying_amount = self.get_buying_amount_from_product_bundle(row, product_bundles[row.item_code]) + row.buying_amount = self.get_buying_amount_from_product_bundle(row, + product_bundles[row.item_code]) else: row.buying_amount = self.get_buying_amount(row, row.item_code) @@ -142,7 +148,6 @@ class GrossProfitGenerator(object): new_row.qty += row.qty new_row.buying_amount += row.buying_amount new_row.base_amount += row.base_amount - # new_row.allocated_amount += (row.allocated_amount or 0) if new_row.allocated_amount else 0 new_row.gross_profit = new_row.base_amount - new_row.buying_amount new_row.gross_profit_percent = ((new_row.gross_profit / new_row.base_amount) * 100.0) \ @@ -158,9 +163,9 @@ class GrossProfitGenerator(object): def get_buying_amount_from_product_bundle(self, row, product_bundle): buying_amount = 0.0 - for bom_item in product_bundle: - if bom_item.get("parent_detail_docname")==row.item_row: - buying_amount += self.get_buying_amount(row, bom_item.item_code) + for packed_item in product_bundle: + if packed_item.get("parent_detail_docname")==row.item_row: + buying_amount += self.get_buying_amount(row, packed_item.item_code) return buying_amount @@ -176,14 +181,14 @@ class GrossProfitGenerator(object): else: my_sle = self.sle.get((item_code, row.warehouse)) if (row.update_stock or row.dn_detail) and my_sle: - parenttype, parent, item_row = row.parenttype, row.parent, row.item_row + parenttype, parent = row.parenttype, row.parent if row.dn_detail: - parenttype, parent, item_row = "Delivery Note", row.delivery_note, row.dn_detail + parenttype, parent = "Delivery Note", row.delivery_note for i, sle in enumerate(my_sle): # find the stock valution rate from stock ledger entry if sle.voucher_type == parenttype and parent == sle.voucher_no and \ - sle.voucher_detail_no == item_row: + sle.voucher_detail_no == row.item_row: previous_stock_value = len(my_sle) > i+1 and \ flt(my_sle[i+1].stock_value) or 0.0 return previous_stock_value - flt(sle.stock_value)