Skip to content

Commit

Permalink
Merge pull request #34091 from rohitwaghchaure/fixed-incorrect-consum…
Browse files Browse the repository at this point in the history
…ed-qty-in-scr

fix: incorrect consumed qty in subcontracting receipt
  • Loading branch information
rohitwaghchaure authored Feb 16, 2023
2 parents 7066019 + 156e459 commit 4399a93
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 1 deletion.
9 changes: 8 additions & 1 deletion erpnext/controllers/subcontracting_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -409,7 +409,14 @@ def __set_batch_nos(self, bom_item, item_row, rm_obj, qty):
if self.available_materials.get(key) and self.available_materials[key]["batch_no"]:
new_rm_obj = None
for batch_no, batch_qty in self.available_materials[key]["batch_no"].items():
if batch_qty >= qty:
if batch_qty >= qty or (
rm_obj.consumed_qty == 0
and self.backflush_based_on == "BOM"
and len(self.available_materials[key]["batch_no"]) == 1
):
if rm_obj.consumed_qty == 0:
self.__set_consumed_qty(rm_obj, qty)

self.__set_batch_no_as_per_qty(item_row, rm_obj, batch_no, qty)
self.available_materials[key]["batch_no"][batch_no] -= qty
return
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
# See license.txt

import copy
from collections import defaultdict

import frappe
from frappe.tests.utils import FrappeTestCase
Expand Down Expand Up @@ -186,6 +187,40 @@ def test_make_rm_stock_entry_for_batch_items(self):
)
self.assertEqual(len(ste.items), len(rm_items))

def test_make_rm_stock_entry_for_batch_items_with_less_transfer(self):
set_backflush_based_on("BOM")

service_items = [
{
"warehouse": "_Test Warehouse - _TC",
"item_code": "Subcontracted Service Item 4",
"qty": 5,
"rate": 100,
"fg_item": "Subcontracted Item SA4",
"fg_item_qty": 5,
}
]

sco = get_subcontracting_order(service_items=service_items)
rm_items = get_rm_items(sco.supplied_items)
itemwise_details = make_stock_in_entry(rm_items=rm_items)

itemwise_transfer_qty = defaultdict(int)
for item in rm_items:
item["qty"] -= 1
itemwise_transfer_qty[item["item_code"]] += item["qty"]

ste = make_stock_transfer_entry(
sco_no=sco.name,
rm_items=rm_items,
itemwise_details=copy.deepcopy(itemwise_details),
)

scr = make_subcontracting_receipt(sco.name)

for row in scr.supplied_items:
self.assertEqual(row.consumed_qty, itemwise_transfer_qty.get(row.rm_item_code) + 1)

def test_update_reserved_qty_for_subcontracting(self):
# Create RM Material Receipt
make_stock_entry(target="_Test Warehouse - _TC", item_code="_Test Item", qty=10, basic_rate=100)
Expand Down

0 comments on commit 4399a93

Please sign in to comment.