mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-15 19:19:17 +00:00
chore: resolve conflict
This commit is contained in:
@@ -2349,554 +2349,6 @@ class TestPurchaseReceipt(FrappeTestCase):
|
|||||||
self.assertSequenceEqual(expected_gle, gl_entries)
|
self.assertSequenceEqual(expected_gle, gl_entries)
|
||||||
frappe.local.enable_perpetual_inventory["_Test Company"] = old_perpetual_inventory
|
frappe.local.enable_perpetual_inventory["_Test Company"] = old_perpetual_inventory
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
def test_purchase_receipt_with_use_serial_batch_field_for_rejected_qty(self):
|
|
||||||
batch_item = make_item(
|
|
||||||
"_Test Purchase Receipt Batch Item For Rejected Qty",
|
|
||||||
properties={"has_batch_no": 1, "create_new_batch": 1, "is_stock_item": 1},
|
|
||||||
).name
|
|
||||||
|
|
||||||
serial_item = make_item(
|
|
||||||
"_Test Purchase Receipt Serial Item for Rejected Qty",
|
|
||||||
properties={"has_serial_no": 1, "is_stock_item": 1},
|
|
||||||
).name
|
|
||||||
|
|
||||||
rej_warehouse = create_warehouse("_Test Purchase Warehouse For Rejected Qty")
|
|
||||||
|
|
||||||
batch_no = "BATCH-BNU-TPRBI-0001"
|
|
||||||
serial_nos = ["SNU-TPRSI-0001", "SNU-TPRSI-0002", "SNU-TPRSI-0003"]
|
|
||||||
|
|
||||||
if not frappe.db.exists("Batch", batch_no):
|
|
||||||
frappe.get_doc(
|
|
||||||
{
|
|
||||||
"doctype": "Batch",
|
|
||||||
"batch_id": batch_no,
|
|
||||||
"item": batch_item,
|
|
||||||
}
|
|
||||||
).insert()
|
|
||||||
|
|
||||||
for serial_no in serial_nos:
|
|
||||||
if not frappe.db.exists("Serial No", serial_no):
|
|
||||||
frappe.get_doc(
|
|
||||||
{
|
|
||||||
"doctype": "Serial No",
|
|
||||||
"item_code": serial_item,
|
|
||||||
"serial_no": serial_no,
|
|
||||||
}
|
|
||||||
).insert()
|
|
||||||
|
|
||||||
pr = make_purchase_receipt(
|
|
||||||
item_code=batch_item,
|
|
||||||
received_qty=10,
|
|
||||||
qty=8,
|
|
||||||
rejected_qty=2,
|
|
||||||
rejected_warehouse=rej_warehouse,
|
|
||||||
use_serial_batch_fields=1,
|
|
||||||
batch_no=batch_no,
|
|
||||||
rate=100,
|
|
||||||
do_not_submit=1,
|
|
||||||
)
|
|
||||||
|
|
||||||
pr.append(
|
|
||||||
"items",
|
|
||||||
{
|
|
||||||
"item_code": serial_item,
|
|
||||||
"qty": 2,
|
|
||||||
"rate": 100,
|
|
||||||
"base_rate": 100,
|
|
||||||
"item_name": serial_item,
|
|
||||||
"uom": "Nos",
|
|
||||||
"stock_uom": "Nos",
|
|
||||||
"conversion_factor": 1,
|
|
||||||
"rejected_qty": 1,
|
|
||||||
"warehouse": pr.items[0].warehouse,
|
|
||||||
"rejected_warehouse": rej_warehouse,
|
|
||||||
"use_serial_batch_fields": 1,
|
|
||||||
"serial_no": "\n".join(serial_nos[:2]),
|
|
||||||
"rejected_serial_no": serial_nos[2],
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
pr.save()
|
|
||||||
pr.submit()
|
|
||||||
|
|
||||||
pr.reload()
|
|
||||||
|
|
||||||
for row in pr.items:
|
|
||||||
self.assertTrue(row.serial_and_batch_bundle)
|
|
||||||
self.assertTrue(row.rejected_serial_and_batch_bundle)
|
|
||||||
|
|
||||||
if row.item_code == batch_item:
|
|
||||||
self.assertEqual(row.batch_no, batch_no)
|
|
||||||
else:
|
|
||||||
self.assertEqual(row.serial_no, "\n".join(serial_nos[:2]))
|
|
||||||
self.assertEqual(row.rejected_serial_no, serial_nos[2])
|
|
||||||
|
|
||||||
def test_internal_transfer_with_serial_batch_items_and_their_valuation(self):
|
|
||||||
from erpnext.controllers.sales_and_purchase_return import make_return_doc
|
|
||||||
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"
|
|
||||||
|
|
||||||
batch_item_doc = make_item(
|
|
||||||
"_Test Batch Item For Stock Transfer",
|
|
||||||
{"has_batch_no": 1, "create_new_batch": 1, "batch_number_series": "BT-BIFST-.####"},
|
|
||||||
)
|
|
||||||
|
|
||||||
serial_item_doc = make_item(
|
|
||||||
"_Test Serial No Item For Stock Transfer",
|
|
||||||
{"has_serial_no": 1, "serial_no_series": "BT-BIFST-.####"},
|
|
||||||
)
|
|
||||||
|
|
||||||
inward_entry = make_purchase_receipt(
|
|
||||||
item_code=batch_item_doc.name,
|
|
||||||
qty=10,
|
|
||||||
rate=150,
|
|
||||||
warehouse="Stores - TCP1",
|
|
||||||
company="_Test Company with perpetual inventory",
|
|
||||||
use_serial_batch_fields=1,
|
|
||||||
do_not_submit=1,
|
|
||||||
)
|
|
||||||
|
|
||||||
inward_entry.append(
|
|
||||||
"items",
|
|
||||||
{
|
|
||||||
"item_code": serial_item_doc.name,
|
|
||||||
"qty": 15,
|
|
||||||
"rate": 250,
|
|
||||||
"item_name": serial_item_doc.item_name,
|
|
||||||
"conversion_factor": 1.0,
|
|
||||||
"uom": serial_item_doc.stock_uom,
|
|
||||||
"stock_uom": serial_item_doc.stock_uom,
|
|
||||||
"warehouse": "Stores - TCP1",
|
|
||||||
"use_serial_batch_fields": 1,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
inward_entry.submit()
|
|
||||||
inward_entry.reload()
|
|
||||||
|
|
||||||
for row in inward_entry.items:
|
|
||||||
self.assertTrue(row.serial_and_batch_bundle)
|
|
||||||
|
|
||||||
inter_transfer_dn = create_delivery_note(
|
|
||||||
item_code=inward_entry.items[0].item_code,
|
|
||||||
company=company,
|
|
||||||
customer=customer,
|
|
||||||
cost_center="Main - TCP1",
|
|
||||||
expense_account="Cost of Goods Sold - TCP1",
|
|
||||||
qty=10,
|
|
||||||
rate=500,
|
|
||||||
warehouse="Stores - TCP1",
|
|
||||||
target_warehouse="Work In Progress - TCP1",
|
|
||||||
batch_no=get_batch_from_bundle(inward_entry.items[0].serial_and_batch_bundle),
|
|
||||||
use_serial_batch_fields=1,
|
|
||||||
do_not_submit=1,
|
|
||||||
)
|
|
||||||
|
|
||||||
inter_transfer_dn.append(
|
|
||||||
"items",
|
|
||||||
{
|
|
||||||
"item_code": serial_item_doc.name,
|
|
||||||
"qty": 15,
|
|
||||||
"rate": 350,
|
|
||||||
"item_name": serial_item_doc.item_name,
|
|
||||||
"conversion_factor": 1.0,
|
|
||||||
"uom": serial_item_doc.stock_uom,
|
|
||||||
"stock_uom": serial_item_doc.stock_uom,
|
|
||||||
"warehouse": "Stores - TCP1",
|
|
||||||
"target_warehouse": "Work In Progress - TCP1",
|
|
||||||
"serial_no": "\n".join(
|
|
||||||
get_serial_nos_from_bundle(inward_entry.items[1].serial_and_batch_bundle)
|
|
||||||
),
|
|
||||||
"use_serial_batch_fields": 1,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
inter_transfer_dn.submit()
|
|
||||||
inter_transfer_dn.reload()
|
|
||||||
for row in inter_transfer_dn.items:
|
|
||||||
if row.item_code == batch_item_doc.name:
|
|
||||||
self.assertEqual(row.rate, 150.0)
|
|
||||||
else:
|
|
||||||
self.assertEqual(row.rate, 250.0)
|
|
||||||
|
|
||||||
self.assertTrue(row.serial_and_batch_bundle)
|
|
||||||
|
|
||||||
inter_transfer_pr = make_inter_company_purchase_receipt(inter_transfer_dn.name)
|
|
||||||
for row in inter_transfer_pr.items:
|
|
||||||
row.from_warehouse = "Work In Progress - TCP1"
|
|
||||||
row.warehouse = "Stores - TCP1"
|
|
||||||
inter_transfer_pr.submit()
|
|
||||||
|
|
||||||
for row in inter_transfer_pr.items:
|
|
||||||
if row.item_code == batch_item_doc.name:
|
|
||||||
self.assertEqual(row.rate, 150.0)
|
|
||||||
else:
|
|
||||||
self.assertEqual(row.rate, 250.0)
|
|
||||||
|
|
||||||
self.assertTrue(row.serial_and_batch_bundle)
|
|
||||||
|
|
||||||
inter_transfer_pr_return = make_return_doc("Purchase Receipt", inter_transfer_pr.name)
|
|
||||||
|
|
||||||
inter_transfer_pr_return.submit()
|
|
||||||
inter_transfer_pr_return.reload()
|
|
||||||
for row in inter_transfer_pr_return.items:
|
|
||||||
self.assertTrue(row.serial_and_batch_bundle)
|
|
||||||
if row.item_code == serial_item_doc.name:
|
|
||||||
self.assertEqual(row.rate, 250.0)
|
|
||||||
serial_nos = get_serial_nos_from_bundle(row.serial_and_batch_bundle)
|
|
||||||
for sn in serial_nos:
|
|
||||||
serial_no_details = frappe.db.get_value(
|
|
||||||
"Serial No", sn, ["status", "warehouse"], as_dict=1
|
|
||||||
)
|
|
||||||
self.assertTrue(serial_no_details.status == "Active")
|
|
||||||
self.assertEqual(serial_no_details.warehouse, "Work In Progress - TCP1")
|
|
||||||
|
|
||||||
inter_transfer_dn_return = make_return_doc("Delivery Note", inter_transfer_dn.name)
|
|
||||||
inter_transfer_dn_return.posting_date = today()
|
|
||||||
inter_transfer_dn_return.posting_time = nowtime()
|
|
||||||
for row in inter_transfer_dn_return.items:
|
|
||||||
row.target_warehouse = "Work In Progress - TCP1"
|
|
||||||
|
|
||||||
inter_transfer_dn_return.submit()
|
|
||||||
inter_transfer_dn_return.reload()
|
|
||||||
|
|
||||||
for row in inter_transfer_dn_return.items:
|
|
||||||
self.assertTrue(row.serial_and_batch_bundle)
|
|
||||||
|
|
||||||
def test_internal_transfer_with_serial_batch_items_without_use_serial_batch_fields(self):
|
|
||||||
from erpnext.controllers.sales_and_purchase_return import make_return_doc
|
|
||||||
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
|
|
||||||
|
|
||||||
frappe.db.set_single_value("Stock Settings", "use_serial_batch_fields", 0)
|
|
||||||
|
|
||||||
prepare_data_for_internal_transfer()
|
|
||||||
|
|
||||||
customer = "_Test Internal Customer 2"
|
|
||||||
company = "_Test Company with perpetual inventory"
|
|
||||||
|
|
||||||
batch_item_doc = make_item(
|
|
||||||
"_Test Batch Item For Stock Transfer USE SERIAL BATCH FIELDS",
|
|
||||||
{"has_batch_no": 1, "create_new_batch": 1, "batch_number_series": "USBF-BT-BIFST-.####"},
|
|
||||||
)
|
|
||||||
|
|
||||||
serial_item_doc = make_item(
|
|
||||||
"_Test Serial No Item For Stock Transfer USE SERIAL BATCH FIELDS",
|
|
||||||
{"has_serial_no": 1, "serial_no_series": "USBF-BT-BIFST-.####"},
|
|
||||||
)
|
|
||||||
|
|
||||||
inward_entry = make_purchase_receipt(
|
|
||||||
item_code=batch_item_doc.name,
|
|
||||||
qty=10,
|
|
||||||
rate=150,
|
|
||||||
warehouse="Stores - TCP1",
|
|
||||||
company="_Test Company with perpetual inventory",
|
|
||||||
use_serial_batch_fields=0,
|
|
||||||
do_not_submit=1,
|
|
||||||
)
|
|
||||||
|
|
||||||
inward_entry.append(
|
|
||||||
"items",
|
|
||||||
{
|
|
||||||
"item_code": serial_item_doc.name,
|
|
||||||
"qty": 15,
|
|
||||||
"rate": 250,
|
|
||||||
"item_name": serial_item_doc.item_name,
|
|
||||||
"conversion_factor": 1.0,
|
|
||||||
"uom": serial_item_doc.stock_uom,
|
|
||||||
"stock_uom": serial_item_doc.stock_uom,
|
|
||||||
"warehouse": "Stores - TCP1",
|
|
||||||
"use_serial_batch_fields": 0,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
inward_entry.submit()
|
|
||||||
inward_entry.reload()
|
|
||||||
|
|
||||||
for row in inward_entry.items:
|
|
||||||
self.assertTrue(row.serial_and_batch_bundle)
|
|
||||||
|
|
||||||
inter_transfer_dn = create_delivery_note(
|
|
||||||
item_code=inward_entry.items[0].item_code,
|
|
||||||
company=company,
|
|
||||||
customer=customer,
|
|
||||||
cost_center="Main - TCP1",
|
|
||||||
expense_account="Cost of Goods Sold - TCP1",
|
|
||||||
qty=10,
|
|
||||||
rate=500,
|
|
||||||
warehouse="Stores - TCP1",
|
|
||||||
target_warehouse="Work In Progress - TCP1",
|
|
||||||
batch_no=get_batch_from_bundle(inward_entry.items[0].serial_and_batch_bundle),
|
|
||||||
use_serial_batch_fields=0,
|
|
||||||
do_not_submit=1,
|
|
||||||
)
|
|
||||||
|
|
||||||
inter_transfer_dn.append(
|
|
||||||
"items",
|
|
||||||
{
|
|
||||||
"item_code": serial_item_doc.name,
|
|
||||||
"qty": 15,
|
|
||||||
"rate": 350,
|
|
||||||
"item_name": serial_item_doc.item_name,
|
|
||||||
"conversion_factor": 1.0,
|
|
||||||
"uom": serial_item_doc.stock_uom,
|
|
||||||
"stock_uom": serial_item_doc.stock_uom,
|
|
||||||
"warehouse": "Stores - TCP1",
|
|
||||||
"target_warehouse": "Work In Progress - TCP1",
|
|
||||||
"serial_no": "\n".join(
|
|
||||||
get_serial_nos_from_bundle(inward_entry.items[1].serial_and_batch_bundle)
|
|
||||||
),
|
|
||||||
"use_serial_batch_fields": 0,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
inter_transfer_dn.submit()
|
|
||||||
inter_transfer_dn.reload()
|
|
||||||
for row in inter_transfer_dn.items:
|
|
||||||
if row.item_code == batch_item_doc.name:
|
|
||||||
self.assertEqual(row.rate, 150.0)
|
|
||||||
else:
|
|
||||||
self.assertEqual(row.rate, 250.0)
|
|
||||||
|
|
||||||
self.assertTrue(row.serial_and_batch_bundle)
|
|
||||||
|
|
||||||
inter_transfer_pr = make_inter_company_purchase_receipt(inter_transfer_dn.name)
|
|
||||||
for row in inter_transfer_pr.items:
|
|
||||||
row.from_warehouse = "Work In Progress - TCP1"
|
|
||||||
row.warehouse = "Stores - TCP1"
|
|
||||||
inter_transfer_pr.submit()
|
|
||||||
|
|
||||||
for row in inter_transfer_pr.items:
|
|
||||||
if row.item_code == batch_item_doc.name:
|
|
||||||
self.assertEqual(row.rate, 150.0)
|
|
||||||
else:
|
|
||||||
self.assertEqual(row.rate, 250.0)
|
|
||||||
|
|
||||||
self.assertTrue(row.serial_and_batch_bundle)
|
|
||||||
|
|
||||||
inter_transfer_pr_return = make_return_doc("Purchase Receipt", inter_transfer_pr.name)
|
|
||||||
|
|
||||||
inter_transfer_pr_return.submit()
|
|
||||||
inter_transfer_pr_return.reload()
|
|
||||||
for row in inter_transfer_pr_return.items:
|
|
||||||
self.assertTrue(row.serial_and_batch_bundle)
|
|
||||||
if row.item_code == serial_item_doc.name:
|
|
||||||
self.assertEqual(row.rate, 250.0)
|
|
||||||
serial_nos = get_serial_nos_from_bundle(row.serial_and_batch_bundle)
|
|
||||||
for sn in serial_nos:
|
|
||||||
serial_no_details = frappe.db.get_value(
|
|
||||||
"Serial No", sn, ["status", "warehouse"], as_dict=1
|
|
||||||
)
|
|
||||||
self.assertTrue(serial_no_details.status == "Active")
|
|
||||||
self.assertEqual(serial_no_details.warehouse, "Work In Progress - TCP1")
|
|
||||||
|
|
||||||
inter_transfer_dn_return = make_return_doc("Delivery Note", inter_transfer_dn.name)
|
|
||||||
inter_transfer_dn_return.posting_date = today()
|
|
||||||
inter_transfer_dn_return.posting_time = nowtime()
|
|
||||||
for row in inter_transfer_dn_return.items:
|
|
||||||
row.target_warehouse = "Work In Progress - TCP1"
|
|
||||||
|
|
||||||
inter_transfer_dn_return.submit()
|
|
||||||
inter_transfer_dn_return.reload()
|
|
||||||
|
|
||||||
for row in inter_transfer_dn_return.items:
|
|
||||||
self.assertTrue(row.serial_and_batch_bundle)
|
|
||||||
|
|
||||||
frappe.db.set_single_value("Stock Settings", "use_serial_batch_fields", 1)
|
|
||||||
|
|
||||||
def test_purchase_receipt_bill_for_rejected_quantity_in_purchase_invoice(self):
|
|
||||||
item_code = make_item(
|
|
||||||
"_Test Purchase Receipt Bill For Rejected Quantity",
|
|
||||||
properties={"is_stock_item": 1},
|
|
||||||
).name
|
|
||||||
|
|
||||||
pr = make_purchase_receipt(item_code=item_code, qty=5, rate=100)
|
|
||||||
|
|
||||||
return_pr = make_purchase_receipt(
|
|
||||||
item_code=item_code,
|
|
||||||
is_return=1,
|
|
||||||
return_against=pr.name,
|
|
||||||
qty=-2,
|
|
||||||
do_not_submit=1,
|
|
||||||
)
|
|
||||||
return_pr.items[0].purchase_receipt_item = pr.items[0].name
|
|
||||||
return_pr.submit()
|
|
||||||
old_value = frappe.db.get_single_value(
|
|
||||||
"Buying Settings", "bill_for_rejected_quantity_in_purchase_invoice"
|
|
||||||
)
|
|
||||||
|
|
||||||
frappe.db.set_single_value("Buying Settings", "bill_for_rejected_quantity_in_purchase_invoice", 0)
|
|
||||||
pi = make_purchase_invoice(pr.name)
|
|
||||||
self.assertEqual(pi.items[0].qty, 3)
|
|
||||||
|
|
||||||
frappe.db.set_single_value("Buying Settings", "bill_for_rejected_quantity_in_purchase_invoice", 1)
|
|
||||||
pi = make_purchase_invoice(pr.name)
|
|
||||||
pi.submit()
|
|
||||||
self.assertEqual(pi.items[0].qty, 5)
|
|
||||||
|
|
||||||
frappe.db.set_single_value(
|
|
||||||
"Buying Settings", "bill_for_rejected_quantity_in_purchase_invoice", old_value
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_zero_valuation_rate_for_batched_item(self):
|
|
||||||
from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry
|
|
||||||
|
|
||||||
item = make_item(
|
|
||||||
"_Test Zero Valuation Rate For the Batch Item",
|
|
||||||
{
|
|
||||||
"is_purchase_item": 1,
|
|
||||||
"is_stock_item": 1,
|
|
||||||
"has_batch_no": 1,
|
|
||||||
"create_new_batch": 1,
|
|
||||||
"batch_number_series": "TZVRFORBATCH.#####",
|
|
||||||
"valuation_rate": 200,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
pi = make_purchase_receipt(
|
|
||||||
qty=10,
|
|
||||||
rate=0,
|
|
||||||
item_code=item.name,
|
|
||||||
)
|
|
||||||
|
|
||||||
pi.reload()
|
|
||||||
batch_no = get_batch_from_bundle(pi.items[0].serial_and_batch_bundle)
|
|
||||||
|
|
||||||
se = make_stock_entry(
|
|
||||||
purpose="Material Issue",
|
|
||||||
item_code=item.name,
|
|
||||||
source=pi.items[0].warehouse,
|
|
||||||
qty=10,
|
|
||||||
batch_no=batch_no,
|
|
||||||
use_serial_batch_fields=0,
|
|
||||||
)
|
|
||||||
|
|
||||||
se.submit()
|
|
||||||
|
|
||||||
se.reload()
|
|
||||||
|
|
||||||
self.assertEqual(se.items[0].valuation_rate, 0)
|
|
||||||
self.assertEqual(se.items[0].basic_rate, 0)
|
|
||||||
|
|
||||||
sabb_doc = frappe.get_doc("Serial and Batch Bundle", se.items[0].serial_and_batch_bundle)
|
|
||||||
for row in sabb_doc.entries:
|
|
||||||
self.assertEqual(row.incoming_rate, 0)
|
|
||||||
|
|
||||||
def test_purchase_return_from_accepted_and_rejected_warehouse(self):
|
|
||||||
from erpnext.stock.doctype.purchase_receipt.purchase_receipt import (
|
|
||||||
make_purchase_return,
|
|
||||||
)
|
|
||||||
|
|
||||||
item = make_item(
|
|
||||||
"_Test PR Item With Return From Accepted and Rejected WH",
|
|
||||||
{
|
|
||||||
"is_purchase_item": 1,
|
|
||||||
"is_stock_item": 1,
|
|
||||||
"has_batch_no": 1,
|
|
||||||
"create_new_batch": 1,
|
|
||||||
"batch_number_series": "SD-TZVRFORBATCH.#####",
|
|
||||||
"valuation_rate": 200,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
pr = make_purchase_receipt(
|
|
||||||
qty=10,
|
|
||||||
rejected_qty=5,
|
|
||||||
rate=100,
|
|
||||||
item_code=item.name,
|
|
||||||
)
|
|
||||||
|
|
||||||
pr.reload()
|
|
||||||
self.assertTrue(pr.items[0].serial_and_batch_bundle)
|
|
||||||
self.assertTrue(pr.items[0].rejected_serial_and_batch_bundle)
|
|
||||||
|
|
||||||
return_pr = make_purchase_return(pr.name)
|
|
||||||
return_pr.submit()
|
|
||||||
|
|
||||||
return_pr.reload()
|
|
||||||
self.assertTrue(return_pr.items[0].serial_and_batch_bundle)
|
|
||||||
self.assertTrue(return_pr.items[0].rejected_serial_and_batch_bundle)
|
|
||||||
|
|
||||||
self.assertEqual(
|
|
||||||
return_pr.items[0].qty,
|
|
||||||
frappe.db.get_value(
|
|
||||||
"Serial and Batch Bundle", return_pr.items[0].serial_and_batch_bundle, "total_qty"
|
|
||||||
),
|
|
||||||
)
|
|
||||||
|
|
||||||
self.assertEqual(
|
|
||||||
return_pr.items[0].rejected_qty,
|
|
||||||
frappe.db.get_value(
|
|
||||||
"Serial and Batch Bundle", return_pr.items[0].rejected_serial_and_batch_bundle, "total_qty"
|
|
||||||
),
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_manufacturing_and_expiry_date_for_batch(self):
|
|
||||||
item = make_item(
|
|
||||||
"_Test Manufacturing and Expiry Date For Batch",
|
|
||||||
{
|
|
||||||
"is_purchase_item": 1,
|
|
||||||
"is_stock_item": 1,
|
|
||||||
"has_batch_no": 1,
|
|
||||||
"create_new_batch": 1,
|
|
||||||
"batch_number_series": "B-MEBATCH.#####",
|
|
||||||
"has_expiry_date": 1,
|
|
||||||
"shelf_life_in_days": 5,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
pr = make_purchase_receipt(
|
|
||||||
qty=10,
|
|
||||||
rate=100,
|
|
||||||
item_code=item.name,
|
|
||||||
posting_date=today(),
|
|
||||||
)
|
|
||||||
|
|
||||||
pr.reload()
|
|
||||||
self.assertTrue(pr.items[0].serial_and_batch_bundle)
|
|
||||||
|
|
||||||
batch_no = get_batch_from_bundle(pr.items[0].serial_and_batch_bundle)
|
|
||||||
batch = frappe.get_doc("Batch", batch_no)
|
|
||||||
self.assertEqual(batch.manufacturing_date, getdate(today()))
|
|
||||||
self.assertEqual(batch.expiry_date, getdate(add_days(today(), 5)))
|
|
||||||
|
|
||||||
def test_purchase_return_from_rejected_warehouse(self):
|
|
||||||
from erpnext.stock.doctype.purchase_receipt.purchase_receipt import (
|
|
||||||
make_purchase_return_against_rejected_warehouse,
|
|
||||||
)
|
|
||||||
|
|
||||||
item_code = "_Test Item Return from Rejected Warehouse 11"
|
|
||||||
create_item(item_code)
|
|
||||||
|
|
||||||
warehouse = create_warehouse("_Test Warehouse Return Qty Warehouse 11")
|
|
||||||
rejected_warehouse = create_warehouse("_Test Rejected Warehouse Return Qty Warehouse 11")
|
|
||||||
|
|
||||||
# Step 1: Create Purchase Receipt with valuation rate 100
|
|
||||||
pr = make_purchase_receipt(
|
|
||||||
item_code=item_code,
|
|
||||||
warehouse=warehouse,
|
|
||||||
qty=24,
|
|
||||||
rate=100,
|
|
||||||
rejected_qty=31,
|
|
||||||
rejected_warehouse=rejected_warehouse,
|
|
||||||
)
|
|
||||||
|
|
||||||
pr_return = make_purchase_return_against_rejected_warehouse(pr.name)
|
|
||||||
pr_return.save()
|
|
||||||
pr_return.submit()
|
|
||||||
|
|
||||||
self.assertEqual(pr_return.items[0].warehouse, rejected_warehouse)
|
|
||||||
self.assertEqual(pr_return.items[0].qty, 31 * -1)
|
|
||||||
self.assertEqual(pr_return.items[0].rejected_qty, 0.0)
|
|
||||||
self.assertEqual(pr_return.items[0].rejected_warehouse, "")
|
|
||||||
|
|
||||||
def test_tax_account_heads_on_lcv_and_item_repost(self):
|
def test_tax_account_heads_on_lcv_and_item_repost(self):
|
||||||
"""
|
"""
|
||||||
PO -> PR -> PI
|
PO -> PR -> PI
|
||||||
@@ -3047,7 +2499,6 @@ class TestPurchaseReceipt(FrappeTestCase):
|
|||||||
lcv.save().submit()
|
lcv.save().submit()
|
||||||
return lcv
|
return lcv
|
||||||
|
|
||||||
>>>>>>> fa56555150 (test: Repost should not merge expense accounts from LCV)
|
|
||||||
|
|
||||||
def prepare_data_for_internal_transfer():
|
def prepare_data_for_internal_transfer():
|
||||||
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_internal_supplier
|
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_internal_supplier
|
||||||
|
|||||||
Reference in New Issue
Block a user