fix: allow to return expired batches using purchase return
This commit is contained in:
parent
106ee1bf4d
commit
a4a86ee23f
@ -1543,6 +1543,37 @@ class TestPurchaseInvoice(unittest.TestCase, StockTestMixin):
|
|||||||
pi.save()
|
pi.save()
|
||||||
self.assertEqual(pi.items[0].conversion_factor, 1000)
|
self.assertEqual(pi.items[0].conversion_factor, 1000)
|
||||||
|
|
||||||
|
def test_batch_expiry_for_purchase_invoice(self):
|
||||||
|
from erpnext.controllers.sales_and_purchase_return import make_return_doc
|
||||||
|
|
||||||
|
item = self.make_item(
|
||||||
|
"_Test Batch Item For Return Check",
|
||||||
|
{
|
||||||
|
"is_purchase_item": 1,
|
||||||
|
"is_stock_item": 1,
|
||||||
|
"has_batch_no": 1,
|
||||||
|
"create_new_batch": 1,
|
||||||
|
"batch_number_series": "TBIRC.#####",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
pi = make_purchase_invoice(
|
||||||
|
qty=1,
|
||||||
|
item_code=item.name,
|
||||||
|
update_stock=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
pi.load_from_db()
|
||||||
|
batch_no = pi.items[0].batch_no
|
||||||
|
self.assertTrue(batch_no)
|
||||||
|
|
||||||
|
frappe.db.set_value("Batch", batch_no, "expiry_date", add_days(nowdate(), -1))
|
||||||
|
|
||||||
|
return_pi = make_return_doc(pi.doctype, pi.name)
|
||||||
|
return_pi.save().submit()
|
||||||
|
|
||||||
|
self.assertTrue(return_pi.docstatus == 1)
|
||||||
|
|
||||||
|
|
||||||
def check_gl_entries(doc, voucher_no, expected_gle, posting_date):
|
def check_gl_entries(doc, voucher_no, expected_gle, posting_date):
|
||||||
gl_entries = frappe.db.sql(
|
gl_entries = frappe.db.sql(
|
||||||
|
@ -1241,6 +1241,37 @@ class TestPurchaseReceipt(FrappeTestCase):
|
|||||||
|
|
||||||
self.assertEqual(query[0].value, 0)
|
self.assertEqual(query[0].value, 0)
|
||||||
|
|
||||||
|
def test_batch_expiry_for_purchase_receipt(self):
|
||||||
|
from erpnext.controllers.sales_and_purchase_return import make_return_doc
|
||||||
|
|
||||||
|
item = make_item(
|
||||||
|
"_Test Batch Item For Return Check",
|
||||||
|
{
|
||||||
|
"is_purchase_item": 1,
|
||||||
|
"is_stock_item": 1,
|
||||||
|
"has_batch_no": 1,
|
||||||
|
"create_new_batch": 1,
|
||||||
|
"batch_number_series": "TBIRC.#####",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
pi = make_purchase_receipt(
|
||||||
|
qty=1,
|
||||||
|
item_code=item.name,
|
||||||
|
update_stock=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
pi.load_from_db()
|
||||||
|
batch_no = pi.items[0].batch_no
|
||||||
|
self.assertTrue(batch_no)
|
||||||
|
|
||||||
|
frappe.db.set_value("Batch", batch_no, "expiry_date", add_days(today(), -1))
|
||||||
|
|
||||||
|
return_pi = make_return_doc(pi.doctype, pi.name)
|
||||||
|
return_pi.save().submit()
|
||||||
|
|
||||||
|
self.assertTrue(return_pi.docstatus == 1)
|
||||||
|
|
||||||
|
|
||||||
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
|
||||||
|
@ -153,6 +153,9 @@ class StockLedgerEntry(Document):
|
|||||||
|
|
||||||
def validate_batch(self):
|
def validate_batch(self):
|
||||||
if self.batch_no and self.voucher_type != "Stock Entry":
|
if self.batch_no and self.voucher_type != "Stock Entry":
|
||||||
|
if self.voucher_type in ["Purchase Receipt", "Purchase Invoice"] and self.actual_qty < 0:
|
||||||
|
return
|
||||||
|
|
||||||
expiry_date = frappe.db.get_value("Batch", self.batch_no, "expiry_date")
|
expiry_date = frappe.db.get_value("Batch", self.batch_no, "expiry_date")
|
||||||
if expiry_date:
|
if expiry_date:
|
||||||
if getdate(self.posting_date) > getdate(expiry_date):
|
if getdate(self.posting_date) > getdate(expiry_date):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user