fix: serial no not able to reject for the internal transfer (#36467)

This commit is contained in:
rohitwaghchaure
2023-08-03 12:19:25 +05:30
committed by GitHub
parent caa4f33169
commit c1819a4b21
3 changed files with 85 additions and 2 deletions

View File

@@ -475,6 +475,10 @@ class BuyingController(SubcontractingController):
if d.item_code not in stock_items:
continue
rejected_qty = 0.0
if flt(d.rejected_qty) != 0:
rejected_qty = flt(flt(d.rejected_qty) * flt(d.conversion_factor), d.precision("stock_qty"))
if d.warehouse:
pr_qty = flt(flt(d.qty) * flt(d.conversion_factor), d.precision("stock_qty"))
@@ -495,6 +499,11 @@ class BuyingController(SubcontractingController):
},
)
if flt(rejected_qty) != 0:
from_warehouse_sle["actual_qty"] += -1 * rejected_qty
if d.rejected_serial_no:
from_warehouse_sle["serial_no"] += "\n" + cstr(d.rejected_serial_no).strip()
sl_entries.append(from_warehouse_sle)
sle = self.get_sl_entries(
@@ -520,6 +529,7 @@ class BuyingController(SubcontractingController):
else 0,
}
)
sl_entries.append(sle)
if d.from_warehouse and (
@@ -530,23 +540,30 @@ class BuyingController(SubcontractingController):
d, {"actual_qty": -1 * pr_qty, "warehouse": d.from_warehouse, "recalculate_rate": 1}
)
if flt(rejected_qty) != 0:
from_warehouse_sle["actual_qty"] += -1 * rejected_qty
if d.rejected_serial_no:
from_warehouse_sle["serial_no"] += "\n" + cstr(d.rejected_serial_no).strip()
sl_entries.append(from_warehouse_sle)
if flt(d.rejected_qty) != 0:
if flt(rejected_qty) != 0:
sl_entries.append(
self.get_sl_entries(
d,
{
"warehouse": d.rejected_warehouse,
"actual_qty": flt(flt(d.rejected_qty) * flt(d.conversion_factor), d.precision("stock_qty")),
"actual_qty": rejected_qty,
"serial_no": cstr(d.rejected_serial_no).strip(),
"incoming_rate": 0.0,
"allow_zero_valuation_rate": True,
},
)
)
if self.get("is_old_subcontracting_flow"):
self.make_sl_entries_for_supplier_warehouse(sl_entries)
self.make_sl_entries(
sl_entries,
allow_negative_stock=allow_negative_stock,

View File

@@ -1258,6 +1258,70 @@ class TestPurchaseReceipt(FrappeTestCase):
self.assertEqual(query[0].value, 0)
def test_rejected_qty_for_internal_transfer(self):
from erpnext.stock.doctype.delivery_note.delivery_note import make_inter_company_purchase_receipt
from erpnext.stock.doctype.delivery_note.test_delivery_note import create_delivery_note
prepare_data_for_internal_transfer()
customer = "_Test Internal Customer 2"
company = "_Test Company with perpetual inventory"
from_warehouse = create_warehouse("_Test Internal From Warehouse New", company=company)
to_warehouse = create_warehouse("_Test Internal To Warehouse New", company=company)
rejected_warehouse = create_warehouse(
"_Test Rejected Internal To Warehouse New", company=company
)
item_doc = make_item(
"Test Internal Transfer Item DS",
{
"is_purchase_item": 1,
"is_stock_item": 1,
"has_serial_no": 1,
"serial_no_series": "SBNS.#####",
},
)
target_warehouse = create_warehouse("_Test Internal GIT Warehouse New", company=company)
pr = make_purchase_receipt(
item_code=item_doc.name,
company=company,
posting_date=add_days(today(), -1),
warehouse=from_warehouse,
qty=2,
rate=100,
)
dn1 = create_delivery_note(
item_code=item_doc.name,
company=company,
customer=customer,
serial_no=pr.items[0].serial_no,
cost_center="Main - TCP1",
expense_account="Cost of Goods Sold - TCP1",
qty=2,
rate=500,
warehouse=from_warehouse,
target_warehouse=target_warehouse,
)
sns = get_serial_nos(dn1.items[0].serial_no)
self.assertEqual(len(sns), 2)
pr1 = make_inter_company_purchase_receipt(dn1.name)
pr1.items[0].qty = 1.0
pr1.items[0].rejected_qty = 1.0
pr1.items[0].serial_no = sns[0]
pr1.items[0].rejected_serial_no = sns[1]
pr1.items[0].warehouse = to_warehouse
pr1.items[0].rejected_warehouse = rejected_warehouse
pr1.submit()
rejected_serial_no_wh = frappe.get_cached_value("Serial No", sns[1], "warehouse")
self.assertEqual(rejected_warehouse, rejected_serial_no_wh)
def test_backdated_transaction_for_internal_transfer_in_trasit_warehouse_for_purchase_receipt(
self,
):

View File

@@ -74,6 +74,7 @@ def make_sl_entries(sl_entries, allow_negative_stock=False, via_landed_cost_vouc
sle_doc = make_entry(sle, allow_negative_stock, via_landed_cost_voucher)
args = sle_doc.as_dict()
args["allow_zero_valuation_rate"] = sle.get("allow_zero_valuation_rate") or False
if sle.get("voucher_type") == "Stock Reconciliation":
# preserve previous_qty_after_transaction for qty reposting
@@ -109,6 +110,7 @@ def repost_current_voucher(args, allow_negative_stock=False, via_landed_cost_vou
"sle_id": args.get("name"),
"creation": args.get("creation"),
},
allow_zero_rate=args.get("allow_zero_valuation_rate") or False,
allow_negative_stock=allow_negative_stock,
via_landed_cost_voucher=via_landed_cost_voucher,
)