fix: Transfer Bucket logic for Repack Entry with split batch rows
diff --git a/erpnext/stock/report/stock_ageing/stock_ageing.py b/erpnext/stock/report/stock_ageing/stock_ageing.py
index a89a403..9866e63 100644
--- a/erpnext/stock/report/stock_ageing/stock_ageing.py
+++ b/erpnext/stock/report/stock_ageing/stock_ageing.py
@@ -286,10 +286,11 @@
def __compute_incoming_stock(self, row: Dict, fifo_queue: List, transfer_key: Tuple, serial_nos: List):
"Update FIFO Queue on inward stock."
- if self.transferred_item_details.get(transfer_key):
- # inward/outward from same voucher, item & warehouse
- slot = self.transferred_item_details[transfer_key].pop(0)
- fifo_queue.append(slot)
+ transfer_data = self.transferred_item_details.get(transfer_key)
+ if transfer_data:
+ # [Repack] inward/outward from same voucher, item & warehouse
+ # consume transfer data and add stock to fifo queue
+ self.__adjust_incoming_transfer_qty(transfer_data, fifo_queue, row)
else:
if not serial_nos:
if fifo_queue and flt(fifo_queue[0][0]) < 0:
@@ -333,6 +334,27 @@
self.transferred_item_details[transfer_key].append([qty_to_pop, slot[1]])
qty_to_pop = 0
+ def __adjust_incoming_transfer_qty(self, transfer_data: Dict, fifo_queue: List, row: Dict):
+ "Add previously removed stock back to FIFO Queue."
+ transfer_qty_to_pop = flt(row.actual_qty)
+ first_bucket_qty = transfer_data[0][0]
+ first_bucket_date = transfer_data[0][1]
+
+ while transfer_qty_to_pop:
+ if transfer_data and 0 > first_bucket_qty <= transfer_qty_to_pop:
+ # bucket qty is not enough, consume whole
+ transfer_qty_to_pop -= first_bucket_qty
+ slot = transfer_data.pop(0)
+ fifo_queue.append(slot)
+ elif not transfer_data:
+ # transfer bucket is empty, extra incoming qty
+ fifo_queue.append([transfer_qty_to_pop, row.posting_date])
+ else:
+ # ample bucket qty to consume
+ first_bucket_qty -= transfer_qty_to_pop
+ fifo_queue.append([transfer_qty_to_pop, first_bucket_date])
+ transfer_qty_to_pop = 0
+
def __update_balances(self, row: Dict, key: Union[Tuple, str]):
self.item_details[key]["qty_after_transaction"] = row.qty_after_transaction