Skip to content

Commit 8ce51b2

Browse files
rohitwaghchauremergify[bot]
authored andcommitted
fix: zero valuation rate if returning from different warehouse
(cherry picked from commit 28929df) (cherry picked from commit eb2119e)
1 parent 422b373 commit 8ce51b2

3 files changed

Lines changed: 74 additions & 4 deletions

File tree

erpnext/controllers/sales_and_purchase_return.py

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -846,12 +846,34 @@ def get_filters(
846846
if reference_voucher_detail_no:
847847
filters["voucher_detail_no"] = reference_voucher_detail_no
848848

849-
if voucher_type in ["Purchase Receipt", "Purchase Invoice"] and item_row and item_row.get("warehouse"):
850-
filters["warehouse"] = item_row.get("warehouse")
849+
warehouses = []
850+
if voucher_type in ["Purchase Receipt", "Purchase Invoice"] and item_row:
851+
if reference_voucher_detail_no:
852+
warehouses = get_warehouses_for_return(voucher_type, reference_voucher_detail_no)
853+
854+
if item_row.get("warehouse") and item_row.get("warehouse") in warehouses:
855+
filters["warehouse"] = item_row.get("warehouse")
851856

852857
return filters
853858

854859

860+
def get_warehouses_for_return(voucher_type, name):
861+
warehouses = []
862+
warehouse_details = frappe.get_all(
863+
voucher_type + " Item",
864+
filters={"name": name, "docstatus": 1},
865+
fields=["warehouse", "rejected_warehouse"],
866+
)
867+
868+
for d in warehouse_details:
869+
if d.warehouse:
870+
warehouses.append(d.warehouse)
871+
if d.rejected_warehouse:
872+
warehouses.append(d.rejected_warehouse)
873+
874+
return warehouses
875+
876+
855877
def get_returned_serial_nos(child_doc, parent_doc, serial_no_field=None, ignore_voucher_detail_no=None):
856878
from erpnext.stock.doctype.serial_no.serial_no import (
857879
get_serial_nos as get_serial_nos_from_serial_no,

erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5192,6 +5192,50 @@ def test_negative_stock_error_for_purchase_return_when_stock_exists_in_future_da
51925192
make_purchase_entry.posting_date = pr1.posting_date
51935193
self.assertRaises(NegativeStockError, make_purchase_entry.submit)
51945194

5195+
def test_purchase_return_from_different_warehouse(self):
5196+
from erpnext.controllers.sales_and_purchase_return import make_return_doc
5197+
from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry
5198+
5199+
item_code = make_item(
5200+
"Test Purchase Return From Different Warehouse Item",
5201+
{
5202+
"is_stock_item": 1,
5203+
"has_batch_no": 1,
5204+
"create_new_batch": 1,
5205+
"batch_number_series": "TPRFDWU.#####",
5206+
},
5207+
).name
5208+
5209+
pr1 = make_purchase_receipt(
5210+
item_code=item_code,
5211+
posting_date=add_days(today(), -4),
5212+
qty=100,
5213+
rate=100,
5214+
warehouse="_Test Warehouse - _TC",
5215+
)
5216+
5217+
batch1 = get_batch_from_bundle(pr1.items[0].serial_and_batch_bundle)
5218+
5219+
make_stock_entry(
5220+
item_code=item_code,
5221+
qty=100,
5222+
posting_date=add_days(today(), -1),
5223+
source="_Test Warehouse - _TC",
5224+
target="_Test Warehouse 1 - _TC",
5225+
batch_no=batch1,
5226+
use_serial_batch_fields=1,
5227+
)
5228+
5229+
make_purchase_entry = make_return_doc("Purchase Receipt", pr1.name)
5230+
make_purchase_entry.items[0].warehouse = "_Test Warehouse 1 - _TC"
5231+
make_purchase_entry.submit()
5232+
make_purchase_entry.reload()
5233+
5234+
sabb = frappe.get_doc("Serial and Batch Bundle", make_purchase_entry.items[0].serial_and_batch_bundle)
5235+
for row in sabb.entries:
5236+
self.assertEqual(row.warehouse, "_Test Warehouse 1 - _TC")
5237+
self.assertEqual(row.incoming_rate, 100)
5238+
51955239

51965240
def prepare_data_for_internal_transfer():
51975241
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_internal_supplier

erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -440,6 +440,8 @@ def validate_returned_serial_batch_no(self, return_against, row, original_inv_de
440440
)
441441

442442
def get_valuation_rate_for_return_entry(self, return_against):
443+
from erpnext.controllers.sales_and_purchase_return import get_warehouses_for_return
444+
443445
if not self.voucher_detail_no:
444446
return {}
445447

@@ -469,9 +471,11 @@ def get_valuation_rate_for_return_entry(self, return_against):
469471
["Serial and Batch Bundle", "voucher_detail_no", "=", return_against_voucher_detail_no],
470472
]
471473

474+
# Added to handle rejected warehouse case
472475
if self.voucher_type in ["Purchase Receipt", "Purchase Invoice"]:
473-
# Added to handle rejected warehouse case
474-
filters.append(["Serial and Batch Entry", "warehouse", "=", self.warehouse])
476+
warehouses = get_warehouses_for_return(self.voucher_type, return_against_voucher_detail_no)
477+
if self.warehouse in warehouses:
478+
filters.append(["Serial and Batch Entry", "warehouse", "=", self.warehouse])
475479

476480
bundle_data = frappe.get_all(
477481
"Serial and Batch Bundle",

0 commit comments

Comments
 (0)