Skip to content

Commit

Permalink
Merge pull request #32466 from rohitwaghchaure/allow-to-return-expire…
Browse files Browse the repository at this point in the history
…d-batches

fix: not able to return sold expired batches
  • Loading branch information
rohitwaghchaure authored Oct 3, 2022
2 parents 8c23b19 + 0b1727c commit 1c5ae80
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 3 deletions.
34 changes: 33 additions & 1 deletion erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from frappe.model.dynamic_links import get_dynamic_link_map
from frappe.model.naming import make_autoname
from frappe.tests.utils import change_settings
from frappe.utils import add_days, flt, getdate, nowdate
from frappe.utils import add_days, flt, getdate, nowdate, today

import erpnext
from erpnext.accounts.doctype.account.test_account import create_account, get_inventory_account
Expand Down Expand Up @@ -3196,6 +3196,37 @@ def test_gain_loss_with_advance_entry(self):
"Accounts Settings", "Accounts Settings", "unlink_payment_on_cancel_of_invoice", unlink_enabled
)

def test_batch_expiry_for_sales_invoice_return(self):
from erpnext.controllers.sales_and_purchase_return import make_return_doc
from erpnext.stock.doctype.item.test_item import make_item

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.#####",
},
)

pr = make_purchase_receipt(qty=1, item_code=item.name)

batch_no = pr.items[0].batch_no
si = create_sales_invoice(qty=1, item_code=item.name, update_stock=1, batch_no=batch_no)

si.load_from_db()
batch_no = si.items[0].batch_no
self.assertTrue(batch_no)

frappe.db.set_value("Batch", batch_no, "expiry_date", add_days(today(), -1))

return_si = make_return_doc(si.doctype, si.name)
return_si.save().submit()

self.assertTrue(return_si.docstatus == 1)


def get_sales_invoice_for_e_invoice():
si = make_sales_invoice_for_ewaybill()
Expand Down Expand Up @@ -3289,6 +3320,7 @@ def create_sales_invoice(**args):
"serial_no": args.serial_no,
"conversion_factor": 1,
"incoming_rate": args.incoming_rate or 0,
"batch_no": args.batch_no or None,
},
)

Expand Down
33 changes: 32 additions & 1 deletion erpnext/stock/doctype/delivery_note/test_delivery_note.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

import frappe
from frappe.tests.utils import FrappeTestCase
from frappe.utils import cstr, flt, nowdate, nowtime
from frappe.utils import add_days, cstr, flt, nowdate, nowtime, today

from erpnext.accounts.doctype.account.test_account import get_inventory_account
from erpnext.accounts.utils import get_balance_on
Expand Down Expand Up @@ -1091,6 +1091,36 @@ def test_internal_transfer_precision_gle(self):
frappe.db.exists("GL Entry", {"voucher_no": dn.name, "voucher_type": dn.doctype})
)

def test_batch_expiry_for_delivery_note(self):
from erpnext.controllers.sales_and_purchase_return import make_return_doc
from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import make_purchase_receipt

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)

dn = create_delivery_note(qty=1, item_code=item.name, batch_no=pi.items[0].batch_no)

dn.load_from_db()
batch_no = dn.items[0].batch_no
self.assertTrue(batch_no)

frappe.db.set_value("Batch", batch_no, "expiry_date", add_days(today(), -1))

return_dn = make_return_doc(dn.doctype, dn.name)
return_dn.save().submit()

self.assertTrue(return_dn.docstatus == 1)


def create_delivery_note(**args):
dn = frappe.new_doc("Delivery Note")
Expand All @@ -1117,6 +1147,7 @@ def create_delivery_note(**args):
"expense_account": args.expense_account or "Cost of Goods Sold - _TC",
"cost_center": args.cost_center or "_Test Cost Center - _TC",
"serial_no": args.serial_no,
"batch_no": args.batch_no or None,
"target_warehouse": args.target_warehouse,
},
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,9 @@ def scrub_posting_time(self):

def validate_batch(self):
if self.batch_no and self.voucher_type != "Stock Entry":
if self.voucher_type in ["Purchase Receipt", "Purchase Invoice"] and self.actual_qty < 0:
if (self.voucher_type in ["Purchase Receipt", "Purchase Invoice"] and self.actual_qty < 0) or (
self.voucher_type in ["Delivery Note", "Sales Invoice"] and self.actual_qty > 0
):
return

expiry_date = frappe.db.get_value("Batch", self.batch_no, "expiry_date")
Expand Down

0 comments on commit 1c5ae80

Please sign in to comment.