Skip to content

Commit

Permalink
fix: GL Entries not getting created for PR Return (backport #37513) (#…
Browse files Browse the repository at this point in the history
…37516)

* fix: GL Entries not getting created for PR Return

(cherry picked from commit 46add06)

* test: add test case for PR return with zero rate

(cherry picked from commit 253d478)

# Conflicts:
#	erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py

* chore: `conflicts`

---------

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
  • Loading branch information
mergify[bot] and s-aga-r authored Oct 15, 2023
1 parent 1b94510 commit c32258e
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 1 deletion.
2 changes: 1 addition & 1 deletion erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
Original file line number Diff line number Diff line change
Expand Up @@ -341,7 +341,7 @@ def make_item_gl_entries(self, gl_entries, warehouse_account=None):
exchange_rate_map, net_rate_map = get_purchase_document_details(self)

for d in self.get("items"):
if d.item_code in stock_items and flt(d.valuation_rate) and flt(d.qty):
if d.item_code in stock_items and flt(d.qty) and (flt(d.valuation_rate) or self.is_return):
if warehouse_account.get(d.warehouse):
stock_value_diff = frappe.db.get_value(
"Stock Ledger Entry",
Expand Down
56 changes: 56 additions & 0 deletions erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
Original file line number Diff line number Diff line change
Expand Up @@ -2147,6 +2147,62 @@ def test_valuation_rate_in_return_purchase_receipt_for_moving_average(self):
# Test - 2: Valuation Rate should be equal to Previous SLE Valuation Rate
self.assertEqual(flt(sle.valuation_rate, 2), flt(previous_sle_valuation_rate, 2))

def test_purchase_return_with_zero_rate(self):
company = "_Test Company with perpetual inventory"

# Step - 1: Create Item
item, warehouse = (
make_item(properties={"is_stock_item": 1, "valuation_method": "Moving Average"}).name,
"Stores - TCP1",
)

# Step - 2: Create Stock Entry (Material Receipt)
from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry

se = make_stock_entry(
purpose="Material Receipt",
item_code=item,
qty=100,
basic_rate=100,
to_warehouse=warehouse,
company=company,
)

# Step - 3: Create Purchase Receipt
pr = make_purchase_receipt(
item_code=item,
qty=5,
rate=0,
warehouse=warehouse,
company=company,
)

# Step - 4: Create Purchase Return
from erpnext.controllers.sales_and_purchase_return import make_return_doc

pr_return = make_return_doc("Purchase Receipt", pr.name)
pr_return.save()
pr_return.submit()

sl_entries = get_sl_entries(pr_return.doctype, pr_return.name)
gl_entries = get_gl_entries(pr_return.doctype, pr_return.name)

# Test - 1: SLE Stock Value Difference should be equal to Qty * Average Rate
average_rate = (
(se.items[0].qty * se.items[0].basic_rate) + (pr.items[0].qty * pr.items[0].rate)
) / (se.items[0].qty + pr.items[0].qty)
expected_stock_value_difference = pr_return.items[0].qty * average_rate
self.assertEqual(
flt(sl_entries[0].stock_value_difference, 2), flt(expected_stock_value_difference, 2)
)

# Test - 2: GL Entries should be created for Stock Value Difference
self.assertEqual(len(gl_entries), 2)

# Test - 3: SLE Stock Value Difference should be equal to Debit or Credit of GL Entries.
for entry in gl_entries:
self.assertEqual(abs(entry.debit + entry.credit), abs(sl_entries[0].stock_value_difference))


def prepare_data_for_internal_transfer():
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_internal_supplier
Expand Down

0 comments on commit c32258e

Please sign in to comment.