mirror of
https://github.com/frappe/erpnext.git
synced 2026-02-13 01:34:10 +00:00
Merge pull request #51214 from aerele/fix/recalculate-batch-qty
fix(stock): ignore reserved stock while calculating batch qty
This commit is contained in:
@@ -159,8 +159,13 @@ class Batch(Document):
|
||||
@frappe.whitelist()
|
||||
def recalculate_batch_qty(self):
|
||||
batches = get_batch_qty(
|
||||
batch_no=self.name, item_code=self.item, for_stock_levels=True, consider_negative_batches=True
|
||||
batch_no=self.name,
|
||||
item_code=self.item,
|
||||
for_stock_levels=True,
|
||||
consider_negative_batches=True,
|
||||
ignore_reserved_stock=True,
|
||||
)
|
||||
|
||||
batch_qty = 0.0
|
||||
if batches:
|
||||
for row in batches:
|
||||
@@ -241,6 +246,7 @@ def get_batch_qty(
|
||||
for_stock_levels=False,
|
||||
consider_negative_batches=False,
|
||||
do_not_check_future_batches=False,
|
||||
ignore_reserved_stock=False,
|
||||
):
|
||||
"""Returns batch actual qty if warehouse is passed,
|
||||
or returns dict of qty by warehouse if warehouse is None
|
||||
@@ -269,6 +275,7 @@ def get_batch_qty(
|
||||
"for_stock_levels": for_stock_levels,
|
||||
"consider_negative_batches": consider_negative_batches,
|
||||
"do_not_check_future_batches": do_not_check_future_batches,
|
||||
"ignore_reserved_stock": ignore_reserved_stock,
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
@@ -324,6 +324,38 @@ class TestBatch(IntegrationTestCase):
|
||||
|
||||
self.assertEqual(get_batch_qty("batch a", "_Test Warehouse - _TC"), 90)
|
||||
|
||||
def test_ignore_reserved_qty(self):
|
||||
from erpnext.selling.doctype.sales_order.sales_order import create_pick_list
|
||||
from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order
|
||||
|
||||
batch_item_name = "Reserve Batch Item"
|
||||
batch_id = "Reserve Batch 1"
|
||||
# Create Batch Item
|
||||
self.make_batch_item(batch_item_name)
|
||||
# Create Batch and Material Receipt Entry with qty 90
|
||||
self.make_new_batch_and_entry(batch_item_name, batch_id, "_Test Warehouse - _TC")
|
||||
|
||||
# Enable Stock Reservation
|
||||
frappe.db.set_single_value("Stock Settings", "enable_stock_reservation", 1)
|
||||
|
||||
# Create Sales Order with qty 50
|
||||
sales_order = make_sales_order(
|
||||
item_code=batch_item_name, warehouse="_Test Warehouse - _TC", qty=50, rate=20
|
||||
)
|
||||
|
||||
# Create Pick List for the Sales Order
|
||||
pl = create_pick_list(sales_order.name)
|
||||
pl.submit()
|
||||
# Create Stock Reservation Entries
|
||||
pl.create_stock_reservation_entries(notify=False)
|
||||
|
||||
batch = frappe.get_doc("Batch", batch_id)
|
||||
# Recalculate Batch Qty
|
||||
batch.recalculate_batch_qty()
|
||||
batch.reload()
|
||||
# Case: Ignore Reserved Qty
|
||||
self.assertEqual(batch.batch_qty, 90)
|
||||
|
||||
def test_total_batch_qty(self):
|
||||
self.make_batch_item("ITEM-BATCH-3")
|
||||
existing_batch_qty = flt(frappe.db.get_value("Batch", "B100", "batch_qty"))
|
||||
|
||||
@@ -2495,7 +2495,11 @@ def get_auto_batch_nos(kwargs):
|
||||
available_batches = get_available_batches(kwargs)
|
||||
stock_ledgers_batches = get_stock_ledgers_batches(kwargs)
|
||||
pos_invoice_batches = get_reserved_batches_for_pos(kwargs)
|
||||
sre_reserved_batches = get_reserved_batches_for_sre(kwargs)
|
||||
|
||||
sre_reserved_batches = frappe._dict()
|
||||
if not kwargs.ignore_reserved_stock:
|
||||
sre_reserved_batches = get_reserved_batches_for_sre(kwargs)
|
||||
|
||||
if kwargs.against_sales_order and only_consider_batches:
|
||||
kwargs.batch_no = kwargs.warehouse = None
|
||||
|
||||
|
||||
Reference in New Issue
Block a user